From 44bda1b326c70ef952756865d7a57128cad42023 Mon Sep 17 00:00:00 2001 From: root <root@orion.zcu.cz> Date: Tue, 26 Jun 2012 15:42:53 +0200 Subject: [PATCH] import wardenweb 04 --- .../contrib/wardenweb/datatables/.gitignore | 5 + .../wardenweb/datatables/DataTables-1.9.0.zip | Bin 0 -> 2405777 bytes .../contrib/wardenweb/datatables/Readme.txt | 11 + .../wardenweb/datatables/demo_table.css | 575 + .../examples/advanced_init/column_render.html | 619 + .../advanced_init/complex_header.html | 616 + .../examples/advanced_init/defaults.html | 613 + .../advanced_init/dom_multiple_elements.html | 612 + .../examples/advanced_init/dom_toolbar.html | 617 + .../examples/advanced_init/dt_events.html | 623 + .../examples/advanced_init/events_live.html | 645 + .../advanced_init/events_post_init.html | 668 + .../advanced_init/events_pre_init.html | 667 + .../advanced_init/footer_callback.html | 651 + .../examples/advanced_init/highlight.html | 644 + .../examples/advanced_init/html_sort.html | 198 + .../examples/advanced_init/language_file.html | 609 + .../examples/advanced_init/length_menu.html | 605 + .../examples/advanced_init/localstorage.html | 613 + .../examples/advanced_init/row_callback.html | 625 + .../examples/advanced_init/row_grouping.html | 662 + .../advanced_init/sorting_control.html | 626 + .../datatables/examples/ajax/ajax.html | 209 + .../examples/ajax/custom_data_property.html | 211 + .../datatables/examples/ajax/deep.html | 223 + .../examples/ajax/defer_render.html | 211 + .../examples/ajax/null_data_source.html | 215 + .../datatables/examples/ajax/objects.html | 223 + .../examples/ajax/objects_subarrays.html | 223 + .../examples/ajax/sources/array_only.txt | 59 + .../examples/ajax/sources/arrays.txt | 59 + .../ajax/sources/arrays_subobjects.txt | 515 + .../examples/ajax/sources/custom_prop.txt | 59 + .../datatables/examples/ajax/sources/deep.txt | 629 + .../examples/ajax/sources/objects.txt | 401 + .../ajax/sources/objects_subarrays.txt | 515 + .../datatables/examples/api/add_row.html | 222 + .../datatables/examples/api/api_in_init.html | 616 + .../examples/api/counter_column.html | 691 + .../datatables/examples/api/editable.html | 640 + .../datatables/examples/api/form.html | 681 + .../datatables/examples/api/highlight.html | 619 + .../datatables/examples/api/multi_filter.html | 677 + .../examples/api/multi_filter_select.html | 760 + .../datatables/examples/api/regex.html | 727 + .../datatables/examples/api/row_details.html | 706 + .../datatables/examples/api/select_row.html | 631 + .../examples/api/select_single_row.html | 656 + .../datatables/examples/api/show_hide.html | 631 + .../examples/api/tabs_and_scrolling.html | 457 + .../examples/basic_init/alt_pagination.html | 610 + .../datatables/examples/basic_init/base.html | 597 + .../examples/basic_init/base_themeroller.html | 593 + .../examples/basic_init/complex_header.html | 607 + .../datatables/examples/basic_init/dom.html | 620 + .../examples/basic_init/filter_only.html | 610 + .../examples/basic_init/flexible_width.html | 603 + .../examples/basic_init/hidden_columns.html | 605 + .../examples/basic_init/language.html | 613 + .../examples/basic_init/multi_col_sort.html | 636 + .../examples/basic_init/multiple_tables.html | 417 + .../examples/basic_init/scroll_x.html | 611 + .../examples/basic_init/scroll_xy.html | 601 + .../examples/basic_init/scroll_y.html | 608 + .../basic_init/scroll_y_infinite.html | 611 + .../examples/basic_init/scroll_y_theme.html | 610 + .../examples/basic_init/state_save.html | 605 + .../examples/basic_init/table_sorting.html | 605 + .../examples/basic_init/themes.html | 599 + .../examples/basic_init/zero_config.html | 601 + .../examples/data_sources/ajax.html | 209 + .../datatables/examples/data_sources/dom.html | 601 + .../examples/data_sources/js_array.html | 290 + .../examples/data_sources/server_side.html | 393 + .../examples/examples_support/data.sql | 67 + .../examples/examples_support/de_DE.txt | 17 + .../examples_support/details_close.png | Bin 0 -> 841 bytes .../examples_support/details_open.png | Bin 0 -> 881 bytes .../examples_support/editable_ajax.php | 3 + .../examples/examples_support/index.html | 7 + .../examples_support/infiniteScroll.php | 97 + .../examples_support/jquery-ui-tabs.js | 65 + .../examples_support/jquery.jeditable.js | 543 + .../examples_support/jquery.tooltip.css | 12 + .../examples_support/jquery.tooltip.js | 294 + .../examples_support/syntax/css/shCore.css | 377 + .../examples_support/syntax/images/arrow.jpg | Bin 0 -> 430 bytes .../syntax/images/extended.png | Bin 0 -> 1189 bytes .../examples_support/syntax/js/shCore.js | 2708 ++++ .../syntax/license/Syntax Highlighter | 20 + .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 180 bytes .../images/ui-bg_flat_75_ffffff_40x100.png | Bin 0 -> 178 bytes .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 0 -> 120 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 105 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 111 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 110 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 119 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 101 bytes .../images/ui-icons_222222_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_2e83ff_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_454545_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_888888_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4369 bytes .../smoothness/jquery-ui-1.8.4.custom.css | 572 + .../ui-bg_diagonals-thick_18_b81900_40x40.png | Bin 0 -> 260 bytes .../ui-bg_diagonals-thick_20_666666_40x40.png | Bin 0 -> 251 bytes .../images/ui-bg_flat_10_000000_40x100.png | Bin 0 -> 178 bytes .../images/ui-bg_glass_100_f6f6f6_1x400.png | Bin 0 -> 104 bytes .../images/ui-bg_glass_100_fdf5ce_1x400.png | Bin 0 -> 125 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 105 bytes .../ui-bg_gloss-wave_35_f6a828_500x100.png | Bin 0 -> 3762 bytes .../ui-bg_highlight-soft_100_eeeeee_1x100.png | Bin 0 -> 90 bytes .../ui-bg_highlight-soft_75_ffe45c_1x100.png | Bin 0 -> 167 bytes .../images/ui-icons_222222_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_228ef1_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_ef8c08_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_ffd27a_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_ffffff_256x240.png | Bin 0 -> 4369 bytes .../ui-lightness/jquery-ui-1.8.4.custom.css | 572 + .../wardenweb/datatables/examples/index.html | 151 + .../examples/plug-ins/dom_sort.html | 1143 ++ .../examples/plug-ins/html_sort.html | 209 + .../examples/plug-ins/paging_plugin.html | 839 ++ .../examples/plug-ins/plugin_api.html | 669 + .../examples/plug-ins/range_filtering.html | 673 + .../examples/plug-ins/sorting_plugin.html | 702 + .../examples/plug-ins/sorting_sType.html | 650 + .../examples/server_side/custom_vars.html | 219 + .../examples/server_side/defer_loading.html | 282 + .../examples/server_side/editable.html | 232 + .../datatables/examples/server_side/ids.html | 213 + .../examples/server_side/jsonp.html | 231 + .../examples/server_side/object_data.html | 228 + .../examples/server_side/pipeline.html | 422 + .../datatables/examples/server_side/post.html | 215 + .../examples/server_side/row_details.html | 295 + .../scripts/custom_data_property.php | 174 + .../server_side/scripts/details_col.php | 179 + .../server_side/scripts/filter_col.php | 122 + .../examples/server_side/scripts/id.php | 179 + .../examples/server_side/scripts/id_jsonp.php | 179 + .../examples/server_side/scripts/jsonp.php | 174 + .../examples/server_side/scripts/objects.php | 176 + .../server_side/scripts/objects_jsonp.php | 176 + .../examples/server_side/scripts/post.php | 184 + .../server_side/scripts/server_processing.php | 174 + .../examples/server_side/select_rows.html | 257 + .../examples/server_side/server_side.html | 392 + .../datatables/jquery.dataTables.min.js | 153 + .../contrib/wardenweb/datatables/jquery.js | 4 + .../wardenweb/datatables/license-bsd.txt | 10 + .../wardenweb/datatables/license-gpl2.txt | 339 + .../datatables/media/css/demo_page.css | 107 + .../datatables/media/css/demo_table.css | 575 + .../datatables/media/css/demo_table_jui.css | 522 + .../media/css/jquery.dataTables.css | 219 + .../css/jquery.dataTables_themeroller.css | 243 + .../datatables/media/images/Sorting icons.psd | Bin 0 -> 27490 bytes .../datatables/media/images/back_disabled.png | Bin 0 -> 1361 bytes .../datatables/media/images/back_enabled.png | Bin 0 -> 1379 bytes .../media/images/back_enabled_hover.png | Bin 0 -> 1375 bytes .../datatables/media/images/favicon.ico | Bin 0 -> 894 bytes .../media/images/forward_disabled.png | Bin 0 -> 1363 bytes .../media/images/forward_enabled.png | Bin 0 -> 1380 bytes .../media/images/forward_enabled_hover.png | Bin 0 -> 1379 bytes .../datatables/media/images/sort_asc.png | Bin 0 -> 1118 bytes .../media/images/sort_asc_disabled.png | Bin 0 -> 1050 bytes .../datatables/media/images/sort_both.png | Bin 0 -> 1136 bytes .../datatables/media/images/sort_desc.png | Bin 0 -> 1127 bytes .../media/images/sort_desc_disabled.png | Bin 0 -> 1045 bytes .../datatables/media/js/jquery.dataTables.js | 11612 ++++++++++++++++ .../wardenweb/datatables/media/js/jquery.js | 4 + .../datatables/media/src/DataTables.js | 247 + .../datatables/media/src/api/api.internal.js | 127 + .../datatables/media/src/api/api.methods.js | 1258 ++ .../datatables/media/src/core/core.ajax.js | 181 + .../datatables/media/src/core/core.columns.js | 365 + .../media/src/core/core.constructor.js | 417 + .../datatables/media/src/core/core.data.js | 536 + .../datatables/media/src/core/core.draw.js | 788 ++ .../datatables/media/src/core/core.filter.js | 398 + .../datatables/media/src/core/core.info.js | 106 + .../datatables/media/src/core/core.init.js | 149 + .../datatables/media/src/core/core.length.js | 122 + .../datatables/media/src/core/core.page.js | 119 + .../media/src/core/core.processing.js | 44 + .../media/src/core/core.scrolling.js | 482 + .../datatables/media/src/core/core.sizing.js | 405 + .../datatables/media/src/core/core.sort.js | 455 + .../datatables/media/src/core/core.state.js | 201 + .../datatables/media/src/core/core.support.js | 316 + .../datatables/media/src/ext/ext.classes.js | 108 + .../datatables/media/src/ext/ext.paging.js | 250 + .../datatables/media/src/ext/ext.sorting.js | 84 + .../datatables/media/src/ext/ext.types.js | 88 + .../media/src/model/model.column.js | 248 + .../media/src/model/model.defaults.columns.js | 712 + .../media/src/model/model.defaults.js | 1924 +++ .../datatables/media/src/model/model.ext.js | 549 + .../datatables/media/src/model/model.row.js | 64 + .../media/src/model/model.search.js | 40 + .../media/src/model/model.settings.js | 858 ++ .../media/unit_testing/controller.js | 94 + .../media/unit_testing/controller.php | 100 + .../datatables/media/unit_testing/index.html | 7 + .../media/unit_testing/performance/draw.html | 482 + .../media/unit_testing/performance/large.php | 108 + .../media/unit_testing/performance/page.html | 477 + .../media/unit_testing/performance/sort.html | 477 + .../templates/-complex_header.php | 469 + .../media/unit_testing/templates/2512.php | 464 + .../templates/complex_header_2.php | 485 + .../unit_testing/templates/deferred_table.php | 132 + .../media/unit_testing/templates/dom_data.php | 465 + .../unit_testing/templates/dom_data_th.php | 465 + .../templates/dom_data_two_headers.php | 472 + .../unit_testing/templates/dymanic_table.php | 45 + .../unit_testing/templates/empty_table.php | 55 + .../unit_testing/templates/html_table.php | 66 + .../media/unit_testing/templates/js_data.php | 124 + .../templates/js_data_mixed_types.php | 124 + .../unit_testing/templates/two_tables.php | 227 + .../unit_testing/tests/1_dom/_zero_config.js | 437 + .../tests_onhold/1_dom/-complex_header.js | 52 + .../unit_testing/tests_onhold/1_dom/-iDraw.js | 41 + .../unit_testing/tests_onhold/1_dom/2512.js | 17 + .../unit_testing/tests_onhold/1_dom/2530-2.js | 15 + .../unit_testing/tests_onhold/1_dom/2530.js | 29 + .../unit_testing/tests_onhold/1_dom/2569.js | 36 + .../unit_testing/tests_onhold/1_dom/2600.js | 44 + .../unit_testing/tests_onhold/1_dom/2608.js | 54 + .../unit_testing/tests_onhold/1_dom/2635.js | 40 + .../tests_onhold/1_dom/2746-stable-sort.js | 199 + .../unit_testing/tests_onhold/1_dom/2799.js | 14 + .../1_dom/2840-restore-table-width.js | 19 + .../1_dom/2914-state-save-sort.js | 39 + .../1_dom/5396-fnUpdate-arrays.js | 103 + .../1_dom/5508-xscroll-zero-content.js | 23 + .../tests_onhold/1_dom/_zero_config.js | 437 + .../tests_onhold/1_dom/aaSorting.js | 183 + .../tests_onhold/1_dom/aaSortingFixed.js | 60 + .../1_dom/aoColumns.bSearchable.js | 67 + .../tests_onhold/1_dom/aoColumns.bSortable.js | 105 + .../1_dom/aoColumns.bUseRendered.js | 145 + .../tests_onhold/1_dom/aoColumns.bVisible.js | 132 + .../tests_onhold/1_dom/aoColumns.bVisible2.js | 268 + .../tests_onhold/1_dom/aoColumns.fnRender.js | 176 + .../tests_onhold/1_dom/aoColumns.iDataSort.js | 88 + .../tests_onhold/1_dom/aoColumns.sClass.js | 111 + .../tests_onhold/1_dom/aoColumns.sName.js | 27 + .../tests_onhold/1_dom/aoColumns.sTitle.js | 78 + .../tests_onhold/1_dom/aoColumns.sWidth.js | 84 + .../tests_onhold/1_dom/aoSearchCols.js | 112 + .../tests_onhold/1_dom/asStripClasses.js | 106 + .../tests_onhold/1_dom/bAutoWidth.js | 138 + .../tests_onhold/1_dom/bFilter.js | 40 + .../tests_onhold/1_dom/bInfiniteScroll.js | 130 + .../unit_testing/tests_onhold/1_dom/bInfo.js | 40 + .../tests_onhold/1_dom/bJQueryUI.js | 40 + .../tests_onhold/1_dom/bLengthChange.js | 71 + .../tests_onhold/1_dom/bPaginate.js | 55 + .../tests_onhold/1_dom/bProcessing.js | 99 + .../tests_onhold/1_dom/bServerSide.js | 18 + .../unit_testing/tests_onhold/1_dom/bSort.js | 101 + .../tests_onhold/1_dom/bSortCellsTop.js | 77 + .../tests_onhold/1_dom/bSortClasses.js | 128 + .../tests_onhold/1_dom/fnCookieCallback.js | 97 + .../tests_onhold/1_dom/fnCreatedCell.js | 151 + .../tests_onhold/1_dom/fnCreatedRow.js | 115 + .../tests_onhold/1_dom/fnDeleteRow.js | 30 + .../tests_onhold/1_dom/fnDrawCallback.js | 80 + .../tests_onhold/1_dom/fnFilter.js | 16 + .../tests_onhold/1_dom/fnFooterCallback.js | 227 + .../tests_onhold/1_dom/fnHeaderCallback.js | 227 + .../tests_onhold/1_dom/fnInfoCallback.js | 115 + .../tests_onhold/1_dom/fnInitComplete.js | 94 + .../tests_onhold/1_dom/fnRowCallback.js | 105 + .../tests_onhold/1_dom/fnSetColumnVis.js | 120 + .../tests_onhold/1_dom/fnSetColumnVis2.js | 236 + .../1_dom/html-autodetect-sort.js | 57 + .../tests_onhold/1_dom/iDisplayLength.js | 76 + .../tests_onhold/1_dom/oLanguage.oPaginate.js | 80 + .../tests_onhold/1_dom/oLanguage.sInfo.js | 109 + .../1_dom/oLanguage.sInfoEmpty.js | 75 + .../1_dom/oLanguage.sInfoPostFix.js | 73 + .../1_dom/oLanguage.sLengthMenu.js | 106 + .../1_dom/oLanguage.sProcessing.js | 47 + .../tests_onhold/1_dom/oLanguage.sSearch.js | 66 + .../tests_onhold/1_dom/oLanguage.sUrl.js | 59 + .../1_dom/oLanguage.sZeroRecords.js | 45 + .../tests_onhold/1_dom/oSearch.js | 101 + .../tests_onhold/1_dom/sAjaxSource.js | 18 + .../unit_testing/tests_onhold/1_dom/sDom.js | 319 + .../tests_onhold/1_dom/sPaginationType.js | 122 + .../tests_onhold/1_dom/th_in_body.js | 437 + .../6872-default-content-missing-props.js | 285 + .../tests_onhold/2_js/_zero_config.js | 440 + .../tests_onhold/2_js/aaSorting.js | 198 + .../tests_onhold/2_js/aaSortingFixed.js | 64 + .../2_js/aoColumns.bSearchable.js | 71 + .../tests_onhold/2_js/aoColumns.bSortable.js | 109 + .../2_js/aoColumns.bUseRendered.js | 148 + .../tests_onhold/2_js/aoColumns.bVisible.js | 110 + .../tests_onhold/2_js/aoColumns.fnRender.js | 156 + .../tests_onhold/2_js/aoColumns.iDataSort.js | 90 + .../tests_onhold/2_js/aoColumns.sClass.js | 115 + .../tests_onhold/2_js/aoColumns.sName.js | 28 + .../tests_onhold/2_js/aoColumns.sTitle.js | 82 + .../tests_onhold/2_js/aoColumns.sWidth.js | 87 + .../tests_onhold/2_js/aoSearchCols.js | 119 + .../tests_onhold/2_js/asStripClasses.js | 100 + .../tests_onhold/2_js/bAutoWidth.js | 142 + .../unit_testing/tests_onhold/2_js/bFilter.js | 44 + .../unit_testing/tests_onhold/2_js/bInfo.js | 44 + .../tests_onhold/2_js/bLengthChange.js | 75 + .../tests_onhold/2_js/bPaginate.js | 59 + .../tests_onhold/2_js/bProcessing.js | 103 + .../tests_onhold/2_js/bServerSide.js | 20 + .../unit_testing/tests_onhold/2_js/bSort.js | 99 + .../tests_onhold/2_js/bSortClasses.js | 132 + .../tests_onhold/2_js/fnCreatedCell.js | 158 + .../tests_onhold/2_js/fnCreatedRow.js | 121 + .../tests_onhold/2_js/fnDrawCallback.js | 85 + .../tests_onhold/2_js/fnFooterCallback.js | 240 + .../tests_onhold/2_js/fnHeaderCallback.js | 240 + .../tests_onhold/2_js/fnInitComplete.js | 83 + .../tests_onhold/2_js/fnRowCallback.js | 112 + .../tests_onhold/2_js/iDisplayLength.js | 81 + .../tests_onhold/2_js/js_data_mixed_types.js | 392 + .../tests_onhold/2_js/oLanguage.oPaginate.js | 84 + .../tests_onhold/2_js/oLanguage.sInfo.js | 117 + .../tests_onhold/2_js/oLanguage.sInfoEmpty.js | 79 + .../2_js/oLanguage.sInfoPostFix.js | 78 + .../2_js/oLanguage.sLengthMenu.js | 111 + .../2_js/oLanguage.sProcessing.js | 49 + .../tests_onhold/2_js/oLanguage.sSearch.js | 70 + .../tests_onhold/2_js/oLanguage.sUrl.js | 62 + .../2_js/oLanguage.sZeroRecords.js | 48 + .../unit_testing/tests_onhold/2_js/oSearch.js | 108 + .../tests_onhold/2_js/sAjaxSource.js | 20 + .../unit_testing/tests_onhold/2_js/sDom.js | 262 + .../tests_onhold/2_js/sPaginationType.js | 125 + .../tests_onhold/3_ajax/_zero_config.js | 440 + .../tests_onhold/3_ajax/aaSorting.js | 198 + .../tests_onhold/3_ajax/aaSortingFixed.js | 67 + .../3_ajax/aoColumns.bSearchable.js | 76 + .../3_ajax/aoColumns.bSortable.js | 109 + .../3_ajax/aoColumns.bUseRendered.js | 148 + .../tests_onhold/3_ajax/aoColumns.bVisible.js | 124 + .../tests_onhold/3_ajax/aoColumns.fnRender.js | 156 + .../3_ajax/aoColumns.iDataSort.js | 90 + .../tests_onhold/3_ajax/aoColumns.sClass.js | 115 + .../tests_onhold/3_ajax/aoColumns.sName.js | 28 + .../tests_onhold/3_ajax/aoColumns.sTitle.js | 82 + .../tests_onhold/3_ajax/aoColumns.sWidth.js | 87 + .../tests_onhold/3_ajax/aoSearchCols.js | 119 + .../tests_onhold/3_ajax/asStripClasses.js | 105 + .../tests_onhold/3_ajax/bAutoWidth.js | 142 + .../tests_onhold/3_ajax/bFilter.js | 44 + .../unit_testing/tests_onhold/3_ajax/bInfo.js | 44 + .../tests_onhold/3_ajax/bLengthChange.js | 75 + .../tests_onhold/3_ajax/bPaginate.js | 59 + .../tests_onhold/3_ajax/bProcessing.js | 103 + .../tests_onhold/3_ajax/bServerSide.js | 20 + .../unit_testing/tests_onhold/3_ajax/bSort.js | 99 + .../tests_onhold/3_ajax/bSortClasses.js | 132 + .../tests_onhold/3_ajax/fnCreatedCell.js | 183 + .../tests_onhold/3_ajax/fnCreatedRow.js | 142 + .../tests_onhold/3_ajax/fnDrawCallback.js | 98 + .../tests_onhold/3_ajax/fnHeaderCallback.js | 191 + .../tests_onhold/3_ajax/fnInitComplete.js | 100 + .../tests_onhold/3_ajax/fnRowCallback.js | 112 + .../tests_onhold/3_ajax/fnServerData.js | 64 + .../tests_onhold/3_ajax/iDisplayLength.js | 81 + .../3_ajax/oLanguage.oPaginate.js | 84 + .../tests_onhold/3_ajax/oLanguage.sInfo.js | 117 + .../3_ajax/oLanguage.sInfoEmpty.js | 79 + .../3_ajax/oLanguage.sInfoPostFix.js | 78 + .../3_ajax/oLanguage.sLengthMenu.js | 111 + .../3_ajax/oLanguage.sLoadingRecords.js | 65 + .../3_ajax/oLanguage.sProcessing.js | 49 + .../tests_onhold/3_ajax/oLanguage.sSearch.js | 70 + .../tests_onhold/3_ajax/oLanguage.sUrl.js | 62 + .../3_ajax/oLanguage.sZeroRecords.js | 48 + .../tests_onhold/3_ajax/oSearch.js | 108 + .../tests_onhold/3_ajax/sAjaxDataProp.js | 139 + .../tests_onhold/3_ajax/sAjaxDataProp2.js | 139 + .../tests_onhold/3_ajax/sAjaxSource.js | 22 + .../unit_testing/tests_onhold/3_ajax/sDom.js | 262 + .../tests_onhold/3_ajax/sPaginationType.js | 134 + .../tests_onhold/4_server-side/-iDraw.js | 44 + .../tests_onhold/4_server-side/2440.js | 32 + .../tests_onhold/4_server-side/2569.js | 47 + .../tests_onhold/4_server-side/2600.js | 47 + .../4_server-side/_zero_config.js | 424 + .../tests_onhold/4_server-side/aaSorting.js | 212 + .../4_server-side/aaSortingFixed.js | 67 + .../4_server-side/aoColumns.bSearchable.js | 25 + .../4_server-side/aoColumns.bSortable.js | 112 + .../4_server-side/aoColumns.bUseRendered.js | 43 + .../4_server-side/aoColumns.bVisible.js | 123 + .../4_server-side/aoColumns.fnRender.js | 162 + .../4_server-side/aoColumns.sClass.js | 118 + .../4_server-side/aoColumns.sName.js | 29 + .../4_server-side/aoColumns.sTitle.js | 85 + .../4_server-side/aoColumns.sWidth.js | 90 + .../4_server-side/aoSearchCols.js | 70 + .../4_server-side/asStripClasses.js | 109 + .../tests_onhold/4_server-side/bAutoWidth.js | 145 + .../tests_onhold/4_server-side/bFilter.js | 47 + .../4_server-side/bInfiniteScroll.js | 168 + .../tests_onhold/4_server-side/bInfo.js | 47 + .../4_server-side/bLengthChange.js | 78 + .../tests_onhold/4_server-side/bPaginate.js | 62 + .../tests_onhold/4_server-side/bProcessing.js | 106 + .../tests_onhold/4_server-side/bServerSide.js | 21 + .../tests_onhold/4_server-side/bSort.js | 102 + .../4_server-side/bSortClasses.js | 135 + .../4_server-side/fnCreatedCell.js | 190 + .../4_server-side/fnCreatedRow.js | 148 + .../4_server-side/fnDrawCallback.js | 89 + .../4_server-side/fnHeaderCallback.js | 191 + .../4_server-side/fnInitComplete.js | 105 + .../4_server-side/fnRowCallback.js | 118 + .../4_server-side/iDeferLoading.js | 95 + .../4_server-side/iDisplayLength.js | 85 + .../4_server-side/oLanguage.oPaginate.js | 86 + .../4_server-side/oLanguage.sInfo.js | 124 + .../4_server-side/oLanguage.sInfoEmpty.js | 82 + .../4_server-side/oLanguage.sInfoPostFix.js | 82 + .../4_server-side/oLanguage.sLengthMenu.js | 115 + .../4_server-side/oLanguage.sProcessing.js | 51 + .../4_server-side/oLanguage.sSearch.js | 73 + .../4_server-side/oLanguage.sUrl.js | 64 + .../4_server-side/oLanguage.sZeroRecords.js | 58 + .../tests_onhold/4_server-side/oSearch.js | 100 + .../4_server-side/sAjaxDataProp.js | 146 + .../tests_onhold/4_server-side/sAjaxSource.js | 23 + .../tests_onhold/4_server-side/sDom.js | 269 + .../4_server-side/sPaginationType.js | 138 + .../5_ajax_objects/_zero_config.js | 847 ++ .../_zero_config_arrays_subobjects.js | 961 ++ .../5_ajax_objects/_zero_config_deep.js | 1075 ++ .../_zero_config_null_source.js | 458 + .../5_ajax_objects/_zero_config_objects.js | 847 ++ .../_zero_config_objects_subarrays.js | 961 ++ .../tests_onhold/5_ajax_objects/aaSorting.js | 296 + .../5_ajax_objects/aaSortingFixed.js | 88 + .../5_ajax_objects/aoColumns.bSearchable.js | 83 + .../5_ajax_objects/aoColumns.bSortable.js | 116 + .../5_ajax_objects/aoColumns.bUseRendered.js | 155 + .../5_ajax_objects/aoColumns.bVisible.js | 131 + .../5_ajax_objects/aoColumns.fnRender.js | 177 + .../5_ajax_objects/aoColumns.iDataSort.js | 90 + .../5_ajax_objects/aoColumns.sClass.js | 122 + .../5_ajax_objects/aoColumns.sName.js | 28 + .../5_ajax_objects/aoColumns.sTitle.js | 89 + .../5_ajax_objects/aoColumns.sWidth.js | 87 + .../5_ajax_objects/aoSearchCols.js | 161 + .../5_ajax_objects/asStripClasses.js | 133 + .../tests_onhold/5_ajax_objects/bAutoWidth.js | 163 + .../tests_onhold/5_ajax_objects/bFilter.js | 65 + .../tests_onhold/5_ajax_objects/bInfo.js | 65 + .../5_ajax_objects/bLengthChange.js | 96 + .../tests_onhold/5_ajax_objects/bPaginate.js | 80 + .../5_ajax_objects/bProcessing.js | 124 + .../5_ajax_objects/bServerSide.js | 27 + .../tests_onhold/5_ajax_objects/bSort.js | 120 + .../5_ajax_objects/bSortClasses.js | 153 + .../5_ajax_objects/fnDrawCallback.js | 126 + .../5_ajax_objects/fnHeaderCallback.js | 254 + .../5_ajax_objects/fnInitComplete.js | 135 + .../5_ajax_objects/fnRowCallback.js | 154 + .../5_ajax_objects/fnServerData.js | 92 + .../5_ajax_objects/iDisplayLength.js | 109 + .../5_ajax_objects/oLanguage.oPaginate.js | 98 + .../5_ajax_objects/oLanguage.sInfo.js | 166 + .../5_ajax_objects/oLanguage.sInfoEmpty.js | 100 + .../5_ajax_objects/oLanguage.sInfoPostFix.js | 106 + .../5_ajax_objects/oLanguage.sLengthMenu.js | 139 + .../5_ajax_objects/oLanguage.sProcessing.js | 63 + .../5_ajax_objects/oLanguage.sSearch.js | 91 + .../5_ajax_objects/oLanguage.sUrl.js | 76 + .../5_ajax_objects/oLanguage.sZeroRecords.js | 62 + .../tests_onhold/5_ajax_objects/oSearch.js | 150 + .../5_ajax_objects/sAjaxSource.js | 29 + .../tests_onhold/5_ajax_objects/sDom.js | 311 + .../5_ajax_objects/sPaginationType.js | 148 + .../6_delayed_rendering/_zero_config.js | 403 + .../6_delayed_rendering/aaSorting.js | 212 + .../6_delayed_rendering/aaSortingFixed.js | 70 + .../aoColumns.bSearchable.js | 79 + .../aoColumns.bSortable.js | 112 + .../aoColumns.bUseRendered.js | 151 + .../6_delayed_rendering/aoColumns.bVisible.js | 127 + .../6_delayed_rendering/aoColumns.fnRender.js | 190 + .../aoColumns.iDataSort.js | 92 + .../6_delayed_rendering/aoColumns.sClass.js | 118 + .../6_delayed_rendering/aoColumns.sName.js | 29 + .../6_delayed_rendering/aoColumns.sTitle.js | 85 + .../6_delayed_rendering/aoColumns.sWidth.js | 90 + .../6_delayed_rendering/aoSearchCols.js | 125 + .../6_delayed_rendering/asStripClasses.js | 109 + .../6_delayed_rendering/bAutoWidth.js | 145 + .../6_delayed_rendering/bFilter.js | 47 + .../tests_onhold/6_delayed_rendering/bInfo.js | 47 + .../6_delayed_rendering/bLengthChange.js | 78 + .../6_delayed_rendering/bPaginate.js | 62 + .../6_delayed_rendering/bProcessing.js | 106 + .../6_delayed_rendering/bServerSide.js | 21 + .../tests_onhold/6_delayed_rendering/bSort.js | 102 + .../6_delayed_rendering/bSortClasses.js | 135 + .../6_delayed_rendering/fnDrawCallback.js | 102 + .../6_delayed_rendering/fnHeaderCallback.js | 200 + .../6_delayed_rendering/fnInitComplete.js | 105 + .../6_delayed_rendering/fnRowCallback.js | 118 + .../6_delayed_rendering/fnServerData.js | 68 + .../6_delayed_rendering/iDisplayLength.js | 85 + .../oLanguage.oPaginate.js | 86 + .../6_delayed_rendering/oLanguage.sInfo.js | 124 + .../oLanguage.sInfoEmpty.js | 82 + .../oLanguage.sInfoPostFix.js | 82 + .../oLanguage.sLengthMenu.js | 115 + .../oLanguage.sProcessing.js | 51 + .../6_delayed_rendering/oLanguage.sSearch.js | 73 + .../6_delayed_rendering/oLanguage.sUrl.js | 64 + .../oLanguage.sZeroRecords.js | 50 + .../6_delayed_rendering/oSearch.js | 114 + .../6_delayed_rendering/sAjaxDataProp.js | 140 + .../6_delayed_rendering/sAjaxDataProp2.js | 140 + .../6_delayed_rendering/sAjaxSource.js | 23 + .../tests_onhold/6_delayed_rendering/sDom.js | 269 + .../6_delayed_rendering/sPaginationType.js | 136 + .../media/unit_testing/unit_test.js | 409 + .../contrib/wardenweb/datatables/package.json | 34 + .../datatables/scripts/jshint.config | 72 + .../wardenweb/datatables/scripts/make.sh | 104 + .../datatables/scripts/unit_tests.sh | 109 + .../contrib/wardenweb/db.php.public | 49 + .../contrib/wardenweb/formrender.php | 86 + .../graph_HostnameServiceTypeActivity.php | 70 + ...graph_HostnameServiceTypeActivity_html.php | 57 + .../wardenweb/graph_SourceActivity.php | 71 + .../wardenweb/graph_SourceActivity_html.php | 55 + .../wardenweb/graph_TargetportActivity.php | 71 + .../graph_TargetportActivity_html.php | 55 + .../wardenweb/graph_TopTargetports.php | 32 + .../wardenweb/graph_TopTargetportsNum.html | 65 + .../wardenweb/graph_TopTargetportsStr.html | 65 + .../contrib/wardenweb/graph_TypeActivity.php | 65 + .../wardenweb/graph_TypeActivity_html.php | 53 + .../contrib/wardenweb/index.html | 5 + .../contrib/wardenweb/listmartians.json | 1 + .../contrib/wardenweb/listmartians.pl | 116 + .../contrib/wardenweb/listnetworks.json | 1 + .../contrib/wardenweb/listnetworks.pl | 83 + .../show_HostnameServiceTypeActivity.php | 156 + .../wardenweb/show_MartiansActivity.php | 26 + .../contrib/wardenweb/show_SourceActivity.php | 75 + .../wardenweb/show_TargetportActivity.php | 87 + .../wardenweb/show_TopTargetports.html | 24 + src/warden-server/contrib/wardenweb/stats.php | 59 + .../wardenweb/table_HostnameServiceType.html | 41 + .../wardenweb/table_HostnameServiceType.php | 19 + .../contrib/wardenweb/table_TopSources.html | 33 + .../contrib/wardenweb/table_TopSources.php | 19 + .../wardenweb/table_TopTargetports.html | 33 + .../wardenweb/table_TopTargetports.php | 19 + .../contrib/wardenweb/webmenu.php | 34 + 569 files changed, 124515 insertions(+) create mode 100644 src/warden-server/contrib/wardenweb/datatables/.gitignore create mode 100644 src/warden-server/contrib/wardenweb/datatables/DataTables-1.9.0.zip create mode 100644 src/warden-server/contrib/wardenweb/datatables/Readme.txt create mode 100644 src/warden-server/contrib/wardenweb/datatables/demo_table.css create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/column_render.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/complex_header.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/defaults.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/dom_multiple_elements.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/dom_toolbar.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/dt_events.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/events_live.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/events_post_init.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/events_pre_init.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/footer_callback.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/highlight.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/html_sort.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/language_file.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/length_menu.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/localstorage.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/row_callback.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/row_grouping.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/sorting_control.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/ajax/ajax.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/ajax/custom_data_property.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/ajax/deep.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/ajax/defer_render.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/ajax/null_data_source.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/ajax/objects.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/ajax/objects_subarrays.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/ajax/sources/array_only.txt create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/ajax/sources/arrays.txt create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/ajax/sources/arrays_subobjects.txt create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/ajax/sources/custom_prop.txt create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/ajax/sources/deep.txt create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/ajax/sources/objects.txt create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/ajax/sources/objects_subarrays.txt create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/api/add_row.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/api/api_in_init.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/api/counter_column.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/api/editable.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/api/form.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/api/highlight.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/api/multi_filter.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/api/multi_filter_select.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/api/regex.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/api/row_details.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/api/select_row.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/api/select_single_row.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/api/show_hide.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/api/tabs_and_scrolling.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/basic_init/alt_pagination.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/basic_init/base.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/basic_init/base_themeroller.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/basic_init/complex_header.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/basic_init/dom.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/basic_init/filter_only.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/basic_init/flexible_width.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/basic_init/hidden_columns.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/basic_init/language.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/basic_init/multi_col_sort.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/basic_init/multiple_tables.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/basic_init/scroll_x.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/basic_init/scroll_xy.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/basic_init/scroll_y.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/basic_init/scroll_y_infinite.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/basic_init/scroll_y_theme.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/basic_init/state_save.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/basic_init/table_sorting.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/basic_init/themes.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/basic_init/zero_config.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/data_sources/ajax.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/data_sources/dom.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/data_sources/js_array.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/data_sources/server_side.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/examples_support/data.sql create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/examples_support/de_DE.txt create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/examples_support/details_close.png create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/examples_support/details_open.png create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/examples_support/editable_ajax.php create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/examples_support/index.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/examples_support/infiniteScroll.php create mode 100755 src/warden-server/contrib/wardenweb/datatables/examples/examples_support/jquery-ui-tabs.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/examples_support/jquery.jeditable.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/examples_support/jquery.tooltip.css create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/examples_support/jquery.tooltip.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/examples_support/syntax/css/shCore.css create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/examples_support/syntax/images/arrow.jpg create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/examples_support/syntax/images/extended.png create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/examples_support/syntax/js/shCore.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/examples_support/syntax/license/Syntax Highlighter create mode 100755 src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png create mode 100755 src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/smoothness/images/ui-bg_flat_75_ffffff_40x100.png create mode 100755 src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png create mode 100755 src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/smoothness/images/ui-bg_glass_65_ffffff_1x400.png create mode 100755 src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/smoothness/images/ui-bg_glass_75_dadada_1x400.png create mode 100755 src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png create mode 100755 src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100755 src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png create mode 100755 src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/smoothness/images/ui-icons_222222_256x240.png create mode 100755 src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/smoothness/images/ui-icons_2e83ff_256x240.png create mode 100755 src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/smoothness/images/ui-icons_454545_256x240.png create mode 100755 src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/smoothness/images/ui-icons_888888_256x240.png create mode 100755 src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/smoothness/images/ui-icons_cd0a0a_256x240.png create mode 100755 src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/smoothness/jquery-ui-1.8.4.custom.css create mode 100755 src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png create mode 100755 src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png create mode 100755 src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/ui-lightness/images/ui-bg_flat_10_000000_40x100.png create mode 100755 src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png create mode 100755 src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png create mode 100755 src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png create mode 100755 src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png create mode 100755 src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png create mode 100755 src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png create mode 100755 src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/ui-lightness/images/ui-icons_222222_256x240.png create mode 100755 src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/ui-lightness/images/ui-icons_228ef1_256x240.png create mode 100755 src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/ui-lightness/images/ui-icons_ef8c08_256x240.png create mode 100755 src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/ui-lightness/images/ui-icons_ffd27a_256x240.png create mode 100755 src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/ui-lightness/images/ui-icons_ffffff_256x240.png create mode 100755 src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/ui-lightness/jquery-ui-1.8.4.custom.css create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/index.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/plug-ins/dom_sort.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/plug-ins/html_sort.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/plug-ins/paging_plugin.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/plug-ins/plugin_api.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/plug-ins/range_filtering.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/plug-ins/sorting_plugin.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/plug-ins/sorting_sType.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/server_side/custom_vars.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/server_side/defer_loading.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/server_side/editable.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/server_side/ids.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/server_side/jsonp.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/server_side/object_data.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/server_side/pipeline.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/server_side/post.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/server_side/row_details.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/server_side/scripts/custom_data_property.php create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/server_side/scripts/details_col.php create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/server_side/scripts/filter_col.php create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/server_side/scripts/id.php create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/server_side/scripts/id_jsonp.php create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/server_side/scripts/jsonp.php create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/server_side/scripts/objects.php create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/server_side/scripts/objects_jsonp.php create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/server_side/scripts/post.php create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/server_side/scripts/server_processing.php create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/server_side/select_rows.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/examples/server_side/server_side.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/jquery.dataTables.min.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/jquery.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/license-bsd.txt create mode 100644 src/warden-server/contrib/wardenweb/datatables/license-gpl2.txt create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/css/demo_page.css create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/css/demo_table.css create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/css/demo_table_jui.css create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/css/jquery.dataTables.css create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/css/jquery.dataTables_themeroller.css create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/images/Sorting icons.psd create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/images/back_disabled.png create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/images/back_enabled.png create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/images/back_enabled_hover.png create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/images/favicon.ico create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/images/forward_disabled.png create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/images/forward_enabled.png create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/images/forward_enabled_hover.png create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/images/sort_asc.png create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/images/sort_asc_disabled.png create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/images/sort_both.png create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/images/sort_desc.png create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/images/sort_desc_disabled.png create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/js/jquery.dataTables.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/js/jquery.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/src/DataTables.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/src/api/api.internal.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/src/api/api.methods.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/src/core/core.ajax.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/src/core/core.columns.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/src/core/core.constructor.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/src/core/core.data.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/src/core/core.draw.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/src/core/core.filter.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/src/core/core.info.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/src/core/core.init.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/src/core/core.length.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/src/core/core.page.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/src/core/core.processing.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/src/core/core.scrolling.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/src/core/core.sizing.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/src/core/core.sort.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/src/core/core.state.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/src/core/core.support.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/src/ext/ext.classes.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/src/ext/ext.paging.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/src/ext/ext.sorting.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/src/ext/ext.types.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/src/model/model.column.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/src/model/model.defaults.columns.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/src/model/model.defaults.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/src/model/model.ext.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/src/model/model.row.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/src/model/model.search.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/src/model/model.settings.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/controller.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/controller.php create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/index.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/performance/draw.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/performance/large.php create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/performance/page.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/performance/sort.html create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/-complex_header.php create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/2512.php create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/complex_header_2.php create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/deferred_table.php create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/dom_data.php create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/dom_data_th.php create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/dom_data_two_headers.php create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/dymanic_table.php create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/empty_table.php create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/html_table.php create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/js_data.php create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/js_data_mixed_types.php create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/two_tables.php create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests/1_dom/_zero_config.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/-complex_header.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/-iDraw.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/2512.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/2530-2.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/2530.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/2569.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/2600.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/2608.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/2635.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/2746-stable-sort.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/2799.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/2840-restore-table-width.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/2914-state-save-sort.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/5396-fnUpdate-arrays.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/5508-xscroll-zero-content.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/_zero_config.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aaSorting.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aaSortingFixed.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aoColumns.bSearchable.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aoColumns.bSortable.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aoColumns.bUseRendered.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aoColumns.bVisible.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aoColumns.bVisible2.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aoColumns.fnRender.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aoColumns.iDataSort.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aoColumns.sClass.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aoColumns.sName.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aoColumns.sTitle.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aoColumns.sWidth.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aoSearchCols.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/asStripClasses.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/bAutoWidth.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/bFilter.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/bInfiniteScroll.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/bInfo.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/bJQueryUI.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/bLengthChange.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/bPaginate.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/bProcessing.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/bServerSide.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/bSort.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/bSortCellsTop.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/bSortClasses.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnCookieCallback.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnCreatedCell.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnCreatedRow.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnDeleteRow.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnDrawCallback.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnFilter.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnFooterCallback.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnHeaderCallback.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnInfoCallback.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnInitComplete.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnRowCallback.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnSetColumnVis.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnSetColumnVis2.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/html-autodetect-sort.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/iDisplayLength.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/oLanguage.oPaginate.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/oLanguage.sInfo.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/oLanguage.sInfoEmpty.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/oLanguage.sInfoPostFix.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/oLanguage.sLengthMenu.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/oLanguage.sProcessing.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/oLanguage.sSearch.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/oLanguage.sUrl.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/oLanguage.sZeroRecords.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/oSearch.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/sAjaxSource.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/sDom.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/sPaginationType.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/th_in_body.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/6872-default-content-missing-props.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/_zero_config.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aaSorting.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aaSortingFixed.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aoColumns.bSearchable.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aoColumns.bSortable.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aoColumns.bUseRendered.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aoColumns.bVisible.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aoColumns.fnRender.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aoColumns.iDataSort.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aoColumns.sClass.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aoColumns.sName.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aoColumns.sTitle.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aoColumns.sWidth.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aoSearchCols.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/asStripClasses.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/bAutoWidth.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/bFilter.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/bInfo.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/bLengthChange.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/bPaginate.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/bProcessing.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/bServerSide.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/bSort.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/bSortClasses.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/fnCreatedCell.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/fnCreatedRow.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/fnDrawCallback.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/fnFooterCallback.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/fnHeaderCallback.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/fnInitComplete.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/fnRowCallback.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/iDisplayLength.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/js_data_mixed_types.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/oLanguage.oPaginate.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/oLanguage.sInfo.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/oLanguage.sInfoEmpty.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/oLanguage.sInfoPostFix.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/oLanguage.sLengthMenu.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/oLanguage.sProcessing.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/oLanguage.sSearch.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/oLanguage.sUrl.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/oLanguage.sZeroRecords.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/oSearch.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/sAjaxSource.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/sDom.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/sPaginationType.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/_zero_config.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aaSorting.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aaSortingFixed.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aoColumns.bSearchable.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aoColumns.bSortable.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aoColumns.bUseRendered.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aoColumns.bVisible.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aoColumns.fnRender.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aoColumns.iDataSort.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aoColumns.sClass.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aoColumns.sName.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aoColumns.sTitle.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aoColumns.sWidth.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aoSearchCols.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/asStripClasses.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/bAutoWidth.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/bFilter.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/bInfo.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/bLengthChange.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/bPaginate.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/bProcessing.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/bServerSide.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/bSort.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/bSortClasses.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/fnCreatedCell.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/fnCreatedRow.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/fnDrawCallback.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/fnHeaderCallback.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/fnInitComplete.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/fnRowCallback.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/fnServerData.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/iDisplayLength.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/oLanguage.oPaginate.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/oLanguage.sInfo.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/oLanguage.sInfoEmpty.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/oLanguage.sInfoPostFix.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/oLanguage.sLengthMenu.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/oLanguage.sLoadingRecords.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/oLanguage.sProcessing.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/oLanguage.sSearch.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/oLanguage.sUrl.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/oLanguage.sZeroRecords.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/oSearch.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/sAjaxDataProp.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/sAjaxDataProp2.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/sAjaxSource.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/sDom.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/sPaginationType.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/-iDraw.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/2440.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/2569.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/2600.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/_zero_config.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/aaSorting.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/aaSortingFixed.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/aoColumns.bSearchable.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/aoColumns.bSortable.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/aoColumns.bUseRendered.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/aoColumns.bVisible.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/aoColumns.fnRender.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/aoColumns.sClass.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/aoColumns.sName.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/aoColumns.sTitle.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/aoColumns.sWidth.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/aoSearchCols.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/asStripClasses.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/bAutoWidth.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/bFilter.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/bInfiniteScroll.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/bInfo.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/bLengthChange.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/bPaginate.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/bProcessing.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/bServerSide.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/bSort.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/bSortClasses.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/fnCreatedCell.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/fnCreatedRow.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/fnDrawCallback.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/fnHeaderCallback.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/fnInitComplete.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/fnRowCallback.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/iDeferLoading.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/iDisplayLength.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/oLanguage.oPaginate.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/oLanguage.sInfo.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/oLanguage.sInfoEmpty.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/oLanguage.sInfoPostFix.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/oLanguage.sLengthMenu.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/oLanguage.sProcessing.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/oLanguage.sSearch.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/oLanguage.sUrl.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/oLanguage.sZeroRecords.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/oSearch.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/sAjaxDataProp.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/sAjaxSource.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/sDom.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/sPaginationType.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/_zero_config.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/_zero_config_arrays_subobjects.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/_zero_config_deep.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/_zero_config_null_source.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/_zero_config_objects.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/_zero_config_objects_subarrays.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aaSorting.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aaSortingFixed.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aoColumns.bSearchable.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aoColumns.bSortable.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aoColumns.bUseRendered.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aoColumns.bVisible.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aoColumns.fnRender.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aoColumns.iDataSort.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aoColumns.sClass.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aoColumns.sName.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aoColumns.sTitle.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aoColumns.sWidth.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aoSearchCols.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/asStripClasses.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/bAutoWidth.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/bFilter.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/bInfo.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/bLengthChange.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/bPaginate.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/bProcessing.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/bServerSide.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/bSort.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/bSortClasses.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/fnDrawCallback.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/fnHeaderCallback.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/fnInitComplete.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/fnRowCallback.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/fnServerData.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/iDisplayLength.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/oLanguage.oPaginate.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sInfo.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sInfoEmpty.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sInfoPostFix.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sLengthMenu.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sProcessing.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sSearch.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sUrl.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sZeroRecords.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/oSearch.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/sAjaxSource.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/sDom.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/sPaginationType.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/_zero_config.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aaSorting.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aaSortingFixed.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.bSearchable.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.bSortable.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.bUseRendered.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.bVisible.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.fnRender.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.iDataSort.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.sClass.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.sName.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.sTitle.js create mode 100755 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.sWidth.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aoSearchCols.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/asStripClasses.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/bAutoWidth.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/bFilter.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/bInfo.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/bLengthChange.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/bPaginate.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/bProcessing.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/bServerSide.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/bSort.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/bSortClasses.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/fnDrawCallback.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/fnHeaderCallback.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/fnInitComplete.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/fnRowCallback.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/fnServerData.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/iDisplayLength.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.oPaginate.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sInfo.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sInfoEmpty.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sInfoPostFix.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sLengthMenu.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sProcessing.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sSearch.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sUrl.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sZeroRecords.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/oSearch.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/sAjaxDataProp.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/sAjaxDataProp2.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/sAjaxSource.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/sDom.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/sPaginationType.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/media/unit_testing/unit_test.js create mode 100644 src/warden-server/contrib/wardenweb/datatables/package.json create mode 100644 src/warden-server/contrib/wardenweb/datatables/scripts/jshint.config create mode 100755 src/warden-server/contrib/wardenweb/datatables/scripts/make.sh create mode 100755 src/warden-server/contrib/wardenweb/datatables/scripts/unit_tests.sh create mode 100644 src/warden-server/contrib/wardenweb/db.php.public create mode 100644 src/warden-server/contrib/wardenweb/formrender.php create mode 100644 src/warden-server/contrib/wardenweb/graph_HostnameServiceTypeActivity.php create mode 100644 src/warden-server/contrib/wardenweb/graph_HostnameServiceTypeActivity_html.php create mode 100644 src/warden-server/contrib/wardenweb/graph_SourceActivity.php create mode 100644 src/warden-server/contrib/wardenweb/graph_SourceActivity_html.php create mode 100644 src/warden-server/contrib/wardenweb/graph_TargetportActivity.php create mode 100644 src/warden-server/contrib/wardenweb/graph_TargetportActivity_html.php create mode 100644 src/warden-server/contrib/wardenweb/graph_TopTargetports.php create mode 100644 src/warden-server/contrib/wardenweb/graph_TopTargetportsNum.html create mode 100644 src/warden-server/contrib/wardenweb/graph_TopTargetportsStr.html create mode 100644 src/warden-server/contrib/wardenweb/graph_TypeActivity.php create mode 100644 src/warden-server/contrib/wardenweb/graph_TypeActivity_html.php create mode 100644 src/warden-server/contrib/wardenweb/index.html create mode 100644 src/warden-server/contrib/wardenweb/listmartians.json create mode 100644 src/warden-server/contrib/wardenweb/listmartians.pl create mode 100644 src/warden-server/contrib/wardenweb/listnetworks.json create mode 100644 src/warden-server/contrib/wardenweb/listnetworks.pl create mode 100644 src/warden-server/contrib/wardenweb/show_HostnameServiceTypeActivity.php create mode 100644 src/warden-server/contrib/wardenweb/show_MartiansActivity.php create mode 100644 src/warden-server/contrib/wardenweb/show_SourceActivity.php create mode 100644 src/warden-server/contrib/wardenweb/show_TargetportActivity.php create mode 100644 src/warden-server/contrib/wardenweb/show_TopTargetports.html create mode 100644 src/warden-server/contrib/wardenweb/stats.php create mode 100644 src/warden-server/contrib/wardenweb/table_HostnameServiceType.html create mode 100644 src/warden-server/contrib/wardenweb/table_HostnameServiceType.php create mode 100644 src/warden-server/contrib/wardenweb/table_TopSources.html create mode 100644 src/warden-server/contrib/wardenweb/table_TopSources.php create mode 100644 src/warden-server/contrib/wardenweb/table_TopTargetports.html create mode 100644 src/warden-server/contrib/wardenweb/table_TopTargetports.php create mode 100644 src/warden-server/contrib/wardenweb/webmenu.php diff --git a/src/warden-server/contrib/wardenweb/datatables/.gitignore b/src/warden-server/contrib/wardenweb/datatables/.gitignore new file mode 100644 index 0000000..2802312 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/.gitignore @@ -0,0 +1,5 @@ +extras +docs +cdn +media/js/jquery.dataTables.min.js +.DS_Store diff --git a/src/warden-server/contrib/wardenweb/datatables/DataTables-1.9.0.zip b/src/warden-server/contrib/wardenweb/datatables/DataTables-1.9.0.zip new file mode 100644 index 0000000000000000000000000000000000000000..ab4dba2002d22ba7f372a5ed7b9e0035c12f110a GIT binary patch literal 2405777 zcmZ^KQ><u95aqFL+qP}nw(hZQ+qP}nwsntf8*|@GW<Dk}opgGCtV;E+tXkDbD@X%_ zpa28>Ymg3t0{@NwyCMGj5HWN%R53KNHg%$9q~oMxpjY?@hx(szfPe69Fcos1f3W{L z_Wuh`XKv|iX>M!hXlm;2>}co&WnyRS1Z8Yu3uR+!VrfWk<wS4g;9~0NL1*%RJki-$ z+R|A$LD7jQ>nl6|Gllxk>3?&C0Qk?Tx*MJ#6%YUb0?7ZzsgkLoiH#|pv%9m8@|5is z148#F^-DTHZ1l<MwibvDaIrw-$0D(8EeRP?g=3o1(<`o&)B%bpeQR@E#>U@;hG(HR zv6+QzE;Ovp?Kc7R!>|kEXKzUtnWr~mr%X#Gp;+;ogZ@|}wMbUWDTqjU8LSCs-R$yb z*{vB9<8q%QWk51x+Nk7AyRqBXV(P7<7Scm8WEz6D%*>dRVWn$VeIuYwtX;zEAPR`+ z4~&=O5f*>gSU%ou+Kyx!$q78+dc@LUR&oWjgi~fY?@p|FTK45iIQFn17TFZx0jesf z>Mq>SR8%`<6#&1qe46I6Z32ej;8$ohFUi&5MnEpXG@caPkiPOME~j7qogpoU_3PMM zZqgHz4toH64osx4$la#LlRFA<$M&F=^pj^6JgFp`@A36xOtgcDG~AA75W1{bE<4U} zc-U0!AGE7F_*WLarIE~|Dzmd%YM<39Q*eaG_fy)4S&n<P2Q@FGwq&&@YO{+O86dSP zmX@7X`kMtx+ZqM7BKwEM11p4kTR@C-Wl{JjTY~#V8{<ILPz)TDKB;n_usrq0@zIcJ z=%vaDl4MeW8fUMIqQ~d%=@TBBV|h*J1bXmt7bZy2@D%PKuXN<@S`Lu$kCBXJbH(a5 zc0PkkH<yeG{|ydDpa-37Vhc`eTlpGH4@oK8%o+D7kY0QwE-$z{%$<8cum|c3;&O%s zWIOQ3PLE%k%Frk-9@DMbwww3RpM7rc8msCb!2eCLe<b_A(g5xM#q0lQ{6BNyf6)^B zpUueBhYX+~06=ym5CG}_*M^zJ*u;pH&4|gE&cfNo`byWs>5v8GH_ICe5zHck%@93( z|IExk)yb8!6)?2V6-QgL`*M9iylMZ<<ZF!l@O3ANhTKxC%%LK{@oF@YMq1u8Y^Nki zeXf@m_vh=c`Nh<J(%3~8KA+FmO2q}<>nDGY)8=g+>|F7|-<>V^kMFtO^U52Rxl{a? z&!~~YHuti$;-sHDOTWyyLbp%N+)&>g=!bmnvuuTp{Kv@&6)(Ua-(!<fC;5fTv5z#O zZuezg*#n)icZc5W%i4$Ib4B(wdZ(Lv;$!(9mZkS1B7FS5-DAB6hPbCaY`fB?j?+tc z)rScll`$%bFQd@c9v+#4q+XUw3ej7Wcc#TiK4Z_<rs^s)E{GoSzti$9u^o@<d~oKE zBr~dMm*txH-!J9w;@THY=az{Ve==dpJWJ=gx3N8oB+N}Ollb6acT2&eNwQB@9Qa=8 zcqp$cX`b;j<nq$;d~#jD&w{gHTyGDTn#W7^^PH}IeRzLM=Fc7b_y8`R;p9HdKC`0} z4JLTO_Cp?s>8J2q#-hxd|8z5~R?raqh$G97>_qpbO;@nTRkH0A#~!oRX7km%IN24( zdHg!By<&zw=6mlK_zXn(<Qz*z7WfVFFCB+nfYgnoHTUn8R^ahpq;3_6d-ZTr<XQID z<vg8#2Yg)0f9{7p8M4E&FEikgyJFR~%a+pNJ@K9O^h9EmM)7_0W8aYf-spgpu6Lbv zQUVj8?+15P!c~M{)loPzd&lhmUWdrh3-#n%<~%9-X--wA&vZL);AT(3Tgd=#SU*_j zk~!s^6o4`GQTr`HU%0hw;Ha2qf>?Y8``HWUHp7^?U<8bsMb5v;_^umTvsG}zEPZVn zK1G#x_R65)xiAJvV&DVE;#Y#(&FTB9)ILgL%t1$~FEKy}3{Kb1l}-Q+LDP5Rm^=?g zL80{O_EKUq!{E8dW|=3jFRuIRhYDiIUyU-SNQq~<%7Y0}{o-W1Q`?<Rm;k9TBHzFr zWt_NK=rQW5z2;_F{e?VF+k*>$o5bX8HxX-1$XVpvsh*xtv&&1iX&9?MIxT58(a6SZ zFH(*WM3k;x)dz**r{2o<Edq>x+Mtm7Lgy;st2D?-%dse}4DS3ppv=2k5$j_=A`*h3 zishAnh29|loPkANLB&)fCe0cb326}x^%N3ok!Q~PESq>ZQ;~KEpK~6&@pn?XMapJv zBel1OV=t5sZxFx+*otG(b?TW*KW2rA(gI+ykLep<k=iaGZ7Pnwql$tgG0axND4ZPY z`T?}Pv$Nm+yeJ3QuksuHDU|9Y38h$nBwfUHo%?();4lF+Nl*jman%pd(BO~h@%7NL zv^o-dh3lm))m5W5(PcP+uk>72j@)7~!Oh9XCP|!(N$KtQpJkI|OFa-nyQ<(nA8@@c zLdeQ*rzGRof20hL8_d->u=dXz(oWA!k2N_Wdb%a<L)Z(yilW`)_!Yp6r}eYy7DPHx zl|HR;{BlU|J#vA<x`I-~GczwO9zWILr@AkGpd7CP417lQ^ZY(zCf~gF-8Yoi(^QtJ zqg2wV0ltVx3YoMXUa(3gh?dS1JYxs=f(42aQM`OBkd{kxC~!(N%80G7t3pQU*t<5S z%DWK8PfgzwCc7KZbnd^2K=tNd&ufrU=GlCi)p2iuxKk1Gub5ZCDk2#sE7pqrad343 z$m2Sq7-sA5rpF-H6hm)Qzds<0b7whZ%`RA;2O~b3@AO5uRKY8We#{MPPazSy!(LDu zZqmtoVGx4#P<|$N&#Hu@bIH~KS1G+cqhlzVuuUaZj<~d_=HH2+P+Bk;brhf-0VA2> zc=9OO$d30squ=kZ0zrmgky-#SuAkzTi9i+vf|6sgn+?vW=A8;}8~Tnc)kXdb3PCz8 zh3>zUV_O+uGyGOB*u*v3Bp0-g3`yUATq(o7uV%^(I?_4i?1yW_g)a+RoYJ$PoF7=P zPvnD#{|tC_LNVjK#c0Y3fNHMp2CqLet_ycW#9`7qqnb`4XlIUJ0=t6SzBTK=R#a~R zsNDfzl;T(F1C04y2lD|ZhyDWirtUtYZ2*AV7Kbvoi~}o}?ezf?0ZUuy*i{xLqJN9i zn(bMRBEntB!kzwtjyofYc?-YGK%a*Ox(KGIAYuxZ_tjlQPYK9;f76(>D^#AIyWEQ^ z6|?VPwRpbHKF+0oPi|9O9*$hoy4Y+NjY=K|xV~8AOkx$RI$I%A@zgWvh_8OUQ%^-_ zi*ifDwuRk>p~TD$DkHUuVi+$Y3Lf(uSSMq84WmJ)50_2cW*n53Zn+Dl4+Lgvf>E+7 z=yrfxz6-F#xTo^+Ymq&>-}ZXXNh<^z0)_ue@iDeqRUBMI67f?WLX#)d31y#+fI=Bo zZLcxtmbl<l@0ThHqy2yqOq4AVd%iAw8OE#>3fLG7^sNvz5BcYA2<H<Hl{(I?31>6v zw>(ImX%vbN6-LiH#H@dPzOjd%m=Ac=6&zbs7C<|euth-c&m3|d8341Q(T<F~nQ>K6 zyL&(#6m&$OaN-@Ts1@m2`dm?oeHb$@*!u>>pWq(>0_l0;&L;l**Y*Ta!+F>q^yYKg zPXZ72XyGzzM2L({nIpDZ!sxrGaC@-GMz|_vrI|SoBQIzNJ<keeqyv_s`SC~n_ND`( zXd+HGPY}+J4F_O=ztl#;-`V4G$@LJlQ&D64#d}TVq?t8HdlqU#N6t`Md5Z*WlP{da zF^9yO@Q>=qUP1;V#vu9Rgm~AEDW@d_(<g|<Zh58sfn3Wd##fM4SgecRfW5ejh4kF@ zpdV&~%g%4f!;fe=rF<h|-^1w7X3q|J#{(B6j!f?}LU;8Mq(%e_5SRz(Aa*!L`Ou~j z*n4sW0|hP+GSW(WB%U!V&^<?1(T9N!&4KYfvAo8ziNgfh@(&^GP(=)3j-(_ub>^Q^ zMxHsHIHY=53|Pi6=-YqDf!$N^q7uoPggKQ6sq-g!nMD6$oRn0{LQE-bq-_ERSIK)_ z1^y*T(^~h)w9*uGszx$4(Uw<-8FsoZ`FTPng8n-|8X^mT!F?5xCKzrDv<RRMY2i!+ zV#5ggO<7MyhI&X3>dH!q=Yi(WqvD-px%JZ6|7Hn<=+IM6h}h8EYmqi{joH4a$EM|6 zHBH#SgM^vbF5%_+QGpsR0`wIDfADu8HB+p3h-`26E)fx{k%$X~!HW8&W-%4*`rdIp zZzO%#N^q+DMcEH@80#wwmcZ&r@Y&jf${^uHXQ2@JyCMOZ55A&lB~VQ6nL#7x)LwFM zcZelhW*q1RdujWGge=<S8sY$sv%_1ZxWWawB{I>Zc09P3h{YwC+=RszDJPI*HIfPq zA)--z<y3SM>ty{!^n$&)Fi`25tyGZoumM+a6|w<-5ED1jczv9}?{NXbs5$z@pFy$j z$;^rC=ZwOrhI1;_2zXir46t67DdjJXJnPHgq!TfeYMa{`&r{Z2q*!Z=Kg<w}WTnE+ z$<2AiTsKX0Dv^tM8Y|)}2$NL3YD>^UGIrS7Pa^NcR>%<yCw38@u08jSaiOL0vz7=x z(VZ1jNMYf}I)sgd5h*6qE(*OfcLoOYMxBHzlZ-D+(>#D<lM#Qs5YO!QdBP@abC<?@ zG=z9_qGZ{bp9m*G-#xiH2XX#cVq*F(q*Ikid;GcUawHWb7wB2lnKRUif*fvCTN<hg zoOUn@50P>8CEThMR>F_{fnc77!g<q<=c*v;>aPa(P9#vRi^Zc2*4g6780z2tnbVWy zvHWmTzUTTQ=p6Ou+6c_%`JYJgT3^mEvJ%nGM&*GO!@;ri8-pSX_;&McKyN;S;UJ1u z?595n6kwT{v@cKR?;TY6)~Ueo3Ar9`O5zAj&UTB+@XuHEve<kp-oY|@!R1=C>tXaJ z_A2BHpW==VfU=xxe3Ghp2RcNoa%NR61TC$7yr)eGn`M+3Vc7CIHuV@pL>b12Sj_mA zS)S4-jKk_w@Ln`xDec1IOCbG#S*-5xd8t<Gz(#$BKW3#=Tpz-v@6~#i3qR(C>ER!h z+#0m&QD+ML&QBssT6evOJ#8xBCo&1XgXyjALUjJAH&IazqqFD@D>P&dUap^*t+KV6 zMAvX?d9NA(0Q@*aT7qlDZ!WFeS*%k{YD{MOj$8&+z-S~TgPZB*@fs1$cNo^nE(F16 z>GD^&#`o?mvN-!N{jZPovJ8t>1AHRk0YkZIXB82whzQ^DkgW7Q*TX6_$rb79Yf~7k z8Y70&V|QNn3e%ftT#}!ug#&1kwVg>UFv&3A2)yCId(vJ^988;D$d4gSozQG&;~7Ex zX7}^VS{zOWj6G$ZK-X}?jnfw5pKnmI?+8yt0<TX*vv1PWtIw7g?gV9332fT5`8MJ` zNQ@`BmKp?PA$gbivg>kPkS2(zD`P#uF`FlWxD_<{N5L1-g%lOSWx69_BvKNce~{6% z;d4vBT&)7y&_;bx%}*%oc=iFO_LYqv;SVc+=^|iOS@T7;F$hq-YCS9_v$Z?*s##Kq zo51z|E~q!)qXzsWJ|my}k)?qNdYI-A)nxLBkN;*TJS<DO+MabQlUc3A$l?Q3<#Dox zP(vb3G7TBr#Gn#3FdZ}s(Kcokw@L-s=RnaPiM8;(3&8k2FCJ&(_Y3~PU1(~a_l68& zLP-ncdsq(I8+IDl6)L7Y2zfrbqVEv9c$b9=&M=~_ms8{;U8-KhgK!Spg*VmzY=+vt zgyH+y=W!&AqIUk(NCyuh9bu$EJ{53vyOYoi%z$?HylB4iD?vUaO&BiLD9FcgmW-c0 zmxmlZcUOe6PdtplEIt;-{1k4HtoYSD@p6Lw+YS+U<3TSNADiD|Zz8@!V1Gae)cyeX z(+Hy-(v51p7r&wG3G_!->LV>#$7YKp)K4s-^sV*1Bd_9dizp0A@uT9LM=>x@_vXS< z_Xv1YGVY+x-}Ok71sc#4ZssGm2|xm+CfEr?Yc3%FvBc+E!W*f~+U{H-CO-!eF@R6A z5os8W<f_kixSSeM&!obuiDh7dT}PgwKZI>l95-HOOipHplLU&1CW1csto}KqeW{3h zlbb9$c>)C?7kkE?2>0irRlao+I5L$oB+2NFvs&@*fae4rHf_<X+m_xak!ua`Yo?TC z!k}5DvUw14(Ya14g7#VC_yLa~s8&X#eD7zaC|c_r>#Hy$e;zSalAKpoi5Kp>D>B{` zDv{(}9M{=zh*&P{<(Ge3w!lOc^T|E4{0LGr1U?nRPo$Hnb!rRp1xVwc0lAW7pkkju zFVN9A7al_4A+vM6)==$WpB!9ytKP*Fu7e2)pg>n#IckL8*`alkYV)QqxdX3@YEfFA zdc|I+45_N%9;)K0`nsFF#Z2x7&sEJ3E)2mEy80Nb<_YN{AnU`6My<CwuI?)kZ}eR1 z%n1(pq;j6~TG1Z-Dj2X+dzu7nD8nVlv4B<x!fcS`>~-MpYxQEhVaff+VB%qM@63_i zQ|335gIi_#po$@`lNDyv6+!3>k#n@6%RQ8|X$ldSi7@=gus<c(Nistx0Tj@gGN6id z3C<sL)d>PBWQPEARHjm5jx<{2T6OiJdRS<0M-);tUNz;Iwm!wt&n{J1D)AMT&t=ml z#A<HAG@ONYQ3yMD8N#5(G1?@!5*}0008FHugIdV1TK7Mpw&w+e&6Ju5T%T9R-FV0c z5XrLFnb5m5LEI6vn8+Mzl|HffW~NXa71NzTErGmfmh7DQaIN9&d2_%{Ub_{1TEU=n zdD3nQd~7LOrI7wwdG>M5!&wbiqagw>RB2j4ZeDD3*2N}82n1cHrTH|z(yOej+~|gm z;v>7-e#;x{7#^mOiOXU%P4C6Qy~;1|3;^fEG;qh529G7rB&l>}3fQet)CQr=bU16_ z@-@jUByX!)>6sb>3j=gIOe|OKIwFWg!8EE>3i}bS4-KxCK)M?<j-a-$OTDN=t58_e z-D&&P=?Om6i(=<7xbh5k1)pqU-?R?iJF|Jl2-v2dI9O(<NBYf01Wj2T1GcYH<#Ws0 ztR#W`2<-MWgUr72V(Sgf<;n%3jj3c0J6ik3u+DCy%=AsXEfNHS2LX4`+LZWNCsgc5 z<TCL;<xw)I{LQdCLcL&F)gf7oewIrSI8K;gyYY2$ZVEou6mKS53Gg@hgpHYKdcmYy z$7gL@jy23Vj7EQ`v%`i?Ld~nibe0_U*E3tGowHNPbagA58&Wz!*MSwb-g}-A{@AT^ z?0pL35ZP_cgPe5*njJjsbN}Hj>K;2<S`Ig72DDBRLglgV?^r%F@*C?s`W^hxHkt1S zK{x@94aJS^Y)K47QT`1dZrKxTn^C$)<<ZDKm_uQydf5{CNT92gR2NTTwH4jBv4jel zHRt>Uz{^Okley0kjgV!wk=l@+60odcR#Cyn)=VPXgB@pqzv&tZ8e=F$m*A7u-W?i& z#1^#)=<*+rm3`;oIHZ{BEvsIXptLQ3nH2RdhA6&5B7fiSK$*1=zjM4y#<K@4iDOVx zKU^QBv&v5(yF!_<Ci6@iFml1bHM@}%sUc=oSS0<ImU>EY$n+dzmlX7QSP#+w(xAO; zgCnBkS*M<C=63xMhsB54Vf_eVT*x;Ta?waQ8)QEZ92pn@>?OD!(G&5FcM-E>vi|D? zDucbg_M;%MS&Cd;l2Nf!@;o{a1b(-`q7eHgA=2N(BM#l#9!@X8*+jt2mfJXPwGK$7 z>pD(;<48NLi4w`Q>u+@`?h0Kr0YE`~`-{8~--%*24?n~n&gm)-_RipcN<K&VY%Mr0 zN?iYvp5^qL6B9WQwT=b13}cJo+sZ*#&)0LZBm8R2Oc0LHO0^JP3RaS}iPcsQpj!Fb zPz_Y3lwZwcQ&2;y@Z_pT%^z_iRgAm+S5reZZlfI=R%Jwdf>f^ZG|U4RahaL(T+@Uc zp1W0HhC9A;ChEI_W)@48{>09f!IBX(2otkzqX?a5p5og$Cu$@$i)v@f^s+sNdRUX) zi_zxaloyw4R4kAeyAq3N1qG|mv>Rq|EHsH`eN{}^{Wdprzx>;3nd9^8PRZ59);MgK zmNSjjvWVcAcu1wX3-Jw~r|-aMwX7J=k`wU1PLb4;?QDzCyVcP9NBrEAq;+@wsYemK z=8=;ATiVnQI1T87=mUpI%|*>PcM}L_G{Xkp$}+LXu~R5~r#$ms7fo^mg@qhsRilS{ z_0E%>UsE`5#DHEXTY=^id<sN7SS@=R;Doan6FR`dT54zkR1JiIwQ9CXg19Zcc)O^Y zTo}WuTb8MUWFsZwFe`VK=V_VYIE{Lp<yeij?S^(96Vh+0^b$?Zi(-8=Gox7X(kTv* z<1Uua5(x_t9P*tS_u07jH(!^(ePCzj(4E%Kqd^cU;RL$-3~z#c!p#Wfq><v${yLC4 zVl5=EKEiL@<|KpX9btk3|7ls-=PC{JO?r4T8s`#-OkjxaZgeR3;89nk!`mD}fljGm zv8EloaG#s^Iids9w1x0uM^q26a{@xsaWga}ow6u@TYME)M{gm#w&w=08!m9NoW|6f z*@+ThjVU@4)Fw@Tk5fNmm_28}zej669<b}2+EhV^U4>Io3c<fF9PSV;<9v4Q%XrRi ziT|b0Y%q#T8%y7w4G+;_N`o%dF-~LbmEK;5t8bY7?yK(<JN?_v8~FO<7Y7-&F0N&e z7nk2CvUl4-)NNe%p_%8Fb0xo<&O%HCHoqV|b@iP~@gVU=z?Wq>MBH%>w`Bn~S6eQp zR5dnWqCEy33lYb#7j(i~1|4{~nref_R?22D6-MD^F}Y!7@O1Hs&1NsjgHc!VxRtSY zK8OB=%j8mI%R67D6R%0UE2yQ=Z@!^%b+xUUJBd+>_T6$gg~m?YF{V!EX-@qM`RqKs z(G}D$j8{x7ok2VCC@q8i5@$>=xdpOFqXIU{ij4X=_f?ZD&JNAXzW8WtNUN&lQ4qfv zp>xEF?jCsd9xYb-y1+o<^FeMhL$h%+Iqug&C`+rI@Q_M*rI>kkt|7O)&Ii-l-f)b9 ziQU&wzb^I415kwa?4~=dW|4}{jM%KNWF(LEuqF~E<x*iahj}tm`+jckQyB~V8#S%8 zdSI7h%DPL^^w}|aHg!so>y7z<e<(`u6!oL*qiZRlPZpNyN+4+156yyuP)u`;#TQgs z=ueQ8HlRXU%2HSmGbR7|Av?O=3+KQ{gnfwC?L~$I8C1*pv&n~ChrkHM()4BQBSV=E z&F;qNQ-vD?Z)VXT|H@ygd{_NJ+jlN$n6CXe>k2QmoShu&*9(s0d$aopZY2Zg29FK{ ztc!YkI`(5<pPy^?(3+4#(&Q>*QPG}8h{8x0nh=!1Oxdc()UFZymt1p%7fSk=c7K;b zdyr*KyonWcXg->${f(*UBWAIyOT;ODlE3r5^b}PHK6yJ-#{?6Vm0UZZtFf~PDqV@V zj=|O-R|Y|cj-^G=vL2MOFIv{*bDL0WN7VcQ?1o|R*JTypun%P+zk#GitTT`AVc$PS z4QGTYfhQ;jyv?`#V-z6HV=VW^{{Gp0e#drCD}-Y5Ntf|;sC=?*r;}G=nDy*y$&u!h zmct8$Dn#yyV>r=s=C<LIob7nVzC2w71NM}^B>fg;e#2^V>pRiuM4V_qvWqZ|h4dbq zH&|F09H+npsvYn+gzGPLq%5IGf5zlq81a1Z?ZscDA37(5rLN$#|QNK<(A;GGgl zrK2w$l9)Qgc>Tw!ZX)PlOrd1Vm%~Gz(KF2zBa3uJSZwesRN}_W^tWd#@r*k~Y@Av5 zx_$3r*}d#<wJLmm?u%niWln?mjXg7>MYe1Ta;J38-ic*OMp7eccjcdVHb4@5J<SgT zLu*slA;T==J@?imR<N3*c6VjnUz5};Ydbp+Slb|JkGQ*UAfNO&0iGsZJ#J(Ob=@Y| z2Xi_#ZLU>+cKY=xe@zJ`7;s1jl>9BZnYT#j*<%rT9MDf#=)3p{3-1Liz&&9q=^-el ze7f~!*a7a)PC`Vb)i!I`AEg*v*n17wc1clfSD{EP5R;c3b*0B|nG~p+!p3!-9^mUT zc^F<dEt4EiQptF;)r8@t%`ES-cIn-MHh|s)6$ay~C|I`i)n>_K!Me~wA8ggOX)SGM zHB^2*uTz-CdAVTA^<+z{%Azhz;l;iGK*J_PuO&_?p7P23ZGL%^_m)!XY-A~9=bo$F z@E#wZ^%@CHOpvjtA<$3zciO;s*O0s`Qik%n>996-MVPY99MpOHmpLeFex%C~Oop~L zhvV>(c6JL1#_jPw#T%gAg2oyQ5m!{I1A`cg$1_Vf3@R^scnp+>ttK;=4vvu!5sHRF z_kgbS5PaDa#z<f{SAWQA`ne)`#N{%=poo+?mHOf~6;Ksy5d^<-#Q)+x`_CMh^>5Zz z@z*T({eO3CRbxS37y7?3UKhJ;7kyPCGCx+1NBrjIqtwBNGovygwN_4UTC)Qu2Ci#= zcGy-rrIb<!xEoDo`2uyW{3mH5Uqt58?Gq5iYGVnX&mib&r=|?^%ZYPxMN-`lv+03N ze}`0QkE&jm>wd6bmv8muzV|pUTCdayZF)-L8~;r%@kkZCF^|<9-LVY`Ut3wWUe|=0 znG4+sad{Hbp*lkLVj2w`S0hj5MRhbk&}x}{i*Rq!U4HeV&q03m2h^ly_TCkR^d~A3 zL~uIKK2RhqSmA){fI^N*Jv_KJp(rBD#Z3mDG2D+SvsMb4va^(ovs(%+8Pj@O#-DNi zOCzz1-2QpDo!tHx5$M&D86<WPzAouUN4nHVeYq`g^BP<6Tt;-RDU(y_BB6u2giot@ z<`O>IA}m^P1loz8sU($yMewot>~*uti|b84KWJvl7Q*M&b%zB=(4t`L(*3V?#?Q0z z4%dv{O9sDeZBF$Y;?AN;m~#SmXIb}tlBykhEBEyH#u}bf)2JC9ToO*iLQ7ofn%yHq zZ%xZj>C?TODUGV1(dLWzaC!|h<6g6;tliKZ17yJuszHZKyt|v-2yUtyVyZf@G>uYv z17mGNhgsocpYKFn87N8QhC%zl1jS$TA0{eD;o=a!`0dQ2ckUt^fuKpm4JTtCGEjv{ z@&3Xlo70z=RH90~g*`deOlo3FkrGJjA`UobbH9UIha{z&)uC?Lj12i2LGcI45EXLE zd=QCJHsm_++5#s&QQ*@|CTvBj3eq!3{?iCcdPN+rpg9zu0TEj+@<&mM_v(DH7EM7e zTL3E<EECkq*|b&ax;bG(9yszN%v-v(uGh59{TQ!|&%9*bTd|YY<>QZuUADI8#6(9d zDI!IBLo#0#8PLH>@|BsFLGHD{BHsFPph1$yDJd)L)HWE=Dc-j6F7*Ku@9%=?#Vc)~ ziE}Qyc$Oq*8BG$@B<wL6&Q)ap`r13J1DS1;keFf^y`}oLG=ZS>Daz=8iXA+Srj2CK z6l$z(%lMf|i5JKg%rUZ}MZSm>+x)Ua%;X9>UA9aU(%lAm<YewFj+^G_+SY&)jEp1U zOPINNt$sn-F!>3$Pd*CsF!mpE$C1BFvXIcjdgzdw)}C1umh!m{B^m=7PS;O%mYaQy zc)x%&zWEfWu=C9_sRXYvBqkAp%f}{CPrFJ1NOgAV!xrEcc$M--a2%=gLqQAx?%~6V zJWl(_-=NjoGvZ-;9cmr+%6RXT?e!*&yS_VaF*wHC)m_rL8gNGVt`N5A_5|_L)voIV z(%lyd@`qz!2CbAG(aw|ZfG?>u{ZyP)h${SQkUv879au%(d&u6$?K_w2{$-Mh>4zNR z6ze!P^*^5o7P9(edGIcrQuY&xI1goH`gY{N=_z>9S8iruLT;rBEuu!v<Yh{I>*N%l zx!0>cxB8>5b*G)(F}AV+KN(N6VXO1m>^#)YJ7jaRR+KY#s$qh}3<se46`^LP%Os`D z3k(6;m|w0P)kT$SLPx0vjIk@D9VutTyJq49j36A-IM%k)8WW%?H`+Z1>*rW0-Y!iS zbQ_hpLwGta?6+;6)lZX4#}zX{v<sSK@_&8eS9#+;>dLe21j1)q(ms@DIonldcdaK$ zPAAdaWV0s=SX|0b9x6-)uE8Qu^SxnfsO)A_vE8l3PV}K5Hj|AaPA%leUW=>#sZ(*4 zO>vb6;ugVGi*g_DYc>(GrST|mg$cQ(5bt3)4$_l8wNxr?2A*AApEUhpN&w4|sSZD( zEN`Z+c>fcOVd*myB=}VJ`x|aV6Oty;jil>0`;Fv_U!KWs4>ch~T+!0YA`~YP7rAiI zE<5Spvegq>UtsU+d9|`m+UpQL{oO0LiFeaO%i)<?K}X*d2)$UpV=I=+1&2DecJiZN zR3TsChiA=h-H?u*S;eZE%`O#_pP8K$);2le{nsz30cmXr(^FWpy;Nwo&=%P4s@6m- z9Bz#l8}7S9&L~vVj@IM#+9fe&n2r`S>Bgs=q9$9IL(K`Mx*%HT!D2X+9?fm38lj?& zAk+y*s=ELvt>!z3=PSfW70$Y%YNqjiIo813%0)(CSZkP~GzDPg0=owm<vVU;Su_n+ zgr-jwGFXNrA9$b_MTSY%)mF<`e$%C&QOi!GbPuDcO2fhG&QZ;RKsp&@()v9;vjSiF zZaOBW9LZH5-cr!zLGVisH76VuuDmS7Ge}P*QE6u~8E24DloDAd0*~g?@!tyY4xN$6 zBuDU!!ba%WZ}=`u8kX(_;V3jbw>Vh0&%OiZ50=^Pjey#rX$Sf&XCLf6LiCeTyMYiM zsx^FT1!{;<WAK3Iq?#H1K6ENC6v2Z1F9tGTHLUPr7&1w~@wDnZ!bXwId6uj8D679X z=|(YTbU>V&d-d^-2{iLfqJ}VPHMld}-$#6G)GH}%9codVQ)xA76Pp72>544Z6rPZI zmY7){Ks2!UiF_WJAD`)3BE?4upZMQO-t;ag{EaiEzUnD6XG?dt5i)H45wnMULncX2 ziMyo9!sse-9~u<y*&aVdqR?}G?mveWmRI+8_=jEn-K`ewfTry*xNai6^aHz|EM`JW zuI|EgxR2r(kVHE_asYL4(k_%F&7G?E0}VKOBT{Bh<yuTe)S4aRz8mFAh|J-7CPchU zkS>97`jLGp>X;sbUq}#6((?@yHs+QY53MgRjrw^B<qfOp>CN2Pwr9idUS);2Qn>MI zRUdlFDQD~zljl<lCX2zFA|4*FY#ssRTW~*Hkp3gSKn8K~H?(pfgy#w@<_I{m#g8ka zU~D%NBbCHn9~)DoP;?8f#8E`ewe~kz5t129m5~vDE5@Gk8{JiyDY;`~EnjM?fSw?O zgFc;$ux*QhR@(_(#V2pKp`MQ&wtGe*_THF*T7D35<IE4c!-x$B;2@#*y2Tit1Vf}@ z#NZN`!M}I5IZw}5-8sq*T91|^TzYymv2WbEF21xv53GBS(lbRoDksNe-C7yr%Vb>C z^h~3v%Hp=B;i=3sHeLHw7K^RHRMg<9*U9<hRHD#w?RiP#I}mDtJMMGx2Z-o`nD)P1 zi2ul`|7uE&{-}1p>xqswUpy!_*f|m4*2^n{D<=TZm6O<o`QHp?bHVjwN5vnk%*0S6 zQk*_YszEOVMGjQT>eA7Tm|LBP(9>#VL%b}Y*`oErRC4Lst!tZt#N^P%SY<pvbhFK3 z8MnZ)n7a#GdbAk)gkWfN8s!;}g0r*^_HkIaJ+(TkEzT<L>5L1B;P-(<QyBJJ6oVfj zd_tL+DE4&kt{QXtsh*cV_;5$lIes&-_5CQ1f_{myQ_bI<x+zi9HKZ!ai44ZjwZGFE zAM65<k88u^c8@3yt{Ovw9;zf#F9N%ZmX@L1mZH?B5^t@Otd5p$FOpp5=kSsA<U8>` zY#Yv=>}_sba!>BXaJ31N@<Le5v=!|SYZpioHN4+<`95d?6Aj+nyYb+0Ir?i(DnuBm z(gApYM8Y#Z#t{_{xnJRcEu*;YAn32s#+8`ITr$`DY~X8|;>hJnOqbqYGr<nLP1>dp z9s30{G*v%5{Hap0=TczeN@JelvggRkqzEsYCq_R+VvI^p-+1Qwx#EO!E&7s)iZQrD zAEy7rprO^yhWLDl4)z9DY|;V)i?jZZFS~cHRmoi2vZ1-f)w31d9yiOx%{5fG$`Bol z(Q-r*k%qI8^yCV70>H*5@fqFhX!!0OGJqntd#I~xZ30@j<HI1FGCi1rQE22q%bS#X z%lSHOkdQ7_>0!~KsNx6vxbL|G%%N>Asg$YWThXqn&}USkhtjJpE7i|tw1elBgNy^) zv4y~?z_H@YcigJBnI!B-w$pSSuF^865Zh3|q~T7DB>O-~+&&q-A)7>Hh?$iK*&#^y zibo-m8CnOtbyijj2O|DGn9E@>KoVg~VgSXuJT!B%;vJe3EI3;|sgFVSM|;y?>h^F! zU*b?z`cuwZo-`m8|Nao6kujQXFrFz!k7>whiCAsTal<b;Ags>!8`J%g2)g<%izFzE zV^$M^B3L%#FFRC9@EDFPc=kdEt_L1psVE(qCJI#UI_OJ$f%0dN!`8o}=VMEtJi3Ks zISaTR(tyl*VThjT`j18!1+#9+_E#BN6SPsOOQw^9u{$)K2<Y~HlmT2;5cYR*<Edvx zIAIWy!(LTVNGMq(NfaoDIR={9j1nPvw{7igsK1!3yV%ff1p8a^-t!#&;flRCN7Afi zj8dV+GSS*G)J*x$z%cp4<#DH$P~fu?t~Ma6bT6GSkM;x?Uj;TLRF0sg#+zi-;0qH> z1Dt9fhJl0{t720+IcA*KG}z;b+py~OOYf$5Er0(J#0ozO<4kX0(~3#{lUtDU1vd^r zBYn0J>Ebk7d^n(V)?LUv-JVhMT$D^uM#4USFp8`|imXamJl!$M{pCE}l4$R_ha}8i zh>P8%%5-#>WV2nNuIAZnExRvscsDiNhOGUW<8<dh#Qp~JoK&01(7yP-RCgk9gX%W4 zC}D~40O4aYw0*X_PjzMezV~<LI*TMcO5s~#0BN%AIo#Am2WvX1JQEQs8(4=?+1Ie$ zajH#IoEi#XfHHK$GZ_>%iL``A{?PfpozM<}%mzu{-kp;pU^Z66tW&Lnz+R3+0<@bT z;8#WK?0ZeVz>gY;Au-@VmVtuUFZ_vQj>Lk>lJ0Jb2pY0zzq}vuu7o=f-j*}%18x<n z*C=~eanX@fP=~SL1u-cQpbzo6Gng2?#>iAn-cC}G&qxu9R$6SJA8JNQi8bNO4wm`! zxC5o`-wrY-Su$%0#HT4Je|(s?##yh{%@Ir~nIq`fI~X!0h(!q#ci;S#5JbEAF8OSo zLh+X=!59I_G9Iafoo4g90*yTE<!Yx;e1;IjZiz*$adq%<Epb(~c2Q?ki<KTVm>eu! z9S4uKP;n8T+aWaHf>tXFZ*su94!A=J0aT55S-0GpwJL9i9!HhG2Tzpzn<aCAn~^ju zBGHOohXpX-Y@7HC!zUoz(Mg!jzdlVwhgKjzvtZ7xv^loBKrsuAT<F$-n?39bL#2N> zhxijpv=RIe`-aT9srUVdP+ju)d0K6KjK!VLDv%sUplw;M5A9v0cstJc#~j#7ruy^l z@5x$J;@i;79<A8P+5(f%)#MVB+HXmrr!pY6T(Fd&`T4~HOI9M6%B~{L17s@0lEQ@# zGb!s;n^!k-1p+s$A{(k;S9np3FeZ=mto06xXV|qR5~<>Buebq*NTgOpNHV)+==KI^ zGzVllMA$`5ySNLjb6B_xK}MPL)+ABsvUKKn@Q&8A)b%a-f3-z#sKBPR6!XdIf!bB> zGbQ#YU#x(XgR>aUBa-qEHW(D$c~)JsQ_21##Y}P7CPN|u5sXjeHJ)@mqMc2QO!;2D zK$3eJ5hxKN56DERrLONMGjt?|9`{TywI3fNvpcb2w?@LGw$t6jsvS=pys*5%hg->_ z`x+;rAZzHu2h2;-bTuWe$+0GVyZ!>hoaS(*8<P@6pr&zeYj?*TX|Zr5A|7G$AjY4I zVh)~r>BbsE)vYvdPP+Z31@K3YnrnprWa`ZY<+O6P%B7EPNZTbvafaJ%ba7&|DM!j9 zCcGTbRb<F>DMQ4R43XxAvNdpU+QHS^O$DA0*7`q*cAk?+^&_~r2PBU=qKS#Aox%Ow zA$e@heBY{@v{2LC=P-a5cU;a7gZ81g*k6JmJFBtexyhlq*@v7<MS(5jJ^L<B6!kqF zy>rkFZ0e*c5_{OjlrA&K9WvGj4~6GFg}sVMFQp3P&Y<bOcdkOi1Jj3q(X+`5;RFQC z!*S#Ik{x^x5I!9T&%6L}hD{lD#@WD^MTbw^cW8i?*SHaDIEe6+_4{WBrw@Vi)4KB$ zCS;fjCRIdQiS1@_iQLbs&W*%#bRV7gPzXxox`(34Yi<^S>dml=M$1Fgiz1?v7x1!X zLSt_VRbfjD7Mr8)VN4;PrTdO>RCNs67ZS<jv5oq1VN>UDpD<62>JJZDy5Wn$<=@%R zN6}`r?{F8gw?}XPGR{Q=vp*&hZ`nU+Hew&b=I)JZZ|AvNF>jZMx)~u>w*(^_Z#&_S z=WCbB6m;5FSFCmhnVqk^qTTkEWy_#32JnDl<Et7<cvvW2C<Iq4kXk_4{`wB`j0dC- z1oC2M8X>+tQ0c4?MQ{n)Z-#3h4(@V8#PKJVol8fD>+lsOdJ`v12#y<veffx8Lr63w z<;LzbPcNLM2q5WHRH)%cHC&#r<E)+CN?Cwmo4pp9s}HtW!J~AZTeEMes6r>PR=b34 z23WE4<dAU>sahrUL$1JqVD%<~d>0j~w=(M!&c%+80l0Qhl?n(WCftI91FK=U`28}4 zgF_0K895ua^<lJ2Ic~jka&aMpA5UzKhQRHkn1{d@1f49tml1RY$zF@k2wvj|oH*~Q z_1{AL#>4eiw9yMhcSi1O=-w+@!gUn4@2<&UvvqJUj}2Pg;&`JiV599A3K@X~>PklR zV1{aHj8$&~LxSIxT3NAlqXMRHg#DllwyR~V-vNWd0R84{pGeNmR0j_;@kn!2F63)F zOwML)u*sc1Z{)CPCwswrz9MazpQ&|IxXHao;t5Nbg>|lr-(g44B%UWc>v8CMjf_iO z)BH)tAuH%Smoe7sOftD)^<LO~m%sXB{=rXO#6e?#-iZZBSA?yZ?v_OWJ+Et9dAQQ6 zk66*YFv<@y_Oba=^{wgD9u@E9;q%==-xqvE-`jx*-2k0CEe1zGh79ZaJG~qYE57pm zKxQTUNj)`oj$odFs~+rn`g2>t=PxeC5H5eDf2hseC|7)lx_+~T15xr9=3kpFT|?ja zdVfs5x~|T3tzafpQ(~e7+~I_Mh3k|<Ey+lnKh_r<JD6XljX8^_P4WYQi^fS_&~dVJ zI9V#O6%h6LiOP*FG#uCHu`zNyk-dA6S3<Q*UafF|+6mY%To#zZx4_~V5z?isqjY=a zB^o02Rh;iZ0kqic^zj2ZnLw4_uuFU1qD&BrL=zoRq#`Jfogr$pJfpbSqqxo`wJGI$ zmUh{%_O2*QqI-qe?TQ@b+aLfnoGc&q$fi-Kf}CgEzH?fL5rS6<!a_(#L}?T60CSTZ z^ybPAq4KlCn7c9i_~}xQSA|XWAQ1$Fyae9B`(t7JLkxc!{chDr2K5wqYTe>-#pUIM z<cfD<de`(6-hwu9c3%}O$r$Jl((TBfczH)$?e-~O8WgX97oy{a`<{R)lfxw*5Y25< zp)wP0%-;b7hixCK$sk63WrZ3hp$@@%*Ks7}3F*%onN83L(*DdU@rg_sQRW|Nq}&he ziwWyz%@lj1<o^>11Uzg6yx|L9*I^tV%dYfUO|SxIw`Fhy3P1sEkiAzHW8Sis{=&5t zTlr5_%%Ljk=<}~;-bA_|dFe^P^~ImEITeJ^t(Jg?NA8ZC6I%K6QIn8oB?~MUkJM=U zKaGUjMhAqPf2t*=vM6j+N3|quJRe*|{wq6>14;WvmYSI#Utt#DzwBG?1ok-%M{8Hw z$gpMfFCUdC^6g~l00cmsnoW)Q)x!!M`fR<G0ALGkrF#OnfPW2e5?TTRTA6~Kd+X={ zHV%3_{VNk@`;CqMX?kEp*^F9Vq}ZN>=rQobSe;gQj2U6*`XX!_MD0j$b)mJ6kvd!< zzLEN|`72ofE?P)P^!|49eH(W;64zfw0dJHkZ{=#bLyhTL3dajMlYt8VzP)-6s<WLz z<pJdUz!#lY0eG)FVdKtms3Rp6fwJ}7^SEIyDAe3+3pi6w<^c`nhIf&gN!nP-hw^Bo z!Ehh{v)m~=*JBx1CNhc@b(&fgS(irRd@fBp6>|<QAnHp2F;|qPraxVR-e02foO(dV z94O1Rx`NknBp+o8O<kV0o2$mll~lNxThk1lf^8KNzA8wq%PQk}N5)!5a_*;K_U)sy zOhtjEpz*D6eX!OJg{xc`b^gy1uU82-zb~~l9S&Gf{7d=;=h9s=o3_yKGT`Zy*9`qv zjWWu635rIf3$@1PG-bz3Uv9G_jftUeNLwyj;fAd?-bXkai?6tnr;EKY(MxSotbQz5 zTo>&+gZA;3sc86S#aK<6I7s>HG5R*+j+%@K+<!HRII7~4V*tvF$b}DoX>x`gI$sz7 z#_i4+@29jqNMa-t?vtg7Atn}ymdSL7G?ZsE`u?2BN18d`YxPec;@b9Xn?IDP@@h?f zKf!FL;FU}FqR7vn<)Z5IQ+u|NgdOvXakY5dw$}Qs9%D?h*YX9i_?C-xNq)6vQ+l&F zsGO1%U{#~nhTE!1TXDEWMaaPb^yXFps%Zn(SZ2+unkyFv&RHoGg`E1Y%>gn5O*J8> zy>^8d2jzw0`?}uHi;=!kP3XWgQ$VZ113!~UZ+bi{{$z0K?~8cOvurm<DhcEo)ZiU9 zh}Pyf{UvO)!n9I0xaBUOg%Mo)I008GM0K@5eBW2}+<Wc64d@#@@dK3VNm_8GEQ7KU z$gpKKXD5M-gsOdo(7cS~VP2<V(Wp5QF`mDl2L2J@nWhjI5i;MLmJu5lxfgu%Uz8h5 zpAX}UiCqkER{&2i0{=4TfOuX{CF)JvSHeWxJ;VgvjzuJnN%+1=02O!qIu|4h&{RM4 zKVyPZ<Z6zTb1t8*0H3~~<uT~B?~gWRkTEqx@*^KQYxAgBWA!T))`tGUupVZU=Y(cP zEUn0-R|>8|@C;xSc+dmQC@`;AW}CLa8Ov+l9j{p!6kc))Dt$q}=g^#*yW_fki@9tE zGkq}GXI!Vj;Fc(r3``C8q3be!cCHegO8bS+|C|Q7qqC*{_{DufPs-_0H`^rQK;Npn zN6}T-yB>*1r#3!X2DXnu!}HHW3i|*w$V~UiEeW}I_6fy;N*hnq+(&Y-g`PK#c#!jv zg2<7|6D>=S`V(iQUg$xOuAK(#y>cJ@SudU&U}rbTY~LQa(wWGJ00VTms>~0p->d*Q z&f~CATcFf_OYfj=T!6GLx*&GMYEAUEYf1pXi41M209c^R{b4Cgiu^#M)-%#uzg}~( z5r2}sCf~2gurzfj$$focH5+d$oj{PQDvPtAXijUw>RmEI$%>h-ePIo4-dT=DbgM(R zC*FN9IDs?tZn6s0?`rzTS*tsW)8jl2!&9wZVjG35l@9GZVV&LCQs^<R$w(w+oZD?4 z1iQ7+&1}E&LC#l6NT|FH)?~cWTC83+o=D&6f<W7i*&Z=uj6vmXS{NIa*q`6`aH88Y z%7^f=M=!Az0cJaY$&FbwgHgi^ZnB%R>vP})F>81V!oP28@!#_XSzIvh?F~BZ;6tn{ z#rgHA6bA+QhjOa|SpN9{4$irCl)L(Dx_c+0<iL>HBpL%LG<Q6nh|K2k#GHF#o^vJ7 z?!RJj60wS-;TTBx|87{9TeRHayuWeQsehdC0?9#tEigk@_I}ZwOEM=cv@ovrig7ON zbS{_93DpZp>%!hqPc*6{-ZVO!h>p<dB5DVdX-T_mZcCwHav5Ec=;*&7b!yP?F7)}A zm!@kFCgaJ&u5HhO^F{Q|iV<?S{TbaT;U<*7?Frz}BRbda7x!)xKA3rji#mm^qLnG+ zEJ9DE%QU=oX3^gsF@TRtsVsAi>19(R`%KAXLumyFkTJ2MdE;ny_H3gRk|4W#*o9<A z5M2%=h7sHN=npe^-VQ<;Z9avJl~W-~G>YYKJgTL+QCP5M55lBCRAL;VgsC(fa2%L% zO^y=Xpw-dO3~|VFtt;E^OddZbz)mbeW?JB+I}cy&a%v7R7QSWGwsdij%WrY+LsvZN z7A{-uOa4W};$JkJO5&*(OiKL4)mW*SmnY2?^~f~EFsc(e1h<YN7k^>~aMXr5<v&}5 zV$i&RcIWm4vS&k$cgE}wITah<@gT{dMz$^DZ2bb`&t4?d%wfT?iln;Jl#Et)sG`Ma z>rFNN9c&*T^&AjTE&Ky?hv!gF-(XgO{p1@Dm|AP2eI{O+21Hfy?x62oJb8-zxlj$K z`VS4B(YykK=*OdL{<Mk;I;?1<5<qOeb+2(XlnZc!8f}c2rm>i)UJjybS+6m{c<`eS z3pxKz=BV1x>n7C14Bn5~d;5;w(A$L<!R@Kh)eR7h5%XX*Z!~HS_t!t(cd=@@H+$Jy zto;=Bn1`jeRKKx#K+4?9;Tm|(-jOlqi9VKZMO($pc=zUR_`#XP$-vdAR+av(gnyHO z)-}Y7Vq~<{yWWB%Q!ZkKPnR0jjG>LX`nr8axglZrq_(!bSBke3I5{mSVB@nW5`&ii zGZ(Y!D#A6XKHY07WR+?rQ^Fb0Z&e2EZ3DRud)$Ln+Q=|hf=mRm)xPZ33cXy=VvSBq zq_gh{kU~~Dh_|$pHvPile8lE3<2b#g*ijeuoFR)+I(GMo;iBaZ;SGqO0it$D0ylJP z^1$8OXw$k8N+75-@XS~6M>YZMO%<|L>qXjCb4Acij6wJtkvIb&+5t2OvHDN66hM=G zo~tF6kQyd;BGcP3^miE)thf4m_@M3`(T|hTR;bb(_ItI+(#)5qF~nb4YPdonqAwRf zfr3@nYh^K5Hk0TdY_QpiH%4A2p~wU|k8;|lWbky|Rag*%)d2}Cx++1p<$y$@82W&O zS^1F~E==-C-z-yY;~ri2y8{YP>ku^bvOt|%VOSMj^+g(Fx~4;>r5$f~_(1*a$f}XR zUPoPoS|1OpT4B&Rrw$928(vj)tJlTy4^bs&RGiT}Y$zE>pf^KuX;Ka_)^NDGz&Poo z)Wxq(jsm+1m0OLTQaNf$nJO@H)u1b)9rK)P&*SmC=H}TNYVig*McyY>y9WCCS4TC< z>pcGC&r&zcXptoFUV~F>31O*m`Nu^RtXa9(0@tk-K4_8J@&%;;iOqsPh|y8RA%Xr= zc<sUlt@7ymj+MlDm%U=p@I7_-o|cZOuH8j+zeC^5zmD;2LHn4b)?x2e$dNb9R76=D zDSR8aWlMihL){C;qg|Ci`nKp^A{RQ)t_7MOL9zN<g;~S$tqgRto9J9HKbYz9n-q+B z7mOXB2E4z&PCDSUNQC9wm{SikUjNqqt8ed@VGpPKBS9H9&Ucx*ZtD(VbLrT<bA!n) zuZ`Vld2Y*Ny9kLHK5qPZO6TBMPwwZR7MGJ2%E=Th68ZW!x+}$izq4WKM-684$$xk3 z4yy^BQsW1AlIK?6C30p<8xaMH|6Iycmz3g|AcBL7EO)Ps6w`G?!fgZIk`S3Hp_<f0 z$B*tzEV=&^1))P8=1MR_hf$!nHMqlAhI`vmccQ!Y7P>4OTttH0J(H@7bW7QsTSF~0 zHO*ZV()Des1*e*4RaLB1?YO&$6%Y;2ESopr?auljaWMjV7yB?MyjiB?|3S$+^$Npv zQG46AZQHhO+qP}nwr$(?zPD}L{+_o<oAjUu{Rb;qnH*zYkhr)W1T~9B@&O584xDgq zecZnV3>pd5Q%vq>(m7)t>^k{4@xqGBQi|on9F$b26KlAao$}tiUopvPb6n!b4vw)* zmy<qh^}3t1dA~Te`-3yVnR_{&+aD{KTE75XGx0{vGr)6MnmsVUK<+AWTNJ|^if;O^ zz*U10VYr*_n<Z3Al7XgOlrkJT6wB5ix5lQMQDdbby}*S}FumH+GcrUld80+G^4f-B z-m=rLB&Y#Df)z-PJa8}X%h->$L&7fb-~XkWegB_<c;xQ?d{|9&;XM8asauoK`EK3v z`N5i&f8ATPX8~Fuv_3~WcbnWEbT=-kKUHW{voXxR*JDd_t|npMFwDedCY>iFnPu(z zcPm?#s)=gfxmqU1K6RzxXBz`<W7zhbgbl`nU-?HWx=M=}#4$MtNc#aA@Ms9&Dvtgj z@xe<MPxjv`6(fA5{4d*j|MiluXJa?4gK=|c1uZFzpjYVRqvx$BM)e5k){7u}$EaLU zx$q!=PKuDHT5%1*q%5C7l8(GMQKV^0d~wD1^xNbuo&HUs5t7JvX8P5mc>}6!G17xl zMH=E7qMk#O)LoXN!_kj*de57x#bb^r4*J;mC_ST*eCZb+YzQh-lq!oXxr&9_yqOgu zq89=>_l<ziX*pO94JYx7By>z>xhREiY1X_%J<3IZ1N@zU-AETzf-ffjwE@~FV*}yU zp!_^(>h_J~8oySu^Ls6U{2Q|l)ej#MagOF!Cw#CAs=Qel1rH5KEUh*!n=Nn~1hM38 z9aQC3Pl%$fTGy~ly%G{tMj;oElL{d=B)YvAFMpHBL8($N(e4Fu<f@f>#fn>~P-xuV zBN}?iwXD|&rnsKZucBDofK7Wf<0Ryk+<LGP{1N0Dn&b+JxZHhmuK$HVa0&g`n6*FX z{Bm#0*-mcmPa9jWr`{0>JR$C$(;`xO$LEU(9!II6&Z2YS#vA5u`cGs(-m(9I{e5)r z-SI)ZBu@FgjU<CPzB6Ur(Ww6O^XTYSyMC@t4{tw$x*^2<N3skMZe`#AGa?crks^vY zmJe@G-D2(G0}^^^k5F#WTKI@X*rGm=hecY&Bzt%>i*Ckrb91Gf`SjuiM_&HyiwE8E z#)iCb$KXNxv#?K~3c(@7owuFRLoXKO(wRt(zvss*^*0Z7cj4+C9Q(NW=tY4XacbTm z$Sk*HyX=Y&Vvtq&E#aX2mzmiG&-W|;|IJ;10Qet6!HWr1xc)!j!g&b*0PFuJL*f5{ zlF*r$ni;y<xH!`p+uOL>+ByGUOobcW3#Tg<l;7BVp^Q?>5=r#cT^1VJtAWr$&@jUc zZn+wgJ`T5r+*h*z@*{ltG50u<>A0QMQfVMq=_8G$#5q5gmXf!}$^RbD@B0<`{(XH_ zKhnPE|Gk1fKD2Y;=Fh`%>n1-Zr!uIWyVGm;mRw%vK(5KgeeFh1N5_Q@p38yhKHqmG z*JSyw#y*>5km340<NhTVzx$G#?uC5u@$OT}o|;Ks@e%iJi<g7nIqsM;NwGDF#(WV~ z_~~|R_9!}rkRNd{BCV8(JKMZC=S?R(8AOxvQ@*QG#%xakzetxOU#xNs!H+jr4sc*9 zi1X4_RYnZLD%~tf0s2zHjZs!fUA6?@L(Gm#rX&XQR|+3|K_ka>;Do7q1!Naq#ot-N zlZ!JR*;6*PAtHAYneJ)6OYq;xdH32$VWItJP$Eck4aeNsZfE&!7m;k3IM(@7&(>Mx z7C1uPQa@)*e6lCk$771LJ^0m!y>ljw9XN1_9@xT_733wXk^dmV&%O?fFuiR2_Tnfr z5)OTYNfAcGpW-NTB75oYA*SF{Ma5DQK((0;#|E=0vptQwhTk@p;&8<4BimP5EIO=d z)+nUdA0j_lwD6+vbVV817`x>0`NS+~kucKT>(d>J*~6QDQCS(i_%6?k(hkX=oGe!_ zo$I9Rjl-K|2bzDhF+!|S@Sn6A*XW1d+0UGvW-&_yok2mU@3DD#TwkL5t(H(=(%E2! zAZj=Z{H*eSvT@H)%-5+7*;!x@!Hkz~%G!#|*>Yt%&Gv7lSHToZf>o+{GfCbg2{ehu zz3p#JL2>A1G0aXnLLI`3{J-Epz1k%NuXKdAZG#(rC&nH}gd2b>;l_4u?+21IDf$RA z=VHF(fj7g-7KifWcc5OdGd(b1uiH@Pp6yv}ssre6V)ZpoG%sMt$Pb?TU<(@(QFJIw zsY6#N@5*1xmmZ}n8oc;IL@e9(`aWd8t*%Hg%@mYqE9H=5=yyQ<Pfjs!R*Xz3uu|m~ znthWfdhw}$9iVELjcSjr%*(*-rxdF|wl+&n$`sqpJ#bUhs0B*%V1_*3s$?L=604eU zB25n@qRwCAHXtH1`pSv2Ju)zYBY`MK`#NGo(V~J6idZ6oXdZ?MNmWHW8B!Xlm?eBH zycnedd+EQ?gMtgtBFy@ijdQIUsM<*vK*Eg1vNdf-nu2vexa1Ex*ZrZYt-v+;$-pZy zRWM4NBr~bN6xEN%0KP8}jDh}Mer8#ag!7ak6qr6p54iNxNnLN23~@a+c?IEX!`G5h zVs7i`TI<i^t(b&|Xfg5PGu*Mr6I#C#6q*1le)X7f9M4H3+BC5xSLO(S{+I{xLkxWZ z+ZOiCsZl7z0aQr_rn~h@G6&f~niNkGv=Iu&u;C9pQzN4wOy}>6t@j<a;yzg93kLR5 zv0{QrW;1+?sOMSvv^A732~!lQ=kN{y8m=A1RtzG7RG^FExzXz^Hvq)_`bLJ=U)B2t zUR4yQuTSIQ2Lwl7$~@-50%X*Y!eq&D6i#ZNf<-Pxv^^8%bI|lNEQ;VxK=XL>$mDp7 z(4tR}R$P+U#KhZH&mkS3x8&%r04>o`3#VOvIdhlsPm|1v!xEkN$0#IFj>f|V~w zGvZ(-h*0{rvlN3l;7ZY7uqe045nm_|L2x8L98nOkBb*#dG{CU|V2y>W6!ozs@e^FA zksgnPkrEi{mgvz3J46~;le+JeKX5^*B1hh%_wb?|pdRoI%UYx2h*(2b+b~8Y?LM}Q z5a$i!(GQ6v$W3C;Oj5{2ZUGu=(VJ|zY6C@>DUrZ{0$|1%f^MQwFVz;YKr6#8ku}H{ zLkt>l))%a)<kt&ImF(O{FgvD-u^bjH@RZ#DiItgnaLp~-&+&N*`wZR#|6YBZY4H@j z4;e6#-bpnE+)wPpo+4_CU^P4n!L2NzIYdwNjs^qC#I-E7HTlP^(v;mZ3`CEznK-f} zLH1e87>UQO&?A-ERxXiU<c97BeTm776ve<kV_kg03t}}?JuP3d;@V7JpvA8$Z;3BD z5)o$pHo`DgQu_9?ezc6}N%Mz(LGlSf`AGf%iOK>CPO>h-1JU@#9Vq150*XzMTJ0CT zEIQwTnt0^Fm~Ih@%kv0+$ErjmI<Vr~<oZ0dR$2T@YhAAhDmRiD2?3NnFCgtCbc)eS z1T6}(gh|z67zb3D2V4vWX93^6SI<Hd;d8{_iA;=TYsW-wqpM0}0zb>RW&qS;2oSEU z6+x*!XT=XMop{}>D8$3=VvvU?6OXxnz`?AqRO}&z?1C6VfLRqG7NfDQd=5jVRZeV9 zqrzVQP<JqYqMu3difwteF)9-x0&v!kK)Y9nb4dxf?WVV9u9Re6r?2KjtAt0yyM!$w z{<@qocPt6rQ_2M43MGPRZlc#xn|G=NmY}LNF4Gc4)yAHk`03o5$G4yDU?B$o0e^oB zM||Ng;*4=e)-^1;{5Mi0p?ipST^Z$qV%%#%*vIp8O4+|;#%#akW>7ZNIj_u4X`bOF z%0x;w7JRmE7FF3I8|Y$Vp*#lz3SpOH!G}8$;<6Y<iM~q|+5oa38|f|_<*39B%j1%O zm3f5&X{sy;#|f5zo0zDru!_U`K%xp+r|K6SkH-8R4g^LfLsJp5d0Hz#_H7Ax6Ee#N zsutAmsl~OCVi8F4gahX06J>1_9vKs8$#n8;lB6#Fh9am_rz^t6Di(*<Ka<XpATkee zLZN2qGAwf{69}tYCYJS98i4ApgT*?DI#y%0O^&xLN?&>5f{(3%1^3(js=Be9mNVBB zdMko#(7^EAilrBk4d?(Po{s?Tydrlt47pwjXoyQ5?C`;WRS-K4Wl%*2%kK`#%|r2| zI;nSybqvj!V;+i8JmIoqNm4qm3`~Qn<ia=>ZkU!;gn=$p|Kb24yj2Z03Q3K`UIQM* z1D%Lhr9}M?EPOB1+@HenBbfm0BNdq^lHO_CR$J6%1u9LXQ*ecE5UNsX9k*?qld~=0 z5N#Q#VTRvB+)bTTG+o=OtYHOBdo%S=aaN)O!%Yhq(HQ=y*igd(rc9Z6m;Kjd(^}{( z5vh;B^;p|U&~SxATEJ^3$0LMMA!Ig2C2DV?=OjF?J_A9pXrsQMiFbiy`Th`bxsDdh z83Mo%L_Hj<4V$PimSgI30D@W~?cVF!Y~LE$u4G*0{B`9F_oG^`SR>dQ<V{of!7{kn zb(Xz!6UQ%lApfa)6x}`1)K-j-pdOiG)h%%V?u^i!utqV+=W`<@GN$c(GGXIb11Dn* z5vR-wWo!{+$!f+O0rjft7~lo!MI@H<!*_m?#8z&AC}RH^dxglogy8Zwme1=NoTE-) zg;J_Ha%ut0i*zzquAI(t4aF`%Yg**x0_=U<G}dHbKqVV2K0MZZyhB$d!}%?YV#+$; z{zyZIgppL{ACRDdk5h#celw>wpMoeol?cnh@~yV183MpeWwy^8S7b8CMT97Hp<|RM zu`Jsn{|AG72fE{9^}UDRc@(tR4~_=o>Sndu2>ND%M>A%b3d*+yciQN6r)9G6?p}n! zg-7=ki*X3dvKvVGw7HZ3_ni5$17+3$2Jlt!(?Wb3)2k;B#oWXere&W=yiqQq+ZdFX z;3rq&%vAK(mGQou31gDu*9m%izBcRf#^YfcWV938nIO~CJe^-7y<u94POS1og2K95 z3{r$6)8Qz?oLL(aw&y{Ap}G_w7Y}Li2R5+PaACI8G$7SvDU5i)yy_Y`c_QBl`m^I# zi2<|Q=~J~*#!$5q6≫m?t!e+yL$Kv2=2c5Piu9&Y80TSBeds1gC3=jLrutrEwhV zBgBSuM7)I^5_YE**DynYMQ)d2;lXh#doh#Vf{7a(4^KQ0=4VD#BDNwX=S6$wk%(?a z9YgHPXV$2&EbC#2vohlBv*y~9L-b+^69i;zI)I{IjJco0oA~3XjO;JqFwIF}Ta)NL z*f1n78JMamM|#7S;dO^zVvR*GzaLHNM$rRxF<U;Mr52h-J`Q~S6q6=8GYU#SUkbog z2@Nxz3*80h;6FbS{RO4vr!JD9V17c|%L-ITT+|jA^mko>GD*l!1VFHB%#Mtr4K`c6 zqPQa`D+x&>OKJfg93g-O<l6ZKo<y#x<(dy3rG*3)F%Mt0^JV5%<Pg3)1KeWFaZJ@b zY^8GRZj(f-Tn`6bhGjEaYqGceAtS{{{I5YN$pE647JD<(!p^)WN|eaJ(i8zzYa0n4 zLo*&5WDr!cWjE<XqfsS<ic6WBgt;Ea%lj#_x}dEsn@_^m6c%Xo4=y1_*AY4i*TNJ= z*VB|z@l~EzN<w2~$p|_*h5FXoqb(e0dkFQCCaV~b;3Hj@IJqu7s5fhR#IL)S(cjx! z@57tn9pHzXH9K*i8(NMF!4{=OSuct<6j%!Dg35*!w>AJ(a)by3?IP1<(XDgaJb;k0 zqDF42C{UaC(1(%C(5DBv1~F~>C49@iqyJ(WIFeprB@HL_rbe0`_pJItlT$0xO3d-} z?fqGWaoQ4hf|AkoHOPI@MauibY~ovq&g_!#!1ye!3p#m7bX6@0KI~m8+3%?Z4^((% zrXfMR^m`COy9luZ%}jmOe_&jOmmv!mu2%u)j5n}UH+t0kZ0aY_YueD&zkp6-7vJLT z>ag?RRRH$VZ40=59oNEps{OJOuIeryb<xXXRO6*?sB5<7?_oCV&k5Mp{?Y9Z84nM7 zeM_vZhU9ASPC?+N%E$&xu7nbQ0Ww}#aGXlv-%Zq=@)*CGcCcY2hxeb=Gzmx>cS&1x zn&jBf(RUn{j`<bp&d#daID1){=*cC1JH#q43jfx~<K0jcduqf^+d6W8%fsi4bV7^# ziuObFd$X@-b1&PaO4g0;noU0~+~#4e)wHjbCDv~d-Y?3Qe9llgFf5QHs%z_Fm$le7 zIC@rN0c0;WQoBa%GMu!2eSvf8(2HSEYubmKrYULlow}{4dUtdCYDC>n*j{WdidsNr zNFUse8Cw0nxQ$yS<}XF#->kq&HXaWiw`ACj7aS`g@!`1amO?FeYw`4<#i1}aW2tIV zYPPbgM&SOrvRyOdU*cA`B9bRiyCR1WoraoNDCfdI|BX!RNX5lpY~R^RH)CqWxVA@P z>{XHVH)}%zHJ`4MM%xMaT$>s}RlpP;TN^>SDAxuM=?9?)93*RR-^D7}p{$(Ts%GeH zV%5J=VpZ(!8mi2wkIE$B>6WyJeoP+pD*mtd-N4CETsf?tp08*RXK9;WO&|CB>13m3 z{;g4a(qbbS!$z?c!Q;@sJIYHfXNr0UalNZOS=VX78qOGt-ZbA{Fv4pqcv&_$gX!`X zHbEO!C*xmRBMsrmmC%MjeQ(z^&2;Mg4%QUyICtsRnv06G+6h0N1<3=gEl1IWZcZ_u zFXNH+hO)g)V40}`F5WyDEQ_8?AOk6TCg)kbv<mjm+D!nb<J-F=1@q+1q28Z0rxVN( z%(!np><ZpuDUtlcdaLgx=~1)pbQb5Yb$Pd8G<?DKph2AEgzVPkuW9I58PQ$92AwUb zcDum%5PlfY$S@c6LZULjvK5kPRPp?p5gEHA%==5LPF`nyol|sd3MDb~UnjtMb&c4} zQagR=9VcG;@&s+bI$C4dK+%kLk&0Y*b8-Y7{X4^KfohAV1VweQK@-aTc!*-c&oA}D z{3OQyGywZ;;!Bo*B~7X5+kWG>LDl!M*n3rS%RdEf;Jf5IKg5q{Nu0-vF>R*r+G+>{ zA9Q`4Xn%+LAvl<HIZE#tG*Q^DCFNZ;u-(2S5QsW886Z@8O{#T@q^&bH1#CW^gz^jY zpwHoMh|4<;9oEKfx~eiHI6umf{1b(GmgX=;J7_jpj>KX<3A+b$+*I;y7r&y?%cx@F zgIm{K*J|fSb;x739i;8eB7k7|C%7R_1*+Mh+{>f<51EfDfDKC&oGX$b!?7ik%@pSr zZQtH5gZDgpuFBZp`V67HGggZ1_Xf*oaU}e)HLoadSfoC~{nHADT&soVszYBWQhQI{ zxfc(&_r6@$NH`Y>hwuza^j4!|r+)f#BM_<{Y?$6t!y8^B^J2}>@$PYEKGk&RlC?vx zdM(L`GA|OZqy+pZDm=`=%-EQ^%6{zQr<dLpV)>l8yQfC#Ku~?JEr{Qp>X^q)cV7Vi zd}lRZh*)C?SEuvMh97P{)TP2eSZkygt!S0Bb05rn(y8={;0laEg#@LU+r3E{gVc*3 zGHP2}qNfvU+tkoDv1*&_|E_23#qO~azvj8MvMie9E_7OZ$vTc*G#bdtht<5#40lkj z`n^yOY0d2a@>`b*98xUmn-o6%`Ar=_Y4H~DbldHT;7?K}EBo{tCAIpuc&umtohHrC zlICYi^RcJ<*wKCHOiS~vk>h;D#emC?)$%W(RXdV6-42%IGsYB?8UAN8v60iP+7b3S zDQ}S`t4Z#i*lu(Fd3fBOMgYMyOzv_)9MjP=2k0GqeXOPy>|u_Y;}%3=t*ic6+vqj? z;eERdc;YLbopu{BZ|sa*@;YDo(e-e`Sa>{ja|RH=hSV`MKV@~uvdzW7qHFNygKRLp z>@&GaI-09+^mH3$s-0otzGCMdT9-Qq5pZoxg=+lgRU$L(BsKP~JA}UiA;Ab*9N{Hp z{k_>JV}7qHqu{G2psbb2$vcdFaG4VT;q9qE&mygoFaCZb_z*aNKXF`rn@vUXm4dk~ z^zoWZO>hCo67o#uH}*CQm9-g_wk$tNkCe?W{oImwmc*h?+r@q<K)4FiSEUVVzfsXk z^f1#g1;`WW5x27OZ4n!1oLlYfy+re}YEsmi^1aB;vt^m)+j+>j3U!xPmo2k%FLn9y za6>KAYJr9~R6v&p`|*)Tu46^fBxadj3O%j)a3!tozctIX)23%l&z9a`PiLtAB)x8b zS8_Wl&KpA8x7*Z4uNhRUF)3V%^oCwUyQ64d>(uJ9V(n_}n(vpZ`HQdD?C(wcJ0G5P z*~sO|9%b{Vxr)BDE1zKKR=@t)(ENt+#<x8r^vey$LhOhP+=a5jH!5z°0n-><g< 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τ0Sv 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�bu2L;B8I5bPf78I(WE_iGVJ4eCWD209kGS(6u%Q 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	*Q5%+r&&_hDayk+a!C!3!?Apcq+IHO{5tWt znfO2AE`8?$ccYAkUxhsT0o1Rpn9Q0{X%(>=eU`eIaZh~RLhNj>#?}MlXzIk)*#hOx zy1(m~@P~=5mt|p&<E>Dbbvwatq|cDE5n^N#!7`Tmc?it>AIS-a12R3DweY_ei0UMG z4M^u=fMwvZyEJk!GnuD0t3Z(;$K*Y#?$hW`(b-gDLs)T&T!17!D`Y+k)4k|TzV-np zbQ0HpJ!<vonQwyqB}%kktH=uV&=QRfVDOuj`It+(In!7Yfh2qTIH1C3nq8=15F^zB z7mNK%bQu1)FsiO2g5I&ULE=xEE3VE;Y%Ec!;N$`}IIuyYABTURHLEqSANO7*biVOq zdrA;%(>*#aQzv6zBXe`itRWtK^~!~&qM9d{$(Syk))o>{&Ke<6%uFH6+)rK6sQ}s2 zI?3Jtl1-QRm+-5#$_6BK;EixJbaJeuLx(+A4P-AEjHDUd!-BEg1b(G@S(Cuuh_3IT zx*Upz{ViU6xE^Xjk*xdV&|TOYt=O=w`}oa%f6Q6Ik?MHrF-ZJ-?1UrM|1{UXZg^qm ztSnI6+BK6GSq2L6cb9-Gor64LWq>~L7M9^SX$sNW{8yZm=iyU+&ovw3V%+0vUlIR! zx)3ziU?FhCpo_v$JWEW5EdJ{$$h&RZhE=eLI4^6~Z9#<NMJjQWM4v^tP7UWG3$mrq z5Sv0i&OGK=ICZ;h8wp>GM696Q7;04x6)=OZfL!Q44s3!o&JReK#9xRbtzv!&oN<~R z7h1c&O~W1|)A^m@Stas_Vkk^RNaK>qqbCewK4Ih|e;L-G4Fs;s8cO-7KnCy;moK)3 zMxW-09To4Q2I?o@^0mZEqd<#7d`60<F^$*%g2~6JK*Jq|d0S9{jzf5{#FCQ$iuNgP zr!m<sOaK=V>3gmx>rM*m<7+_4Mi;2ojMa_JLTq<-1VYs^3fX;!TrW&cP$97A-xjhH zfKEfCXC?CjT7jz5P>F$w0fNtyF1nJW$`ZpdOssKTOo^$|?#a0u)eJSuZn0r0!Fj<M zvRG$c>L}kX1Rb`Ftoiji8^#0=vg><z<?*fyxYBaN`|nDNILA*A`uu)Wd6tQos*-UE z9_oI=q9#8R<RtNkI*UHiEIzo#p<0wU7HKn!t2pY*s>scZ{M_^XLl`h<UyekV&9gW` zq2OrFPY{q#$7O+h&bn0{VV8LK98=V$X;gv$=ny4AF>mz1jG(M$aH7(KpJ>q14q87G zuP{%~%pr46ENd_bH40+Z^pjr^P)kQK4GDH&js-o_AS+Q~SNeTCrPCmb4ee^d-kn$k za%l&6bf6!`gafkny*mPKbOEy`G09lDb|?oEjVndwVw~lDupRZ%<ong+5`-dgJB)vo zCRM)KAaQ9&Oj=tStGp$%vs|~A)FvF<Kemh7V0QcQfe7pf3=ZT_e1HPHrGeP#@%y^j zfO2gScA4<+BxuWay)iNcoAca7O_~K&?9&tYex+|OXc<Rr^lkeH`<^N~X?QF7s#$ln z24)g}jcfG{k`ER-zkkz8L)_BY0K=CBX<juVI)n8h`}b1^&~wZ~BJ5sU1t0?3zdYZz z5P}&TAOPV4hE8q}05S-`0>KB!AYgsL+(2EemQU0H@_;#%V3z(LeWlV>28sc=O)JU) zVeUX}f-GBs)%3`^{{k7rg~Y589)kT8wZi4JC-NN;qoMzrJsDf7y0plp0L-53+gOuV zjPTNjs_(7Sgjw6S-XYyv(WbN9)NTXNg`5BHeKP~^VgS0pdEtQ60J*e5bNs&p8TkEu zTjV(B`1k+Jo}eLXOXvsN6*^t;tfl+wSL?r&=sLI&C8u3grI9D`bPw{hy#t-5$O=aO z#{;Rl@|iv5Gg;%+rtUQ2ra}y~bNuIl?B#L42F&fnFEeD#5Fg&aE^0fD{qXc|W2v;4 z@UV~jIdTRTl;yIS^DKK-seo6LQ;ol(&u)ryU<dxq8bt`_8;dN>65fM3m-_<`PGIGF zYU)ofKd0#WIP~W8wJ*Q}32bSFvYpzz|E6%T26!NWZgnW@_>>24ppw*ko4!*34+Kx7 z^+nUy?ZQ#%oV5XJBzXOrIa=P)|9P3)&HAa9XMDs-vS$NtB#WeHZ$5V?`->}(DEU{t zH`jSRkpVDXiQpkYV(azk2LN4Qdzg-lgLI*;{y;V<b!)@6vHmkk4L}!h%F_zd#9fF& zLIY#oAgmE1h%qM~;5q80hcTyjaZ~bXAP$}E5j^c|EzMrNFxs69ZrA=fJ)8pkvcTDf zjPb&Zm7)xTNX9Y8V@uix@0J*tpKSse6kumiPl2KzSQ57Z`Lfltc=p6Sh@e?@o(qdU zuZxx8Gzj^g2}Vg+L%!f|tKA`-^xb61gC~bVJ-1q>1=9A>U37$6T3j_QmI`P0;qyK} z&&>0^>gm@p1|<2ZNg+^8J_ykVg$%Buv6hDxYG6uq!;7W{Ofd-~MP}A#*ZBFE`x{;% z2f$JB@HxP5h39pEdWNYx>qrERbmfTL+^P=lj&3!`G->_#u>5VIKBngGE2+C3T&G1Q zXJU=4DezJ8`e4lj^vV0A(L1I(bPAu)lQ$`SMj!;vLZ{+G-vxI@EY^VJ;9J9vIy7p& zF{|)9kn}cBf^qatZnb)We_=^wXaMq;FdyDlKE!?u_c?5BJAD=y>ao6&g5|sn^pg@< z;}x+)EkFE+5>US=XPn~v{n<$c=f<jSqIxS~e_J|o&5?i^kv^`R6e+mopPj^E<$8;3 z7I>}pZ1Gq|&}KaXqB!nM1xe&7YxTq^!bwFiIg&;7Q8*)7eJe?)mjcnW7m1A=WEctm ziC+l+#V^nX?$m`5a-kxW=;l9&DX^0uf`+n3hysD~(U@_lyN(7)c|m9^Q_Hpl`qPdq zNq|Wkx@x)oNQ9y@{pB)vA3xr6GXpLF+Q)@={B1AeCBMi>-JM!l6RsOSi-LKt&RRXq zC;H^XI9irVzh6vN*UTL!m3of2FWFCw+DjT{CcH@343>GhgRt9a<^}jrlv4YW8ET!{ z@+WCC?$*eQFuQudI;FS;jD};P0Cjde5R;h9IG*|fnmNGx_-1Y^h@S}x0u%=@lVx3s zrDaEE0nFLhI$^j-6o=b!whaI2UwU!H+HN$4R{;Hs3X9FI?!%A8tw!1yz_7_tcUC?N z#@6gI;=5*OpV5e<ixVb|NX4YAv?yc)nmS|h)}$fh0c2_?obMot7`R0o4{~9((o#rW zg5n^(gM7B>$OK3D4jHlx2?@lN)`dLY1qwa*O)T8RYnAA~LmvcF)Dniq-XgT|DpjW~ zP_nm1k;t0mT%kUUaC`nMz5D~bdC@6vLK>~f`!JQmH4lIWCgVR1jE0>>oqzhlkwme_ z9!Vnk!)4F%;)Y|>Ls5;Y@{0U1U8f?N08(S^Rn_T^6nfUw^*}VBg1Mp0qewEi-bjDu zlr{0q2wg+EVsyrxNRVd#PX~j_rID6k0#nN3>QdtL4#xozqnVA*6xy<V*QAfG$uOHH z+$@NxvapscDI)%?hFcVHO6n#{w596FLdlKI@z4DjR0@Oq0l%fnlNfzpo<`$I5WA0- zqBHGPb2ZzZ(SaiMULo?ULtqT&WNM=I8sD@K-ehhMXmS<>436F}G@WF?l;7MGo5`}T zIV>k)APJ4q*AglPC6rJnltv-U(xk@Re_+>Mc4=g3w+8FPR1X$<;QrsS4?6EjGrbm< z2awUcM{hs}!|OUVspc42tGw;yqx;hc`O-oyt8ZZ&>e`1y6me1JzdIO6KnG*t<yR4C zbD8vCBPZfNF5f6aJGM>o)57vd%it!^hRSiEOA4ET<X;JGr0qgO%}6%hf^ZuwyiQ6g zL>}pHt*nPRlSy_3{Tg5mI?eDIpR(Iwn>7>c(37YNkf3qv>L0Rg^2EV#2QO9k5w2Xy z7}o!^$E^NeMNCE?wk)!Bq&B8*ra$2H*DV@gcE3Ox<$T#@$Fx&PBoR==V7gp-;Sktr zk2?ei`u_S?#AFD?3GIsrP~aU{<0t%3%cfBiso;c?-pzVK8}>d@ein6$yXWz}(&$vL zJ2^M`PZNU*Xks4N1JU$M7AR-XQiYTUEnb^uxK7A5ZixmDt}_b7kL{kH&P6)$3;P-K zlBkT-9@x_Iw?sWnjU)HTZ2+e}z*vA6I9KFiow_)#_wQY0b+fzp^;2tig(9ik4(gqs zTWoK(gP{`*Lh_y4-pqvRkyDI$Z}#b#3Bv$3$XW>-g4D)zgBKL4wns=}2$6Y6d`e$Q z2zeoMz9$v0!z79>nHd`&i@fXi4Eg>huXgHb<oGCI!4Wo=Ib~6cr)%eM5lD=rZwYQb zP5dgq8L7R3K_W!tk#}vlqR@m_uqQk%m2I_R%e!H9kL7Q-EOdhkXN<HC5ZFR6HyTqt z$Ue?M9F}TxDmLp^lSvJQ5DtPXm(qVeNWVEVg=aoSHa@7lbv(TKEjp8pr<~JB((&8A zV&isJ;cX0(SHUkZwAKO|GD1>m9>9Uto^eg#C~k9DVs%w>n#GiWdJl5$$^Sa`F^k{Q zo>i^C-#n$x2{R>Ql&Q`S@Ij81IQ7jBWj9UgMhWIWDFr)1?=H7-v_8(llpcYz-jt*Q z8%uw|JVGDbcXx8H7}5?m!7Fp8aKk&`di)Yi+^q@KEjn(AjmywZTCRR&D<5qsIjD7C zQs8Re(#M+ym+!*MJR3Rvv=O$Cn3ims9r8MsX83pKBZx~#Y!6;u?b6aF84$&I*%k2W zwVk=!7`77gM|%py6zc5K`^3vH7XhLevt`_CMjr0h#bpHkhNK<)h6m)DA_9bkJ-}Iy zp?_yR*tc^1Eh$afKsLl2pjRnB3IByL*EVwuAey*<FeXi3B-|C_hh-<q_&TNXyVvL! z@wzkPr<R?=M265T%AaSVvQ2d#8}|{w;z?L&P2qdq2V>`V6z|Sf#Gjf}f}^7eG8a-< zq^3Kn+s#bcVTJ>f0)8R&2T{82p@&wa^Y`Brz#g9P-z@q=iI_$8jSo%ht7}`?kv>|K ze)W<!k0E$XkiBh51^?oh78Q4-F!<Uh*$=jMD-AUW(CL41%ox!0Di>u@gL(|$tVhfJ z<-fBYZ-R-ueYFwRR_9D>@0kCMAOH%;|8^#r;{VeMaW-{wGj-B;wlp#Q-!275rV8K1 z!vO)V8vOs6CI9c|Fm`oz0o)6AGjwwP565WMvi;ZBe8cq$rM0?*j&y^7I<J@o&@lV~ zS|L7qiW09+78$OOA#a6;`<rd9o^VxkHGF)uOaCn8<<<;XPEq6YKG;8csMM$D$JE#L z{fKG%+-tPg<H4MB#QXdB{qVD=t-}GHP)0sy=<Z}kltfEgn>XeFV3wR+eJnKS4Xf|` zvF;q>509yKwJJ@YDp<QP7s>4YUSHE1gX^u$woOV73MH)E!S!_}C^j`zHH^J#QHsB{ zKZ#d$PeIO&aG|p<y!13q{X-~DVwR<Y*&CsCbP}(b+ANDp!wMlD<S<Rz9Z!QEj1u8m zopRzE!D4y0L!xe`MTKjxQerv@D$|w30md@SpM%QOxPENq7O1GsBUi@VUhd?I(TQ<x ze95jpxdoexg9>f;hb*&Wr0IB(vf#Sbw}1ov5M#~-=fEE$D0C=&JxLPWumtS((m_8% zYUPbKlt{3sX*v07!iCPhs8Ea~b+{s)hV`kuL~h3YRVVZH{Y7kP<E%NtEa2q#Ur4{@ zb9dTG17hUNaOGR=#44Fg_$EKrYD3?Rv4$T?l@mrzWZxo)=l9o{e&jp6=d1EQ57u-0 z4fM*U(e!F_%7zzW-I!X(6+MbiI_6fj!#-YgH^-*RrHd$>$g(zV{z}aO3s$<KhO-S0 z9;po}xWSHsYD~xtWP_-*tbZLtESJ*QM9>w9IVP=?m#OnLMQ$Qa#g1bN?NDE6zfr_z z@P_n12XD6QOYM2yzr0$g8mnj5Jd@UjDyjFu#~$HN?LMS*%Q8lDa*pTI9xT=lJ)J69 zIx%3oovv!1*yEMQ>H`r(OH=DwvFIT1Vh>uM64%I6oEr18!!Rk-8Zp(18jy}qa)fD< zETTcI4W%8Zn2AMe=-h}y>Q2FYw59W-Of~Jv&eFWroA2+#H`oktDxIhHT|jz2(uPb$ z8I>KImmv!3kTf*|4%Ao|gZE|*YiQP;g)O|CXW+~_Z_Mknfca)HnZK%=kwz;Qnt{x% zl&~jiEl7|KPilL_VbA)nr=6(X>W7m*WwB2qho+dg3#cp4Up(TftlP<t;;V;E<QGL( zAew4w1@$fGG?5#BdBxo@m=1ESj|!>F($jGzZWkeIvo4`w06EBb>n<d<2$^9Q4fsd_ zE%B~dAZ`A&4LmYQGT>QgY+J9-w113oipjom5zDe=V#rqN+eb$(AAcCH=Z%#k@#9FA z8T=@yVo_Z%W_*^(q)y!kzw_cgnrz9RS$-5o>+js>;o|k=&hV{;F{nSnq|sGS(A>Fr zCFb%|OKqLqFT6@spum0_!sA^$fqr_+(hSF?#jrV<vzs|_uCFj%h6&b}kmv7b(QtzA zd>BXSk(3?wd^9XgbNfqXrMza#`cab9m9t2a;@W=K0(@%|rf%REYMJaNA6C1#A>835 z!(Tf)M)SBUIsiIlyX;lztrs^L+GV`5-a3K#t3_*I>8E^Bisnx95_KM}mB&Zv{yI;T z86?R@<-j^A(^Y%`J9|bqA9cdl1Y;=Hi2Ng>o42g>tp-kLNjK~G#UHYg@^Gw7y8Tsr zb5*l1JQ9~P^;9K%84-dRPrczsuG`HC@1XdfF#~KF6||Fbmz`QP>^L49U0tT;7OPtc z#%yXny#8<a_N*rvEAx4!)B&cM9SYbty?&1iq7#%JcFe%f6JTxeLpB?*QGC~1=RBCQ z$$<>*N2bb&jR*&DqTo1_HSKKn&na??hjzN+i0Rx6*WED>33I_>?mAvTdzWd`&^ACk z*DlZLtX$|`<{O5O<u`MOpM8+g>9MO_Zm>A1vu&@4s;SWTImLRiXCWw4e&C`%rIfuT zp!=PDv24qoqpDRf-j)k}^T{y8`>W&qEOQaXjqQ`Luu|!RT%2D<%oy=37Y@~oGdK%9 z%j_dO;EWo7gq$#=Gz9t3UqPqkP~*A&+|)8pr$(Wa75IpZ7(f;eC??0A*A?26T_U(_ zCxsDb-N)+Bv!PZxu5Pg=ycVN%Q?uiF9G<WjRmG7VVU~)JhAOg*=hTBtG&Gvchdml3 zhDTAvis@49Hwq^bz#>ndq{G*7?dR?j_LW+OhdI*MEesI%^{76v)IH{W<wG}zg=zjg zVd`&pcEVilsd^%GAsFLS{XLvFXSnfIW-xu$R_|_jYc3)C2X2$%RzEZEhQ@1pB<2rr zC=~GiFMo2RFh-j>p&=NI-jPnLgVkv!%K}&}X+KNflR1ZvUF^*7q~1R&yTiJ{X_Fk} ziyB0Qr}-V_V7;5~ck+$6nnl#Or{ny+fw*k3>q(Cmatg!Q$Xo-V4u2rUpDS6>!0MxR z@R73hW6xY^r7SNI;I^^NXPs_@xK`5g2$q~(rVF{(_hfrvp`ZxKIy_KyOx85id77L| z#qtMKDQx=`=n?qvnA<GEb%9}-F^`Td&@%DDAUov(w!vnq>JlaVR>;c6@b3^u5`lP0 ziX>F1mW_>;ed*R3L?rV}XR)G^rcsB7Dz7CZLg*QdlVkSlmn&U=_Zs^4iWjWSuWN)C z&Qq!2%_bnpdiTlTSO<on!;tb;3E=z^J>gQl8T9R6^bb9KC>qMN)S!H!kQtp;cyfR& zc6y7IA%49C!#+ZCpHA;ZTl~mvf991|kzPBz!pNqXShzooSN@T2k>*IJ{-TtyyxX>r z#U0aVp2VE3y|u;k+wJGAP7juoUR*N725q1vM6Zx&NlgLx66U#D9&eow-WcV<b=fS0 z51y;b^5~{^l*3d}ZbT)QSVtL77Ju*yPg|aM7D{k@Ievc}Wb|R%jb0DTO%bkJoNy~> z-zcgH4Ek9Yn+RS+aH{G+Gq9^*yd(*EaS@`a1Xp=U**W~~9>tpW8X=qxsPbAnS34!W zNBfFk<ZW9Gh&NJBM|&!1j$SB2%1+oRv^oRav8In)Ek65A?S%jy33q#P-mO`^U~x88 zm!h_Dzza5pZ$K)ET0D41@(r!R7WhHtY&p32TfrKw%2ipIE=IX0JT9@Z$EZM1c|_Gl zH7Mg9W>0ZyethPslzt5HN@r?Cq?2O|IeH?JN+=ZKS31}L#WmjS$n^J-$;MFQKsYgk zVr6m%Y`t=|hj>|MMajM1+Q#|I*MZ)ZvjTePML_68q**ve@x18%#|=S2Fpn^VUS<db z^XF;p21<744i+f6A}TCRj5vQP6I4%#m6kA^X;1e?aWJsu_iphbQuVWlhd@>;Y{%-w zjwgIM(G!z0Le&^Ny?Jm=!{kn{udA!;kJ*ASG~f3;7qoM{!ohYQ&R!hg{6@7L2#^Ha zJ?@e?-|n{Ex&vA)-0>9QO{?7Cjdh)2yO*TSM+du>&iCCM$b~|J=f4E|?_C`V=HHzf zE9MTi;|2G#DwRD&ZNT|^1JTH<XN-c&%XRq6!P|(AE4I;vI_^i~P4oiwH+a@z5;k{f z3%Y72ArWeYRC{A4GKU0W_IU0hC(>eJ+ehWZ-@nAhw>F%iS#S#fN~yz4b5fnncek`U zqso*>ZlMFQFg5Yj#I@om6!q7ApTj#!9cunB%HAP7)3sf<4l1^7vtpy7if!ArZ6_7m zwr$&XQgOxh|JIz}`qy5&wRSVdkxm+EjAxAVz6k7V(lE-qqK`rYABV$ya^Qdtvq2S9 ze{hgo7bSY*{ICnaqG@KHPj~eyR-ncS(4IX;(H=De6rREtG|px&uu@m?c+>_W!M~21 zkEIUbt2?Y)I0T`ozN?An2BB;besE~d2e0&3DbL_|w0U+TcEz-9<hB_}DAxoPz;jrl zwQBV{JfB)PKZm)dvC}B6fE$x1T}>c}0mn-|7-TK9K#uLkVJiSxO@PC@wKNZJ>xArz zw8Z~;Qs&ydJjDlf4BkUnx%^~BIHqdnbn>Zm#X*F23shEAR30Eu@H`~Re}pfpQ{_(x zNn{1(Q(Y3{?mGK!eeBP!16)iKb!m#Dg}k+Jk~`>eT!B`t<m_5(UQN0USUu=U6G&zj zM3$807c4f!`Kaprk-Q(t4qa@Vko=0C@0%gR3G|qlb|>+Qp4IWHZz-thd3_+yi8Zry z<96DJw{|bkvlW|Ye|<0EBPu|_^bJxP;GffN-wIgmTs?FM8~x*E|8CbqN_2zEH2<A! z_>}_xg1-#}7nlE>E-6WCH<B?OA?R!;=IyZZl`n)IZa|Pu|82DTOHMW?Q^{37N$31r z6^piDT+9qZ{<?FOkFuxijLuh;Q+mSu4ri<9aQC69l3Cat{WGhvvUz6kbZks?q=Z5? z+ll(hZC=z+>vW8@a>P$ph{&ci`dNOgd|b9*EhS|qEJG3D&?pzz7IwDZsMRn-H*D-} zL^=H1WhnxNla$4UZTcf{&!u8M^L9eR|9v237z8(^8V(3(7jXQL<9`iGM#d%pX0o!? zH~Oz<1iCal0lF6T3-CfDL(O9?x#ftPl{tJZJf^83Zz0du7~n*T%JJ&(uMKecovfX% zUse>>syN`abj|oZo`8Q(-P_+;2`RGEKD^%4-MpSRTA82EOLwNS!cGkMU+=qPZe9*9 z`&@kZTl~1OIX(p8lugZEEcm)QIx+MFQ4tobd~f=h>&}litE&<tE{Ut8>D|0}&8Hi- z(h6iK@7=8GG&Eq+{Bk`julpPkk(=e4_^Z-o#Ctn2Bo)=PBz)-h)HDTu?5$HEazqR! zInt(e!zGMI;>9D!hnvu_6G#L&M&flQlCTTNkj;ydN3>&5%x}Jk6-^RpxOFOoCm3ZJ z4vIPnQ;|Mz62nrL*c2B~Cb<sW1+~YV)5^wHA7(KP+0zWpvR_tH#q9Xe)m71wSqm7E z;C#<vy6F2_!hRMoelno27-yC`Gk))z3<JX7;Z07ShtH1c6Vsytd<O5}$(n#U)gXx< z^HQEbYj3YAj)-kJ$;`NUxoRqBD{w@S2A%=^f_X2DzmiiB5F%DVqS$?U{6$>768HL9 z8t`cSnCy(Nsr}pYZC^Gjmx!SI-1T<gBl$i1%7;cHQ$?gQYVL*FgVaj7!ZQyrk%Cd4 za>{q{m`pjowNP19mg0>!oQr~s%}IgVEtQ&}l$xioC@Vh>mclIy&2bpfHTb&OxUi)` z;(0}3RYx8BdGeb>;?L%Ha)WrXSCETKKk=-Jh;(nyOmV}Q0^=;>JISn7CEEM(hn^*Q z$B}#gK5CH(_gNqNGDb$CX_}<4N&6X=VZwg1_hft-**dUuuq@0@J44P7PUW^zth%DH z+!mzfGGdSV=}NUyR8uqu^mRy0$j&nQm`dxqWR(%72{r>|K!itQbh+y6m+C01#36x^ z>)#zMeY(fAWKX^9k)%PytU`o{CNkad928+2DGAo=X*OSMJT@~9lkQH%enLDPT^+_w zNCQ#7m{j)-Y?Z9#T7OtWDwGsFC5hOF$aso*jWBi)OMZv|t3*RP*R{?b<d6}CcWb_4 zOih+iSCfv}niLNV*`|!T11sEgSsbFjlU7(=)mT5V?bvOS4UzF^SUro<PtwzRCp<R7 zifjEcTtr%uJ&x<Ml=l2mN<%AxbuenrUY;x@wJI_0`CL`h<5bvwh837Q`RATi7_ZMj zF?tG1!Vztx#YJ)f6W~N5Tk2rBqYXGpC-8b=+NPgz9GG>bg)a+MN>zUHf@zF~oIUX@ zbdGZHGL&P&VDJWf%d)gQXwx+ED1jtW$xb%gK6UxevR=Y=y0I0u@lgM)t`P$l=L5ZS zFVvS%HeBeuIu*dxY>FuGk&If2%P|xU_H(4LX6l>@8U)_q;t6V*Q-7_f`Z^48PnVo? zn8R<#(^rFa*oKCZX|tCEqE93~>_t%nZy+5N)E=<lBg`0e`e$kt;npDEH0KbSAe*H| z=H@=03QiHIA<!ckM!J8UOV_}8h573$50Rn1EPpOYX(*)fHux^23Sr+RibG~vfj+c3 zuO_TXRZ^$1OzvWAF38qSCr{ozw*NY1r}k0Slbdh!idJl(tsdMv`BZtEk&B+;e}n9} zb9kIMIVq@`9+)f9ywaW5)H8&f3KcT*c_cT(htoX9$$QxaPZzBLnS$tG;s0W1$r){$ zj<no(Il@>$^l*!w4P=)%@idmEl_cZC!_(er4<#MOU<#oeGA)pW=Oe)D5?8hkdmEtR z>k#lXk=;4DF*EZ)$m#xtZt`;XC2gvU>U%<)z`hX}>VLEcKeZx1C|fInvf9&siMg?Y zy_ykqW*u_RI()|pzR(Z^aZ9@bqI^q@+S}}JyduE65o5la)?sf_1TvmqF8wN&nK3eV zA9KI!+}1}I-bbh2$1e_LGY+AJ{Nt;aUzId}<Cl!n1!=Sok%`UOFYFPMz|7qUN3jGx zs&aDQKjd+)#o8^VZZ#wx_-2<z?)vOmut-g*^`lcN!*<Ek+uFjcSOH=QA()8erHFLi z?4B>Yp-Q;<3Yb%S%(Yh9hmb4D%5|6IAY4yQ9MlK+>oo92P<C|TtHmh3FS&2XBZ`a0 zAnhPZ$<87IR;i|xsfS~zQmh`M^09`_K1nKb(jH?Op3(!lOdfHR;lJ0B_B4Q$Mbv=Z zw&(6?%$+(>?hGH}3FJ-Rdk+&&g&oR*o@@l}j#zBpL(3yL9Y%|EqD%2nq<w`V?dY5j ziO4W#?zhY&v(!(#;!Sa4ADe!y;(}EO-4=na5kyB1WrC<?L0p<#Mla>^&tp>+4Kp$S zyp#K0dIJ>wz=e@L{$mvRy-h<ABY_EKWu1V2Nj(3y?SMSjdji11@Ia9;3WXJ%!DZ#Q zda_ytcF{j^dsQ%;!$lkwWR&zmA*@^!DtYh6CNMx=3dxPJNC(L<=NrdxT_KX}qlpan zt3Ttwm-s2+#=!&(O9gWE5lxvI?%0Oz<#d0!C{6^Q9p%)PvR^&WR!7i+ZiyPy6UvT$ zZ4GlEWa|cZeW(6_SaM+k`6)JQ>B8Z{PgUy3V|A&V`mU_MK!n2XxLV^J_k_huF>pjO zRuTeqGueY2CUnwb-e(9FEqhZPK(Iki_UAP7@s}?4M%#`qzuQo8$8UmKR5kk*qDPZ+ z5QE9RSME|9sy=#lm-mU^f=6`{9_hCw7z_nRDp|kqrx?rK7_>w=5b5_^r+iXg1A1L= zIzaQwcYwR#MW~{-0{XZQ?$<A^#Z0k}OS@fRvl>pSFD`|8;2<HdNHu&>q>SV>U6l<E z$6*D7%QD&F2UP29T(G=E0u+Jam?(xkd=b-N>$;?mf7ApTt8j=9_M9Uxl0_h|JD2c7 z&4Ow{D;Lfa@twCPTFD#1tRa?0i-;ZL3}s_%b;sFh6AlyO2$P7MvJLFi_V5$VTCHR2 zhDn(qQs0)iUl-%)*<hFZ2Z2pQgN@X1spXj?q8DkGuLr-SYkpzn$0i)<NDuI}wIGV* zNrZ#YZmb!+#3~W3{^2AZ=R3+I@uf1m=V!jy_`O9Z>?mwHep~N#*IR^&$g<e_tHP2< zyugmfY&bCFl({-MQ+<n%vHHSh#PPLKwwq8Au6_)+9P7_Gd5Wd)O8|ZtpK1!ohyU*j zF+NP!GQorE__LG3<g^v^y>@Xv&&zR=d3SY^FWBX~X}GOC7WP!E4d8Ep8{82cM~55N zGWGhPYfl_NQM3a2b{#3K5n+iOYU*TK1acU^(?|sspkL3VR6Z|@AmCa?r>8%~z&LD- z56+&q9j7O{9+87a$iz*~WZbZibRON^p}^IAu1F}fSeR2OZW47gt@w10^Xd?;j8p=8 z&xf#8=@$DTn&iRNa(uQS+*&z_BY!7!sDLgh%XRaPYs8HoKX~L(uXwbK5i^#|A}NGq zppurRi>)uLgQEEAYjPoBr$Hf|nL2@n3|(!rphr4dm94_a6d~Nj<)j6!wM~F(?5wpR zShl+<r_PBIQ8y{5_PLg$<v=<st0;xiaEX4PzpW+{c`ECNY3jFrn!c(jQfp6sJYSG< zT`!pKa|){}GyS&OVI|}0n-a<;wJ^{xxj9*3`qsC?C0!7fH`(Gi<Xa+?zV&SUgP_bs zt<^s(1?E*O|7}ko2U-Dx*<^&Pr?-SsK;_!AG))Cryl<`SN9?8I{b_&#^&<AqP{&sX z7d9Y43ON3~1jyS_E@9mnnbivpxZ?A#{8;r11v^nsnOlo#RMl$lVL?24po4hV5K+88 zUz<bD=1tYpot(NWWOg<Yo%a9`<Rj|=F4ph2ONmW@M>8^i;MT`G(Z+Dye&&d9R;`vg z$3@+k&hr@6^_+ZBj9rGj@&Q($ZS&xJ-fczgD%E1^Mk@jT!r-EEvAsnmXA%A^qDPBz zM4T`4gj+JG3msal>j2Rs4tX3wyH(+hU`bux>f-wuPJ2#w#CjuD*F?T{JCOA{9QK*{ z0CX77D+u5~G5`l^<M}xTVACu!|4L`~DpsOC4a{07F{_#|6KrxeXV=bqjE?a?rK=aR z=5w-$F5B#<dyW_)4n|eTu8rf$$$0n`n?R=RMz^WsT$y*=VF<%`<`?>)A(^lAqQQaf zr$sYzh}=BzUA3Y^v2&qPC$D{(hKcG!&F2SXm|FS4d1j{wB>3B69EhGGn_cfl6KnnB z#gms4&X|kt5btGnH4=kqs*mHvrS5`Va=x~Z<p@^`aGu|aCJUM}tJkk}Dgt>+3MxF$ z8%M>QdXwJca%}Mu#gC$c%{#z>%*NokEwez$d~W0mG_?cUH!K>}@^$V74n<^Jr-uES zVg%CLlXv+_$|Mim{;T;0?}!_YJG8Y5yCv>;S07v*oJGy%+vw}HAC5QT%P~D_f0i@6 zc=D_E4rcL1mk*l)x`}8l&+l|!{i2v^J+lyq$+m3#t+)Retc4o0b&BzCezzB6d7He~ z3~&1kH+@6U2Zk7!aTqXVbjV|tJ_lCZ+OY4*GF};;Ez(~tC37N}dmuQQ+xxhUa5aC+ zF#MEq3GVPPSa(PLtbX|UDXnh(Omi!*6?LZS^p)(t?E1`uqLZEWMMytBWoYm8^;rTT z`h<Xh6W_w}f}&A<Z-l*W_@jm#V?|Z;z4E1eGA93&y<}!+C_dDIM=px}o0&fHX5Ey` z;C5hO{STm)onROy@;Vm;={rB&r=pplncw%e|0T;H|B+?i_Jp}c0HRBd9teo}f6ai# zM&?fX23G&py8mUlw0wdYY^fZ>HvpC^#mMi`&k&wo3mVqzhO!yCf}=V9H;eyXPeTU) z|D?mcd$%4e&JWj?EShX@pD!|0S6X@|vm0z}dOXKW_<de(hge}k^q=oUSM=Q+Jq@|} z@U^u<_U^7g(F=zYWe2W5KYg6O=1S!%t{<IK)14pfOQV0)VUdwT728JFS-&o?aiH<| z@0cDmF=X!D=RJ4*$`D7yXhUklO4p_WIoc-oN757un^DVjC<;zfGU0ru)g#(7V)}}v zikAk-LLVPY(nltTfVC(0*SbrB%p=n)L!J=NI0(Xd?idZiKkN^(j2FY7|At5Z0<Qn_ zI;S9LFp4EDb-TAxGks(*xn@EtN@yd{uyM^epp^T_unP3&NA0KtmD)1y$TyDnKaOqm z{<i2*KZ)K+$n7Lj!<><ldM6=)v$OCcCC$NOh4cm+P-)cD*<@Y42COZ6nX+rBy926S zDpYQaVyCm<uY78P)}t?-7{J`HpKETizBw0GAY-Va0OvR6e<g3mACf+}Jdz!vF%d>L zzP(%$Qtey7Wq9!^<o@aCs~<NciS)9Y{v1Ry#i>>kKwS&!;(p%6qX<Np#?b+{`J-N& zT1JenG2w;AWBgNjKl~~UrU}V{9>spPpr`d<!(F}%(-UN(2A(xKb{yLdp!s$w=<aZa zu4>$q>D=CNChww{CpbUM>n0}i#at#yd)aN0jo$(dJ<mEw;Jt|E5V8^T$#D5eIrUyC zviky7W035hDBk0`(4lI_q@ZErU{lJ~7A)y6v7qD7IJ-6u>k$S#+LK;KtDWpVCtcqk z3Qfq-9FnjT*AGVy+3YTS8Tp@UTF#!1Tnm`5Poy?e3rP~h<5EY(NePQ2euJ-94IMCH zKxb%sX4+R#0RH&;6CHALW0<!357X!^dr2INRgYz>5_ZubbP(LBf|h#+E>LH!@3U%s zFs#W7Ig0TO(8qk>V|PIp5fNLGSxkxyP%iF8tw^N%jJ{?n?&=Xzl4+7m6@JbX2D9C- z!Vn7`$B#&q#!D8Ij?J{F9dE!h2OPf@bHQnBm*0ZaMuWxTz~XQm%KSiWQg;~{$XEI= zyB2rhq>3Cc&shhmF2rGwD2=c*m6#;OY;APBM}*0*H!awV+I!tK5Tygm)X;G-2Ne*d z$P-O!H>LIo)9dl;Hc;LCe8uf!JxU`ilIo#rBglv@avC%aMGtB>H)>KGNdCmIc`j4R z)=#`>44-JyY1WO_|Du4hS|@FVJkd_!dAy1g^q;(*qfsYzPP@_m;YJ6Cm$5F1V_ep6 z6UQbKP!ahQaB3M3if*pe{fqOp=f1C3R&O_@ycJ@Pf1Q7#)xSy?;r^wLF@@uZGhPn| zkuB_WPJiW&6Ld(*!ep1-F1F`AoHVehr}|qX)KH>qfGl?3q6NSgo4fSg8~4fA78(?) z$P@wbtQ8!JN9n5vbH?rQk6)x#;wQ}TkNzh3y{i@gp|#Q2jEqo;P!6Y2RNPXP^4-Cl zbf)mAw3)D{&{`q!ni59&^q#6?VJ6@ds%CY74F4fCmSceZCJ1kH*Y^UHo4eQd-~+$4 zd-#gi$s^kI?VRo{=qtJ}xnP|K{kMWDN+CW<z_$OyhQeg|!nxqmjRm(JFP7^=6eZpq zx9A;1{=J7a8f0fEeP7?7wy_PRxa@}D(Fo6CMUFC3BaUoAoX3mzr6*Fa^Ir<p`h}we z55l`5mR!^J3`$C7?_GkutfB@T$pgea`<p7t<R^aq<Mj#*sxR)l(TTZZC(>sq;^5o$ z*w%_@xZHV-Z3xq^G=fjaTX%x^K@JF${bImo+e`P7)y9**vy1%JRBeQl=0J;V6)}Wn zx9RM3g6{hHgQ$t^9wgha^*=GBe1p+VG^q~>IT^CY7R)5musE(ovM+GgRRac&AZrJ` z^znRMSv=!dDN`nST^-+kTFl~^Ya9RUXJQs~l-toiK*X+ap2khejw8D^b=+Vh*Pz{4 z$D>aYC%zqZIGF3s`)PvX={E#MJ<lc>OPdJV(HuR=X7Jn;kXsfcqKJFK;}kn36VVhn zTw6`sC~SO6Hb}-mDj>%O`9y7q({)-@eHn*c4wuW~MbbH}2O1cnlX)|#r~c!}2?Tc$ zqjYOFfXHxRtT!Kj=iI##fJN=HYi@a3BWs3H3%h3LPu+622vXWi&`Uzg=FR*r{7`bo ztvj1lIq$~$^L!|-NFl#<wp*Sv?=!yNk+HdjVO*jK&<eIl-{DVKdO=_1KN{*$GLANQ zvh~7BuEAAWAG^DL<f5GeAZb9MH(~>xEwu&)(GcEV7G{ZlXyb4_#y8%|4L`E5fXcVK z@BLIhYaf1!iQ0^z72cQ7YS=Jii{2Rwct_+49a3?NsQXcbs&OsQ-?jg=aqBH^ndPV4 zg(Vi3<(&1#sZb9BB;vF<%ja;$Xg*Uji{-P#lOUKP))M>xS?`E8c#_eck{|eKhJp8X zq!jo|j5x`UnoeVMyI*m>8$-2`Xk=z9;=cQNo~@{r28G^U%R*FX`F@05<Z|YqL|K+b zpcL(n!+p-cjL7QWv8jS~vEH9Qyy5&!wp88(M=w3{1ZA+?ZP!7Hi@UMI)cBOm^<Rp0 z)KVj$ogtsln!2&_BNK>AihXka;4JWQB}lAVRjYN!Q@ds02?(zZWh(xj!HV%=Uhv5c zHyEp^<jZ%|H&d@}J63>3WGSuNuYe#Dud-t?lL>r1Wme*?Qs3fdY`$nbNb5TJ_5E4_ zWQ`PL>E0#y%%D_&8=N;v(E#=%`}ctuJ!VUp;Keo3QoQ&Oa|zv~OMw@7vmN$mXQh-} z3WBW732>3vz~t&Zp%{vX0uRggooClXIIPj?5#ZigWKxib74@pHIAl*6n$!!>MKBL? zcp@rrZ{=Y|#ppc5HUAK8BTG}?MLq1&q^OERPra-Z?+a4M(8yntgW_(uCc4w+?ohA{ z_uC>e-A4yvJR>XMI5Vn>s+axT>1f}tE$Wg(^kMK8H2|HV(;c55MqrH~TqF06S?;RG zA&%ZMNST*T6^7v2@&Y-`P-Z|(E)%XIVvPl@xr`-*)HCqLe8lXm6w5=KM8PR9q_TQl z?>Pk9wM-Gr9U(s+a6|kQsKw4&_iI&$nKDB`q#$J-vgQ@{P=rj-YBF?WoXB}8e`74f z;kt}6=I>;4YM(RuWmHLwc$}UbVNaiSsZP*2sv+;`M{DhT!^KSqXvrd<lD)aAB7^{% z`!fwB@3gDk?DImQbb>DYbK)g*7|~Vtre5ye#|zCAXayW*@)2z7UHbJ2=y&`@DYVeS zU6<ipQ5UM$Mgc}N3)q68w664>N544nDOoVsUs!!_R0IGuM$}@+iV2@c)eiW&4d&TM zlBnuk{D(K1wPDH{E}91mzp3`i6=S7%sg>(v=cS#^pIiHPQQ)w~1MCMl101>3fyg1Y zQe5HEMNm^Ng0|Mh^t%Y-g^Od>hU(uZwnt!VcCbmJtf3>2tFe**$J4F?4Hcc*F`7=K zGtWM9t_D}TrX|DV2wqa^QS~yr;!GZ!y5(?t0jEoJfDw_R-wa{gE8s=2Q<t~9=>OhM zBROKVmx^!txi&u_?oA@>I?d%bKMJ2m^Fxiyt|(Cm59s)t1+CbOoW=C@DKh<Khu-mX zk;nnlnH=1e_lDpFHXdkk!zenMmk1QujP^w8Ew5JT(3&ik!|)3n6qJV7&lPb#m1MWQ zrdrRX`jD8bWV#@EA?#&yx^Top{{B6n(I$sht$+)=iKKm}2=;~?AEyW@3HD@s!f!!p z<%j2$ooNW*9gA^1dfIHYy>EY^Xp{SUXEbTY_kDO*Sp>)v%~YRGm!}$YHOaZkygI|G z4Itg#b6V_RWw?~W=5f*0bqNU}3LlFzh2{HaC1s)0#_}GwOzv$r_tatr4@_%0@%tb7 zSs>?K2-c+vOPguKX}i}U>@=4a9-~CD(>cQ+ie;vJ@AP;Z%$NwK_^rc=I;}OuGColn z=A|uv4skv~BVP9tD)D?Mm#f*^+=Q{ENAfsh3MVXqU%~a&6?4A&!HiP<c?FJ80U2T6 z2Ay68TZfv9ej4oeLV`zjhcK3oNheJx$B%>$NZKU(h(}yl{xP~EGTl+BeGk8~$BR}# zMrv(%JwI!^i0nj=f6hO+FcIl+?s{5Dr<<pbBN8B`84EHKxh4PUT;_6*bxKM9bII22 zD;c=TwoRgU0_E;%M5N7gxSF1x4^Ky1OJ|wb)@)wYK<RXh)GQX<1FgNanrq)gq=Kmf zx>$Ecr+z9au%1URY6Ze94+Y@Hc53@X2kQNRE<53ljiU^#3DRGIeKu-xhMmYud_n&w z7ZqT^g7^ct2m=rR0?-IZSl>xs=`Zp)(lOF=(ldNFcGI`E1N`{?{|o@ljs7eAJ9jt- zgnw|dM3Yrnc{h7NpabH}KPHMM{awWT{rLe`v5?V5*pfHd7&^Iks!2D*H&8NQGMk&} zcdAu97seOZr@zls`?kF*csYJ-N!mXgV0`~RE$oCm!tZN`K61QrTzxPw*6?)jJaI*W zR8>{Q7k$vt(J{6KkpRg4R`>`1W`9wCvp<S|vOh(OzuBKtl~G7fjWqkXgusIA;#G7v zZ}fb9ZFwz)i)NYFbIZbLx#vXKcj5NrCi%z4x`_l?VkBmn>c}18s@sLp%8B*j=zoP+ zN&NO`QpDUp*<Xow3?Tda0%U&*|H=MP0NG#5H|D<Yvf*Ls){d;)BbAof6pLM(N^R-G z)uF?f9aCtEPm?9X!U1n}qs7&Am7LMxX3v&6r_x~EA}ncx&m&T^i5!X<On`STgMf5! z@g*fs!DS5@kkuqCwb%G$*>6?am&Jb9tFbx+SNl|yEiB-1v6FYdbjd%sI2h(*?Yi%N z`R6p<;z?4Qi49Wke|uk+S1FzXSK!ZHobA4t`zQO`KT&%RM`HQC#r`4F?YSAxf4fy9 z5?RqMmBiStCXxfK$$r)~%dGlPResE+=*fF@hvUxwJ%g(#d$i8XAWOR38SN&wXYeL+ zrK4v{@a6>0xc#4Y&m7S1-Ho27o4lf5OxqOFD@jjv^G+2pmdw?U-Tjs^b)iG|IDFMT zH?Ps(mW55lQ10l@UECKQ9ZtqEccwnOmC?$CNi$9t9!WHaGm!Gp?BVYS@M4Eyf&geR z)()-yn4vA~9&AD1h?8ck!K`V=x<wK4KN|fpRbs|O=+Mk)%fwbx%eN{}R8mC>U5ivV zO6Y=PPE)k_YfaFd^ydyFCs}MxMA66-_3)A0*<s(C1p^+-f!wh}Ib&ed)riR|sCV}B zL?Cc%D4BK2)@_EI7`c07d?>Hz>&-h;!yT~10>rny<mqjcEW+I)@3T)_{8hKaHI4|O z8DXXr!wSOP%6t`F*D3p}lV*R8#@u3AH<Re-+lsAX8$l-fLFS>;cvnD|V4&D{feWr0 zw@z`BppzvEqo)mooOdrV0Vb*>RFVM?k{fG1deLM^`8ozS)%Q`UPrcvtB7ea)_-PL5 z%u!zF>BmMfrVTH}Aa{K$iD{FG=dzw@4&FRT6oh`^{!zwL^8=6D5t}#ic}t1u;Yv*{ zt1KNqP}yi*scrLT)CzN1nRQ@76`nG~%n{(Xd>>s{-UQHk4N$05+6h~Fd>F1tVBbMJ zVL5r%e3K+2r?zm@4n~GMWevNHkU{F%;tmrArjPzf{+I%LcC$afVHk{s{;8%B@*`tJ zE146`($mP2S}d;LFng>|Bvn%}ZKmjX1DbI$14CA%t!VUQ@+#WIPgqjCbq|)(A%d7e z#y7KWSa#;MODSag{j+1cTSo_Vy`Q|%emM>h{LTCg{?3Lg`O(;qL|C{HJ$2CBvctG! zgEE0{LIPnw0{WInLrNUboGuQrvqch8i}Qz9t&kiqIUg9#8|rNqVtlsk88r9-7B%8T zI=3waH^|#zUO>W(x-~aT&8bVJ(-xA--Tjz{;Ekj-gGt4UyXQUId21-Ai3PI^T5qkG zUTHZP^&spdzX+6Kl(!KE05n9s(WC|&(;M8!=iWYw#<?^<jMo-_uK`wdyBhlScQI8V zbpsBS<WJ{Z9#RKxjsz!{WCal6mu^cy{Zyo63za}TS1*5H%n=PAVvY<S9r^ReUi=%b z*OVMWraW76-Jzx;zvP_L2u0P;mV)M=%^qnqf-KD~5UBdxsu2q4oNbh|5=FWn%yg;3 zr{u3`Np+c;_RRhuB7+{zi|pE5ZmYqCkXWa0TF^3^vLHO*v1aGit)ccSVnM0<^ScV4 z8Y-;1R1NGcb4@74bJ&2avu{#r9YEGLl8Us;Quddw2WGYX+{2FM@aLz`fQ~$3=@rdH z%E(H>LGbo@$tsl?C_APkqVJ0<mOhHZQVPKdgw<xjgEzM`3z{cHfWsDo1A!~xNN6is z$f92b;aNN`+%n5UEj>rQE{(l<;HjG6f!LCbhgWDk_{uiOgrIoRznaka5-<(T^b?^4 zpMp1eN(kU8IXK!59n&RT!)3P5==HS@=&U*A#9`OPkhFkA#Q045f!kjz4TD5u#$(!K zjT=}{SU7aC7Ef>X{iWz3Yh>UdP}S;H@)KCnAHx-I->jR8Xc**00AY!a?D=px);D`= zoLG77hwA4c-Dat~LP?>hV-z)h)GQKgzwveT+SR-q;vl_`>kp@Fp1hSh%Az`M1~=18 zfsHPhQ!T@QeCe4v&e+R!c$^P<LPD>&lYMEscw<BD;HmK>tYB!>v_@c|HjZbv(cN+E zN)T+L>4~WuN+!-**Z;(RdjHCv!x&$P193lmB!v^dc6^iue2KAS<L)>*|6#R4r*3&% z_c=V6@L4be+Io4GWsj!m8<fW<2-0+GO&l0|4Xoe@W(DMYbA;54VGBb2K1aj8Q(NB3 zSr+KX7?twv(6@-cu4g6zxu#e@XETF=h<l+)!drQtpiJ<34T@=;=rWV}AJgM_;hA2V zTtB9X0?7R)Zl_366a;7G4m7Iq3rVZ`Z*n;iuuEnrxw%@}Edi>>Znv%d-`sDF*53lW zr{6id8k<}s@3PbhU5qdKcY?jEk{Kvp3>TNB+`{ck>pA%gZd<)hVPtvV3$xoyAWpj| z6=Q1JIubzih()|z9%lR%JrJCWxIjO%2^CB6kE@9H#c(?-k*g6(VIriEsi?@jrRh%# z)AMWD{6aL1Y)ySx?BF)Xr<ZQLe+Q&^;*mneO8%N$68NinV%*)a0IG+8m||0w0ib%w zx?EPRblLOlA+LS|R8Pjxu(AicRcRGd?;C6+U#}!mg&648v@3Sl=xI73(1h{(Ke?X< zLI*AK9X6NX_;qT)H)Rxc)4#bN=+6Aa?5K2@99Dq=KYC9}c?k8ZJS4SHYUsNZhzW`- zyqTft7kJIZzOw!>VsPn_#8&8PnTi$CS$BDvn(Cv}N1pE{4L^K&f2L~+)PGXH5kTq( z$}dE|{lm$bZXoSqqgj}u)g3lbSeo_^3;u`3Fk!2Qrh$gY-`3Bv@NesPa<PC|_Ne9- zlr;gS-T&}iG(;)xHI)it`8PUys(?xu!0{|2hX$O}_~Y{yo-9BV704Z9;!Q6dzI%KN zn%3~?$3xQv4f%7vpE(e-pof`A7uveS2WGksHCE9?<$ATdY32IXOM*}=%KPVwcksd7 zIdA&iwXRxrcQ{exFt1F-Tf`nzY9JVkMDJ8iAbFVq=3L+^v^9fmSiZW$!B_($chxm! zNr<%BZSs_>%&~v*Z|avJo;J!G#r8M#^W^(a>L>G0>W6|&@^9(~c{<+JjA10ICY8`m z14M3M=Bq_y%bF_|X#TN<v!6KHz_+KvJcH_K`HPMpcai<)JwRC{io%O&1MemFrYJl* z1NA{!RI1I0S^Rl^&ek;+s)c!7%!9$QF8}$I>YWEa1#mpP^+IqMpS-5juC^~P5kvcs zRE0dIM0sSHC*WfvW54J-(QRrxwrB6Q?t(F$`v<_Q$P~*x$Z+9$)hl}cBY6fyJ1aWX z^V-=cnakb*k_S3Ws~qF6<Pif8{VRDi0g|VqiS_nz3j!S=d3<z>KrgfL5gAreKi&S3 zJlXl0LdPQ>e<csQ8Vjp3>pM}CDqsHcb{@;){&6uNtnr&sX8k2o^D247a}AI@PQh~@ zRshN4iHw)1cICy<pHzN1%`%lVh_hAsTycsL?&x%5UVcLPKwP+!Wcmhupnu2u^4IYs zLG(~r!Jg4^A4gvc{P4UP+m7j8JX-;L0ne|}cRZPlcXltx{kQZx{#*L3dVbOniSs*k zfHk`}OdKL6uiflF?|mYN3OkNU^(3X9=eRY0;X>Kjy<eUasE-9tvsOV!J=l(XxTts& z2&IJR7bKJUvfYQi-hY@bd9N0&yxuC`i>Hi-ng1L5jsFw+d2xtOi2oD%<vvvX4gF01 z3H`ng-kHwu@wtEg`FH}@DVEa=s_OgS|45!ZM0O>B<S|k{oGDmaQT;x2;fQeP_TQyn zPGkXsOgS>trab}uXzJiPJD~LQ-CE&MY#v+N`JXUj&)8d73V@kc0L(D_uVKc*(bmT9 zKRYJRfA0icDni~#n9|#8>giq1!_MN{P4<B)WPiD#YKAN0PKY^d01gGMX^S@}@EP3s zSz6W<=BRX3Y%Ps1w9s#7>V7i$j&--cAF*b9UB8^G9@Aov+{hASj@%3#23tPcId~zD zeD8@?O9ZT#Vh=JhGRCGLP>NP=4xj98*oQ*v>NJX7ey!1_^JWoSKi-eAVDJR?$QI-1 za}Mko-gwg0%;YO2sU*5swIqe5`f^8Bwl)Pl2NZFx{9J8VuO7}3rX|l5OzvT%i)a}A zEdltZEY-goMl`KX%I-yHkSk2PV&J@d$Z>%Fsf*q(C82*1JxUsD?ia55j;&9AJuwrM zpl%Ms*x@Ii!V(j%*<A+B7_ANS$mpU8nZCsg*f23#go-R{4Ai5qQuJTS@+D<JKby=M zArJ5yfP@aFt(F#on2<wW@7w8WNo=@dgOd0cDNT&KxVP`GY|4|UTsvsrv9dUq{VXx% zzSBy3K6}zQx%fRU%<Nb4&xUE#^+c&pkeCS&_qqN|lQ@SH`!LJzdu=XI)-F~lcW@f~ z48mVM{AlSS-{H3?A$U2Wm~*IBrjCj~<noxVtR8BZtw(&-I0>E{)QNog6R|_DRHbMY zjvEP{TsCf@aHx#RRV@+fZvw`PbD8=gfH8xqx_TW|HSVZ`Dw+K`jJq@V5;Q;?BOj`A z4)VjyOlSgfjikv)v80vK%)HJOLfeMMAUic?y*aUjldaNCKd9t$C`O0JSyndV>Cv`A z#O+>3uU%;^dF&7ExYa%yVthKYJDk%oYAbE<&-#)QF!m!_jU|!z&C$stE2@?14{=jV zY~-_5KNGd3((ixNTuAhHS0dSWrlB~%jRJC8-i_EGG}mbDEeBwbD%KLOxZ;a6WXh|i zl-u^G-1(~)v~&W$IC%L!Dfu{~_gX@x%!e?I#d^v)(&q*jQfE?Gq8g%s;-bpXD#FFB zOiF>8=Pd@@+8!p{!K-bioK<=)YTsre!D!)k$Ba^^+Kh3MptS3YRM;6tfeKS=RnbjB zg6O&f|Ex-wH=}akj7O@2&F<C@HMQElN?HFvsQiu7*IXWwRh)=4n@Ci>YZ3{GocXBX zcs{gYae!5?@@Z1Lu;ki0vBM6_4hia@vfIy5N~_9F=J&&N?Rj~OrP_t%4*T05Y|V>C z^aN{v(KLg}y2e^1RFR<uSQQU+Jkfg_>g<rGqItsaUa-kY;)-ZqI7m7pv?a~qIw~FN z`te2qrgNt^9dmy?<w4NX)Z3EDhJ)W_Mq+ahj%7FznrC2a1OzhTIooSypdQ`D6?0|a zPCol=j`fIh6Dsw=KS7?JDXfGd-|Sqqv4r(d72VOj7om&iOo`c&wthCOL=@<08s4}- z@2*X2=|@n}O0Mx@@lm(D89l^#;m41WI9${AfmT~DKL>KtLrj5d%WteVO{f+%{=%5I zTaPRoZ=V*5^s8TN8p~;*xg$=;gOrICDTe5u2W2d?{qcG{R|+TMx<BhJa1sxBZ};4W z<GBuWx1#tI)YEHhru19r6qDtmNKt2$oY6UWaMg<Fc2mK{_|~x~W3oI$15Zi}f7%;A z<DPo5E#>Q*q$4(nuQj!DdKRK{8caQp-9>OaQ7p6!Mp&(WP+gU!YaQ`1xJLxCw{MkX z{2ci(un$QfJK#Cms9yBr7S_TG$ksiMwdR9!ia*F(Ptml{DymqMk=@?PmY5X-9AO?B zyLz`*Q}{$F=W5b6j(A%wrebZbE;~4a2*_LEFu+0eMm*o+fM;75){Zwv6UVZ;U<zct zW7~5fxXgl{W!p9PTfdDA`9fA9k1DA+@b)E0u)LvBPRd(c5OFf-j1HL5sH^3nD5Gn} zJ_hgR;sSRg9Y#*)^JBL)4*J=TG1;})*&2a=#Irf;lhHO10#FAIdE`eWJK0?WY*3{i zzbo{)fkDJk>BpW!nsL4qE<5lA4Kb4_E>JQxOX0>h!@^noKbuHtB-m^rVfkm!=+aQJ zv1y=*aOO#&-EMbq6^Zd?w1GjbAR(mGX#qYASj6C1?OwV3h5n9=m~cJleFky8ehgvE zI%+(<<G)<|LSJF4a41s;o1$TP&OX|83N_HcCf_opQ!r~zdqOcwrpK&jyXJ2Zcmz-r zEk-I=PHHcFPywT++PW6~>*MhwA#fWMz^IAvO44gOBs%2~8VYzn$yWq1bXL}!$N(&I zW>1^N9u}9ZSX;)FMCz$YQSX2|_H_fIYSk&_otGA@v(-|sVCbhmrsOCh*Wa-1JG;+& z!=Ln&vQdxr+mw~vpHqQsL%ivRN^+)<c=|%E%wZ&+bPr(ut0GtMkg;ioUU(7tQCt3h z{Y}xOw%9Q?N~xqXZr0sNjEmdC6$nTW0<v`{6urXIG8z({ZiYbVE_DLA9wY|D6#|wL zPmne+x)J^2k=ZN@SmqC_Y#<Ljo(8|Hp!W{)5NRo8J?(#J2T|c#I13?M-L=RlDL|?{ zEtd^lflJni<a;~GFp*QA5ox`E<8Oy7jBAwpH(t_oxT^4AyKU?s=#oxS;RSex_z(?3 zgQ8EKxjyJZ0W~)cR1bnnnEX#>;T#IGZK=TQO&n$-?u2z!=fyLEw7;lhl<2+LR`I~_ z=VM0eEt@O?ttQeWl0K-&7;t{Kh!T+{weIMgn@Zf!ZqZyID`brsmEiwhHcje2aDKm* z=x<a9DaLw-RxY0nXol7JabMJ`KZ{@Nh57He>6;hF*=Xfaa0~iTx;!6=s!EiR`jXuz z?Dk!*;FAg9(5=*kAC!4-FV@r6gz6riu@HRyl?xEV{kJqfY==2a;=k)Aw8<6$I8+jp z&_vXP?)F_b1?fDNRYUle(HIk7hF$D12>|Z!I`sWpwuy+N?-TO4IDQvx?1be~^8l1> ztpP*~{D6lAt?SHvwZRMsw&$w8`L9ewH^Ndi%HtRUT`hcn1=4}8gQlA`?{4~Gj}v7Z zRD#Yip7LNq)mVV<qE2~)YxOO9j}H{8c(~rB<*_%2;F>NA7H&&eQEC90ht}u2vay9b z7`1T$qS7k^!YwltLq@CP4;1c>ltgKiD(Ij0jF7FSh%H1e5v&)G_L}Cj?B&xcJ?8{Z z(4}4F45M_+N*OHPom9#6$UDAIh<MMZ%-7JuC9DXh%{3XwcqF%ol$GA#(gOv$6Nukb zZ6&1)|CVj8fzAwsbeCPvXCzDTFi*92CgG~~Tb@mPXod7968@}hA(HEaG+~}{%uBfN zU@4B^boH`xB`|=eDVG_!GG8)=4uK%kSl<_W3EPl58KKu!Dqx_wrvt!r3?A$&wy-vr zW#n|GvK`ndrl*>pC>HPZJQn*tcZ9TDtJxOQzUY^o$?aN@zFmA5XS4xY*zJ$HX^A7P z^5L!o?IPGuw?ns~6W_S#I+WuM8brs3=|r^5Vwh(^CF8-0hT0m~jXsDuaZ)^;-QZyz z?3oQ~^K_)o3lACX`IQ88j2pz_S~G>V1BtF!atZB6&R9yII;#0ZIp14b{rJj3c3+9m zx-!WuvW;yli2!jCjrhTL4lKdzSy&CU7xfo-tbqbhQtJr0h05GVOsR?L`Buq%u4hA{ z$dv~&R;%USOh)|v0#C4-yug^_hJCRYgz6p|jP`Hl>F;7<KcFbub#CqJ2VrW87L-SD zJi58N5j~>IG;5lS1eId@^&vPclkD2Qom~SA&NY&)&Z1>$^~1On^-c;tAy|-BISPPz z)W!ZgZ2O0Kc)tC0I6dFz@m*zI$r;?PJbVGnGqcAd(h;&8>udum2wc-*#-j3<c@+5s zEso`|J#SFTWYw8>6_w$N7Ro;NT`t`Z(Dc^(PkfpM$mV#%A0;YX`MmQals!$;(E|o> zw*N8@W2mFk3lExGq6gCa)p!GM=x6OQ>+4_UIfUTPsDxY8beYE4O9(mIPw2$+sadLG zfAJF55ZcJwiZPq`jHF~XKflX)34)c?n~CFu`-Jknc7a(XH?B}7NFKZCzZv)tfw!OL zBk7{nuk>{&uysf~I+^LaN!V1-xhbM0t%gWF+m7*cR?#L1ObHQ?r>XS@%$pErWMe8e za*HUmU!XxPP_dXUh@pADw>;h2Qg;<y(NL77FZS$xXaYNW!|lWgBvKshNGdmZ_w7bD z#g3GWP*7BjZgAd^d@sL8MXns_^<oWa?Pl8-B|9(Yhz6Ki-G+0(yveN>*A{Yi-pFpG zxmB+KVK^xOFmHmvFp4s`ut`4x{%pUBFK(nT{l67XFQn?qJb-%U>Hc5daIiJ7FgA43 zH3Ima|G_>TUeNkFr<1IgXqc%TETD}%<G5O(sF-?~u?94C5r$aeHrSZm+#NJyF7w58 z?!8+>%LgqL-jcV!rzTb~*!i`6r@Px<j?g+jKO0n4F=)BM4+wU8!VV@fBv)?wp6}gp zeLt-S^EcPeL~v_X&Tn2n>gFe&k2*M7D)s|c)#wztr>)SXcT)8>?xPFD>D|D4L=%!~ z0dX4&0DZ2e3;v?d<Dd;S662Q(zPi0F)D4-WV|8@xag%nY7j9ju9klxAa3ke3Ndk@a z!a5UF0!awRalF<|QCJ?CK^uDH9sLMa%k@_$qKOtXPK_|RyA;6V?7BiShxqc4k(w0I z4c;T0Y|ZkJU%r%650bj@atyCZ6NR;#^0AT|EFwf!HiZ~Z*+~Tr#PY>g{6!x(+yMdu zkdnbPwK4$u3`1VuUaM(IaJwP@H~Jj9ZZ`d_+&!#6k~}$U#?H#Nooi#gxwvYY&A6!w zF9wnY{X%%J{JU%V5Bju-0?-Fd?8B|H@0G1U<X`le{0u_k_}$ggNxs8vGZyRhB+t^b zOpP`?>VVayr?RrIev$^|O>r+}Vo);T<uP$(TE0y6C>$e#Qt?tHR)wYNjuxD!rCpk@ zlLQX_xxXIsX*3572S=&Op_?eF9$@(XU^U~{reaBQk3v!&un|08K@rlc04sJBjwCt7 zY&78fCBg4ocaUP+*i+TNJIDQQR9z33@XsR-6I{g6Cb#hGSznH7`NJkV+31^qM;zoa zMCy~%rq;CRwZG&?VBk)72mO%MmdvO*D7f`yPOPS*M={S*uoPgCBK(mB<~2XPJm5^~ z(+gAwU|3ZaGPG(-f2(YVj}qmQa;h1?e_4qHK|e%py*>X5v3GG9YhCslSnS`6mh-jh z)-P)aK45&4r~(7x0VQUD_$&qcCZa+;fgaqN@*^%>VQC_B6w2H&59@s)FN)-{P=(B+ zml=G3t=xpBZIVv&4jDa{VRbtkPLql*mDXJUgy1?#PuqXbLGpJYYAbd%I|l*r6&GwV zrEsLaY6>BEl?oi>H~}YIx<8o@ux(>|HP<=xKxUr%Nj+gBA$jKI5|jdq6<q{~PZsTz z8?vf^p(+_Lga%$6P;r@3TAx)M=7DiRxZgW0c0)25E~F83k&mJC&^KAfMN_iIEe=p1 zF7SJL3<aZHA!4>PS)7@)!8>zqV<;7+eF?~Mn$5axjXfI7->J5Abq~o_inmEpj7?nO zC4^xSrj!+TCoK7{iZ?8sGfC4y!y~)OX)K6HY)E^~S`G#oq}ELZ&<ey)+_BR#JK@DU z;mEaeG^j}oABPCwK9HdNj*RBEUrn)MB#!T^smB~gj>LUlM(f;v4A=}&Gx{N)!7gto zf(RoS%{;ZSAPI()vPB7+1I+KU!<3EL=kAjneunWH&2Rq#;@QYY6O+<YAHN*E7H{Jv zukgNg7bKS*?Q8gk(AsQ{@`fLz$$|qrU~RiXUn5~o_Px-akyu%sUCshY?x>yZ1;)iv z=jQ?_=X2S&PKvin@ve`%OPP7zRQnu>7G8%7#qh^d+P8BY`kH-yL=qMY8{IT0ZEoZI zlyY$|x#%hI`9HkM(d0dH?PZu9WCwkMmcG(YsB;@X980QUidoM?OdB$M#}-$$P%Wgf zMh+q38W@tjc|AYq+DalvIN2E#68(%VwIiZBn=?R-)@J=tfAX4f%szWY`_aS<vSpDn zn6S6qm*rM7<wk~^%3Dsh>*Jdc3nXv@-X>-k=2A&`(-Mv4gra)#@8}}GC!DJiM*LCw zI^vCp1vJH-;WHd9mA2`ilIndVx(LQQ3vR)+*T_k{HD#|8aJSDNqyn`F4%3Ev08g9# z2}?KGw74$hpw}4}I)`3gD@ajJ%Z7ge(<i{GmYeIv$aODTfSHWRK(7w|clt94nEsU0 zR|XlQ2OZ^g_YI?@q^6ZHA=ZO@ZeG?$h9`wtULd4Q(4rXcw?die$`{n&f%_Ff!=3W= z6;d`rbl62tvSPb{Pzf)g(WXm~=8!^Aax2mxc)z^js8Es2sewZ=Dz#Q$Bak0p3#Ex` ze-Od_dFnHJ&Vob_goDKfw;zUy#Bo&r1>sgIJJ-Gi?%$LJOMG_Fo?QeWq*-s^U}AE! zS6hMu7LGQAc2$i}|BWILfAvX^DR`TwKp;n%(5Wtj1b#&}0w%!oc<&lu?mN4VY*u_$ zVzop+v|d!d*+YILqBE(~KI3kSj2doiWXIFWr`*pEP9J<e3ed1^k@-SM`cqzVt(r9} z5Dp_tq{EkMN`y^F<9@Mp92isAXXm}&aYGiE)JWUM9$})fU@C~(LAIRQP3cH_3lO@_ zb%6Hs-a~c6i^vb#^!0M@-77q?6~aVAWwtnjWJLmIKeY?CpddlA$kyFZL;yO%i_z$2 z36vvJBA4z*q(|V(W;&5W?F6A6)hb`QA!GteY+#cG>Vl6~_oE>Cs*cphP()J$JfVu5 z3sH!=DR(U70I1v4iy}B}As2@Q#gB2;Mk6m%?ZvczL<zHn{e%xC278Bl{eXv_Dy|v} zuI&TR(OVFy5rB?Z;hKI728_bN$oQV?1s4mbwc?<9U|hmje3*uH%Sd#lf%CSpn+Q6S zH|16lWVXDMC_*xF`$yEva+HkcFynsA2)@OTMS#^r4vU!f&;K+0`4^EUAjklS#A5a{ z5P(RTjqSDV7k_Qgep~lhgYIt9xB9<`v=5CZod;%(dGB{3S!Xg!Aa*HwJJh;C%>qTx z%*9mUzE>68W|KHm%Jz&hR$s0U@KeVE!IyFpu#-|3KmjcJghN}`x5{p!YjS>n&f$SV z;t5gg^mJH4AT{?9jlmqf{kTRZ2lGgW@@wchE|nBHVEzaU(A5{LUBLx`TNLe{J>$3i zKGgAq>OaUQg|SD(4{b{^)X)J3rR{o(N714~0vI9A?&j6sx-EalKbU{VKQ9s*?GS{b z)=|LuvORx5-Kc(3H~uJjSq2&MX6Qz`)X<~RU9M=Gt$wf@6=XctBQb-G#S&v+O>Wu- zjDJ1_txlE9Fv-<8CJmeVW;+ziLpD<6#i+egAzsqHrAlw|<&I@-O{^40s(>-SVg{j0 z+7mdGsO5|9W<?L*i7eSagx=U64>qn)O&WVT8@viD^0bS+KVL{Y?Uu|8Y9`D^hva-X zI|?7ubA|k{=Rko;4-xH2CW5@|q+^UG3Nh@?vaAb)GJia=*7&>p0Z5@0$4=KjI%yA_ z0%r!riE0VltzPi;0i6)0#pwgZyGQ8)v40#-7Qlw8<Zu91=;3^A>c0Rf7^#yOdTC{e ztO(DvZ&yy`0jfe9db$ZEQT3Y2SNFKz%2QvE1R?qF@`v~D@}~^oh1#kmcb7}+Z)e?9 zyrbPgQ$r9<U_oUeP)N-m?rP!hZ6Z3X9dMW1C0(V?kx_@H^IRZ<>3GoHK$pSwtrqM6 zVrVXvfd|$Fw?(9+LOgVPxs2#5Sf+9-!y5_-oA^sY1tb8l{%P{GzP$fgo66;^3M3pv zf4wEJT|YtuCv|R7BP-WG+D_4Fl3jMBk&X|)jzi?Z55Oc6&%}Q)iJ<7uIuI!ZgQ0*+ zh=QX(!qtGtGDOE<4flHDT%v{B!#bM9&KV|yx3Ej;-g*~`)C+p`ZI1MADA4<_pl@{g zqAQYoGJwjB)wTUhSZKzT0=>T!1$)_&E)8)h!HxsyQG-m2-k<B;p@^e%sDu8DEVKHd zT#A}M89(=1kVbjJUq+$?f6F8S>pfcS1-8wpl5adFa^JHi9rBKUZ1wc`(Yx7uKQaS& z0s;<$YMr&wzS0o~5&qgE^5;QW$WEb4Ol)ma166d_b6MF;ok?$rB5R_|@jb>?+i|q2 zpE<%$*9tf;<gIwKntqRSO$@Fwiz}%GK|8mB3^ZR>?|yv(?QStJn<AZ%+m2f+-2u02 z_vjmHtp}Osz8L{a&|^Byx9Dp)A;9`)4xV4;Je&Q+13*cav+X2nw-SC`0_w}zGrngq zOq>3^LPsov6z`EOn!RjPnsl$VQvUxRW#`mh>A$V%R3(*)ZCe%Fwr$(CZQH0AGj=Mj zBo*7XZTGDITC1<#-F>k47s$ap$UDaPJ@@^fH{)NRa|mbpn0l)8X@BmS);MJxU`!HT z{j(;u{U2-6I>tY15_GLk8E{Ra%gs}L6p#}8-)j;hl#ld1#b?P3_KU4^c7?+`_C_}< z|EX0q)1RB)Zyn_otaQuE$H!viW~GyPY(#bzGh!~zGfLvMcyFAwgD8uOqQJKy4OFw~ zyU|m%vx_ky4!qhy?61shm_PuCcKPT%NmAg8+Zqr660LL1De(XTKwoBpy&YfJ{_ES& zn0&4pBCtd8o6!FR0J68RH?g*`{TBc<pylBP)ZBe`Jfrk!Q!-1q1$?*5N;c}qhSm~q z!>5z0OZg47+?lk%N_BH}V@fnTvB-{I>nEwFnu;<NPLIi1ex@{_%hCDr`jPQ=KfScE ze|{t#>T#p$mM*?t=ahDCEDvOOT-!cADbzfkVavHUaLeW0c`hz4uAjQKOR%2ncrRw{ z-yW^!PBctSb_n3PmjZa3a+={@m`Fjr@$U|)(gH)>=I}+_S+3qlCRDQBZbT}$4f4Qs zt8E=i+=<>Y#u`Vyi|`(MZ$;qEM)W<oC6t?Q9cv`+`zAyo1n~$sgX^-VDa{K-k(*{@ z!ki#|XB_g|6+gDEy4leFR&aI=vYz$l2hr?6*uL=C4Sn3)F{Y@_6?=j09(Rm#x7mg~ zehwYcz#8DHYaw^*G2J-9Bz+<N#eMF5tI$4I(01FUgXe8ha4KFm|6rIRgkFcpzP^J_ zruby-QUHNGF)zeIH|<zaS7P=gLVR#mQ1-fFqk_q=_V=OUBkd=Ja`Ta{<t55q+itf2 zAH{tK-H$^;ypC{%tCTU}8)e`x0KP-ogcJPs#NDR4j6CfjY|~Pu|H4LT$OoUKF1=GQ z(ybWP91ofCCT`A+8}SU!NR`Z9G!eQ%GAyixP-t)OP11Krg_q8-E<P~pO(rY6RBHNi z{jkcs0Ap%F)>rq$@&>>j<siYOXSz_o=PvWqse=LiF&5$Bw@Srl$0mK)06Y7vSCUZv z>(7qnVWmt`8Rwt~N{)4wN)y&(zcL{X#h-#OiG=5qKjWzHxg!)<QlD-P=AHiJkqkwH zkFvs-G}qTA1>0Iz$;p{6Po+q9_pMGGhHo*7z49h%RQ;_H(T$vxdM9Qd)B;ZBRzn-R zY#RpiEN`;Ct1LjS<t9d`uR*>vLEAn~MkudA;R461-5TqS8jjvkBeF$JJWIj!+BxmF z2Ck<fC8Vcxq;}YsMswI3LW{aPM6nvp;GcA{1A2Y{@!8F(*}Do;`}VcNS7wns(iZJz zwOkIq4xL1G;;PVV<+8O>0wg(=T7@I=leKzuyI+L5l;w-dD^1RE#lnRxv?XfbmAqdN z7q|deeol0U38@YPZH78DGI+Js0XHnj<z?2hUiY+0H;*^h%}sYc9lhNB+`}kzV`Ef# zhN!=<{m3f^mcG~a8yYf7MY7wcYN2EPRA)M(xKmlBjUJi6hCSI}b(lgGs;0f&Ka4e} zt7&an!AanZgOjK~kB(D2Z=N`QGEUNkA3JQ{%2K=QeYw$$!>UX|u*+y2QBsE|I5m*6 zj?(H&P+yHwOY57imzM#@!m~9t`I_2EqR*>$Dy#Cbe>K2{-JI%3XQ_8W0&JuQj`X%| z$3+@DKLFc+K@PRGTdC+^QQGc(Fo=t)o%|RPP*ys-I51?_hu@1jb&Z-8QdpX97(^>6 zGgYC<X+i9~E9|We!_z-LS7hx9kK=@wfgS9Xvz4sYg{r5&=V}ZqYF`)7kN4LtwH4UK zRRTKzS=}7iPrM>TmOo<!vBPk_eGM1jlrbD{>vfe;^=(oL!5&Nt!Y;EGQJK>wl_SS? z>|0zB*g<zfAqvw8-qD|S<y|}23-9>#TtQ>I!Cl38)9mB36*DOn_mB&*Q0HaTcZh)5 zGlKnoUHof%U&xL-sp&NL;G@to!g*HXq)i}cX{s>8Xs#r<Mx|Z!UPlG?$)a-NgB=o$ z2nJj?KJM&{oAyWG71VhNL`r_TLW9lYHl62|Onh)`bw5ZXewfnjN4_dlriQchjuPPE z6amzlNO&@pM(Hwudv?2Yxp3A=-H5lu6A6ATJ@<oMC{Z2(z@?#_*mLc;J*pm^!fyeK z4p*MKu$_XWjt70TsffhnAp$m)Mja%eK!T!6ZO&%0_}%PIXesP*l3^HZygO{kFbOhg zyePs4_vfhgyz$Q|*W#Zc>|9<9RZPYTGD40qUkOOf(uB8CeCb@6y3#{TOlaii^{fKm zP3hrF8?;G^zVQ)4mY=#49!Ma_qNPjmNPs96eS>7t_;Bx&0zpnE88j}!%EXBB_eH?J zqc8rNsZO6muLP{EpcG$@54XHwYl4s#KZQbbt2VBR5Y)AdX%xumEf2pzNHPFePWw*2 z<>$smQ?d%KmXIL{!5Q>ILQ<|r^F!hr$tMR8AuB7LMmlkX_)8llgz}DqTw3H}fZB{F zwc0Y8DWhUk{uv30)i+ZGI1mec-K@(D_N5>$tFxVFV+j$~Twrz(r2ZWhaW$PkEU1Dj zA9*Pz$=Rt&BoF}EZZ?Qeo*}zha<F9955Z%T>g!H2C^7-%H%mb?87)h;rY;#PI@QCg zkB09_vz&bpeiYvqP-A8QrZXfOn#cPoTZ>&{dW_>56Q&w<&!HKUr3&2~Nz(f@!}SRH zL8J%fpz0?@%9mk=t5_c2h4Q=gTlV3vDbsT34pmm}(luz+FCGy;_cOMkULDM_+~eZ( z9%Z}xy#W=5<_TBj%bG)vQ`bq<ZJ~%QU3_uIvLlwK{W3my3VCK@f<1`L%<WC9v)l60 z!=lySy9jxF+OD#dymfQcK=_DQ20$-6B^gYru**F%>3+=~Mi_(6VlxaUwz<e4z^A%% zp!rDu7*=z3FWq20w#@Rqm>S0QtR>q1K7QV~MzqjO<cPiUv!cbN`;7?BiF!sJ8~!mV zzbnspL;=$*B$r3P&|xR1+TYj;0&}ZQ)k*)%q!KgrPBb}>da;L2t0REqt_>Tq!)E() zRn>~^?j9eaJ=TRLq7BR;VG3TfIkR6AaPF^a#C+N%zwqu*<>jvqi&(XwdS+==ClXut zrDNv-{AwOsY1Ia|*K>I#uwYGas)L~N+#QuQ9{HneTQydL>9?g1uKp38y$YoO@lwT^ z51Y3LBR5QIJ1AAvRYi*6$%6V$*O4-l`3RQNy5`!()M0cAUaW|Xk;hqd?YEE$6xS)s zNNyesS5JxqXTF|e19PQQUiMkn_~Tp%rPHpZnb8HlP^$Ij4?^zpCP;~Tj4!PiAdrch z(43waws!<mM}*<ioZ8BUBCHN80r2bJ;A{j!n|lNwdxJB-2wEGw@Xx0z&~~01<JG9j zE}W0uiKA1pJluWFpMu42JYAk8`2oLtT6)GcS<-?Zv^j7$bFIw*<u=@<5aI+N-8wQX zVSg6G#35Y-7dNO89v6It4Z);Mm+s|G!s4lG!Pb-ivZ&y4MG`H=3#UrBtFjeLVj6{o zV$z#%iqNWPkov7vIx<?)noZV7k2!=hWyvI?Po)OY#hGdJmy8KCwi^J%vv)2>G)>Y; zESOGuY97%Q1n=?b4!K-NFIZ|HS(LAtCo<gcDko{SYwwlBx`QDGd%ATak4j1u1d)8Z zQ7TRK*R0+Yk+f8TMj}$6*tV@D_%#NpLu2h6uL{zjfPRETccWmI(r$&L@vNwnoq6sO zY^IVSH}q_DdM4>T3ybTN`j}B#_Jssvi1&eDY~is#)9gz28a2#U)VOHo*p<UI3h7<E z-*3S<$EL#cAtTgvr6mgKqA_<Ck!Q3n?o}Z)5A?3_V>HJN=z3Ai(}WzOx{}%a`3RAW z^i58fw$7Z)@zPF-SZYOE%r}x8aRuN3p`9d23cQB=accgg_Y59vnh;`@x=_M%<IQ+4 z8b~5ruflgj89olRGWHkT?GDXy^;dFVABl;mJ%3J{x19OP+nf1y*Rk1Nk%OQ-Vzy!s z`i|#x(H*(fZn}eH&uxi&8{kKT7fg+r+YUM6O^TGP4y6{{vKF=u`kR~q6)pJOMml*n zZs|}zTRjL@`aQm~4F36MsXVT%txdc8G}N0C?Ssk;vp-plAbPKwmzbJ~sO(^7jcY4_ zfw9D_^@D{purn$TmXP!9cxtyx*?*iap_gga!uY}@k&HRkUZf7~NLrZ9rUU(*Q6RoH zOSoyX6#=qnV2ylyU-?o5wZKu?7GvZrD60jgODt053;c}P@S8myE13mefaf+*LuR@X zcb44jkA$MD>YUdI;?AK|q5#yfhvkNaretzR#`nZ8_WVW8%?gcx6F3@r1LbD)ILwJ% zqBp09cen`CWz~xi|6h+kq4It9TxYQiY*!XRBU0^7bFgR@8_{X{4po{ZFO+OM@kO%8 zW2&+^xiU(TcA)JcEF?dT9qH8U8N7m{>m}F^$Mm31e7dK)#x}CeQl(HZAmv6`FF8`c zB15sw9NSY9li`MPLf0(#{02KgkX6&vqAgZCue1H8i*(~HAewt2s*i!^7PJ*&tzQ8r zMlLj08+B{4!(_W9$`owg$(#oMLe{4=O%1cnZIW9d4x0HN&eKk%0&46r%%U&PcrYG4 zxj1V5qlXt6&i!BNj~zi6BEbUs?qkcGg_D2Nj!+qF1e~P1l0_sZCw37fDwn^o=h*c0 zOV^t&Umg>Iv^d(cIJS%*nBZYk_RX-cA-E=%+8%7jm!jtjO-#z%1+P9ykJY=2#-ZBi z>ZMiJMVz6iX7@#1<D@B-g`is=!-VsWyW&sv4}6UjZ*HyRmS1N-v{IT6ROF>SFiOc- zSSO5{;|_|8XR>xgIJ6`xQ?&xkd<t7q9G#+&R@S#IpuDRtsvyGD>nr+s&YD8jC*<b| zW*}AqNAWoEvRRp2<F1M^{hN@HMTO1wQdvn8(V32jSf93>=KlVv)iHD(B81Q)q)p~$ zmatMFt!VS7BjWj<1>+S`#VF&kWiy>rxUBsxZxIPSgPFx!qtkL&;5R;(<8ZhGt+wYT zCm}4`U-S#Yl`M#?;kSm;Eqf=A)0qU~E}6V`Rm9nBmZg;hwU17`-L34UNq=e~kCezI zi{()<U~_KK`=fZog9Rw%zI@?`o+`#o^YL*QT#dcfZ|_TChOBgfGqs2l*W1rzOjDCi z2UOSEPv#se#5{C&4a|F}XytqyKD2X!a%PLuSoBp)p0jWV(*wS#a%#sn&0B}ei`UpX z*m5zkk(Pp&0CXzX7U2_?cFcs`5-SL#ZJZCsS(BI)+?Twz(~)?FrCGX?OWWTkJB!vj ztEAGWd0*Vv2ym+P@kX^&ZKO-CR9u{tlYGvaI>8BGL+1gDBoqq9>qxqwKTyQ1W@tW_ zj_stUs~f<D+suOIP)VYZ)q$}8_gaqL7}Qrxi*az?oSp1$$n*3IA~h}1jEZTK)^^1# z)1iC|;`)NfPNHvnZDrq-G)lF)OD$wEL^@m@ni71YX^(rXtgTg|LRBv`sfBCc+^m?> z_{;BP9p}C@sYdscruWOTDR)Tyx-Cops$-R$QPfQL`A`0~c@fhGIt_-kHy)=KiIqM$ zt&S!3Va7(+8Ee=<?-_O?cLC!F8fG(kohLmk0%abjf?X9@OaP*5G;bVixkS_i4s@&l zD9$zRos^K(XQ$1SV;Yr&{46-wxUU_Jsq~#$R`tc5MG9k(PK#HEqLo$5O1w8$c9T%O znAa1^3U|r7ekz{)F5WCheZ_gNJ79`byC`d+bNl$lqxYd(!M4T|c(avMi2F_{f@@d* zES_$q3pej*te5-a345j<D(`cN%vd=9H^JUnEcavj811*I5qT0Bk<*sQvq6`H;Lfsf z5ew<yiXL~SZNhFvSQ}rT=dB6VkO9h!H-YlI^I9eoU<iYg**P?`=aI`<=XSVo_ij+* zIKNu2*gzCDe#%s=_ww4X@QrgE?XC1dhwm7zd-hoiOjmD&x`%eMuX~&Pct@C<m)E!Z z_UUQ5P;wttt{rt!9DbcMg5?Rdae(C>k;{@<rf_KE*z9m}VBSb-<PSf`25;~nXAkD; zm2~6gaS<d^Yd<GPsga_U&vY{1l}&Z<qlZlH2kd{nuxRk{pJD;uq3wQvfYAN7)3^3^ zPR{?|5&^M*fHo<no_lxfEzY8z9`t{`KVwVTVq<)8O;(c(NvuYVL$B#rcXDe2R41!d zb2}ZbZ=UDr(&&DxscriFp!Iuu15%GsN6fK)A6p(cdfGazk?^H*8*#hnn_@&G06^a0 z_4)bv-9wPYeAR9x{?3|hB)pLkcFu~0X@mL4OZ3P=O*iXk%GlNGigjTX%G|s1`^HJu zEd@ZbQqs$^r71Glk1MXKy&?KZx~R=My8aNLljDmNk?sJc^FfBCk}XD7gO$~+YVI5h zww*2JNxVoUDnW813Yd6BGMm}?G$|NsRA$`(`X<x4(%nhzAWS3u-o%;H=bPnkq3_yv zd<EBsWpv6k&MeDf>Q;gDo$k{d(5}ftw#*7!(v;7N$l`ad)LBm05?(Tk;inF9f@Ef? zM9LDJfz;EmYhyvxG1!0+2$nD-y4XxN+w?1;ni(mCdJ&*qSfOW`dFO4HZH27&xlv)t z)yX=IbG3H$*)z%c9*aw*F8-Tr2jy*nq;kd;6p$y4t-k46Z#g=5Qjwh<&Nm&H`Rlbr zZ`e)FwO`Kr-fH@$zFZMlBCrT75y(>QM7Kn%Xj2#$G&{*3^me7WL{nKUQbq=r2xzMf z%AWp;ZFhy+<}$gZDojnILsvso`yiFg?d*D8r~De{OFW*c(u~T<6~~zM#Bue@ETc=H zZB<P%t)jqCFBk1^Gr&BW2(TF-E2>zx<7Lrv!A8AaDQGyNeb&Eq{)k@@{MKv@qbIt@ z?)mjr%G|4=XgmO&w(3x=4Jku&xVd&Ku~MpT+X6aE>W3$B3;5@fWK{}kBc9>BGIpb) z7vpit)6KxV7g3EZD%55ncnlJfA7BGyn^moNNfog4hvqjc2R&p~ab9GlHg*8tQ3tAI zCd~=G0G^qhMlfyDeEpPY;&!+uD^jA7I84DTut+wPsyTkr5FxOYO(1noHI-G|A#z6+ zKlqxq<hDAVv}rLwhX9%^ToNK?r8qErjwfqk$5U>1^8|aJ^SrT(DcD+TBt|wOCWA`2 zBJyXd2KcYrBZ=RaC8-wfda5!dSU}BWl7$kwBQ}HX<cewYuFL8ad<sN!)$P&Q@apv2 zca^VEBx?JbX}{B-J45jcwhv(sDl)}R>7XstR2nkUlfqVh$=T>$Av9KjSKga997ctx zvoW3q_tF)W=GAsk+tj>!m|V#emE3T@n3twcI3qWepR;EAX-O!aO?Y<hf8}1q{sF_# z-$><^->-IZPN>6ElBagGhw6Dnv>kB3din6oLq^y@7`i<FaDH?8zMiD2k%xkXDxWH2 zb@Pwd|3J+ARVDi!!ho-D0kr&uA=h<J`ct2cwWx5&5JVaG$)2uTLRw47z`A+sgv<4q z%ukmkhwJk7wov!VA?&q6pr$|lyDS^^&n#X+8YQ)24r3QxWqT!sb<TD}%ODymqXD+4 zw9Q*ld**bhpwtSmRGTbCldv<m_VYnVV@avtzD=#KYvNeetG5`rV|FeI;ms5D)jbrI z&4g(PFPM(7YZ+w?OnjzH<d%+UY|}yqf1<o5Yk@k)sUy67a0Iw<3UL$AEnl<S$>Qnb z040G-rp=!;PXUFi&(e;2BUUX%zL57o#7`!rr={l3Q*zsZ`4g42FQqXiEE(a~)X=nQ zyFZ&$Mg5XzBVF?E9f~Qq<FtouduG$9-#x9)m_=HxY^*`s;@Iq>F&1diz!%-ZJ|&dq zEX5}UQNe}y$&e2p>6@l%XLjxC2I-WDB%sW3Afyj97DVa?V^K%&TAU^Kl9L*Rb^&53 z!D$6Rh~!{>I(%TFA_f?Hea-<HwO~wDkkl3+kck@mU`~fY2gl`9<HDKQq6aTbV53rp zL4`nxPLxJVm6d7V!`&+2B|a5}91!b}{2~f;`J-DXp?(|mp)!?n40+o$3Uu1tqpk9p zKjNb}poLKXZ76>UjJ+z-A3AGqc1%6rjvN?q0%Na>WJj-&xeX5QE^R*pL9Uzr?eY&C zf<nvN)p7BK5tcxV(Q1gGwV-(}-knI=e&}UleW(2NFZUnN2}!4BMV(V8a{ou?uY2JR zOudQ%GyUL-&r#S@Wgc@SK)^4M$`)o3ku@0lQm0O@xPahF=k3D($k<h~#z+AH{=9c9 z#{rz?k+-OD5NtReZ<<5Y&18t}otJ>%SJKjR7Jq_@mCnJ)ND~n7tB~dlE6B$8UNW&C zgzEST482y250@E0fjzRy`EP)msxC>8bXOuNlU86YxXk5&9U;<&$Ywud<hkfcHCIFy zpMjhIwK+on)%gpHx6;B4Qem@*Rxf%40CoO;{Q1i%E?o#>846|W{G`2E5B_cDRo{@% z(y@_&uet^yKNZxSFBHcK*U+_JCJ}tHliitMPxm&0A*VBJl}EU>03QjIU=y+k3UCEZ zv2Vrs3!l*|k6~_Y$+l6n$@>=1I|)kV`9PsR@#3Rk;>1?#bRafR=wEb-1Gu=vP;*_o z*7oJu`$b?CW6%Irg6STT#BVI16@XRNrQGuM-r&zrf;as|EL2Yakb;;QfcjSxgqqAt zMys)A(P;a?GgIy1^fw+1N`@mK;|J;(mOzX*15CZ<IQN5bICFtSrxPgsX-CT;1Tuc= zs*q~m=SV%sBI1(+yPD&j6=f1!u<1jyjO|SPnDfDDO&nbu<+5)bYl2X=9VC)MIHBam z*G3`b=!8H=FNN-cfAIx96Y5T#!eu=!x=;X}{?n53?j399KgxpHEX`o_^9+DCM@ny0 zjeM==oNpB!`rgQ#O<NRt%~{2k+Q$wfL@bB3h>W3OFeK@je_T6UK*&A<wLB5Arh_3Y zm?SZcZo<mXEIs}@{kQ&4r~mWB$GE!MK!ac$A^3DzQ#*8*62JrK^lvYa)}04B{hzN1 z*f=Plg=V1oE%=y%Whh+|o*rJqjtC~>V;ALhX8+imzLrQ$L(<}bk|z9br$6mxYWf6% zQ0C><#9^6`Cbzo^vv4I3A|Arwej;tnOAD_MqqxslGOm?lP*!jLk0+izY3yTLbNRwB zl7F23D~QCqS2;5f5IHV4jR^4;!L&w#clY<-I&hoy-LP4MRbPo)0Xgwq?L7Omq&VXj z)nu*v(^q9-@7*1(AL?9cW*=O7i}+hB$|mOplxjW_zMz6Z|HbIf>+G<Y6IZD2c0SWM zA;91k+av_m>`r}DZ6VgDyg)#?9W|UD{vV@1e^^(PQqU)K3QC9DArS74{;<;d5$_~F zQ|xtaJ4u!<odv}F@P1Fdv<h!{@+X3?zf`gXCx>g`7c7oJ4_M2z?}rusN9msm`d8&h zd{v$-gbh?V{!8gk&a3nz1-6&=7&#zk^hl7UeeVpY^mm4lp8Nxc+VxX(#A%gSsVz+F z8Z~MFQBmBZSMo$B6MiOc_OHxwUGsivYIJ>9u#t1$H0U6aQl%Ry7Hg|YWycY6bi1^2 z{+f8hWV$**2OA}0u8W3`08E&A{?<iylL#zG$Wi=DtrRx<*83V(Lnq8clr3?_zl{DH zAO}$E_!H~zrwlksX9u;rbsIMP;#;t)GC~@#e&XlFab=Be6fvDIZRX;dOj}N>F^#jM zA2Y6a?!e5eYs7TFd63f2?^w7f>X$w$eHj(&ITo4}5p3-m*J`t+NQXx^|8RcP!JAF! zuSn;0huAxRGp|Wv-SbwkH#A;A&aa8z?RwZ+OppEkR)!aEdg01-$wsW+<P#8^ad898 zy!uDW>c3A$k*wPaSnHlyvIrZK>EZxQjuPTVaL31KNIvh#j}LlyU*LXEdP<qlq_s~m z<3r4M<35gRJaYUa^9Sg^hX0lMZ~7^2hNyS~YV=HMqp64sa>ROX9bfa`N^G0o6gHUw zCFgd|pQ`#*cE(A)qYYP=MJk;>WD~jE&rf$}!>^ZaRGTrwd8Q5}rBk(dLD!m&4nj7+ zA0-!D9MHzQf4!-$WqVMNgATYG`KOZg<F4)qO7pS<et_AN`?Tf**9^Z|XZR<Vyq7U| zxrtBk|GH+hrqsexz=436GXGEFu8wwYdd4Qs1{T);HkWAq3-#-GN9p6v>|?n|Ic&5D zE#%os4{|jR2*}EcHvAFsPuvyT_M+ooHb<;ikbD4O$WHAa)(>WbtDC*!<Nb!?_2XqI z?d&GaPPdEQXj%a0^Wj(nCr>Z0BX;s7Om6q-Sq?GEbOCM1!Q0JkvHP{L=8n1RgClp@ z<3Yo^DmCJ~lr<)_1JoM(;sVAru=L8!j2=CeDchIegKGcWBDriW5~%VQAtXB3lqLRg zK|`2ZYdqM5_|Vvx6jVcmhAc~V%a?(+Y+-CFxmwgH-M0sX{VYfhy{Qb%BbKD2hAonI zleM1QvLR<DLt+kzQn*VX$#So>f{**@<RBw7ESMO$!!#C|<08Cx=@=Qpb>L$eToWLF zUS!BcM_}Cd6G;IKG}PG1`nI|BMm@fGH<WG0Z3AJy(%<Fjl?q?R?hv<(UxA5N9(RPl ziC5v#K30$R?G|9-m3sHNaZl;U5}0_+rk!qMxE|Llo{IX2i3t5y;<Yi+PVGO5SFP#{ zBKAbWkKgzWb}6||KW-_rl06KIN0x;xO6GB;dKpbjmxdT(0Ub_khih(+>b`(w-dGRN zZXCkc=3ZHz-Vc&bS#|51Ai0WwgP)D`ws!o$V(35hfu)r6&R9Np(;bxVf|p^4*gtZh zWa7$H)jRNg;v*t>KHh3u`65ES;PPtu2<>@rmYkm&{ur>*s_rReL>bjCCVM{c62|J` zc77Pgg``bxhluvjbt2x8+HzN>D-_FO#hX=(DXN;g{7~v;FNEbp*0c`u_O)X%W6UeV zy3ojF%%$U(S@|kC1xHw)y9$tAGX6w-N)N_aIZi`sp5rJF(A)%HeacU(D9Y|9Tfelj zSB=uG_21xiigX?McJ4E^>b2?R-}$~`?d7{B%iJ|bg*fPcRA^-CLYW(!`=h`vr0Xjt z;4a;a?d=09B$6kA$p-n=B@QX&K1u^IWLrC@yej(;9K74nhRaTWMPm@QSp<?=<md<z zG*dE(B;TWtiFj$1+*efBbb0VlO#aLEwC>__yJ0FZv@BMQE{{*&gZ}A7r?1SqUH?bE z9_%tBm+Eoga`Nyq3RuptR{XVY;_%*NC;2_NE7T1a3>!}QpNXR7OLUy~>f>{b&X&)U ztNRFS3i2v7y9M-vp9miCrWdn=a9XQv(N-Wt-@o{|i#GS7M4Nr59!3#Y(!9aEgI7Ec ziZd$R1H4O){Yn1TekGX$F-6BuK<;ZeFotPJ`y7KyC;O$st7rY2qajb!`g1;Nl^Iw< zL>ze~Z#>C2$vXlsmck~%)9xnxFtNPvFyal2JTZz~H)A4uM@k;h=d?6iTMf*tuMc47 zXUv)Y4zU-;mS)z}rPY3=h}p0<b)Z4MWo4{H(5f!v20PLv<$rQCZy{;nWFjaA_#^3$ zZ62K6AvyEn7*>E0Wi%n?NGL?cc&;mH|0a3TtkL7K`ZmdZ<1d+rJ<VX)!oF)$?xAwJ z?tcVBgzL(fbBE5Q6u&vH<NqE&>Zda(WdD<StXY3dbm)}fzqatLpnoV(eu|$;CgEB{ z*d6vB);i@-<GieoQ(UEV+6-UxsMM_TTr5v$$g)h6>k0wfH|Pe*lX%KxkmjVp>|rs+ z<K<hlhb#$(_?-XK0-TVdnVOn)g@+~ssGot#6L~s=N7?>;Nqqm$Cr5~*rXDJl*x$cu zqs*TauTj#Xc&vZUubpD_FCzi?4M9c~T}7IuzWOMKpMteWsK-GZAr`oQ2+jc>W`f?M znnPaOFKn<bqqH@LnJmo30_kTD24{)#qg^aaht3B1zs`-_yK0$vXes?->!3;MFg1Nt zFqQl0-@7O*=LrBCG-LUqXT-!)`~-}~_S4cA?JHm>b)`(_PpK-WG4{eTvzdlmiZ{rj zF3wuzur?Q6Msqly(;mjzxw*9z#n3nnHbL%&TGwe+v?h|f$|32HJzZ@l{I+*e6{p-b zdd{E3bo~^;TB7~#%?<oVwaRjDm1W0r(>0XX)zU$`?(~aW`i@i4#?<4JY{2UjHMpDL zc<N}MErmC~l2)h6Y?7K_sH0ReG$V&nM};BNBpML*IqniV6utqL`J*WmA#`mb2r7wE z*;dt&Prx7|Mx^9I`#~%MPgu!-`gQwchdlCh>JLqp11Pb8$AnvWavzWE6(RnbhRF9f z%KI(2u)%IguxuxiW^<BYAG1t1#!+<*5Sl9h8G9%FBt5-%W;CWDDnF%#Q&sGR8K)+? zyhIzk;O)19?-8^nsb7Mr6p!|XLCiO%udr>6`}P#|!<NN-g)^o>QSU=RWxsLFtYaL; z*z3NvOhMsj@g~gjs(vfn#-HlbmMZ5V`98?hhHFE_bR|xlVg?=e0QieqUL)^Eef;9V zY8y{*z#HH7_!Kpr!n4pdRsH!%1_UjMS@B5r1~N)#5bHrcv<Dg@BD&_An!}t9OA`Ke z2VBA_Ro8*4|D1}y5KEVVKJT5-CU%Me*FIOStoIk0E&pS-h?|^K(G~`bIwhcvh%=|k z3TA@{A%X47=JXnuG5ndz!C4W)Dia8rzS2UZ2FJ!=cHW6LLyH<<ECp_yxdkpl(0HJy zveJx;r!Q2~RHObE4A{|4mrKjP*<tb4zpwwG`5bKU4DF#d1(=4}JXQiz#O;4m#N7(6 z3nn{;U>{a^dp<Ff7A?>5ZiYhs?%R5ZzX=<aG{e<<cg(J6E7%vP#ra1f+me*@_qiTd z|3a3`X>Uw_A<I+!&dRp03<vREtn%xMfqK<%PYrjehY{jh?Kg)l>8>`7lo!)Dg@NEg zM-bS3Dh%2Ui;7wZ;W~F0{<XeN{xv!Z$#qinSF-GYxlWj4pm^tIDzwlEZ@tN8^KR51 zWIIS0*Df$hx!48WHC0ZAT-iRQkm@gFxfll1UN#E_KYE}&4%8$JZzWrr5%bdpnW5Dt z#rrJ|)Q+kEYo?Mw)(MO3*-0kae^-Sm)=Qcg=^|3Zgd|U})dR}|cy|%n{V^h{kYg}W z5SgAJU*0j1#w!4kA@b43!BFI33gIQN`j#h_0pZ_rvC*>MmV2ONa%yWGN$#lDTIODC z!+GVfJeXiT9qq<~&!jE4;o>ZBWJ?gdA0QY<STC{}{U+@1I@%skrBIM{P3O@%ky2Cl zv$$wQ0`hyKS@L+rC8&Z51=N_!vUr3tHrwX+ad%gmzvqsk+e|?Jisxs={ii~%$+j{7 zTM!<C5ADSj2(GxT=*@5|7nSlC{8&y#8jpj2Qp9pK%unQr9twSbwK4!GodRY?dZs#D zh?(G66t(ry$A5vA=l_6~)w1%KK+F=-__!n}j)BoZT!P{F2U9HhJXmBtjd`mGEAwmA zmqmWSo;L0#5Bje)s~-aH+R4Ub&3(J{kM(k+QU?CTkF1V?leiFLN$#;VEUf1>SyM}) zZq7dhw)WlOnkcLbVl**9-Sb?hzh5DRtC$DK-Zp)UeAV~n;cn_t;H5h>D$qG~O$#y1 z4T#AH#!uq)EvW%+R?t9I=H|?wsVSMc{hpcpQymGF46IFmNew!%6xOkzw=sxx+%_km z$qO6ZSp^*cW!lI9K~u8B`&*Ww7?<z@IwnMae(41MeRt$svXTnM@zm<RB!+EZX5dep z9<T6s-xcX!U#2a_fo7So3gMx$HfWTvO!X;d?w2NK0sH&rgmM^$<Y!e{)fVug%BIIU zo1ztc16VF}qhEKnx{uA}1S|~5P*ucbfmwec%fM=xuI{cb<0;}*6rap|ca#cTV2#|b z*7ge!!r90?Bn%R^z!n|CS5F67gCPxiYl_O1)_JmTElpw+HI{O1T&jnrr&+34Z7e*N z`k$AC)e@C(E(hIFE;3))ME66&fUZo^L0Ek(?Q{khSI%?-iOO|2EB>0$)-0+)gK91p zla;|CSe<hOBrW%`tCL@@eM=<;|3rwVc$_!bFT!Qr>ft&kl!V@(bJ9E14v~oFL_R{O z!PpN8iliPjePE`729hH>z7i0D-|s?s%%c6(WzOkhmj>s$1bNBuDD45ux9@7_Hz1}j z8_@EZ>qSnW5GEkJDNW|VYx}Z#cywBC9%Cm_1dD8HuWg-_!=kBF`t4XV1#Pl`w#-N1 z)@dm6g>+J+KjVf}TSSc-EjB*7;}Xtu3Q5)(u(xX*fv#&*S{cfA=gsC#7|oe)09Z(b zQs9OP1Kp}h>EA~x1C|Ixo{Rk&t;!a30jQWNKGofUP!jAZ#;70ejSDg^m4u>zRMrQ8 z>Q)01S`G=_fjQ!5pM=JLa>UyGclS*lelq<Yk)E(k_*QG+!C!T)rp>D?pM)$6y@LTU zLKbHOaxyj}nP2iMEGcqC@6lVFMzL!^l+Z=h8epj+s>K^s3_I_xaa1Z!xMoR^wL2!= z-sbPV09i}lvn~&I$YZzd<*wlC|DcvzTA%14GyI(<$G;G}ILm2yhgY}L62?7~CdG<a z8gWm~#hba&_3h$Q=kK4*cnSNFmynHRgZ%pNf31IQmRPo&2{m#2W&dXHmmpNMY+9m5 zI(9E-`>-xe#&mbM^|Wr5@@vZ|LqZ##e*PEk;|X;pFE|}+&`+|+uAw(A9KPbXs<)f0 z8&vQ)3Ps};5fpbkx`i7%sLuS)w1T`c-)HiTZWI2~@6}4-z!0%m1Qi<j+0oV2Xi#B) zDX=7ck@=b!x#G?kh+2YlA_-}0VP7|h&JuA&hHmO~8Mlbxja>V4=%VM>No>cSpJd<j z@=&0V*uToO5*VRaIn64=UoHByvFGz}ynX-A?g@O)`oAi-|NFK~CnHA-duONrt9pAk zKFCxE90a5h7)loXZ$Fp)=WqSHg8MJNsb}wKXK&)@>_Ka9Zr`b9<Afvt^C9ggVqEcE z^ZFd<i=ZiWt@`QD2{&ty+5u9z$hEfKz!>|vZtQjmd-Yz7!fu;HKAdD-@Amj%*|uV( z(*g5&)wK9?QvQg=ocT(Dg3=VyvdhP&#st78FIh#HB}5&a4jF@BBH^2A$*wnI4(XY( zF9E{@7D5D`Fc_SIl^$`#lMeGz#M)fO<1VuD^-fY)e5Gt^MbC^Q8(NXjBEwQSG<b%( zQ&TfriUc{wqXdL6qCrKFeor(POPQao2~kv(VDk6Zj*Vv@hrM@huwDjdf*xl=B^Wq@ z^zyT8>g#<f#L)Q3rx#)>nucULbjjZs{ExAR+w3vd$b-C|M|+vRwPH>MF|b;~3e~{^ z1U19`;$`Y3L<y$rE_fDE+iOHMD~z`2NAF>>Q5*!ubaoy_64$cc6~>jqMU<kUIAj~_ z!0HuQH$qYTM2UE(_)`5(jBx&urj)4{ZY2hQ9RPS4wDO7};9~?jl#LU_Q!`kL!}_n5 zw_G50$%ly9IehU1#jxDdtb}|;CGZME8(5-sbLWKg)oSYGVrl4>1Ky7*aJt~alJfc3 zJ@2W#d2`{u2RYcUSn2IT)%`lQGP8OoJf6<Ac+GxK>vZBiylJXi#-hD3ONB@##&igF zYWtHi3Tsl{OuVI?N&3tE<||IAT2u73e+p_~<7zzX*P?I+P$OyP3Hsp)31Lg|vh-7} z`4K)XHjgG?*OvI9kG-S?sMM14J}Fmi#s+9vWZ6@v4!h2ZpBF%tno_A3vE}Q{5`S}F z;{ll0rGt-awo42or1Y+a32!cH36&cFb;)4xSPejV#A5#o5Sfi0h}H8mUpVg%lSSlB zs?!m|@f<|k0bbay1i`DKl9zg1wESSZ!|}|)3M30^L(u?q7=m`E!1Z|(?`6};5&6($ z?9kLjTY9++nbKT>`nEE*$cOi;ZjBGWXYj&{h0bAI+`ANFSB!7Iq4NFHdCcVi-$-(S zFH7fyyNPkihW-+K*wqyc2ytU;yMzXwZWz~{i(1J+p?IdfaUKE-sAj<rHH^it4bUO< zP3DQsUS3#t+*6@ijkR=g9sK*!T^K1wS#>z-`(~F2BL?&VBc(Rf4-qSo^PvlJB+?D8 zdKHRUNC#yEC+i&o=@Vwb{Nc&v;gZWW@o>jFox>cr)XAJIsjH+)<7*sJdYQ!^;$$Ub ztlap~LW|5hFiq=R%rrlXt&};2byF-lnZ}`A*bZ_snbD#jdB+wmvRGTh7j1<fx0b-L zR5KQ4V3}q>FHFB1|F#zjmoFA?a7>-H%bqkLVTf6X9+jUXT!@Egx>8cczcP1`iHS$0 zy+R(lP40-y0w~w(MzvrMnmBYDbZ|v>NaI4GPK(xMdESy~>kriL{HSG<>mwX*$l14* zBgv^>U_I^lZK1l?Rg_rB@XQ>%wIes5eLvk47WD-tbW19qu~x^zcR+20rn)hdPk?R9 zR{_^`PYm;r==w0H0xx}CFCrUs)70-E@M_gdubtZ4s%~X-wXGhh`V|~Ir^vYQPqE(G zgjth`R=W9G>RAE>xBCVi$tQbOM_}#q-SFDkI`<skUh)^`p}?V|!Q6GD>f5xG&&0h2 z9GovPeMwj5V<)qP-^s;h#e&o(U!DCunSS;v*2J^Q+f4EKiE|p7F|0SVR5ZHU*m*PK za2F=!@#U(TD7&;<zMVIn4J*JZ974hii9v`7es{b)xp0_l*pMhx%s6rGxCgEE(U&-@ z0%a(jsiL}DrB?2BYnPeSZox4VCGor1>w026!htPb<%vI|x1BHU2yiH92eo&6Z_MwP z7?4rylIcTCpucGJiUHPSc66jHlL`4{WZ^d`?iwY9B?cT^ld)B<p>z;5bdQAbMOFj) z%`=*|uke^Bkso+r13}Ro2SYKY?Ppb&R%-w+g{nGblA5H}^4Pj}v<Usx!4^Mf?9c4k zm!D<f@(BuDPZX)O_}>?v>SXFHRYZ*L;XCi)hD}&B4M-wf<%+zz_I9!LRO3c``PFB% zCdMK8^qj4olVH6{!@|x_&uQ068yrDe3|izHu=_(dMLJ5=W_O3ue^T*m+#S6(pLLXF zO7xUN%L1@Y(F+mF<+pMsW+-trTZIA_w>&&QH`M;~$@^Dvj$0MGOFHl~rG^9o!t+1= zO#S=hs%K<p{jaZ+SJDhU!e`biij^46(emweUSuquiXFGe7Z;p^P)Hkpa|^3PPsZ5I z^>q@TFJ1VL{;bRI=S&@09gnvvzEd3SUq7!N^MmpTm9XWt`^Ct<Wsz%7-%JY(iTe?d zuJSkgr(3X^MG7U84sfd2cOgwf%~AbG#5lkqF=MD@7Ohh5&lb59Fr(*hju3#|LUm-4 z=ZIo=bQ+F%lTq#A5JD?LE8kHhR>&+~q>6y<RS<Sdkl4yw;*>)GpQlh9C*ArvBOL|t zJCnv^lF}~$my74M=T9i@6Sq!e@@v@Eq={>6;t_*fy67GYkKdkR1a<LHu`$DAf!omY zHc8AgIUd((ffj`~VGNqIg%NAiPeI1<FHNGb#AHSZ^}<Iola@s=p(@Z#H^OHrM?qn! zQQrQ4VmF>*D3-Y%%1Z#C2_@V!W%MsG()xGS9%<HZgc&d2Fg?Hz!u%16Rz@=v4>O`2 z{LJWb)3iIhAf6NCM>|QP)ayr*tC?{^CPQn4(z!V>`;Uij5!wa&I|MD}m?R_9f2iB( zzuh!id@c7B=G3s`7@^h9j_IF1wP(Kn-oL9h*>{+<Y|ftjWES8ijA{5*61#wXPY8K6 z=1yz+xexpnQ~1Q#kcEvt9ix7aP6+?g7ov_fGYDQd$Bt-Edk3Y<?eS%ybTK*nnUFyW zt`A3u8zSBj51Br0I>ss2_)we(g(Q7!ywLI}&t}D!1<d6t{;<<8)Btq1R^x)AqZW5V zs4S_>ds8MGFSk2LmK+U(@-toXi)9tzsK<(YV53_rEvIVx4kXgpjt32IZrV>vml%{K z;=!B6;$e7Ac3IW)Y;+jto_gm9PE@Oc(K|Hgqo1>N2#OOtaO6sQFu{E{wU}09O$xg= z`{$iX)Ks1!S?DiYdL01|xX!%z&Y4H0<dd>wTi+H;sgs7IE5rA_OB#iJx@hRG;1b}c zIr+w|?j4%_D970r;7!I%W_=s3cwUDx=G1FU7a?ovs}8VZ!M7psy1o$v!<n!#Mt!)n z2I;wpRPfao!G_%+Dj?<)wtJ@7!_t?_BN;`AS~@kG`EL0)&-KMb?NohFpD2q;{q_hk z8aVF>?o*c8i(;AMS|?v>#RdW$wH-Dg7c7nV$^R!2pWb)@^T_*k(=mhUAlyG3qY@%% z`J4d$MyEqU!O6GG9n1HDO0TKVjMT@1{FON2h-%}?n;p_-Ih?6_?6}t#5nx?T75|Va zp4DWbP`@f_w;ar>@BCuWRk!K>OQXF`hSMMU{Kp@r;$R!IKi`!n;eZE(L<ENn$FtO1 zn9XNHLZaSTbD>tS5EesF$Rw#nv3WukHLV2%jT_QWuqdM9cEgSzWPshDphLS<otyD% zJjXgAu}qlT3JgP@UWl{^Mk%)}OIhUG5L_!8!E8(tEhEk6Fg5lo93Be#BL;=uSb=`W zrH&Iv=Fq=M@k5F2DdnM;#+h4o8PCy7G^Oyn50wVWhH$SHet(l%`>k{c>hY*XP2TU; z$=4#<3hJw{MB!}(bc=S>F`_hoyl6EQ-H2jJwX|VRzWi}@|M^5~;$L*N^_*YywrhUD z)c1S#n^T9UlGdlZK3FR*44%{K(->w$Q}@VQns^K0E`m8uZs-uQVID3YJ5MeTR+lGl z58}x<hL#kQ5I2zZ<a<G2H#TFa&M4-r;!(oJj|rW$e{ce|%n@}duEgFF7#fRp{H>B8 z&(#P=C}mILR&inXG<QzJlE#>{u3N+LHS33zVLNW^w-VEwg3Sj(8}F9Ig)!Api4u*Q zLrGoZO>iCinC)h@M4mp_j#_ALT8&2#*_ynRi&|xeRmx4*J_b&Mnft(n5RxlTt^^ye zBf8gvAzh0nqgD8n?<=6P1-F7}r36fN^Y`$8TV)IYBmB!_K954Wi#1r7uyII?d+@jn zrXhKE-DxO*OaZqsGo4{XdBs&SKh6fpNN(U^i8QGGwo})C1~z6G$T@Yyv9}7d-LbRE z;22hCh$nY`2c0!lnWm0-bn~P<4Hn_2;~1mVfq3gM>;xk%>_P_<yT}EYR{U|oafrov ziY9v{kW1U(u}1Hn{VHQnJ!+z{wm#pXP#oj1n=STL=rYj4u8moE#>mIOO=cu>j=sX` zjcYy8ZQ;^uu@i4?C}KTqwKlJ89Z_HEvVMQdPHT6Fd%u3hU90eN^rxTL>8+e5<EF4F z>7s<-dYkk~xg8^P3oIE!a%YwiSwB}wF;jL$S#Z#9L8#yV^T}hN-qb4v0|5yDzA|$E zk3V^)7S_(d;_!ce@tRa^oM!kDK5%>oG6g`f41J!BeK13mxn}+@WQ=18IQE%j?rwE| z_p#121VJT$olPl>TgT)DZ_DHck9WN;02`#mu5Z}%t{q+>wS+m5T59{?JhXp?V%TUU z@W2`cZZot$ViDVUGds9+ciEmE!)vyu6Bjw6`!+ao)eQTZ0}^32<e@;2=d6)MzTbj& z_{fRz8Y$KHrsN8OAA53vm1M9ME%1ge*-Oc<BQfgakp*#wdzWE{ADeN*K0DnYRhMlv z31dcDu({;emW2^CDk`JgTiRIwnK^ynmeHG=PB7*8ghC#9@JXl&f*>#uUD@86nq&u6 zqu#l^%{-Eq%Ls|mUT4h|+WZT0prpv{tv&a(dR&ByAS<y%>)f>6+S2CftTUxrtH(K_ zdk&YnYX9?sz3cSr5c!aiJ*W~@DM^L`VggGJ<S;|l=<c`bIN$IC?d8QiBdHJDO1!Id zM<q9(g2L!g+te|*WFw8h2PION&`x`Z$qi77itKN>UpX7ZzT1c6!~5mrK>0&s2$dnM zoG;LzN`z1ueT&mi_^INX8rwiDn$+sTVxQ89&WssIYy*Xq{X?EM*)Hz74?W&dY4;Hd zlqj!|oQQA;@ga9zK&$a`4N&Xz8_DA6qUTs2Cs3Q=i-Ty$#XJ*HA!@Zk`l0!<0p(q- z-H>K`?Gk5R4aSNE8yPm-8dxz)y4@IgWJD2mqgd=$_S9T|7cwv*6lKhp-blw2BZP7= z429eoj6dA{m(F$ih=mr73awC3sBHnkSEQV$!rsDh<IIA_vT1iesBe@j(@CUlYeTBi zPMola6BXvUP~Fs2NEef@#H~cmZC9)A+#iW>LXY^Blqo|#u167movLvTe#L_SZ2ulq zFb#Y5-s+T_vkUTqKedF36yor}SDRoS@cR?~h?M+#Q-0mm=2R~oDug>GTj5dl{$cCX zQ)qN*OtA(7Zea>|;NdcDILiZJ+d8(88(lnFEQrVlZbGU*WJbrMkjsYWw4Z!pomo=J zxs>MekcLmSCBEPG%quLxcNp;(kGIRct}jn-ja$H9-n$X&*Vzqh1=;A}M~dF|Hiy8! zARwNYv$OXKk>U?8Dr)Q#{J1O*Ekv@sAw>1~X-lazYnGx4ZS8x%Skvwm!?Mr43vhkC zn#mkd)I7HoXCfKOAQ|2ivr8NmKv&+8K$sXVQ2`#im>T$Z`<lS*9qBuNP0%iI*w(e` z@B~>7f3_~^rL`$-`5JhU!aBB1s9?Kq{_4*O0a4RN6s;Wd@sFcQ9ibz!Sf*V(-Dt#h z=hePrBn)Hj8<jM-%Nm#*J0~_>tmMwlb4UJJE#H`TB=d{&8qK=gvf)-UGJnhbb*-GB z9ofa+OW>FOBc%T(LlXScW^jhPXjvx0;-l~8Ce+*Hm&o2)ky@eVrIuYmp4YnHpgbav zM$V0T3><!JpxE1!Qd2==t$J6krCn`SBlA)44Ths#V;B5hH5#=qm$|lHk>?#vL#X#! z+zt<yATBj3moz2f-1I1pR8F~pR-8RFPeHh&Tq;st3r!_%l_dk^3o9FyE1DlxGM8#H zEVH4L<Z*r=|8?e9R{Km32G0Cqz?mPIvH%hOZ<WIQ=QL$u{O?iU35fwX>ib6Cmw4u< zygbPPV*ARYRZ!%Ij-Au(ArU$^3=)BdsK2BB<JS|dSN{&<$Ck-6+Y26b8Z|FKf8`at z-=pReCPODU4UD&;WW5FvGY$SlQ`KFVWF3pK)7Drm=IqxU>fuR6*h48yIsv){?rnPH ze6Zaf#aQ+70L&;p|Ka>NYvibvki|da{59&-@mdrH`!x+X6PWb`P0~&B;1R$(6cDwN z3Lsj!l@53sn^1-9%g6Gt4F0M;7mA4)#BBsUeLZs7kh^#bfw4RlDqjSh5qSmDmoYM- zfW%XcWQy<{oy!MVY?3;&E66}Ac(iu!i&3QQjkcx*f3Cd?ZNY4|qTZl^a~O&FrHsWA zgK5BI1j%9nw=|&{LzZTaDxRBS>NO4r{TU>Ir}G|Lq5kpANkr=#k&KA7yulrIM$ggm zHSN-qkt5Q9@gC(8{#U_xN4tSW-bs|9cK{FXkJjc#gd5}nG%pFX2ICA1B}?|mT=-34 zdJj&F{_8CfFdK_4pK90>OmYr%tceABUl(n*0A(JMoa`2E6YPi5UGqCKteoI?gUkEd zqXA=1EI9IQ3pVy5m^$CtFyI}E;dmzl(tGS<bQyDu(g$F}8W#1GQ4A8D5Ix-2roA^Z z0A8rf1swIqk#u=|ASX%}oA!46(^Eh!;t27;#6z~gsM*^c$P&+RB#J`8lG=QgY2I&L zW@}ROq3~|JA><gW^>JBsJVscpLmxpZNT@bikV}IO?P}(Ckcd$q%24tL!Ru4Rtt8_g z@D{~}Bo>JT0x9!UcAl#cRLZT2d*B#iyQyRhS^{=WR3<!zYeA@?(vFNg$Yc^W9N}!7 zIne}1+Q_H(NRoZZ>$t0iLMe^rTOCcDE-|7aHFge)i6Lq>g<l^u^&T``?sj``d%*&$ z8!$(W8BsY+e=y987Vx5vo`Qe>6J`#`J8*e%U+qRa&^ir^gjQ+Ur1hTsa43OUs62-4 z`$1Fr6k6!Z94K}P0#P8c95Z%v1im&<<Hg95r#=%b^c-FWIfbOtA=-+Tu1pbLCrsSL zvpQRQ8o&x1^?f{6zDS$R4U}nv1@HGz@pOpEvj!oTIj;;7<<wTG+nT=%_b@v=7E`q` z=ue;?c|LC10}oMu=lpUErRB@NbAGo7!>ulbhovr@q#TRUA&HMo$%|1&I^)WfA$x@O z^j5~y!<l|dcv`jmzPOi8$^8g3-I7k0oAr!3J?AUER)-z;8nsRb+ImO;Buf<|pxDY3 zIOmVU$%hvNB0#77FV5a6Iubt47L7V~$F^;!W81cE+wR!5Z6_VuwrzHjzSZA1XYS0o z_dLv5t6u84)~fyA`0WjSncN7wGvrNYL^<y+19<178p1&-!R&}U0nT>R77;ZfLSA7X zc#13bJ*i8oP6`gl+|xJhB(7r*>4eDBBJc86g}U1zQ^V^gU!gCr7R-Y`t<5?%B8qg5 z*G+v>Ii{jFQ_~z*$#O*yb-&898o4^|?Ky+@AibfLL0XunZeFE3Wzv^t$uEPI=_?Gx zd=q%gB68g-ya{f;B9Dw;TVBkjA^o~uilYWZGMC=AW0Q;Rm)JMUNQ&7b)!(PC+*QR| zNReq<C_BZW5%eBm#`$B9>4>d)d>GiR*jb<AI7NT7)$c~w+sx!Js=ZB2`h_@KF~J86 z&p9k+BK~fAxou<j;qm?~hyz{RU=){~D$XGV-i7{}3;V^$eb8o_S~2Tt?c>dZ#W!*` z6IZ4}rLt6G8Q?|B&07&a>mdj?#~D)9pTAkz*?FYY>$WIZF5S$X{f=l&PaARN)_0ti zqmrU~88HrgC9A}&#z>xSFqTW*K0^nd4HHD@mYRS&K-=jI6Np~L4J2oqg?4SP+;x@| zl|3s&F1;?$>Ogu1o?Si4#`~D+^I%lF_)&irHV-<5ME+NaA}4ILJNkxL4daYL-v|_Y zE#y>Ecd-f!A3h3&9f5(J)$&W%*JdS7%cX$I9F@^1sl4eb`3HU{$#733ZG#NB$q9Ei zPzbhVV`@W_?as3O2RBb}Sk{KB>_$+}Rk}l<5myRCXU^32LEa_sEg5Ti!7OkqdjMi; z9gqgEJ;A_GCw4GzAd#jYEnWClX5pV~U-L?5749g>8@s)y1Q|{~-3UOZ-)mV14E<E% zqx#mC&qxF2?7i#HbDPqK(5{8T!d=nX00@q*Fnb8s@2nf3)~7m;_#ZZwAHqd~$yj!l zk3JgDz2bX`vquW<mY7iar^_G@XxkSw+50#m->`WQnqMJadV&8ts!7><l%)bt%@BZU zT>lrSruXkqz+aO^{mgNJ0r4xFZ)l&ABOt-?0~8uGA^<kz2eN*eEP0{2B$53U!B`UP zU}q!XCOyGXsCIQ8ZwGH(=V?1=$+3Bbs|)(itygV`A92Y_UPyqPv;><}aLLhNcgoV2 zJY`F$HGCE(n~~;^EYdfPial@21JYBI6mlF>kR*K^^>GDNOa0+}1bwDc;*DRDR|8gu zrg;EAa+Efy?tMiA{sdOzr)G&JMUb#XiY`6tbny?=E02;N-lk@iU_%7aJgkDibe4nB z(E>U3A*b%QzpG9h@PLW2*AXKDCJPeY4-Ta@PRoK3l>t~uzQPkZL5uX_$2R%sC`2x| zZhUY`^xSVR%R<~MuY%#n(%4pPQ3u+L#6Swf18J0WN-5%v*Brv@<MwrkDg++#;y3(` z+J~S?muJ;G;R)Slxzy`ah!#|aLH=`g#vp}eBc1vOabpr`iSecSz2b<_lrO5%7Z1`7 zn}7qn#y~4C1QB1N@*&-XAsP+S^(08Kxre<>NHRGHBM!W-@H|?$u9;?mEQbWA{5@;9 z1GN#C?~vz&29DeJNj9swv4wM)=FZ5^Vcjb;h3JWA02wQ|bZhq~)30|K{G95ik)kLw zvRlUA^k!xZrH{=mYdCcKW+@;HqD*8kCyw#d=-APUSHgYmEK=@okE9&Ax+@7$poXd- zMZBTzhy<vCiTeF>G0gFQWh_>JjP+D#d6rw7>DvsZ0+6wU+#?M@FY3<5m0Ap#yCCFA z74CYnIdFLZCJS0BMtPlBF%S~=s47u)0KubfO<e3kjYuGv5?|%wgGPQupjC4pJnO&M zMmTa&k@b*Z0IZHeH#c%Gok7%ngtLC?OcR{sBv&vdLGfGB$U{92PHA}H|AcL4BS9xY zP+&S{%qe5WRL+yCh7~b_Jm?qyVB5SV|J23p{|Va?)HGG^;KV-7!Q!@oe+HugWUPro zY<qP6>#;>|LkT6EbFqjFFwFw174aHWX+&s4nmKWsnP-+uPXX*Ydn3IZSD*#VdW_^K ze`8Jq)ah%aq^VsnD(Q^|$nPnr6L8hJkZEMsJ<6o);FIkjIyb)9@C$FSq<O;8%F*SQ zZa*R3YIX|JJm`~nSm_~(OEc=7GJ4pQKI^5WF>Tx#vxIBRZ>7z>T<f%cNvV}N7Io7t zc$#FOU)D@<vsqOA3vP1%2XKq{{{c5g2^7_ERuXAiZ}cUIMNJ(Ap)pCCUuJ11lq#qz zT8t*V=(z0t6NkQ1o^B*=m|XqJ(GWv;=TjnW!qFzfY6IJRF`}z8t|gt>;_D_gHpgz1 zrRnj%k(J;#4jUl{Cis(`&<d#$QiU*L`$~Tl>vJ!B#LhHrBw4`m7?2lvD!_5yCmwQ2 zeRL@u{fCIv+Rg7I`g+h!uY*FjUN!yVT1695*|R4~O4+UOYu?Uwq>-zEHr~8mW=%xV z{k1?({>y>I4b$M@ET~<hv%K7Ik`ZJe=9^rwmDh80`?#Lz7j=<Vq639F4z5@?RK1)R zLY&va$lwb7JI9Z1+@Qln?Q;!epqgET&v*_~Gn|!6Mb!1!>bN+u!4r<pH>76C;)-<@ zTKig)QZZI!F1a#7uF{{Z97$enomzZPUShOK<I0^2<p}-H^9ifI5Z1A08YX8$Ib}Gr z*DUevk(^_&QeQZSe4Xm2+8D6yok^GSwrj;&h+X<ygtv#o7JKkwLz%Met5Ceo14X#b z*lG#3vulyo3qpQt?EKG?Q}~&_6uh%I4vvlEG7iX0zg2aC<~n|e-7&%Jp7ODnL3hSZ z?fQpjHN=P4_ghF^KCQTZwyBU;1gau21BOI4@W9?zNg1D2tmAE%D7bgdzENz-XLctQ zyZmkmJ($@e<T>1Iaa_lHw3&(ij<ZnDv-)KHj0a&t4`ip9NJ)ij@AVzh0Se~lPyi?r z-S!p%z}PByTG<a=?dE*nISXr%RBLW5d;CJvrC&=rI7kjBJ@${Q=)9fhk%(K`+H#}G z1g5ov5U}H(#D15Jiw(pUfWX_m#T&p~m07e#s0-*k<$v80{s-K`*^zwoQa@=GUrC%j zP;xXy6Xcz(0z9;uguBAXAN|m~u*0tEe(Rc@p_Eom>K5{b%d%f?4(a~c{rcYu&%ofg zHq`)dw*bf&u>X(Y?!RE2&0ovrYw|O)*-3Nu`%X`JX`y^F(qG3W)IboMKvPp%G2Y?h z=9=sbd-r$L$yT!I%i5M1J7A@=yH~?T7HfrWkpF|rVt2;B9G9YIk2o=K%Bbe_sW~yU z{_BTiOOP`#(t`CgN*F^-qf3E)C-NS^w3*t6{A=1E)sYBR2@ht4+z6D;iZs^?*bGuH zn&z?59F|RyvOl|7fNO<PQP3g}6^rJR$kd>rp$8U591|t?@z+0*iDEbtOR=Q-(<hs1 z1`{k>k7-T6DJ?tr=71JrWb8f|QzBpI2Jokzq0!DAkeOn|uRMOlOOeh8<E18uY=$l4 zjtJ35yprR!pXR4ie*D0rO`9jPMhi_h&H(j{!3&iZB{Ha=?M!(R$ArBAj9o^IPRw;8 zRHHfgkIHV}iY8p*{#G7Oi4aG|vvkJrC`82I)!HJ(_6Y~%tp#NJKZpsyD3{r!%WbHL zwfWVfj@y^_umpWc7QJa@h0tmhi(wGL`WyQ%fQIEfiBDg0AZAgpwoN1pa}BaYwEI0F z3R6EVArH@4@5dUBNHXoYu)hti^xN;dL1e4V1fKk(1O8rUaf_k)bz4$X?RGA-Im~;| z{x?vtpe6s7u__IB^0q(?pGJ(N7z|TCSu_P_THZjcPyMfFld@1LDf|(gL<(WhLTC#n z&JhQhCMJH6HFAa~5*&yT)!v~J^U<i2twt<QhTyXOTS*!lW55)fd@cC%F-Jf{`0ZqH zz+&%<+k%BCApM?u5qj1L?ktoXm3-7I?4rS_ni{XLk0vAaxX{D4!g)nKfY`LkcP-<? z6>emWYRsd*4w%MCQdzGmWO_o2CNHAMh`1=j3n!Yq=M*~R%7A@d+VWtySn9Wxk2S!u zi9(<5@AU*d;I{DQvrwM<-EG#*=x&3}+%o1qtTM{>*Rt{Jv8lbv&c`cY_0?Q?KQR20 z5N20^KN>z^`Efk-vX5V^Xw;jbL*7NyplHW%2`=RRisp}qrMy)}GhI7~`{ANS@=hFe zVQ-F)gbIuW2oylB042h-Gqji|v3YqNx8ly`Xtmi>mC*J%it05@wuz~uRXsNPzz;E` z{Wx17M0*Ri88R0-AV)3{@1!=)kAZ4bCU|=86ipld>(``}BTB7R=fR)rbW3nL(V%dl zrgR6EdtO%+(?2Qtkr?V2W9J|Y2iRaKj3=*gbI=YX+bCm>>!M0DGt)Y{a35D^%z{Th z^G&)vv)kIHTwaFT3d#M3W-C`5fM;F=JvTKo7giF2Y?tPk9`}gM1^6|B{fYKs03L^H z2*H>r#V)dh8Kb%Z;Bo)>H8lA(hGx_$RSN}I!-WNHJ3qIGhjfYne$BopW2WaHQf-2v zf_*7Kq9BlPy0P%cR+eO{VEOr?v#(t3u)Hr}5RfPU`tvtYa5vWy7R3ih6iDW=*sELE z4ymluRy1Ys`%aYlD&V>P5<@bfaXrayzzhGIC;;I%_OlJL-}tS(`ZrOqxf9mTgxvD` z-7C9DpLnKNi)YddFi^y!`XS#CQ*gWM!JhhYV2uYeaJWF~)a$k&|L3OxcpEPo&#~)e zI<G0WpTZlxf~{CT;Vi`|L^fmj3>U(C_F7?o<%tf@k8aF8{c_cC2zBh&Twh2Y!&0Ok z=Gt+<Ox8b%g2BXG?wk}8W!DbJk8GC7F$MVcaYL-o6vRj{gv05jgM%E??&M>|l7=-) z6@<Ry0pv^#2<w1i4b{_D4T>PUmh+r7TTWTls6U%yO3ya4-&WFWy$CrCH_Kpt2a2_y zBlV3vS;&SZN1hjXX9mM3FxYxtt-BOmHN!J$nVr%*Js7D{d0#%rGsyFA8+#_6d7~E{ zD>=Lkp7NjuS1txUc**n2rM+-KPK%FXVc#Q$Wiky+`<g7_HdhFm%u5;!mnmATaR%UQ z5DlkC9@I+!7jG2O{E!to+9Z`=3wy5yHeNSetGZu4ujyXGlL%p5zm+Gri<R^mECR*h zO-VIjCxX3#yEqQE#gO^FWjwR}__5h}-Mq_}lj73`HxhFGiShg~jm_t~#Opixoen1M zh4;OO_91&^>R0R7L#b#y;{Dxdz4|?7F#1l~*K9zlLho7YPB}~Zo&y={i|UDR<yGtT zu6?)P4fTJgW&tO;C)NP0vI9^v&i^r1{X1pg^snl8mhjhZfs>mnS@f@Q|5Q?wN-fjc zFYwny6HyRi>N6L&H*FBt=;_>IPJ~gn+hR8E=<SK~xHa$AX2)i)?dSinWxKWOTSP-y zv7au|Z%m{1^l4mUn8%kIYxy}%XqYjTwvSli&?1RqokFA?s9B<c(;pplNCT209G+~R zR)0%;iqbL4##Dyu9<&L&m=S{0-hL?h#Wtls`14!2NI~18cv8_=jNrbuJ<420De|jX zi{=Pqkfm|NG4gFOAYOp@E0WfIgVHZOn}atlARdnP)}sLt>Lso(cg#5`;nV?_IcAjF zlkY?^f+c?>#2D!%-)HA-k0s*O43G07KN)~jSX1fq!~cO)mN8iWfm9nUO8}&*M6>)C zspM$>YL2+wcL2>1;nGP$3!F&8y-eXhG{<|o)mtT=XJ#fxkmD#oynsWCxtOgy`quk~ zCgVu^w;7~|Y}uPeRw#{bi6lA}d|>KlD{yp9E_}Y5C)y7w^Vgr0F`l6gXb#^hX<_wV zD#(6TuuG6%(2A`EPAnKOxMRZ(`?mVsADh^-Wx&6G#`B-Kvr`I1?<`I&srp26t25_B zt@)K_FK`yu)=wSU<MDSN`ZFREYH*-ONw2T!CsCmSW9O&dp1)Do@pb15|B4IOa6~MD ztw$u-;~~<=%f~k3k!1&@3x1_dE-A7;(gRxGumYLfM<3>L^;i2itUFwjXjkEGkdh>l z{I=z?*p~Gg=fc56$NBSB{jsdXS9r=P1lGB=(Q&DD?l7QA=BiNeryLcEJ4B&z5RKj@ zmJi)50qKIXEHzl{J|ee>^N8eG56>vhrrEPqNXnC(Z-w>r9fAg4tMIIe>tzm4=hqqt znUT8td&Ne#cAKKVGh*ncL{Yol-tV2kbVt^sZJ2T#Q5#rusc02)qmEp<h!2IDhUFeK zeX_3foE~DHd@vm}ns>Thb3O-^Eics;w1U;tRqvl5w)BDIwm}gEgBq~Yhwf<G;{M=; z3+Fbr!T+yxfp7NTbivQ>Mp2@cN*hYO2mY>$13?pp^WXr<QDh?8E7+u8Ud}+P`mEy( zr7y{dNgIu;x(rKi%sECMVviAXLSdeaS_;8AcA}AS@yNi7scH5#qK_JR4Rt=8WG1Z- z+dwb#x%JpRc?uC2iE*DWC74?P@37M$?9q9f#+_>J9y)HtsZa7<lRmwaXjx>rPs0yo z_4s?Sb~@It^6zvugA+fWL&Ym_ZF3qoT>2ZJZ2HQ=`mC+~ltRJJRpUP4axC=(x>O|9 z2_e1tckClU&n>D8(tVF*c1zhe<I9bbza`m3rV}tIT@#!<9FQ?`5hh+|6BADH4j{}h zgK{C~E@XVdMNg)UizM<8b3{OqK;lZ2|N6xewv}ohfe|%M*}u(;0M3DqkP@?Ittn!9 zwJZ^!G}Ai)q69y36$SJ`4WMkIVjHG4ue136QUQv6z9sG7Q!U&m7cAdjZF1jb+gT!< z{^FRIQaZxnmR@}p?9R*AB$fbSOS6)w!JoQ$@@FFx3TyNiH!j7!7@m}Cd;T1gF*f(A zS3VO6iM>0G*1V5uK2q0=`4CQpps)5vjziQ$0y=Kj(8#rYJ`)T@+m~ds&1oa0CRY;F z;zz8rmP1-FEb#7KW8uq%#F6gAvxTqBMmk&9n^2Cs3d$2;GVHHe{D4kBtUd0Bipj(l zixxSE&(yYrj_&r!i3XPxr}i}l>S`SO<RO;gYN1i&E=mp+gd4)9V0BA66DqAMR~Ke> z_VQI&1AV8-C#EC%XF&_^N}ZL-mK}u(jSoNu!4y4cx_#JwBXb^jFH~n0oo8GF0Vvi^ z#?ei^qU;)=P1*;_Vl;QjUga#_t$W2+|3?O){MBd$Aq3*wORZ!jeY%o>H8)a=QuCyo zK)VDFhd=nez-arxn3ITz+PY6DD`gy!`z=|i6;w51JTLiIv_i>zy%LCzbs|O>%k%~s zW|A$uC$J+sVDep}iF46ThGoHQq9^&q(ha|sO-Hh7FCz>D_eR^Iwx>yB-pC`$jd`T4 z+h7Uj1~NZWJ}P>PpOf#|*2Bg<SgRZ1WtTyrduK2f^X*6fO$YFd`+$i-9|FopkNHEU z+0trj{u8;8AxWP%mXkE;Yu>zZq!;p&ygd&KKOXPL|8|z#w5<Ob0D!Pa0EF@X-$K}b zl^DJL<_7*?^9^Mv2sQ0r@Hca57PwaZrClY1IAg%2g#DdT0N!<dy{)7B!>6*@X7uXo z`Lm7By-Blby*hJc7vHy8>y_Eq5;W3^!%VTxVgR+fXU!J#EUwrXd(;$>d8$O(A-sV^ zuLOD-28s3uZ39n)!MK1U8mN@fFG*HujYlMBa9(3<%tg8`0b6j(A)?q#ZAW6i#G^XX z(ZEF_6>Uor$;L-fN(VBI$kRzCs1IhX8suOB)_Y|qs8>ac5)m-Nv11;4fbbwDJ0qlT zECk`5Gc7Xy33^+~q*X}bsZA<Pe4mgr)2>V;b>={)G3f(&&CQQf%J^r}$c)$7F$7<{ z5L0PAZK{AGRodxCwZdTdn0gTnlIM5zn56zX%Y4<G@NSUqmtT(Y2#9NQ*u6-kzx(*q znp6nplf<x4MSJ6+qH}0(vf%hhjrhrlXZrpjT{EiE<t}7KJUg6GrQcSrF$HtJTRNl| zBT1p9&liUV-J1Ndfh;^35#r$FgUcso@g7YU<t-$MYY#jE53Q9u|9_z@U?S0g!yOxb z*tgd2@z}(jD+3k)Wq!*~wu+$`z2%t`G4Dyv^`<=NjeiumN0=q`j55deh<rW!fsIIr z8tloA+neh9DVC@}mIdi|mmbvgeLRIC((n-*4+*3(4GDjYdr0^3h_cIiBvi)>Q;0L9 zUld!O>e*%hf^vTq#=?Jta%1BPuKL{nDvTcN4j@&%u9c`T(Mf*7)j+JvKdap}mHtam zPI}*hlrIOZfa*Vja%$CMH*EG<RpXqs7;OF?d&n+CDT3%{w5GEHr2y8I<%JeI+;a*A zU|r0M(w2q8OO+dD<g3b$APDrhfqn;U>npZC7Oj6{-1Ko`yDrsJt7M5#YDijl5%b7T z?drNK+&}n)tv*?5mqymUni+P~cTyQsU4BnR-K_CX77hEdwu`tIo1p6X&B8$39`XVa zHc@oOYv61L{(ij(5P#y7%CM*ShjkTPtUv)+7xXvA7V{#uX5PC_cylRQo;I3kkUnQo zou<il0PBK%LTOpbsL_%JmgXcY6e(XwsJKg>RE2Co$4jioA_dma@W}I0&yLBbMA%5o z4_TH2(~Td^`6)``F$}g1`Fp)(2X3U&I}$QH94W4jWE1M1U?+yVsPw^fOercw&9f^V zRCRvEbc_czg02x<_IKedTQ0}J_#%O9wz&beZfp~~u;z_@W8hW|Op1&-s3<R33HEPp zDTi>|%d(q+`e)QCrs81S$We$zR0R3(l3`>(h%T#r0ha$^O<FjxbS~5$3YvQg9GUFI z7ON5zYp#WpsNv8Fc8*4_oO=y3ru?R@%-Ta6ZHzmivs8S1Ha+-$M%roB7Yg95Rb@e6 zZavuhJ2}{`rA?J6nJ&9#Cvi-DbkZ;!*>Cnh_V?Z^ahf?d*&IhAd;+(jl!0BEW^g;C zyQVT#=f~l{F1l3|OJqfHm_=-4{-?KA^HRDD30+^EO$FT<*34IrO)X^5+19%hFKLHT z?;O^7S0&jp^nJ+fueTN_=S6yC_e5F0ltecf0sc5sJi=F-2IjC<&#F9$_Ch)G)3LLb z=fD*&v!I!{oThjM5T~;voMqsFiWB|C$LZ<q$l|f?=d?aJb-jg1uFHGG(`P*R=TT_) zI(O)Gx~t-zgkkFWEbkApnqn)vnukX7v?X1umT7S^Xw7|aNs|ktMj-pQ((^Cg;1oou zsp3gva>(<{_I3$UQ%KNEgBmqTzj}1418xB&<_%x5bW?!M=8>)g%XNSSSRs=13dVLd z(7SEZ-vZ_6aZzm>R2-5i)xHcSb{;4@aKU~lszJXLZaK^Ez0Ab-Dn5?0;ZMRdzt(Bj zJ?bb6ob;x$D>lzA9Wamguzy9&h>G=yOFZ%quc`x%v)7~&x;$Kw-GW#DPbG3h7V5EH z#t>(o!;afnzGeI3uM(*RNjirn-^)5Dom>5`I#;>n)3xnPSszM`2j$%5RNVbOZwe3+ zX}70v4xUp~oVrMZZ3S_eTwe}vXFHF+-9okkHZuEt3ru^%Xqh7e0`+7-bMBHR=Kb+0 zUVY|{J4Y+(?Sw9JV<O^#qAVsElOqiRU!H=$_=4Qbdk@_B%V@H9pOexrS{5iz-}`;C zj^glqLH|2JL-0CCEd!t%!uS74>Bj#`g#6R-_m6LO;W+;T1;EZ6CY3=Y%TxU<T~Oq? zRTX~VLSULopsCAz-`rYdioLn!?98MA?$Wa^{>i&?qn+CMqBfz@?dpvBwI|mdTFYCq zoYxjACk@Re)mAVf_LMRAS4af7W{eBg!zf`CQumF@{cnoGQt}fta)xORKeLAV<}pl) zu}o>+fw+R`8e*as*}4S(6VwX*vXAVi|MIhnzx>Sf%%I$Xj-$eSk{RkFFuNKVCCK!! z9Kg@=|A~KNYTcGFfBCy)WsmfYhJgq3=!7SQ(L$Oraf``3x+XKkB+Q(ClG7!RDtdPQ zq&X&Jx#7T(oln!dUG+eS(cXh-FrQ9hvu&gpCtbjqwQOQAWJ05q3f5(>78xI{GtE~C z2oDnUe91o|f|YM5WN$+v^_rpMsYVdaxEC+%565orJMBKwsoNVd#yLJb1e@eX4i+45 zL{&QHNo35q$r=LqW-qY+_+}ajA^_h^G8GNpbLPF)i^0>8DR?3Agx4Gr?#8KjZW<6F ztl71O8%!<Dr2APeW}GN8p}@AQ&vgl>`vQJYw{g?ux$MRFm!T<eSU`v+5rVV3IJc<c zC$cR|?;1YqS)Lfno>_S_b87#RqvzC*78b^v9wJI*W5XzpiS%~@Ftq(Kn7TAPDx?Rr zzxnSZLNt(~tPzs55y*pR@-@x`$Zt?&52oc<?`9WNHKBbF2p)XF-(j&a`bwz9*8Hz- zTl&Zq?f|Hkq3-vjNs9*X&4j9fX#b*GhXI(z&0)u>`c)*kI75t?t`85jvWHU)+G^qO z{qJRz7HY>VI)rJMP&j>s9|f{Q>9ZmLg2saAYz^?u=-&tDI8b!*>-ej}G9+v+0mj+M zEy@Ofp`8^QK_b}Yg*~mGc-km^osBgnB7xalu(FLCkE{Gr^{!|Vj_N6_$8GwFG_>TK zv!;3Y@kjB8KH}*_+5||D9S1J})aY2dWs$qsLzBDC5IVYndAwnMv@KDT#%tl|g>k>0 z)QCTkr&x~(B~vKI3k$hiVL`DajD;s)X)z~cX5@t0kXvpr@o*vnR(J6VIW>=Y2rN{y z*qeP|k5Dj#43>2bjM3Oo2H~4?p^}K60WE^u;N$xN;TwNY7nS*hkSLHrQ4G*JzaI+p z3}&KGg$a)}0=w+aIgYT|RF}{%(fE-d>wshCyom8`(C<f6E3t7<6ck@6aL(gJIyX{I z!MJko(PqwyVkGlUE<e*Rvr4VFa<%RWhe4~RD-KLE9)emL(<&E~qYG=7;EWv749<A- zp~vr9G?BHFKxYnOA(Nro`d6UIsBFy0HypzF0t0d(p@t(=WHko`Tn7#sD|X^`#Wg;Q z9EtIis$6u58;xBa^Vqw6>zQk&N9IYK&DmqcS(e9uBW#+iAUQ8UBBXthNp$_Z7e~+! zh;CkY&{hyYz~oyg@~OZ>rhaw==$ZW@M>?T#z>Y!S4tS-mDLhg6X}0XEHV9$ZC|#?) z=DP56^%&FkDR_R3NcGyDUAO1fl1ITiwIK$O`t|^@uLJX|r-5G+->f<x=GDK_hzB;| zpGP*~>6EBi>{6jVkk6J6aiOuEWxcYI>gBi*WVsi_KGkMA+d#T8_qA6i{ec*sU!~|l zQV(f{&5q*{v=$!Q#Dcz<H@7we&lY~M)A0A4vo`)716K189GoN)%-NN^lHTI4v(VH6 z5H2$8spDg4s~Vh$bY(yo#FG!SHzv@nXRb=qG;^C`f#%JL7-6+F<R8LCJ%o1zAY2eU zbm}jVIC{A#_UaXF(BrKFrv#9NqO&#H6zc*`<P9ppUrcQLq9&kmHaL=C6%!IQYVCBD zeZImqw@&UO{0vhx^4;d?-&zgKBp4tFQ;4?rUDv8eLGkv0ltQ;KUw9o`Rc##K5dFe3 z86};I@H2&QN;xpG!314<&^amcs9$O#f9ZdC8I7?h?d(U!UfOnMW+yi|wC%_DnVYEA zcB{{Wh}nJOu7Q=Svep@BW80l&;NU~71d(mBKQ=RPz-kh1((#2P(}m_Djk`T|s9}6V zTdVxUYvG{*hyGIb@tRbkliGQ1zb$=U9hxz2k~mA&QOj%eKoH*fysGcospnvWLG7JQ zNY-m)xxGWu`HVH}y4qcVNu!q`T9N9cOvff(c%_Aq6Y4Nrh)~$27Y!3t_@%f$ek;4* z(fzIO!xPa}Eoy)C3XR>qb#;1Df|_Ath(4-ZpFe;;-vSE9s;#J3srUaQPJS?k6v+Uv zZw6qb0mg&=hiOPB6GvA-92{_?Yh>c&WMOOeuT1%$rdl#5Eyex@`;+ry*?4#u$T<gW zP(B<YEiKs@;lb<9mdrf+uJ?*pK+Bqs>&x1dt>>RT&vw3wtu{b_<fRO-*Px^YIE3N^ zcxps7r*|=h8TDV{k}V;|@Pz+BAwk5vN|k;iN<Z=<lSCn+DZo=Btm6=_QXh=|hA%)q zE6^Md@YJjTp4u|a?mwPds{}OmUr){OucyWlQG0@R0`Sy^dE)!{8<)5Q0iIe6YpOp2 zz*7SwP_^#QoPINMJ^$bV7G-4VJGc}4wP_W=o;U_hJ9oroh!wBq>@!`AEFql=GbVT~ z@Q`zmj~({GjG*&4D~`JTQ_QKP2`clO09E?2ziwd|aAJPA2FYWK1+OCbU`L4Vl8E}u zEO*?0@zg+nYmcHugd5?R|LdvgXl;GN_Kh6Yl@yTe`#?ktJhZYZStN@mthuQUX_U6| zgCm@QV%3UD@E4g7KHD4&_*3v_IBc%*8qsr$86Qh<FihFvkvV++C$+kb!E1#Yd;s7! zl~1E3%NR7aRLJjk7(cpO_Rr%J%pYqO+{fR<cJnnmdC-hq<=B<g?<ma<GmARYUlZGB z)8*bW)+M2hA7`Wxlkt!g1MTWX^T*(g%IipVNS;vix!qtBXD+0I+e9W~0%<nk*uaL< zLLkS4^Be~X4FX8{1OtY2b}Gbw47HAyAW_DIvg5YF7QjR6&ekQ^^x3;<DIzI4cj&Xo zu6qkLX;IQBZ;~{DJ*x;c9@-AUJZ|iDT&rA$h*8o)8wb2OCZtiXv8e6)qL=736IW_> zIkdiU(qppui-`UsRBCttaPTJp2bG=VKIc}y<L1}#TK|Q?O#lqKRfoxl&^z4CL%FZm z8F-5|(~C7TdDi|e;12ZM7zPNH8IGuRe}&4q+^DPO3))4YrggasO+W2Ry~bOaM;}Z_ zjo2NYSKW_6;lDy<W^k&Q>gf{%t{+g`4ltr%Oa*rG(3nhHnBI#>)r^L6h|urwGRRrT zzu8FeH0{ygdXd7WwGE}(D}UF`fe<4`3y>7%_X3mg3xH4w&A-w1+Os_kF@OQx`+PS_ zZ%uoHd&Bz5_!RlbEqMH%#wG<x*7v1mu5<>AgoyNjsxQ!qx+u_n(MstQ8>L<P%Z2x( zGDE=X%&K`eH(dOLGpzAzw6&U8x{Zk&(oD3j>558Z?ShEzrPQOuHmqCa`?|jZg#X&I z?*W?G-7@?+n{#uiel`W^rMM7pUe2;0amKn}pUI?y;WTpB$wNCNSX>b89x}>v1g)?% z-6o9+EmmDiGazc7z2q`QY?)oHX#MKWW<JR*8YJ0T=_<Z#WH`mPLHp09=4gd;t+ z0Bs7nZ=hM05K-G%Qdl0%SE?Sdje4mg11P$+zc(Rn?&Tg~PRg!OQh84i`j!L?OnNsr zBdJ@tm2FW=yGq2W3prlGosdds9K~`AD8l#kpmGa#<oYMU_gvrW>&n~A>sQZzLop+_ zAbD}ikeU%om1%9tS=QTG@hEOeTo=LNWxFtq^(M{>#itc@L|;EUV%_H|N`tnJ1eb2c z3N&t9l8nCeQ73IE21BwudVQURFP4_Zd6q7af3BF}^2m4Nf^g~9By#D8?Be@C@;H$b z@_Fq9zPRfZwMOg_UM33s`IZB|72jM|T5y9(j8r@6pa|b4Nu2RB1r-`X?reHz&<v2u zQ@5ZqA;O+AeN(pHHY8#O3Ye-FkJ9W;iwq19eJI;cx5+6KZakgI=J{8M%-U#80v(R& zs6%j1E5`%E*~v0?RxhuU93LXdB7!OeSN(BB`ps!$Q_42Euy=Ag&V!P%VM2IX;At`O z+@+#%>StQ#NA^!kg|~jD^1(6CGCbx<rz}`n<c48zo<57x=(<KdO&9XI2Ko3F!8FDS z6-`%Jf{~VJhtd5mYxy5z#{@7x=j6F!B@(9ce65Jm(KJ}9tEM_y_Z)kR=CNu#2!6VY z75m&3IpOM{-OSo*W2{>(Pce48vq(E1;Cdw{CcaO3e#hG<To3BBS1()7G#I(5dONUN zIw<8iW_od7DZJTW`lGQG&6~+%XNUqth@FfR^^LELBxheD)RUA0H=`B--}`@KYNL{n zr5<oVKqL(RBc^6z{dWx<(31FXJ>r$-h2sSa;@1{m2t#Tjla05hf509IX5Nuvs1)Hh za164-Rmp<=RndkG@KCptjbvkPPFk0?$=jg4q}2}ZPR;6PvN&C?KlhjCzb6oe$klTF z$mn|Cb{nIZk+Of?x!Gk6-MuZfU${HHKC;B}e-I(hRaA_-9lSn2ySo1#u49;ZJ-={Q zscvL9(!$JE9&C~<9NP<DCkulpOirNmMG&=8kq}srTcmI9!4#8-SEH(xt&k}v+S?gc zD88l=^`=WmW>Hl+=+MmS`VOdLXUhIV6Foj0uY+15c`j)#4X9&}Chks=LM<dkrY=M~ zpc^T#y4~SXa!sqG(ydgUNF!f$Cj`{7hyU@A6t0?ADIq&aa~XOF?nt~~QYu`1n#Itv zVH#TGeTZm|-}R+wU<04Xm`@82#qTOzA$>)gv&T5VXBJS}SFVoIfHDmQyZyMUZ%T5# zr2q#sB>p;WIKOwMwJWlU5hi;8lyCwz!8H@3TTit&Uf)wS)2D9NMZfnw^!b7E+Z=Y% zm*)}2E5(oPQ3o}NpR)@4varZ^Pw6Y1NEAnT+mrZm^R&f_j+T!rE0!xq55@8G^8b<@ zsf~)#4w{sNLaTJ=<>PTTLF~R{=i#z!#{oJa$k59mQdmCs#_Xo1QmQnv&7pECoK!BY z*s$K|O>tW&V1r^6i}l04a8|DYyhmv6Yoj)p(@mVxKcWTT4g$GiLr7S8(B8E-m=ZIi zcvRd1(OvBG&<zP{dJQekKYWZ1P5TbQPSltud&J{5Oz<O8hm9N@vB-?Fh4;)U79MF5 zm*I2L_FYXsZ^^}~qI&V~cW%T4^v%*`ebLUr8_=lJOVgQjE#(3ig<0w6;fih#&C|}X zS=|$6i^xZ&_JcRjw$Wv<6{`USG>;zU2P&~{D<!SVLO}@Ghy%gZ-`I%5Ol;IZiGDfx zqEj_mx<%9W7v77H>@UWdV5#FUy0cV89x*8)NL;vOJalHRS~BBxv*N_7_YHGMR%*;L zsJ<xg<ZWS!l{=Y~t+kR1+u+ci(`0U)H)%$+>vntv#YQw#`IDnzQH+a<4OI^ZV`T?w zxM;#pV`mOK8zLGC`)Xy&(m6yfJ2kkw?+rWNZ%G~*DlP7-8s1b27C}#%`U!%Z6KbO6 z|6*8AscNgrLt7J7pL%zc8fAU(`Z_u>q@$Ik#N}}yIyOE-uXza&!E*}_Z<1&8Qw)HX zP*h*_C54_uW@tE#8xk~2W<vY{_&1Oq!xk+09Lg9)u~wLCudeeFy5kepCa*Li2hKJj zQll!S<fm4FhH^>ez!(CloEsa5=^GO<tWiTr8Pm+jjhOeWgcuQ&n3Rs`!i}Uhg#5F6 zZR=FG$3cQ%e+ifcRvKl!EN|n0NL!k~5%<Ma(}U5kJu8BDX9GrQM{cNzWPK(GSX<LC zqdY%~EI}ko>5C)gg;F&}xrnGMmTa07zb<B43MJ9T{t2oxx~yzq$k;m^_)Bp|U+p9_ zR(z;{!8Rroc7}qkHR+mp(%y27O4o~RUWRUkE1zPpT)m*7D)?^TIi|1_sdqz>Y|lqG zO&QY@){Mf1jm5BQ8W=}Krb`j?Js+(<%m#<o>)n#&P4lRaNJQaH@dO2`N*Ci54cym1 z*`OZbSx@kVFyyHZZ;SmnY1n&|1Psj7fEpjil`T86INo9q*0-Pc6D(*j)ZI&m(vS{W zi7$5B^4mgIZn|db5?O|~syK2LcL<D9)h8MV&lX_ZJi4x`U_E{>cl?S^gO?<iKYlD1 zux=g<p}A4S=t7U7rijhdVPmI8PbunuY(>51Mk=!293}cKsXZXqLrr_*WbW`!_}>pd zN_^iU78ei#Dc$M11W(uD<>WFc>#%Fk>S62yVkZ~1bYhTm;!iQ5m$1fQeqv8t^J`=1 zy<je#FhJ>V{6=-zk!A7gugLcCNG;dWlsI(Qn1<w6=l3IY>!Vo;i2xeWimp4`>DOjH z*p0basMwTg6fD1TD0|w7)spXt9A?*np&il!soKW{Y-v^lJZ+AJ?o4k(!!31{j#bmw zs$?BA%eTip`prGYfVM_jKdc`dxkZy1sQxFsncf7|vccO89%-MGab?WDyGh<m30bxe z+fx?X(Z@r*R7#VG6LgP`;+#G#Z@{zz&5OfAk_<U#BXinaY}EJG2XlOi$eD$^N{5@@ zH~_EEifNi8sgr=taxWv+)3~OZMoFV|%tDW{nescZm?tjuobjBWq_0j-k#uAlj4SK- zw#5s|N6aHKKYj;ehgfZb(ol-WUz?(6Q5*nj2n+3F(C*%m`;9S~5b&)o>(?ympJ$Vx zl0ue>XuO~tfJ0fpjv9*dm}(f^Rj$tw#x#CSj$@;;gf2j{Tn?pAQc*pfX36=7dFD1@ z)1rK|WP_kReRb!Mm5egY`lv-854+*;{Ng~!*$U~VkN!$_oQ(F5hk44tjooU6KF_*j zf1#89$}3a-ExkEOApm{fQ*h$k`^KdwFXZ2LTMM?2_-><lt1fV$=B^flACzBYzjU?s z<D@C|V}5nI@aw&wx&<(19#h;G*$K~>Rs$2xDAu$h;35U(+FpNfQ_9XHr@X$9<R^ZY z=p$bW=)8}n!UJ^P!v{}nX*cc^_x#&=Uv_UV2za!kw5$jAb00jeU)zYAVVRZfy255R z0=CTWgnHp1A#X@D{k}^ZE2!0M>W&p}!Jw8nE_1-<p6=W*wN1t<0mC(%485DvGhs5d zTC#$A;?gt@NDzJLq~_5nB+b@{eM<Om4;IV!8#l+zcq&M$C=jGuKrXfjil1N)^+jEa z16uD9jpDCFjEYk$Vf_sJdPVcrnpk@fJ<fH@P^KX4)`5>pd{}?hA?MD!)Cn%=swXK^ zH^RIiwSKV*<C9NyWrX@T+6{!BN@E{6HXGihDif|=ViJw>9cK~yQJO#MF<)_Kl%X|D zXApC#pwdsU-?S%z1cqW^w|f(kSfIp0$au{9zDM6TF;{Mo4>$8(yVKFXAHp;&5@b&2 zW%Sp`hs>ap&VkOIoTo^J1RM^E^I^D^3m)9YpPx2~PR)-T)MOqq+dmzOpP0maFssjq zu{(z)%(T1^jDCMEYO~VigSwGP?!IvV!q5OwYqLW^qI9Th7)O5!;3A(PX>X`Z<Vs8` zC!;8T&f7y<TU)cc?!?95IQe(GJb{GyiGl~tiC(O$3k8(Q_lB5UTa^j0T~65Dvg+Ma zBV>fXJyr!4u=2oa>Ag4r(X0Tjp6d&!x`*;cwaD9eQw3epk?#REp%p)R@Z?n+ZsxOX z5TB$zg`^zxfksxADY~+_3W(reO_2>2H7%&_SxS+<kuAfrMF#ILe>A|mZ)9fRcJlaf zz}>m>CWBrJ&HPRgtRUrr?p>;RA0h8noIh_h$9Yb_K9W7)R7(ZxKuxn^VS{faSsay) z-<u6+9ekJW3Oy~WIWzNHPdWu-zX2sx_zuGz1DG!N0hBx0m|}~-n)GB}^orrmKW=Lc z@+n@`*&}f4O>dzZ!R(X<E)Ger)=$gpw+N_OKvxgw5G4dwN(JC;l>&y#i<Qe*qv22P zC(f4e5V>q#q0~YS<6Xjg=%&}MIN(&B9o9#xTq)ZMd5Jw(&BnJlIGH!Lx$j2B1`FYz zd$0F9nl#nS{&4E8klNcsbv@21SN4$f0+$#J(CD1h<OkAJ`;u3Ic3<q*VB?F`U(Y97 zWCs~;wAbPh)eRYmqDNFCm9PaB1ly6B5Ixkr^gB>;?c8!bvdO}I(K{<%ZXc3Lo8!Nw zb|^DU3y7y)H@9Qq>NC3R*8ru37k@g0beY5v!IikU)y63hO}zVi06GV)t0h`KZp(TY z3;4}=e|Q+j&7va8LIFAl)gX4W@`fXyqKl5<a%t}jMDQ=O_#!NHM88+e!MUoH`4k%I zdq!Q#52nK78d0^{!}J)I{}hC#oY4?Bhr-mMf8)@Y4_Vo~QW?SW?BQ-fER=OuuWc@R zWjK=CGY4{{UHpEAyiTuHIidt89Mmo7Sf*y8{8ab-0U54daR3-D7l8!-z4#MEUy04W zZ=;#D;rYsq&KY~mRgaYSI!Bj4zn0<iYkg~{WRFIqGjuuD#THZ$xVF_CR)y6&VVx4N zs73yFx4gYvP6JSMuM$(VQ2sUVaP0vox?dkSwQcGrox_cIhOTPm!`zot@iNQUHKOmD zn~Lns;ENwEd~o|NQoi_r=$o2zB^5oA&Td>gpmHP5_a5M2qhPl-&OT5|Ff~N3#r<AT zt7Uh87hXeyANI`AVK<EO2xp+7mFu?yVVo3z``rorIpXWo6~_9(6g`TMrg2Z?ea|;S zs9?>kWJeNEILNc%mk-W?;hUmGB*nRsUh?E$etp%pGu>cibUM#qy$I3~clxgObbYpP zPj@*lpw=_)^C~LM9T#}=cC7nlW5M=8de1-^`ZVMGCnaFHbiU~Je)7XgLcumC%1kb| z$LId??977rK84IrY9tx&U6i==2Gz>Z!N=v-Oa|@5r3TB}>pio>!{5<zis20ib6cg& zdYPG_-I&CNA3$!4fYEZYdRGLQ2f%1K?n?N~;UU6*x7`B9zjRChff6;o{~4M4M{;zs zF#dP9yj#n|2|(ulblxaII*|md6lsG#c>d7S%9A&@fQDs|7OhVf{&%<>b|-tMhGc{D z{oMY}-0I@hqPcTjr}{8xMV4O9*0+o6yWXa^4`EG@mxqHdQQ%hpZrF<)c+f(olGdGo z-wojVW#$jC#)45@Sn!vZm(SlXzb*K1H?<K=hj_m9^#QxnBK%YZyQgcw$+)~5oN1Jp zdpFbl+Ng^1FFH?J<u~v_3^LGwMTsFIr2u=oFoAqLXwgmdJ?Udn)G!mqwNDO2(BTM| z`^r%jZ;UjJ40Hnx$e8H>f~>(GGe^pB^2p&DHDqBjk;EFiI~=Mdxn+h7YVj$c*ZSb! zJ;WG%J{*bX^h4+jU7RCz**E3NAUJ0XT^Q<E7l%=z)bCDXUuV;P0LHa6jyX$Mi`al! zcixm|m}hANef|9Zq(h!Fg)j2pnh=!80sWS1EiPY-K>#QCm56f8MV-O2HO_4z1&TCb ztT|3ukx@*BfRH-e&Kk6_BbiM9-b%&+!o&VSe_I&Yy8(a1N}`Wi59?cqU2MP!vEucK zv)+0tJ5EC5oZ;-XkI<Aymc5cq!rkrpT2r|VHLT`=MP=m71g9HLM8D*u$E^I8Js!rT zNX>fus>%nuz=TjvR!5Q%u=iY81#)TDNVCi57rFh__-@B*$J62B#2{N3GCOC0h)OKR zB=<lt??%x&A$~4=q<lF(sE*}?AwAB4w{=mL7EzzG{+=Dmq&4pfcT8mY-WAKd4rIR> zw_|#PrxQ^8z*r5`WpCi>%&gRojLh$pPV=i<8$+SUumZXsh#!nm{S-{(X?G?>nkb)q zF|c#H^sScVy_?QdI9*oiJAIz?n=<2oI+pXnvlDMNDh4^FIgY)5$<L^SF?v%=3sVcx z26l>6kszRqJKS>_y{;tDFs5PiSJHVXA$?MitM;_hHhE5dtSS*xd8C?r5lY_>CL|+L z)3l68AQr;=qC!#U1#Lt>#Xjy53{~`cYCgFI%Bs;5=y#ggYYs_Z=PD=0{>;QtD_%oQ zCuN&oHWtt*FfI@=?3)DhWKl<glM7|RAsiUSa1tI2{enSo-D2dx?`Q+&6}MZw#Im76 zQr4|3Y00u_Qcmm$2xgu$Luu9yfwJqnwUowz?ICAb?rdWV9zrZc--ej7A}CT{eC{-+ z4m~i@J=vuX9CKJWWeXb;AT7k9ZncMzLT8lK+c=jkJ@aoirL9z|SEQT754FP%OGm>4 z#ZgDnqluzjFfPA+*fL?hzc^$F^`Fkw(vB4Q-(kT#<dyO0#xLMgA$36_1id_O!^YOA zfY9WqfS?lVF=<)75@PjCE_m5r%)M8tqs_*8tUR(cd!(*s-64|b28rC7Gbh}!q$-HO zeg%5IAHXRHq?mi?A_YrXOTq^sSPd($b1FVmse_53my--PAlKt@-~zcfv83Sd11(5K zq2l!<*k!suVfg9xC#v1{#|J}XY$%xEtVGk5!(kqDw3MfwM9?)wH^&<%_4SrnNH`rS z40~9Z(*LSnLx|0>H?O@njcaQV`&fOJjpjxF9C)9=M+jRc#<yb?EtxE{*GIEALcrNf zTa(DJgSO6rg}{sB(PcfZ#&=|WFB>vV52;%)wkNHejvIm;#4mkW&TGgIdZtV}rVmTq zsXNz7WlRL8RRO6gnEZ}fts$DNe9-4(4+r%vq&FFiBb8;fU=RF#KUDg<J2Zr*5%M4* zCM$^((|l)!0|J*77esQ@S3^+@p^;~`$X~YY;zR$>diVQ&MQhENnBCCO7rA_*8Fx@? z?p1i}(9gGb!QEc5K*R|TR}UZ)z2_&x*Q;-C{1S~K@FNJpfL~=RXn`k|(EhG?lDNvu z)+t};ThAOuuAWYK=gVkn4^B?x_3uuNiu%B^wcRy%B+{=zKk2D-7W<0uz-!|gkCv&q zxQDE4Yt&81i${Xdba=B_5=VO!x!D48Qy>_m8THU!LB^EBKe(P!{Us3HD$|<;^cvqJ zxPS{`SS06-Td^DpP(x3b8Nu~`h^C_)77*@&xKg2XiQQLu3FUBbA%qlhI*W{G9!@*W zVQL9U$E7#+K3+!C@;3Nf^_g<;WeryGmyJ$si(m@R2|F4Gm4~g0#;bChO@V|V(W3E6 z#T&p%p_M^9qqsjVq_&{n0gcx1KE!BBR#kP_(1w#JSR3@SXMku~ZMac|^$zj7NoE|< z2mT=@@K<)hRGsA|0$;3M5;5Ab>Yk?iw%FOhA)?GBB_j~?MV`%j5}s8!F6qXg#wKJG znHa(OotM_>7z(ChSvYpv;)*Tx$?04=C3FcNngY3)2xOSAuFiD<JchCMz%ydDu^9+1 zKCg}vavZ|h7q}BKA!BD>;aJmkh)OFrO4I$zM@OIcl-F9l2=(zjIE8?Mt}aSmA_%fz zd*4&0r4Spnu%7~JWl+qBUs;AOj))D`==Ta){(|0sgVEAt`@T-3Sw#D+la71yz;Ojk z3ARWVhL5l7gOgb9dYy~<XqP_I_CUqXiC(1*U0qoeCRVpA1y|>dVa|*zq5_LpJI9~* z5Ad(eX<Sn(Jj(Cm(lOEk@#_Z%&p{`rVm$?by|B20{@fh6$q=c?X<mFbId8}?1W?9x zVt-Gn&BPK%4<AogTHP-SFbLeD<<lyJmtTBeKk0*B+7j=Wh=#$+2&HXbrn$kUR)s_C zU>n7&Eh3`1d?1<xF{!p^dmq7+F%RW`pdqGwtCYCHj~oa3L&GD3T@Tjx&bC0{stGwJ zf1{MG)~zAVCUiIXMRPZqWJCajG!K<OTm$YiYxlyNka!@tRN8-<cbrt&;%O!J?j$jF z@k!Y0<K*Ea3O;z<;jz^x7{+W>B-ymJBr!;}<mG;$X~V9=fKlxgtn_S`F$=%dG1S9B z&n5o72-3Y8RDge*^+7f@TA++0F!2E8#*%3+Usa-wKszwd<rXTsK-N<|2>ei6W+}+N zzU#?sR&ymPB`vZd<P$VzLwmJ(_9qjhN4la-@tR8<eh)_{-}kMN#f)yB*7<T3-kQ7= z)*CpuC1msyz3hnT%xdSTu_mcMQ?YGbXtIk>Ko?j?mRX|Ra#+p6a-}PTTJjLcSeV(0 z!*nTSN3z<Rj`wN5kqbv$!END;zMi;rSPP!K+l!m?vQa1Gr`DsURBEDXbOX7m*ettE z@MVVX*h_nk_*2$PB<eP^W>v4~In5=HEV1{9VoY=}YB8<4sb#)W6nj`Wf#7E7re$r* zexDw`?i)X@9l7mf#n#aKVGMAxuo5E90)NQ$Qb;6=QXCX$y7IQT<m%}8#+;6YxHoq! zrc}Bb%(!yAkJlzs8abM$5VCv+YmQx<s>%Flv8lf2nd<D;Wez{g<2UsqJp`jtx7t6@ zE+gN$qE#}j-jUH9ea-#;7V3@TTmT)u0se#yesaBzRyOLk1@!u`O`n6?qS7>(G?H!) zLbmA~^ra}igWzeEpmRLiJDFM9KEFFcg--=f6GmYYpB$q1jj~q-n_{{vD})(`7q^F% z_Ib!LyiX-t&oe8({y?V^@oW6`IW|%h6rH8Isj^tDH8nwbx!E2pU`I87kACmHgQfk^ zmsl*=OoF&-yu3Q>z0)_W+SsPEYsiIrtYnOY7n=yKiV$K%qtl}BH5%{Yv-AO$CInaN zY^KTM^d8Jl7xN}nNb>FZ7dfOq_kPIgruiCA6lzEJ=SZ(fB)=L*Q#plh@#&J$U7T8B zF1KoMwq6@Cp?hsv9>?fj(HP)*7gJ{M{U`M&7)WbGXEV#uk)mbpJ(rb-EMH&|>d+eR z^~?60)HdOHF$uY6?}=s-BmXU6<ssnkyQb{a-L#|dCwOlq5AGW8|HIikN7vSE>E5xO z9Xr{vZQHhO+tv<uY}>YN+t{(~<mP?PJymt;yY;ox>fhDY7<0C{=5O_9^wCFuOtPc> z1M{=x6fQV$3WO9WmSpqQ+c_oT-F9bq6p_MNgMTulB94_ciPj@_a3<Kf*<kgMRB<C^ zJLsj+=d+hovtoN&L8kiiU|D)dX`T|zJlZkh2vcCFTX3zRX&s}^qUz~O{JN*h>jz2X ztU=cNb{;@%7warGK7<F{-0ef{i=Jx@<mr4*1Nv@@SBHX3iXWEe?P+zYJcRoCj;z`k zT7Zq2AhJbXO|OJ6SA$~AKqKNsGD_LQj}z~bA0*R$D&ZgWVxmq2nm$B7<V^rK)LOpc z9%*O8<#Amn>-fQm!!is)1(v65+kM`pDtBbp-UZ)vCyC8$GjC5H@R8=}vpwV3pzT}m zQSx1?->wQ&3vm&22>-KVX!^RU%<xy?9|Kj=pOQYMR;JaRKG%`bj$_LyP!%ne2%EcH zpjgNm+e~s7N*&r&=g;;|qM^<5l8Qb<rqeN}2~K87a-MRq%e!bn+!c+3G7{GOJMGV# zK(hxy+8&#zpyW%$=pBqQl=ifO8uMXMl5=!UOL^;c#os3J`1l#|B_C0&zpoD-LsSTg zO(>O8#^ev^5*`B6wZXP0`pW#kQs<qv)-BMnE@S+3JjN?(;`q9^A>|S~^KJ@wZ)P-G zen>P=G~KA5X;I8E;f`AX{28>@I)V~juB{5yL%XpuQg2#BXT&xie7?CYWLr;G4k(gD z*UTjZ!*;h_131jH{!V2bd%)muG1qv_s;D{rs=8HfnQpniB4}eX|Ff_#KH8;>CPtXq zKH$yqqFJ_M{Rn|*jO930+@>IR)@{0`$|NssgrO?wRC2yGgksB%!l4p?dF0TB8m9y` z92K%*#_2u8&20IXO+2;d+KpCb^D6C#l;MgQ$l|?AaMgW_rdCOApo}xE+*PO-_9*DS zOZm=@PNL-bnx~1sOwDhopyn)DC@15et||?KejEDZh^mw0XrGyG{a|$$4&Pa<0I}UR zeJygrDo!`b@}P1@Nc+EC8yP|hC)g2Z4PZD&LyWo^>0q_Sh8E{G8>hy*nhb*aiDiaP z#oa7SbUhv=a4>(oZ-vOREgR9X4q$XHt#owRc<W=WjaImYBpY&g<s<2oBr^28Hr(;_ zIFi2GII3Fac$CQOZjSmYObt^s7s{qn8Qj5e2#nS6^PghD$#-gK>g|Cy6(Z*TPA!3x zId;R0*M(FT=IAPnU#N1Wunq(Nnt&LHKIh4K%#5lpDEnm^jBEWPAjYHPAD-}z^u^;! z=7y!!>%)oZCY5z`#Se=L^FwJ0rv`u4Xl?Vjxve?2Fw+s8I=d@u^j3v-Smc~2`z0}B zY-rZ;Tc9nA6oh<@%@6AC;^E9&ZlayAs#wHU_@)k0Y^+(U#T!Py-7^GTD)Kou&>uT~ z9rIZImb8Mhsd`?LPcM)~PG}Nn)Nf!@P3}*p#&=ShRSe)`A#!S564gB_K6j}AqiiGJ z8meFst&#K;dM{f_=rpjHwEDK!*5tv!Wv=;hL|eu#cX2-4zH^=gB)dyzH){)Z6ZQcX z>JP%;;K~*RP1U?mQ3Li^9Nbjli8k0Qm7doCA8c~e<QCG47*4T)TmC*@?C_IVi=G@g zHM9~fdNZ&1a&AN+<MboDx?rVqE%};n{hD_^HIGx8r&>?9ynRMnstD%dK?Zjq)@vgf zoH~x_cqu^#D_<z-0r3u#J+GiUc?4ee6pN_Mc?l>%vk5{QP(QJ!P(j5RU<%TrqD<0k z>N*uhb$m^a^xj(Pf}u<<s;YuDb&Z7stf+nj6{U+%aLjR*uBa~jtSgJGCiutWvxt-Y zo~u*k^S&E<Un3-Cc?h$U6RQ=0#)U(@ieq@fm=2^UY|XL&Ppu!@hEt=5M}#X%vZB$l zhA>I0<v2V9AfhC*SLQ+Ub+2AJb{u%c92lw_d$S2`rpJ+R^5p7edClPJ{5PCno2*Bd zpEu}B3JZ=U7i#-VJ*3wf^(4g=A?pP!bD~OXD+zGeZ>=TL8uR<#rj0H0BcF2)Htu@| z`lkcO77e}RvnbI`P!-8th<j4X-grEbi33=f6)m*zF2s+sqY-kmDi+(J+o?ovP#3j_ zj&-V^m|y;0x9JOW_}g_2+t=GZO5oX67svBmCS9Y0L~V2(*rx|0ZCt7|tU<=kKA$U~ zMh(DsPmaVNGbgAcCi=zkEI;da2Os-CiJ{CVShzFEW|z6`ZCyp-?daYoShb|%3~?;e z;KMAoyj=Gt(pW;^U^{b2X1s-#yUWq8E{)-JBsir%DS+uIy7X+hp|XY}qVChFbgzfY zKj<!!yTL>yb@AzLY=fVr^zn4b&b=EVrhjZzs&~Dw;+lFGd};yiC;r)6I}JNyPBXdj z?EU>V)r+cu`JKN4GqbuLeVkK8l4hGWG_Z7>Rf2!E<lW%dVRpYq`)A_n+xz{$8D*gV zziZ~49Q6Ow5(5AL`M-@K`2QKj@9bnNVs2&iUmP|58lJf?SD_3I0C3CpKN`^gebN6I zZm4f%WuR|p`Hz~1NzF}#GZuudBH7%wOe8P^Qhz?bpNgMra}IvyIiWJej(_FJz=s{I z*$FP}=0#7Ov-4u+NKdM)j_?dQ`DBYjSK?eAPUbBdn^YgBWvgXue7bmuwl_Q4@t2#2 z(T+%kC^3iLE|B}#I@w_<UG5cD>85DDHD-YmJd7b5_G!Phwww0;p=dto+hg>uWK6n3 zb3q|9Z@HoRU45fRj6Af@@~JloIsXme8}&|LhzXP^gDC33h%sjPC1#otyn;E`Pm>rA zp7<y}mtV}%=C!SkvRo#tOx>hh=3sGl2#XLF=4KtT?Gt`TQTJR+=2H6)+O`X(sKssM z_d8p1%OP>sQE)gpxHz9B(KWQAg_CKb{y(<u)=AF&AGOmLqiV1<pB;=C7oCIF@4cf+ zJkWJ_-0AXAo8&o`yAHk4_>iTSVV`vY`4IaJyl;9z@i{2iyt*n2tUcBD#p}@@TjVzZ z8t852_p36%K7YfRsg*^UFAHpiU!_K2pyPS(@7n_2iM)#HS_T*pKi8#EQ=Gs?&-wnA zA$&mAQCTQEyc-W7p2&fZ@5uGkJIV(-0f{DWwG-11eD}9r0$U&whzepFNe+IXCFIoD zPKm6ou`gNUuo5%y3l_7WoU1RAw<kQ$xyq=EuEvSgts$&9VIy5=T3_f0y@do301ek0 z5W@yQ3|wlL%36i_KFV~YqOT1y2m6O30P^b$;yWpaZJW>p(XA&F2(@V<qxv{Pu<K0K z7cn_`lC`8qzz%np@U&uuaIq9zTL(;N1--BesP&m^9i3h+e*^uc9J-cW<DlsIQ#im# zYAu91hss9Y)>GO#^8TjYewxm(ugNwDS}^LW%dlfT-u`U3GKDQ?8yHo9qY<7jPs9h7 z5^tCA9h8Tp8#&&8e57@8y$=)7hM7syC#;CoNfi~3&;9s}3|yp!je^zs^bNKWdF3&b zpxJMR<tpUC@=it+5(B@mY*D*<qXR7eta+BWH;TgPXh2&Qre)AeARPIA9Y(5FaH1zU zZ`#{9-o%K_u>K~Tc0>$BZXW@_8al<h^^$Us$$}6RKM>1PD1@6r*)x=0l9ZJj4pYnI z7LL{M86@Ljh7_4`6NujC5h7IJk{;Ry<9^AofEFm5pPj>9#9Qe_dWS!XwMp|AdX0Gc zszFKUMhmhD5LWe~38GF92s7tY44t}j{wB!00J?o~Ldrywa?FgMQ{HY!5n2>@8n6#G zakLgp$`N2WRP`VSQw{NT*`L;V<w3KTTqp&AsI!gUL}9g-jrWpYt~IsALzLKH^MhXZ zBy=VSzeduRutuG^X2ExON*IZ2TWNm>kFM;`>MF+cbwO_=!jBZzphtcjGKu&bnuney z4z&RiD$emTV7Nv5@@dTVe@2v<LlD@Mx5RKpL7|oUUfGYvwSbdJu)ot3dWAtjfQQ#w z?@B$CZV>h)jCbHVC!(H4hO+*t8%|U%wNc4|Xb(LGx!fb5`K4Oqrodwn`DUJa0qj5p zveF7HfVPkfb*xnks)n%h)2@Tft;mYNZuG=0R4X(Q#bYIk^vDjsCDD3LBd(Rv5v*lK zJH;QCo1hXIElOFNr)S$tVLSR9l`UvA2pKBi2_F}$*-|mSlp=@=gU@VaG~N+Tq89j2 zzzdU2?$zlo^Q84p^ht0E)Ex9mNS#7N6g20;<Lc1-SefE}dw2+P%)yKCX?etnGjQ?^ z!-xq;ZNH9Ihs3U1{w@z4$QIO$EqPt8qE=3Bb&)j$bpjtaW+)~06Iw<t`5D|y2w<y& z^%j6z4@9Z7cWnA||Btihk-KAv9bEopx9~0X2Ht@B`)r`$lGO+mJR38?Q(25WnW_XP z`+XfRIT-(NFnCT)p@@DY*o_$B2Da$gdz7U87Bi3GZa-$!JG#{ed#Y0lB)g#83=yRX z_!xeQPj>tRg;8%dB~CT)_cK7q{(QkoaRK}z$#6(hFcm}@W@l|MM1o6A4lw;^_+V1N zF%U4Gik<l!4;}gYwgmz3r5TB|wkK_ip(pEI^@;v*HnzGJcoyEdgu2p^GMeG(M1_ZF z;+`ttTQfd{90zc`MUVY4Ls^*KGLx~YUc?<Y=+7akmsBKD;1pAQgQC-dMMCWu4a0+L zXozdlXfXc5*lhGB1f+&OIp#jpcq*#1K&1A0LS>aZFko!afC6S3PEqh<I`Ju7tuUzB zqm#l^)GPh=&1##tzEoiN-hAL&l!=wyA*b{fMdSuUwvKou_t3-}zC*csKu3WUQg!`r zK`A4kAYI0#9@Hv!Desc7I6?Lxlp$JrJOSh6ifBTOcxa;&`!c$r+2iIat+AXal<~b= zQ$%uid>YWuKPU_320U%?q|kyTxzmM_zs+!`6Wez&$vU_O_;Q=w{rPcsrOvnA!>B3B z6<epH!SXbKuUg5;ow`x?S$9vdAe&QB<yV)4Ml6>OXk<)G;TSj}cJPRlkobmv@W@E^ zbeAV3dH{LhC`yHXP~4*nVcm-~ADe`w!7)d(dyy=zE%JCjHrKg<e^mlGFKO{=W3OBN z-figt^Tc+W)<|4l<ou|SMM_khe65@-NzB!L?%Nmfmidgc=h3#2u4<TYV3goaUu5V6 zRGWd9mxX0yLP$xOQ}IVQHF4|$h0o>)G&OZB6GiUw?@vyl@O4>?WCdE=fyR<!=&}J? zn+Ft&KvUPNO^fQ9fW|gHxo{GxpUHk^c(MrCzChY?n$oy>E@1E<Yo>0xbvX-VcOtbI zV|STec+!}P7vP-Q-~WjK)FiAMljIE~^<SR?vuW3Ir`)5E47kn|3S1|@>b|bJWoo;a zI4(<+_`D_{c2@Nc6{PQa9u2c8Rv3$*rgnVSP`f54r1RY2d3J{9QKebn1-@B?w7N(- zyo#s3G`@i48SW2#SS<~tjZZkQL{LM!69Ad2!`DLXEm$XaAes;{kf!bA9+3LE#N&<h zlpL3G`5|o+mMXTPdwZ@_-pSBc@l$0R*MJ1+#`45->PYTZ6)-8OUDAG<ytN|Hgc<=_ z2UJy}kB0p)QzIawX^-_rc9E2zlvvc8bVz;^Udu~5fVcEG<F(=exCnW&=arwW8}wQq zn8d@AX6$SC9%ejlhwnksXW9d7>yfa-bZ-F-4kWu*RXd<MEsWMTtovS*^5Jd4{Za9Z zYT~)j%AWV>boA4i8Fr>jM+eLaejE45CopA<u%4)rs`&m=*^Y*J(shINXdB0OpTFt2 zuZ}11UV7XB)r&Al$@%ao>rqLoD5&L*17W`Mx*a64_&Q4@HcrPA$IsQAO{&io@Cf}q zH4bZpE%c|H=RHNvT&)Ye1MU{Wg3$qq9tSVcl~DS+70+RvUVU`gh>eZciHa3c&)JeQ zHv2?!H&hwDWizszYKjPUeoA9Gk=QDd9Ji|0MAU@~D%QJ@xUikSxz1#%k#k4S&!XT8 zSE)Av<FZYGv~~5A6VR|-6N2J)nf!ikJ>YZx;d%j$yOh_Bpbj1y_C|tc?Xo{)P&j@A zc_pPX3eUgoppi@I@8~2XRU0WLxu<fnjW|fkVCPTx<SW>^NS!jOBgkXq@)QV=l}aOT z(08aMf=VOGyfVbHa`30lW1KTe8ot8P5c&-syA@J00^NA}>FtcA@%XOQ?p_SPdm9aK zIpdqWn5QI&>N8{ox<4XJs5WtBaDvBwAV@_c)2-O9zm-wK=R4BHWEXM(0uSrPO?7eg zZC^J)f0kmg6_U}#uY|t@O+epC=I<*A*MwI&BD94IQrC&89m}jh1@E+EPy3pJ8;c1> zrAf(@m;6~3SK)ja`*C?3>jw;svaLAX*D)+n+MrvJFh=Z6arJ{U)rE5(`Z>xwo+I`d z@1M&8h`$B?jY&OL)wi#Z=67*2^}i$Vzg-lZt!@6VK2JM~o1^<N%zLIda7xB0F>Wlc z;xDh>p^M%tKWv{d0~VH0#BxH&;d3MZey;dT#uH9z4(-%yqsf;!Yn?tmO8b>jK)@XZ zJv_bs!Mgcv-01rX;;g&neOnXNkf+~K)&#rX;)`vBeOg$j@04XOh6TO5#T2<}RWx13 zaVH}36-<w+_%^fCmtQnPt#4j=2b;RY;af#dvJ!CCI+OqrY4kw&ay%bjWWpedAo^o) zgBTMkJ1q@AJE+bLI@R#po-nNo9rY}&&Op&LfXjfDna3oH&fA|%X)(58ZsGVxOc)?J zCZ?y+iq^qF6>Bz9gu$j!8!!DrXRd{vVVG<I&bKlTG13fxN^iJ)4%p0ZiW(v1a<-nM z3vf~oh-j5onkQ%;Z4FW4xu1UGI+mABl4qITEK)?v`CW7d_O1v}_e=jbx#ty77!B+O zM|(vNu&3g#aV><We2G55_pYeN0!sM~-ZdngLSyi`Mh@p*)@r1_*UnIA4A0HsD|l67 zPfb~i<~S;93$5p<>ztUGPw9A)%A%VNh1$e@G2IAw8@LY-ZBFi0N&o{m3fv5u`r!uT zBZ49~zqC`S-GRZes485NHx>4Vf-w$*Afg^Yg)?=7qfCFrq?PX}c09qdO<pqt(FleU zw)zjG(3QhK8VPVqorsA1Ck8K=6e>HuD4ozyUcu=*P#3h-lFB<Q8QoEU^@m{^(vwJ6 z{kR~Eb9tn(xKgH4ID4ai=r$YZkEE@S*B{?78VAr}kI6=OT|IPiF@n7m9}w&f;`u}m z$Dmb7U~5V#%8Tt=7eN<`f!RrS`H9>7Z}`ZfrOtBz`GrOea|47!R+<L^`=W!X#sdH3 z4i}9)tUxxFFbWvJFyn6@4Jg7RT0rD$pidC!CXx8T9?(Us8Qto$E7Xx26Jr<5ghjs^ z_UYfG&<AnDPqU}d+Xk5Fb@}f@r#PV?N`Z$$^dC87LJt7(f<a2_Pb)KG%koQdi5gDK zBIre<F_!A@B;k^s4E;HcA=ixrrmA3!-jOAXJvUlG(()GN3y70qKAN3X<I|iGm!Ur1 zlp}^-R5s?q2DXYOXD3LC#^sO;8tVmARW9t6*4yI`6<<(*adaNZo<T;+r3uA(WlwaK zbWIp9@PY@$C#khY({yl4*AQ2n-WW8w=hDj(=5oh+p}OB}ywOq|Qo-&bK(%Gs9gUDO z@5F~&P`%uVEFscG+7~|5h6f?mp{lerB*=w+$4}alUz~-!VPg}gD&IWI{T*5vY~KRp z-yszLLyF-hyB1VTPNE8*K=UU<eZ^DRnk6-papNm)%WtBbqDC=K2v1=6cU)(lR+hUk z(&nGFNYy2Q(H5%mxxk;~hpe;4=(U>Q<;Hm;(ls=yrTqmH%M6UCBjgs>2BbYUrh`@1 zLo$S=#Kuj_^vi>t@tJi=sS2`xI^rd!CUTaS>CeJbmhS`((e8#Y_s?ifohidJSZ^JQ zQ17PhNX-zWe3WA0QFoDhHv(Z>e5GgK1~TZB+*Z3)E4GD_eSE$iE<~}9af6!)--5<G z%;#5#fVr<am*NMh&)O4J<-h#vnm~=YX^F+s0qg1#6IuxvCDb?h)Ki5L78%K6ZWW5+ z>!OMm^etsxc#qL?D%}k*XC3kjkuNab>F8@EXJ9+)ZnSN3idTYmg`Gb<Zp5nJ*V#LJ zI<czK9$@Q>mRFa@;^pT}?Xu|mfSSHUzi$5cjPdkOQ*^j9R||iuqOp$1lONiINq0o2 z-<O6~Uk#{>OJ*ofSfs`;cPC(!bZ-GY(AOEOP*`g6+qg*L4!?axO=#cN{{*}p3Q1(3 zHoA1?u1|QNCUdMlIw?5sHOF=&F``i&|9Wnmw=abzRdHN-RoSD>dV@=k<L<SdyGFr~ zDhZ1S3th=~AlBWkA&yga`M~0WtV)Be(x`f;-lf1|*$oYcb5-M6yU{$Dc3PZpYLp=U zdL$@xnl6S5Hgdm?|9x4bF!ucy!oFsVddj$s-G9s9Zg?2m_|Ay%M5A}*adPiiH+-?Q zy~7ECM#bYqb3@lwJ2=#qf`-U6F3@5Q9)BtQJDn~)%(?Ua36U{e?dwaJYmLmH?Jj*I zELDhW?RvdbXPZ%91<}$Mk3K%^HgKO(LRNmR)30#x5+hwMGHX%N9zFrmb60|Vg^_|t zhbko6b5{I4`!-(ebhN#z$-cPPTNO8cM3RDCmB*4h36PJzVtC@^xIYvY{rI$0`*VLk zT1v9d|6JQ=ngh7HE!uU6$9Wj5m+{#G>)9gQ>!tY_tGm&FXK*StTVp?EHrMKg?CJb( zIb<eHYYWs#ARFVDjbC&-a$b-)8P~N1eI&B%CDH2sdj6aR&d+5z-^Pf8Fi!ZF8p3Dq zbA<P#pjITry#%M<gz?Snaf3Nxf=Rr8^#RZ=o}~-Ff)tXwRg=Io*hFwVf6>XAD}6M& z^m>hu8&6H|xvvS#ssn5sJ>gCUr9GpA)}EeBwizM;bn)CYJF?^Ord5Jo)S=1E8b59h zBfL~~H5$M+%9fxxH1WhR4U|Mz0%2vCC~rg}CbKn=*Z)nA@kkt1>R`ERoQXddK`S`! zrKzKQY;TE}2+qUDbHX5@Zn-&_k%rJL3OdLlGy#c%9h?hTQmexZV+T$7WR#Qtt0X<D zlwAj84H6aXXO$2hNm_8Mw8^+y=ZM{X<TV2j9gI45K;y{5&{S(z7=Z2=CcjmYgeU+N zk&e3pTCFvF4STp%gZIjtjG(zdNXZ1Dfr~yJw(zzNRz@g&6hEaU^X)uQWj(NiqUio7 z`H!a<`<65Q7E|FJpWtr(iOTnRIwN?aLN#onplR`KQ3f~8NJ*Li5TYX!I!YV!T>w8_ zPWe)T4x)$*9}?Da;wMElBMgUf0fl7!+~c~@jTdT=I}|CdzAWPYcZ$L}`C0{v<olr> z=yf_HqVjqxd*Ed=in5Wf?SB<M*ds^@MBl>a?AtY%^4}3Y<~BygZZu|2)>e~g>))~m zeYpC8+`##Vs5v{;7zN!aO%{CQPKm0F8L*IqVtj(OQ^$>b$0NDdkL&?j?jBT&X6l@& zil)ikGukg~%r)P$xtsF*-ZvdIZrl#HXb)RlE?<YBhC2O@N<56An;o_hwi!z0{^PEN zSeD;&ordV7q@=In+NNGsFgjSs?Dg<41nkU(HsX?JT2`eEQ-jczkiDqbv<)Ug1_fow zqogrY>uICd;@Ij*(8*?G9Tt{x84|pE+D0;TXhKcg>=dlbyuYL~$@d0qEDicvn7G6L zQa!)smX2X!!oO8dnjM2h_5liw?nIbytqsFwI_78V?lQs<#I!Ot&gY$N!6k8NgZNPw z>8hZ`dRWF@s%3l<VnI2Q0FBk&Hpd^9;F;KL_=`KXP}B!y4Bo?FPp3m5ra7lgKVCdO zWqK+GLp&{jS!KWWqvS+4Gg1^Cl!%(-U=6StkqwgKDlX_x#A*B3GHT;xpv~VqCY&KR z^5}TH?m@KoF#>0Ndfj_AM4D=Q{uYHRqtboXl-f;^r%y+Taf4E}V3}UpM|4wY#7wu? ziVBB0bI$j|iLG?Q*!11RB~eugRoZaFvyErvEJ;<{591tvK!p7YOH^W?nAxhrc9}9X zD+%gR!!)cX<M8^9d#!4ZvF8FyLrMi(B;e+yv7l#{M6#@X*>aOIatLt1U(l9@J9J0= zG<=$TnM++fW)4^7CLvm`kvAJp4LL}G^ue8Fr45MEWgrczs$+~G^7q96T0rnEWO8eQ zsiKF&CLu)`r<0gKS^x;F?2)7J8Jvg0IIdX@yh4<Fayl{)euha)iBtVaRt3z>7!5xq zRi3^v5$q!n#1BP?Q1h7KVzubk3&<>$6Qk~Ejch?al=CX%oS5P0+yUCWYKGb1CpsjO ziw+vc?rlktL#svnso<}*j+I=xpUj~Hdv*NXqc^c*n!lq2SOuvZth`?Ns0@_9vgI>v zhjnc*36$E}5``L}chJO%+h~JOD^rB1C$F#ZM&K?m6N87kRjZv?6+CgyT^hTj+Ue(1 z3Wo)I1{EWooeLpEOyPqS6^fI%R!pJm$Eg{dHsB`OILGPJY>J^J26i-G4%}>PXspzy zsTCkng2ElWQG}35(nD|cqYSj5dM02oYNU9HIrV&2k76vRP+z3I^$?^g{I*(nGhF~2 z7OPw-biX>yWls5wp=)(EHS*>{(6Pl7UV(9!Vye90Qpsor8{nh7&bbJK3#K>`^_>~A zqvFQf3prLR`GeBbTk4+)SPx6&`qW?U<zz<o^tQHiU1zyI)k$OS?PR7V^jF;;(ILHm zM2VgC5$O{rI<x%VmVbB)O^^!~vId489O5_~96jl7`waNwD!AR&C@L*dihIYv+?RdH z$f7luU8(3~zrrU(QIn+$lk=}($2L|LP{E`sj(GqXfA<Ssn$G2-l1P;vBjU=3TSrg$ z3iJV78xor!)X;CR%Io~8kg`I2+@vGvm4tN+%986Tuh^~3vtaq<B13DB7gTP-sK0dI z{-)vXVDXCN(;8D7#Qm`A%hjq|GkskTN?Lsw6;_ufqn<#Yo<})gVK3B4XJkWQsVTSg zOW`oFt_#$tlg!A59KI=si%cR_b!-SVwtcg%Sbl3Qz~PB=f|qYgMvc5)099w%QF3)7 zpzhiuOL~l_<HcYqfoj3x1&`OIjmCM`dI_khtMNJT=y$(~k*u9KW*2ckd7?ey4TNKv z%IzeqCWX57a(D0i&gsj}>EhZpQdLq7B(E5b9r$8D4zKd3l<Ktfa>?Q^TRaAdCyPTl zF%?=LhdG>u@1x#z6r!FJ0>Fo<$Z9+#9?eoLx6}L^?S3Dci4SM@h|TLaVB6S1MmJTC zki*B1s90wX@<KCI@cMIbB<t~cboxAq=^h7HM2ASVFJBREDP#ssPprX+j^S=8-@;>c zgHc}x5$jucB!`_+ZfQy^lbz`F)LA^mNt27vrYAl_D18f$F|rlOvJM<n!Qqc%>2KjN zFP3)F-bJ+UBk5M<A)N=8`iJXI{VcVvZJ;KL{wN+Ck0mGn%(DI6bXYqvDFk@6{XNSW zPRAShD#QCUnl<3)ni=UCv(#&_`8j-Bqc%nVXhXKre&V>$>ZRuTeDuqi8QM&+n#6xg z#Wn`|I}$Px-o-D)5qmeIO%3F}1VA}{Y~BdMC8b1}Z-SbJfkq=d3qiQh5kk3ol29`e z;+})kufzBz_qoAbnWL8-PksP&jpylOZaYG;WT}k-XlaMBKN`@=ttxqT*~xqnE?68E z(Q%*Tp;?Jp*L5A$?dao}<Z1@L)J?81_2_h?U0^TGKM6D{T}(oqqNK#Q2_fRCKJ}gr z;d_4bo^m0b0SlK~3L%p)S?)OWyI97cs)j73&bw5Pzt!1Ooz>1GJh5@2esPv{)g@_) z6&?7GlB$nZ<sAUDML=q_#4l?KuWg*?tsO8q!}_vOE8D}c8VB9gTQA_P(V#x8=<gl5 z)z*y3-e&)#uHJ<jJwKx^U^*yl?O~YUEWaPyl<2_{RvBlb5Z6(<`#}N7bF!iXkKBQT zmEkK*p(`08^wC@^Z&Lz)tB*OXHW>8BJX2ezsrZzkoJ8j(<5BS=uQPL#?GrqyVrt;a z{cXBK7LfRK%v`b5aKUUV48Gy1Ouh51MS)bkdv^I!M6S`X03Q<9GL$DKs=C|oSKP@& zA|!3*)b^GLJr(}2;uOuXNY!#Bxba4b#=Pbbu8z=L8wVE}D%l-$Y4q*zPpp5{8mXB^ zE&GrF0Lt<J095~;*06JS`oHJCwbuV~w(+LXtxb`P_g|6Lz^673nG4~x4h;ef(MKOt z!IU3nXxd<*>$oQ8x<m1T((M~dF4(1@w8sQ9;b^3`RBaa(rBttNw)Zi$ZND?<27Tg) z!R!5;Uyr%84V15~FfCtCYMfscx2Z^_R35juz|^}BzGkI5dwyQ|F8Ou0({s*J^QO03 zu8;$nKrJG|&UddO7*9J&!t|EF=AvN+Q$mQ{LwRK}5KRx6<mTs=M-<G)jMcHm49E&o z+n26+`w3CH5-C)zz-mBEa|cI|b6JG==#GCb1|TR8T#zIk2s;AUSTo?~!{?b^d;$BR z$Cd*}R5UqxJo9V1QjM^|<B!-W{f+KMtd%6)?%biu&u5&&Ha^*r9#`{zi813SIT&qB z*332Q&|JV9?|WJ(p!*W)vjL7|n_B-EkwE=4)XzaMF~srj73-R)pj7G3VfGo+oU^Zr zyB0O0r<OQd4;LPwC;adP;s>mnZYv000UjzxT&ofI1X}TT|Ho)C1&c_J0kJlazMid& znrmsZPIs(XJ+m&zC=!ZjP}A~Nf&izV0J~C{;)^i^=?az`i)fQstSk-Agi>>NYb&Ch zYL5=9yMezJ>ffPQa?#wI^frLW0BscsQd|*qK$|8v&35?JPd#bBsBwM+ge~|f(CThR zj?*ORsk33-TbsW~P&gR3W;i|EF4hXf+rCVAZQflf%zhs}6zrcnHo+JpA$I9zVkuGz zDVQy65uT3`=%9Y3Vu}gFk|!g*@Ewr>qR8u!Jdcp%8Sy<bK*q5V1;&OkX6$jJ%dj#z z$BLO1IHE~PqAl3BZsi)PO-MCD$ZBa5^vtaVq>bMze9{ZT7{fWI?l3k|!&2?#W9|h+ zsf9qV4nM=ZhT_rUCe8|XH=_e<z$>6&CjSl5ktWoWKOFnJB!PqID(Wm!J-FE1%*v^i z5#-PcGukbaBNK!(6i443i5&9I3_oJtVVzjN#r&Rd*&7Gm^tdkY&*$6|0rW8EmMj>r zbLn{)or+Ozk=oC$Q`Pjh74E<)7zZ~*wAbxYuESpa6tWK9T!gSAKCJ3<`&DIpwd6c> zTyHdQF_Irx5dz2@Vnu46CZt36hDt#XhKBtGd&(KuVA}WF;%l22QD4R@tDZ0f@IS+A z{f~3{xR7<OA*}ZJ^WMTdQUio48}7j^{T}qf9EJywSLDc{$PJ)7{orc=Gdf=DAd_(v z+~ytBu>HnO0`hqKu9=czRuCsW^de1Tz=7RaF10ac4k9tiBcpD@_w_8(hkpG=KSJhg zzr5|q_2-%-+o?gw#K5erQ+ziMo86!Ua*rjRBwY}6KY@OLOCc?;|2#gt0Jtgc6<Y0* z3}R~gkwiMCS<8k!i$7q`WpCNO84~EnMs(mN1pS9#pR4STL9dmhRG)?eUs01WzT>bv zP6Rirg0f8g?;3M1N_2c8A{{57L;SA;Dnjhw*Qei({-U4_GG58xOtF$Q#wVs?e;zDV za~5vxPUtuM#z*|q55!+45Yxw+BDYI4=TW?}AWU+6LUXV~A%oWM{I4~9Ae_0oizr(@ zI7fyG*3-}omJ<q#g(nt<tR#P%I09X?)mg!)Yh%@&wFPKG3)f+d)ge_Mz0GV@n;W_a zs$NTpH#I&%w2eA}6TACcJ_z=H)YXN6aA+T)1(>^*dXMDZH#in6Z2Lv%@_2tdtK;}_ z!r*<qKq}qI06kFZ_3FHRA8%_bYejE}Kva742~yh<*CPpAbQU(1VK+Wv?6EKvs0{!} zhaOaMBvj#?K+wzts&&?$t<PU!!Jvydf-?9btVT+45Uw&GRYH&wjx$Gdt+CouY|&pz z2(B}ggvLe23dLWTJWF)0FFO0&W@nAgY0s=0I~~gtAFypM+R@+-n+&#We{LTGMC9^w zHs1C1jPsh<-sPbjMY)fcPa{xS6qQoFK2Ko@DKDd9WNexEz8mCTry_rI#Q7|CRDXl= zF@}0zD`izD0<xweDn`zM2G$xhe}hxWl~uqdbj{kfu!9Z1Oh|)>dcmUeck~)B&YH6a zbpVwaOc$9S<Lw*Spa!6o+7Sh6Sh~17TLd_Vx=|nX;~z=W?>sjlEm3NUy4Twe*NGt7 zw$Q*7c+FX}mjsGm@&(c!KlNHwDo02^4ip=k$hzfEfeO1cGNDQqEiP<Hl(H^7!{^gn z{4~m|&hk3|BFE~jd2tk$EgJK1E1?S)wt5W7;?9JBoy2OCS04Y$BF<moan0!`YLA)c zS-*0OIgDF;z}S7I3}5W3;<;a2ZX~Z&(T;o$s?H4&@P=(Xn)mC8!rnDkkqto6?p1dX zN2Y#2NX%jWfa=6=IOMNtV`)W&t74BW|IF61m?E{Sw2YVhB0Ue-Nds<Oa^wP(XgGZc z7PjR1GscRFhW^(VL%WrD4W-nf&Q4!75X1%@ERyjUfZ88W9>RhX8_^0t^_9qeyQIFy zE$-ILPi^fj{$70OsOq+Cw6<pM8?jZvO5!4$lR9yX4!xD6G)BjDxUvqSjo8=Inyig~ zw<`uMf1P$!44b;;j3&=f*uII#o!gE|6L2b;wS=lzFdamv{E%l3E;0C__(l>H1iVMi z`4KNW=fIcLNu@UHbE3j|JN-!6V9wv3MC4VNvq@Kd*016Ol8$C^D*2AMn03~sgJ8lg zxN3;HHYT(GmgoxfPQkT&zk=yhx-SRLOWJ3I#<bw9>1jscP$Ac{pex4V*rH@AQFxsV zU5(>)<=-z6{e(M(U2$Zwk;bhOLq{ZCqSYRV*2C>ua%Rd8fHGPnDtIN-dYcE7U<)=8 zJpJ))!l8Xw_5~91#stTsR%DR#!IH+JQpUJ_-n(Xdb>vgFWozjRrHLRw#KNr%Xa+xT z0+PCXT5AG*S7J9iO_X<0)wDBzW#1>5<_9cmB$04fs>FP2L>MTs6f5<c5KH3JJNs8* zqLDD<u(=wcD(-%e!6cY?eDH2b9%<18w+WMNeC%opZ3v`@7Ag`VDH6d7fW$kQ#qera zpAwr)Ao5WG`z7Oh6lW)NKp@^V(K{x#2&A)5Ichzq{j#ud>fSl#2pcS%P%hO;Zqs(j zFHd~N>(Yd0b&Z_u)-ZSXwgH|ACo9nwN*1wPaqE%O$Xm{+A4Q$$t-MZCACQrVlt)gl zxqd8-4(1<(iA!&eygz3tI0Bb!=S;n0zq%ze9(Ffcd5^{wWRo5Yiz>+HjSj|sKTtf} zB$w9y*$g4}R6orciTF8xvl9!JnobjiiBd4?-~3xBF<nGL0sBoyr98C!U1DTwHtO`3 zZ=4E7arG}n-l#j#UgPw){&c_JNXlIJ{zUU&iz+Hhl#Pj}zgCaI%(0TJ{y6=_%-o@e zR<)n%xBaJB1OPz!ZzXr6|BhI+Ha0TX|Bu4E|8L#izm?tk$0UZ1|5*U|kNrXSA<DDe z@4L7F{2x85{<VVdKPUQUQ6J6std+98GW~Qg+_bug=4gBp>%Hg-E_;2pIR*Bbmg?BV z<QE~&t}w{>7eHc)MxxU`kDgVwe}c1i?%7a11g?x}z~NIR8xi1i%c_SQhauy<P@qHE zJsf8k<oqhtgvQij1CoYJZVg|^;QT)18ni0+C+q}NLu`$t+s}}rdd=BMe3g}%FQwsI zc}kV&@0UAth{N=LSrPpB-m>TNRYJ#}=%_ZgY2Le-C@cK)ssAt>WihHa=dj9@&bgdL zUWv|_ZjuPTZ#GvKerLMjNQKAZvgte_@5xcdJ3~^#N!88x(&73)|AzmT;Qz-{GqN@O zuh0Llx8Wi@Y?T2R06_RVRmu79zYTxSM8{xa!ot96!bJCX+Okkt+VOiO!QI?#fQZKS zQ(_G_W$BUbCtVM~MJydmaioE*70S8;@v8YJH|1*d+iy5JX_DFDE^iOYN|oM-mjkPp zvr}#_EuRk{Ro*S{7bakqz4xP&$h#MZEzGH*c=DsGZhF1c#zpp{^$V8{ZXC+Y+XL6E zRYKnVAq$Lkdjn)t9B>;N4jw3mACQfr{QfF_j(EG$)akL4O6Ii<MD69V{2S2%CO1nS zL(pN2xv*<BP3f~(hw2p#>>}Gj{zXXiS^a$!Q8n_I4y*Vhac#jh3W+{*CJ^?O%<_VH z!catFN?K@4k2!wLk;4GdTPxbpJ3pKS3=GkKq=+FhAX^U1ow0dPMo5@LPpo4{B44fa z(q`49TZt%q0jZm)?P#gh{y4*)#Kp0rjaqU6Rv@JGR6S}m6XG22Ic7T-t9}~S!9qn0 z4;A{FzL8lbdF!}dI<nW^UMO*$-p{G@5kt79nGa}`aLJ<o4Li_EM`DzIF-DvcOMLnW za3YETSV*?vQRZOPmx}Aov9~mdRc~%vF7%5ioA(@pTzsq;hxG$~9A1(w#N`FBAM)EE zYWXP!{)ASTF^rd>FiNWZPqDsf$z50Sc-SNHd<*2NWH)^>?5W7!lC@mVs1JnsX&!>d zaGvn`jb8D@ndQf&=T9;4xOw`i^(lV%%ixRr+h%;D20n^$#8S@ClY+L+6<b;S@v_T# zvUqU;)+SD)_|l8AxjMuoC>f&LG!oK4QXE}K21xZ#^#g+__6VLap(H1%DO`S2kcnAk zL_z2Lj}E8-Zrk#?1cv;GB;kt{(3dvH6SAwUV}#RgFd<gZagca#p?P4$ha8>)Q1`9y zQdV9Zr5HC6CF>`>5SPJjWF9TaMPeOaR=hR^9JLF2BVUl51>H(VlrNX3WoUFcclgu0 zSSeYb(d64}9jVR4i*@}^c{i-W^RCO5?w3tc2!(>OpH$Xg9^fAj*R++n#Vm;|<;(kO zC>^o%i@zg%br1j}ynu^sEcp_nT`j1*dYCh$ib(J0q^GAyZ8zSN*t9lVr)B<x<HKG^ zD&`$fVP@gVTGp00#IfM^<u_H<06y8i|CdsUzfg?ox}6sJM$!L&fg&Rd6Ell}2@|u) z-zYXJOUL|$VtsdC3N*Gxa}9Vyx)2{U&_J>o;+|6LD3iVT9)c{=>lFs4O#QeEsF`p% zOZ3s?o#*2U+$Ak9&C)hcr&0Ct)po6{u1<$%y`C50z%nT`LDHEq9$WU*p+Lub55_b? zIW$3ARl198QJc)*YyC*g$aHY8#vq$C-R`Wq-dkS1CqEcN?onqBK*B_k?2c&uS}d(o zxZEBHJc=FalP!Vhb9nSk++b=2tlr9w&20iFs#1#JJwK`*1x7!pCSV?gV*kAhJbfLF zqW$4Y0R?OXR$!Z)h>fFO*~Up*Y>Cro$zT?1iEb%Zu^+$sP!9>!ti56^LMW6F?-quk zi(MeNL9IvU#0vTplvn~xYq+J~TxrLX6iQ;%Z+o<QI{pqt=<W_;o4VktUHDjMFi<Mu zvBn3(=wm)MbEYP50^+j1a*n6EL~mNtqG&<cHeR@PRxUy$@bJ&fec{cN^NTUztD(lP zSw8O;EO6<ED-i!{XLKuP2fN5{3-t_1LxHX{mM*=VOSD)Yklz&v!8o$2Nz!XGQBsl{ z#jScQcm|15`g^CLU(Er;x{kaIA2E9(fJu31tOg+dC6-ogkE`Uag;t`LF{7g83f;`d zi{NQqW(O2`>f;tG!SDX*O)=C9l>t*Sy7**1Q08fQu@C;D-&UbLDyj3!N7~b3enphU z!a9#p@fdxOoNW%CKmRcCm5o7`w(H%gKiu82ar;x0n~>E>5kp>>>H?9>Zx)p)Q~ri4 zS2=`ro*I(U*oZ6r`3JXt^Z?ZXw^Id@+6CW=%YbJDAKY^YokRI`x}Q&HTqLtdiFJ!Q z=GE2m_P6X!f~u-h!)tSh86JNspMw(<?{{Ak*d&z%_rZCDuFVC%mca5Z_d0=(!QJ4P zbd|S0ESJlxQYQ(kX!Kv(0CFd`O|8-0>zfxKktJRLu+Cz+n%xPK&Tf<O+jaep=iU0Y z#mu;}#Ba?V9{jaGjwj;8=DWFT^gUZN*JhYADJIe`n3jUcl%&ALNw%uO{6sH%vsOy= z+Zs9?1J6;cR`*xm={E!K?jlwd*S8VD`(di;k=+T!1%2TY{Q^Yy2mhEM{-Pi?pP$9$ ze!F9}WA(a+{%6dE_**yq80xBL{Kk{}e}N|xtD(LjlL<W&{r`=W>(PJZ+)TO+=xDEJ z+CXt<;)KFbLBi5k2nQ4o2IdDOk-*o*PqrCd;!M!m_UbA%bPp$PFg&@UFROSfSaf;2 z{8ZCjZFl#Nj%;<S{U+JIZp{W?JnAoDV~!$-k7&0T^@1HI*^k~ne7by@mPwA%WjpMY zUs5zpl@1T*#FH|FeQ4O*kx|HgHoE3PWddCB^j}q;8Z^x{_ODHD<nn{5^ZrWh$D^U+ z39djG%8Sr!PUqJ5A0$^bxYbcI!}`6;ULmBC1EPG@P#UDz2KM`O$)6HI!TKj=>=;WS zTMtaZ)Y`8k$eyq#D^q~1wKl=<okbWz21^Vjvc#~|Nf-khrVaO^G7&6rsuiy9NV(CU zy`|SYD1r43Y^10cY`HriQb4>$#IeVZS$P3oAjEuGHYGV5?vv!ttj-mygPYvhKt&J- zApT8atGV^fA)%V>u=7i&uwx4jxb;Id2qIn`l|&;Kh)5~Nh=jiNgv(o{EKRNj(+A*O z3_j3z^UnvT{na4WkHeF2&t^TUr2I-m_9=nSnlC9)g-&d@6JHIFyeF!UIph%Ju%aTH z<Lt~iod_GG&sZfF3OuCjkicB(VVzQ>wfMdr8k48KBCq2aC#WYMM?#rLMX`02L^|*! zt@})X$FYE}t*f?BA&$tnXuC~U8INoHb9ChvK>B=82jyw8O?E1@$(Z8di*TjQ216(m z35mAKe!z8stL7;AOgkkr4*4dg))cOjV+%P36JQg~Uq2+1IusNZ-3L0k{d*zQ@~ZKZ zEJVIq@xm>)WRBR42N9?xUu)rSdv_S*bhu~97rJ4?Y#^7A4(Rg^!ox&n(C0wib;8Y= zwy_t&T7;FnpNvA_gnbcsw8go9Zn@F=Iu~Nra2t$#V)-ffrYCW{9bVZW(B+OHG9416 z+Pufn9_%)zgivxe&A;33UNpE2r|o|&sb=Gi{HBPrYxp<;96CePQInLls?wS*x|34< z?$xtq~`50n%HhWk<psO`B`=zNW&=+>gfQ=n?|^6YgpFntx?ubOpsE<^)reyp2{ ziDNo?e-5G%s;n5-@bUw<(c3x7&28Nm=wDe3kJp<P{$?@vf59TNJ}Uz=6AK&TKUnNk z`Dds!phIJ8u<-}hh=Z670JtG;g0L^!FiLZ?KS$t%{CJAYELaV$0;n9Q((s)~KXQMJ z+&sQ~?YFpl*oSs&bbmtS@$vb5e1KYsyrYd#$*5*M+q!n^Qgis+;|5k?Q_XbTa^CFl zWMXxmV$F8jm3T<eR2^TKWK6F8Lv`yox|&(S_gmhRlwub0`g^&$HNs*-nU7<^>KF=z zQSd=#0_WS(^Za8@U;$Noqvhiq5}HbeBY4zPKCe>f*HI0sQ2MV1zLj)L?8d~}Ir047 z^A9#Y7K7rM0BOtoga!7TzPP2pH*J59G+y9XR5?$#M*x%9)P@_rT@0eFYFRS8NN4ci zoqfDMnMz|h0}|nhFeLfVk}IxwV`GbdWpr%e8GNJ&A2Gh;8&3izjdgf3B=y#Ed!1h@ z_w_JVnM1%Q2llIy<4A;%v46JNvzDW%x3oacE?Q{1S=I1thWRx=DES9MJ0e|3I6;P_ znqn!w`Fz}5D$b9^Jo^MV5kvsgNbuoSbZ6O>?soUs+oDE~I4~<0ims34J?|!_JJEvs zJ@fSA{73A9=R7#4KAXRp#c9arDtV(uL;ON$L3!ef90e0LOcbW41W7}LaMWAMCiMDq z?qFNu%F9J0+o~*qwPI2pPtBjaE0CHPs)6M<?Wd90XxZ7^>bEIzcw8XPGAL$bMh*OA z50Tl-eh2vvH;;`hvC}e)_^McSkq7RAAZn@RN{dw}(PVW>CBgWJ(Ret`zzG8uy(Wos zx!OO86UQ@zmlu#QLpN5`n+zY@A7WZ}E+o_BF<^~UC&M~_0(*^fIy~~?7rIe|oP#;~ z&r8hQ1!f^IiM3;oP^9x;Oyr67P|IE~M`3VqlL)R$!zN?h42i!^C7OpG!wBAN0VF;y zWK!?bs~-`1f)t3%CIlHapJlreLYJ9fiT|ea_Hn3XpZcJCNfnQ3<o6}ruGyO_IQlqI z$6iv_jaFOU>ZGFLcZFJ^9jLD(KL`~hEZ40ju*g5?biKB#^%A?<yS;hY3(vj^>)%#b zUJd6${vr59WA2neJkN}3hLe<-H**-zW%2gLwzvD#FZ-`_E(g3Vihk3X`oEx)&DfZU zj*eBIp5gCE+4&zr_Wwzz+c%wi|BcQxwk+1^t5rkJw)W4OHLs6nARX(i&fu8r>~8N) zAeR02@qCn{v&lAit}NQ5jBdASzk?~|qYPJV)+^je>CBr+(yVp?-ovFu3TMZYpORCA z+sPT5;SN9Iwp{aoG6Ax`LuHhOVG~1P|J-+|6aX{-LSYQ$)zb5VGN-YKpt0HTc?<$Y zEzTJF(@8d?LOAHC2AwA@oJMpm4O>=VN|3=o+@i&Hj36O|5x`OzwNy4i7W4^S8$?qq z$`}3$BLHF?f@*><z4qfL#f)$VUOJsl*mvuqoksXLMN5ny-|<sj7U##dd(p441vs@Z zcXZON)==I~0-L+U(i`|#>1a@oC#>3evzX&B@NXIWg-=}Opz8b=ot^)rbLGF%Ik~MB zbo`%mD*jDpTBM5zE>OM_b%BN&R=s!gLm`<`xO2DPJyDpS!Ve#=zvvX~Hul)#`7Vt* zKra^xsh9hv^9QZF797PfJ7ng-bFD}2U(vIz$iyr=(?R2xOWjK>S0e>h6Qnnszeo&q zB~n^%$B_5LWia{sjKL<w`MZ)x#$Iu36FHPTo|?lfE6@rh^y_QK83vO12@~~mn{CF# z4*$xm@(L||J|Khg)Zfu_@jH5+ge$2t8}=SZNUW_3vaf77t(U1(+Bt<a3a~D;rZAZ2 zO8y-^%Ln0@C3VQfB{A&rWc46`Ebfn@3XzMx+P|ac>XZ@2;>=DG@kcZ3i=G$;S#{O1 z(St4QY*wE_9v6p3mK{@oh$PxyLKeMi^*eY5|1D%gp^XuEto0awY_&xAN*5v<dJf3F zvjQZ3x)e*lPF~&P>j|77GA$7V+q@TRmGxU@g-~;L6@PA@UqsmtBaiVesnSx8#7@!f zn!SGG*(}=9Nv*w|>fm0VUR<;jEO9b0`jQS!s3-2$OT^2pCo$dL0H?DDhf9+Le<GvB z!=uY}^MPak41C1F`CF17^OdtyXjq*=Tfu)xU*0^9CHs7~oi`%i?v9if@L&0KdRYrB z0RaH;{%#unKX~u{zjAJW=Y0Mn>GoHl+Muen?YEBo-1vYp3<5#2UW5C|GzVeE@8^b0 zDd1JMu_DbC$HtbN^yxX}l3`>GF6EUoZ!qlov{61S<7Rqe-}U}@LhRn@^%d>)db_uo z&Ys(k|Lnm7A28^!3lSr-FOJah&Ic(CI2M7wa^aG{`671mQ_TlXVWeJ^A5>$AZm-AO z2{o<p*b1R2z#bc1pT-Z7i022dMQi44D+S*Vx*%_IvhdCI$be@^)En|}#Ue_;dQ6sn z(uF*~ASt1{Nae+EK@{jgTptMoscN5@&jnoii_Xr<GzdKv>M<2xL^=>x6@|EUCvMUV z#gYIDn#YagPQe_1VGc&quZ5`p^B&A2aVinjS5Li&5Dgm4YIG^JMB|dKrYP6uE+A<H z>D5K2mfEpAL5U-aIY+f}t^Ah=gn@eAx?#tRb7EI#!-8*r+p9cu=NBss%mV=*I@1Ai z70R}z5KZ$>mXqw+NgLy`kWm4%WWIM%R1v5oEblTVvx(T~pRhH^^#e}d&VG^uGfVK? z6^u-#d!Q22wxI-QQ)Z<#NgSVZHLhcvpmi%`)m}5#AR|GNn+sFZGU~cD)~2sauRTo+ z<`Q_iSOS?Z>Lf&w5@mxXB3ElQUK>!Ii3X;9$Y5f;gX)X!Q}<aS$u<V5QN~L=q^{Zl z&{Coy;#w`E;{S)VZw!+CZL)0Jwr$<EZCkf(`?hV{wr$(Cb=$Uk`#-ZWyYud+dAB0! zTm7D>h<Y+B^W-@v!+Non-Ho4nBlG=*(S#bW{H2Hg&XicY32G!Z(dR2WM87vl*e8{5 zl`lF>0C<ch8~>t<<{B$E0*&(&#m-h4UM4D-vm7&y3-rqqD<njUgIo}zy1=?}<uh6- z6d;9M7CE4e+U&5u6Cj@Fe_~#5duxH)<3$8T?|d|K=qH{z)M*zU%a+UbY*5NR!0&We zNI+eGxF5c;Q7SLK`IzQL8KSGT_!H|r=v&mIX-f5F<5Kf0_h7tswU_g_h2YUZ*h(hD z_TmJi5_e>xqBtJA-hPKTtq~Rzpqx*)#z>K&w28q#_$<UwwO|$l1=V21lCd(59o9Ry zq2$WjwU?X3t=Yy%(Q*SBkG)q*;~X3gL(v;yu=+L2%A+-BQI#mH^8+&?(&(;(04B`H zuoPQgnaH_-MZfUZhSLNCPt2@Kr{p3d1uoc2wE5%NdSNE4&4*A1v*WiLj+X(J5R9N2 zI>ZCUISWWZsr6v6O)tck;EfopS<8H7eAZ#?^of&|Kgg-XzL9%PRbvy7{HsM33m(Iu z@hdQI){WjQI`$5MXu;p^&Z0p_8i}@Q0p*qitx(ts<`c+2qMkq;hgVG7;=8$*yToP& zX497F((ucPa5pZ*E3a6<g~svzA+8}qgE?ru??7~kI%%#C)rDbImKhpYWsgard$CbX z_W5E|tr0_zg2$|VsE54~lzKf?;&KtNA~U8#ufN;5KeHxQT<*Ug*ZnrC&RaTAEh2Kq zxMiiIi8^p=@NusGPR4A#&0*FnK&@9~{h@hl@r(}@)RVr6)VdDq30S31gyK^`f;8{K z8=``Dz&wVT-@POSnjM8Z+-%g$hYH~8<Mbh2HsZ{dzBM$sJ2Cheth`1D(9`%WCT2H1 z3+9?e4+8R8-dIa;$0W2Mn&rX%HoIzD@cX}~zmdJhl3zdNiNe28p6Ii37%(sy7@GWN zc~YdZ^G^cw-u?<7=<F3bM|<*ZCJ}5T;O|AC7UWj3aggCg;u@5d{PviRUa+b}&MmX} zIOu-=$nr83i%Cw2SbCnR*}FVD0Dt*-Tncf8)<d4|;rVUXtxfAOu;#>i{P9Q*R$1H3 zd+gb=A>%qz(mwWj22F3Jl5KB@owjan!knBbYD34t69$EX*+i}o^aFY4?9QmVFlw0@ zE3AcWt&9>}iZM34O#DFJ;?Q##jrNu;3Fwmz>gH0?ykSr>w2IszLDf`M{G~9O0UOPM zfB%a0B2gPK*Dk@X0uj;%F%l%z2^K*hk2<Y$hSn-pgg$qc0N5ZJK9l+{pdJ<uGn6tU z5Sfr!BP6Lg-YKd!+0Zc9{y0!}DuMU3j@X0;+1${_stDYr^oJ*{CYr&WgnF1aHe<&k zX>4S0)`*b5X@C_=9Pqn)sXwjP28wf&y!u3|$ykOzt8KqARG;V2vc8Ad&#Hb)Al$~< z&WW0O%%qN0^L?gTyIQ802vS+S0T=QKfKVv3Jvv>k1~PBmIt_MZu%X@esYc+C^ZKj? zASXP`3_v~LibO(7G%a<7BK`w?8?HRd#fanyvjyKoKDaQ!lkyMfnN8%WjR(4vnAu@B zjCgy{aanPOaka=GlD{(+npa4&cqD5-;=;R(cm6c=&0@h$G^Dsk_18F$ySl4{RKKDB zY3R$y3a@aE8s1ih^gW2m&RoQc1x+xQtl2G;PPW=@jL2zpc(W+9(lev7okF3E&>DO- zQVaq}rMAbV%enWbv-ugKORzTOvW54PTbBOFz9QxuOYpe}@WRsh-5rHR=Y3i7E7O-U zO~N5g#R#+b2FF&9-it~Hynf|^4Fcz%b%-&uaDxcEsAqDLY|H2Qw9i}D^6HIxgY%d5 zY$tMl?v<}XV<`Luz`Bc-e*PN$LA_O_^Nd1VGJBA>RV_VQy*5q%+!OlaoZ28IH~Tb% z<Z*vgSe~p+716Fwu`Hq17->Rk-8`!a_ag1|I=1}EO*+WJhPJf>o-w&Meb}CwnKq^0 z{D@}XoN~;_8fE^eMxI6U{?cIL6a1jw<x=sixB~^vJ*LE0JMaG&PyQd&8_W!&kNhVZ z;s1?jG+<#dFk)e6V$}cNu$qk0#t-T}P_tT|@)Sz}2!~tCLko#JF0UuanU&2H-c^^h zo?K@X^6_46#C1dra~Uh0ALI4zlG7O9>AG+}cJVxgnK{$_yMJnCVZs(!4|v)KSM~?* zE{@tWW5;szb{X;|9Yz_+tXVnVd$TJYPo43;88kXYTq#b>!xSYm=<7B;_W$Ie7eG|# zI5su|QGW*9R;hnl6aEY4$jp!dgc&$BY6^B8WytNvfLJ7Ypk~7HGKdoqM>e!8X;cc0 zxX;*|f+MUE4qHlEIs_$DpbroSRq;b~h@*OTJ7|X2<7iwfgkZJ8rd>=I2#!PHUC<9p z?a=ecF;*>|2XJJCJ{aU`yh%X6;7lt;`t3J~G-*c_nHnY%?jG^fDivk00ccDFea|qH zR4T$e!Jm@16JOn|ua*ufyid^g?U<RIBui(L^=PeK(E&9vwZU#ymV@NhNlR{<mmg&q zX#}fJ)%djLz|*2aViaxM;P+26pl!sOO+}MYTWp%0+-mPQY_z!sg?P}r1n*IGMbTw1 z#sBRUnJsoCwKRCbn90ww<f`N2qZZ#*`VIq6k)=6o9kfvUOWAxy%9wvY0V##o<9hM; ziuy9riVG^Y?30eTj&T|V8%?V<C!7_t<LfW)7#^ZR6*=>oVj0sCaMv(vl{Up^Owdqc z-rS35eQv5Nx#o$3vCh(VO$j5ExjHLXMRE%sdPxmvAvH1D`EW9^F7itSIHo&|h_n&| zKT7CnW0L#TgJnE^OAzTfUDR~CkfZxP<e1K=aKrU4Ra)ruI@H%XXLCyYD>M4X-=K5$ zz1;m~6=t163gBlXTk*%hGFh+23b^~Q<>^<`P}ViKthZkmWz9G3z%PqQaPOWGgzwBh z-GFCY`ArN@A)Oyyl1pwi+}Oi@if0)dzPUw=)ymWT%pq+O)5gTmmkfS4GXk*=Pyg&4 zJ?ktk{IiLLJBy)tyagkS$}lsgNk7TQelmpmE*5*E6fjjwr=j&OHQlZr3vceRm8TQ; zo6+&gARt-a$b~Q-<apj6SqGL((9idMGguQ5$ud}vKZ~p@r6XIGpa13C^PjMG;NOi8 zp`ZBE`#0jxkd@<S;$&pN@?Y`y9|K^v9>Gv(93)a}cxg)y3?vM_7c8vcy+nn|s460@ zY7(xg9#hf{`}JaA=>&;~I@_Eli3*hmt6S&pkH<^eKRq8GVV>`|M++ewd4|K@*;ANW zH0V`(o=jPcPfyUKEUwk<dR84<vdyN*)=bSG(++B-jwV@gWf>6UW=!E9+Dx2b4!b}b z38erdVXpWCKLg;@Y3I{iC&QKs-}pw{p~b!`=*Se3skXY^{dMc%8Z$lnc}nr_8z8G8 zrB(vR>?49u8n$(mO$i;O?&T(8I`I5LA$G)I(=-}pA|;jtMnujkXl>eE;^p{gh+As) z79n(eWppVET2fGmF+&R_VEJHqS>1{J`C&vXE4<-Y*ZsYem{n`u6|gTLjU)M9f3EIB zOHh}XXmtqKl_%gxVbv>!Y0K>!mt-W%`BvhtZF&!DbAJ-R_z%7jY^9Bl1C?6dsPngC zum%q-aGOUj|4`>Kw5q06P*Fnccq$ufX||1|8AduOhD*SGc*4xY&YSbo@dkTa_ubPl ztropW)2^z0%t)cH*%D(?FuwCsYaP-b^`)d=7)ErLIfSM9dd+Nz^SnNWzn#TN@YhLd zbv#=@sgm;SXk`Zq`vpwX*$<A^`n%0fMmi@1_I=&goW$yLSOn&BB(|9j%EpDI&4LT? zf*AU?$=j6&WLJQads}3K<E&3m&qHO;We^3uR|nV73Ehab%7*@V19_~z{QY6P2*E9( zW1yvNyPAp^`>Gc0m-Z4n2QK%mx)hO!G}ol$?JtV-&J-Xy27~SF*lBTozZyEUbBXsq zh__tZvZk0O(k01cm#Yz;Yi&-6A>^FmpK1bb0l6pyPvItFD37_i^Qi84W@l3|5od^U z@=Go;CT7ocPJZw!Dz0HGJ8SRN>iDW2FzfgL43BD-MGHG$x*-5yiDv>{c=@Mu^lt`u zKM#W!bmJc3k8YS<K0S_p)57JD#RIBRU)jB{aLxaYxq;B~3}QaLbLWw8?t@A*$QoN4 zp(e?dFdI$V!OEAK;cAHP4EV*7H7$D!nwj-m`uFQAt;0*XQwr`F=m^F-dMU_=856gJ z-?D%LC5$!G=s<H-CnEIB_rFYpuYWO{RQ%Xm$s7NV$T9!XsGC~Z8t7a7$N%D`j<xLu z>rb2h0VO-oj3)lG%B**mvwyjDi?dM%!2|n=GM9GUfGPq{Vhy(W^BMOy$$0W_BkJhR zp-WYz!&@g;ZeC72%8pl&^RxQ<kw@$Y$KwGHr_b~A=WDt+*G01rZ|^m;Mo!v=o6FlV z^Mc!>f{;%6@wo|6L#8wwx#<{8d=^f&D0#R7TWmpx^@I^W81C=fva^o>)2Y~90N$Km zAwQzBcKkR#WX|pzIt>~LnwZ1SP`6UkYC3KSUa6^D)U%*eXd-%~HNLm)1#OZf#9N<m zb#$>42++zDm^|#{#G$ERa~^*2IH*7Ph=r|M#XN-EEF^$K=-DUsf(BFfYw%9&2HHe& zEtK_OH$19`HE4|yH}UrM{)Nc#gy#BTT&>uMaSCkMnk=m??En%d;zxfw2Mnz&cu3r? z`<c2XY&^)h@l(x^e7x{#{t)&5UT<&0s_EcE?!T_M1yGt{GGnb=Vd<c0UBLn76zzh5 zw%>asZyDEMh=ODThWG}C6lKIKf3J(%4^~miD>1NYKOMedvBus5<e2|D(0B%-l%>V} zI9KOzz<N&8|7(WD528|CIstxf6n47`>2TyTXvkR`4U^JL7&fmc>@~}HSm?9oRhHC= zh0I%Q1T^m7Kg%1VNHRcp^qjrJ3Mx_wLK(jq&5n&oN9niMIz3(v{DzG>rY{;o1F#O? zo(tJDFPdu32n0lo253KlqR1FdVmwrPNIhgmf!q$b=y=@^3=77>3&hneTtZ$jQ&aC} zHSd;KIE_6|0FYT*O)AI=czc2&<y*-Zja15Q&ocxu5(<W%UDOt3mm-|~%?xYCZN{qH z5o1M6gs8Ae3Q#qfb1cKXq*dPs@G(bq@p`0r`rPkQM|0nOtV~;hFe!%wPBO~EnN^@5 znOMFUoXwFne>5ango4`0G}Pue#`|OC0|%3uMMOz7=>q!DHf5IE#Sf71(2QNTO&)}$ z2_S}ABwXeww9wx(i~hk-qU6r_yVPnu-J~SWS{zk!Z$QSD0()Ad7<d{9G&)+%e*gRw zIXlB9ypUR4E-zkS<dhOKd!Q>_k`crw-A}rMP<Z(4wH%kCN*T{Bu;}pq3>0@zoebyd z#+l@IpD$FH;VJPs>{G$2LfQUby~DfDn9JtlbNHgjbM?*xD1q6D=ELcUh8TVz7tn@w zZx8{5b7D+I{dHfao07_Y|6H_!kEf&J&#SY7<Bfh|Owo#WL!vb;ED?yKGyt)A)w%mV z+0uF&i`eeSm~^o|Ch)5LoO7%m{FbmpJvxM~q!k?h&Ci@3hELVVxfLA8FR0I<c2~VD zpXA7-h7s7fOnHg`bYzms($QLeujycM9)w2hr_o9uHM?tPYxj+qBss+Gd;=8y-hs7r zs3+1Qn9kMQX*5+d>nYy@Kqz}0VE|-Cta@R7Kr+y?IEwk^$}xegQ~p7CE10OD^7bk7 z$y)(zYlyoODD%rPg&cbn5~u`(<;#&$8Hju@7D6+BKSid*NTAS)NxfCSQv(4Y3^<iP z2nmp9q}l*Ah{(!><Fc*nFalZzaC<U!)mQd_9)$x)wG!N>>VZf~@R8X-Tze<B=F%c3 zugs{<*v!|5ID+PO)02r}5c{U!B<ec5av=JjhZ!!mQ4~Njr7(}i(hz~$WZmc;yYnk1 z?tb+_<xqwQuKpnypw=<UIMzMg$p{J%y)Xs`I=vUJjG*ESK~(I$npr}F1o$f@0U@<H zb^b`<`=L<Ue9^j&K!8QG%C(8UwJkqX?cMWo<(r}?drY!h@*5h$M?+~6o?n0Jgi$KN zTFx~2U=V_!ag_jQF{4nX$?Agr(s}N{<}Fhg7`gde75cV~$(>AW8faci5(E4_#}jWt zu?(m*DhIT<8sJp`2+Y{p#lqwZ5EUReG}Z96{R5u#LrViUZKmw)w5X1kgCwV6hruvf zkH!mfg|!-Y_=LAy?PDyH;Nwne<w&-NL(KxVN<k1^nE^z>JioEyKn+8&*q24cTIu~b zJqUP9L}&Aa?U^q6HSa~H8uEZSM2YAz4=m<5brg(WTb?Q@zy*id5g-J(GsTfbDHJGg zh-<+v21a2h5b|WD<d87nO4t1`Zz|wCb(yOj-<eTWV5*2Ogiw0ICNw%DQ;t&tb!Z9u zV{hbDWAu4O^&k5e0Iu5nNpShkAE75>+P&UfWl0$ka&%Qj-1w7s>_F7-@t|K3f>~MT z=4A*wjWP~8rgo1UdtdMR=AEji5YQLen)O+;&YLB2wV5(3HB=^!=p>HXxlT9BO?Z`D zGt^9(b1IXMD`{UhaN4E-8sa3@{4;Mxcg)W9yqVTu`IGlSyP%tz;H9%5PudKXCZ*J{ z)0~mklOKyAFF$aWJS^Kl9LEhz#yR63Y=(ltZ{q58>x9g2+M*kb6m4Tkb{4DpuXj~* zMQC*Udwo)nLozIm2O1PhGw=$p6h@Outcno|#Y=GY?e7iWq%Oxk+idDVbeE+*)ox-f zC;P-}k(gxjn>(B)<Fk|%E_){df~Dn_#ceFCXbYi$F?HQc$t9gJr>(hp-l-h3=n~># zZLI++hR3)sq>oK!?zUvnobErSKh37_`23aTY=EHSAK#k9@yX*Roh2dneutTqZSk+; z-Sj<*SqK;lIdhL;FdLiL3z^UvB<F`N2v8_J9qmq-yNio}y}}JA4ytf{3$IH&`nq>( zEKJ4kO>*n{IqFF>l=PWL<bqLbpOEl6wu~;ea0&@<r2Pgf7>)!}a#LQ_(tKE?QnaYl znAe3TTWS(%?rW$BhHd0&O}eZDZ~4Y-J^h$Fv!gCrENzO+Wp%4Ct@!hqYuOcb!o&3Q z39;gDM5eR`xQYNep^`cieM{O<<puqysDUb4yuYhL>T7r&5byW`>h7GT##Tv47M_~( zy3o-}ZinWdv*nw9r95~^m$$+<5I9bxL|#UKYe;xyQ|4~DCa0nP$2Opai)$^Qw@H?+ zp@$au9zkl)V|}oKRIb%_Il7uPBgg_ccH>E*1I?JgZLZy>Eq`%V4<CX<Y$TdylFO`1 z^t;NjF_Ef|i&Zp_b?2kTt9q+A8`$}fCewdqqgmi%TD$&zxP9x}8OW5`7II$0lLIMF z5~~5Bahx}m@-<F9hd?AVHFlaePggjqunS+uBUDL06OQq9PV|)GlQT@^qU~X~a$=!O zMb*N?oOL+~{RWFW6zT@34Qa0D$%bgW9Boets7_LVB@3TopUGF%q6_b=Hvw0zewrh$ z`JS&}JQp+7a<eyyF*WwMxV@OWsgz1|mD_EClUQV3Q%zYgX|7Rquh^g@0ND%%X)AK_ zwl@BaP%kxsK8=^b(fi62U^c5|9_4!5ES*Py14;nA2NJEKhVyQlQg-I+Rn%RB8PK)m zCdFy$kb4|Yeh8`<@&JL5*3KIZQpSC@L(3fWr@D$|Ky}4T69jp(H*Ns$kFT3354{B1 zM}>!s2rKio1)X{V>Zx|Al9kuuGquaL@dE6!X-0Q=dyLNb)9MIa3}OcfBf`K+lIrhJ zuVu<Yk3-#CZfPMP^z#O97aKFGD|9L^Mo>p)TgjQ<qo|`S-n3R;Mu{6qY+WnA8&$mF zJ>eaVJ-AU*m1H|Pjkbv9n=T<OFPl+`ABrlNQ%jlzIXAaU+lp|fE+SBq1GA&W4Xx|S zf?@r#UIjy8`=`J^+CzC*QZ8?mbKABd7O%ig7B!Y8#}u_y7hH<+wPesfikm5!bSjQS zlT8LuIIFxjZP<h!So__dHN6tJ@}D9^cln&zg%VQLAj^-X>q`>f+o3s^Ynk3v*umFS zZd0(|BF8RFu^0KOKIq+Y0sZiu0nCBfh2p)IdcNim0ed)^e5W1@JvI#ohGU-ytdUv0 z&4GbuR`5@>d7KE`RXybd?pq2Yre$SkcD*7NY=38a)|@RoQxvxWJ2D`BEb%QOBCn0+ z?9W?~Vn!1oT&|XZ=ak_-&SZW33*{{45c>~55CFja&#;d5e@M>$KXwvDi90{A7|ck{ z>F>PPF2*8myVyfk&DJPGY_|4|OY>tgDEpMbK2^=P9XS_Cy>l0?X!7sahq^+~q?f6W zd#l^eBcN@1UfqGImHTseW&}gZ9vM@`Y4rPTI~-iu!p;{G{zT!+vc!xjvUO=<!|TKS z2%56$=py0@=5U8`5zg>W9Zt?rDP@itaQmpj-jJBv?uB#VNok?g+0<rQsL?kiA_#m6 zgc$<rBxi96v7r}X5GeC<2AxvlAU&v6Mx01OHVw6V-8fbm8jle~-x!BRW1sKY=o}96 z++pns;nqnaRzRN{)s?C`5Te!23?rMvt(h-<*T0kMA2Ad8gILGm%A=dG+jTHyw;Nx* zX(!3q$8Cz1OFK|@tWqwsOE(weVTpu&q+T2cn=aLz?Xb%$b*j&}>zC&kn`eB0b(@eB zy6K+Sp>4WCs+7k_3Rd23TNGQlmwbAaxe84_<BfQQFD~@M#32A<%}x*KHCaR+Y-o26 zb4Tq(1CtY0ILc%{4Wzl8t9=`OfVUWBiJB%2(rq=dV_5~&oh16{K^*c?VV7Yxe9Ek5 z!!ieFtJ`R;zvQ>Dyj5Vo7PRuBMl;&5zrTR-<ZaZsW#tD&uTs~5Nl!r#<HKs!Y|88X zm_OH{33WeCvKGeKZNTNrh+Rq9MY4j4g~oZMs`7Y+7FZ|?4Z|a<zd5(-J_MaTq*zD- zG2ZUj?de`v&kh4{>EO;O%na)BEWCUGiO3s^0-%(73u*}(Ptu4beWrRa-~9ij{P<V- z2-E-YPX4Qs<X_MGpWgBRqXqfz6Q1ix&dGF80DwsNAG+qh^&S5as{FLk|42)c)Yhv1 zA!`=@*5?luv1zx{x{@I!afx*k65NMuyDem7x3|lrQ~uyG<SI)j*3R`ZGt9x9$z01E zOPHfp!E0PK3g(u?OL%o^FFb^vNNktlMUfEJ6_?ob7GY7&ZRsUO+2=15&n@*$Xy45Z z8}se_cu4nrn7E~2E{-HehSQ2I2f@XyTrUM+=2$eC4;3@971f$ek{6LKp0mP}5tAb; zXxaxKA4+zRXv@o7&{QNXLt)97vyyEnVd=<U^EZ*ww8$-+=a2yv*Y(TGr?3=)y?|Zl zHIrCTB;D~@90&M?`RgN<xeHN*TPG>fQNikFrzTF{5^|(z{$!3_L9rf5$Nal8J*wPD zf*MhFk}WD%ORQ*AO$1pL%PEQsNKQ7EZG6FBP?owtrLJz+Dvh_eoZ(;`hhz|xv;T0s z>Y`V1hbB*zG!D!mF(2v#$gY3`Y$>kb(S5RT6{Rk4arer%?uh#qd4J96ZTC)}Z~s>z zRM{tD!=f)QS*U;iAUwV%_==^BhQBP1!~COXVB8ETDXae>d;0={OmW3rR<PxFE%K%j zV;$IT!Y@Gl>hVt_G#y$3@@L-Vu-(Yc1sLWFJklHiM^y$%U9-NMz-NLMJz;-pRO)iZ z;u3KM)M2U9)XkhJlL|zvKy#F$j+$jpGN{R=gVURgbMrR%;HW4nL#7bVrMisT_0sBm z7>s94NfpQgCba+~QLDTN%a{7zye|N$BtaMOQfgBX2$Vm~wcO76Qnmi_^Jo2XMsTE& zQpFlJ&U*$8gOT>@N@b~GUcX$`+uPbSK<)Y*YIki!^(aW;F<49kV)Oj<_+8&GH!^qy z1InD|LbT;-N^nOt8$hNof|>kzCZr$@wIm5UhEq?>j+M|Sf16Sa6rf!$EZ%cbKNl)0 z+BtlmP2DX;lpI!%N)^FUOOK$a+B!%vUyo!|DKxYC3coef=-_coZ6jZ326C0fJ|co8 zP0o&k&B4BDViq`nWNqvv!6;SbG<)^ct|%@XWro!fqA#;NkJR<YUt?F*#>8NEyJ9w1 zpw+Oq*u8rM^A6eC^ps>CQN5Novr~gygrefnG-rcDhj<^1K-%|~C!yAPx}Z;wWjU8c zX(#(U-Zme*T6k|$|M8@I#=yK_f67r=sHj)!``}c<njfRn3ZFq9AA6~V3;K8qVtMFh z4s@sfQ4ulYyKh{|6>T8v*_*6&k^BX3MA2<rPD-Lpy6HNYPH>?dVD%{TTAH_jWj3X8 zXa-cS_*)R7z+xY>6lh-MGS}j8e`6oA6}(pV&C|r&`NzmndE?S{^@%Hrt#O=r++Fzh zjIDY-j?sI*M8L)AZshALCf$BZ(BGk@iJ|i${OMX()XbVsLrpgN*Ve%*?>#WfV?=7C z(#Uxgx#^jqE9ticS2=of`1mT1z0o1PE1E6U(!=s;g_l`X`_i6+B6(6Ij3cD%gvZ9! zXa%r1!h0KI@pto`x-WYBG#M^9JxTx*zVCz58@29HnW{4;Ds8lEo*Sa|r+zI?(}4D( zzHJ{5>mIyR5tp-hL^vuwZ*V%E$6-$4tQvtG7q=7m2(_nkl8i4e#hYhYT~Tj&cnuA1 z_FFB3(-@Jsaz5!12E^-Dy0zjf3aX}6ri0AC`BbD_FHc7;ax$fQ8{KEh7k(}7DHu7T zj|7_cpuE}h$BIXrqWT!rx)X8_@dMjBYNi$5OH;W0&A&ShE`L^vOy}{7x$7F;Us=0Z zJsM~=^1U!La<A@|F9FhPY`QZyo_@D?{i;izDRPU3{?v+ipXN+a9rSjlS7vBc*Oa~w zi!Xn(cn9>K#u~_ikzKPJkuA1&)u*PaLsLu@3Yiei@loT^O`Qcis2MsY=)sbo(%Q@= zU*lL3*y});?zxX}+p%Kna5vbHa+ugS^alR#N#7G6>E->WP!jvuKEVHPCw)gVAzKII z|Bw`_YsCCB+do!=At2$mPET(58zi-lKtO_UExXT(7LB_m3$Oa&I?R#IDt6$swp3hZ z+I@?YGx9Wz$JY%Uvo|7uQU5*4$~eL&l!O}@C85@Ux#!dqM@2vudAba3%yce)%?d0n zL;}hv9geH87$9fKJ_>V#%QQ6zmYT*tPC3^&Tev;iW=cxK3Q7Oz)>R~Vkofc&cI-i) z(>pMO$>-bS8^rgFuOU#4G5(NSiTi%3^9YL9?GYIMwNSPc%yt6mS-MqfvPV-WsPz8D zON=vqjc7#FzbYfWcV3diFARd;?Nc_mzHjQvodu4RLlPm~E=t^di34ve%mo?@^5G96 z?Icl32MLUc`}UXBz+ucyTyY}M2DY7T6bgvV6`(lmgBiB4pG6imOublbH>Jl_BVN)t zl%b~bC>pFM&0Yyk{KcbyB-s>H5NaI(ofTmdi%pb_njkF>b}n7YfHP`n5o{T9-)W0j z&tH~$cQa$5FfSINNk9KGZ!&Vo1;UOrH>LyCD$PVaAefs}A+VwrR=UVUojOwrTf19d zsPfH!;+&mST_tdxKf@r+rGHi~Gw22iOHZhl@YkXX4U@fou1evjas%HVhCGyDD5-F- z23@3(6%zfAT7Qr0!r6FaFI$IeYSuXU{Ru6TMgcssn+Pf(zR+1;L6kiAVhqJc?5(Yg z#NT9)<4%%->%SJND~n>O2s@>OGJs3aQLLmXu5*Eq#mX5Fm4>8yM7i{RuAON6GdPDF zcYJ2Yy8AJAc<F0J6`~v0=J9yZ@Y+V+TL!e`3?Uh=*-Tvw(L|JC{QICuVh}b;6LFmZ zm;<<BrQCFe4ORhd%XEymOoC-;{SdOLI3uUD%o`M|YwLjrrfwv8n!&C$bj^3XIZ=;V zXWUxFbS^DGN64ud^iMgY>+HeKWlH7*#xFra+%aW=E^yQGvZl6dTe^<)xF|2D3TUZ# zsGBptE~|D`Tt!OSBBmtaX!5n>QSZCQCgYxDuKs#R(7&RccI#z(bp(4YWj4u}N@d3e z9i)^p1Cs0QiBv#zM__X%ci><%W;r<UyE|Zh;eiFmJI3#aHI9yzMP>32ka9EbVN(9# zU;IPo<ssR3EcITwz4`vOD{x>m;L4-dHtZ*jc1)??pIqj+l5s@iyqWq&Ho&{!ar8!C zL}_w+g2z{Y|N6v^p`UV@V9@c<NyT>Bz4dgq=W;+za+!~o4^4BYHP5FMoKoGD6csvs zG{HQ1vr!xdQ#m6#F%Ut}-+@AeC7HC7;)wOobVF5VsLfq8q|)U}c-D!q9Z$A}hqnFt z>ex!O>?G56By&<Elo=G%jy0wIO2?`=6eu7*SIyHuh0}S*#ApvpBMSIKTM89P22qX* zjB>39ti}z_XkZScrk<Ws(?1-p6_VgC--N%*xh;;4UTOxC)pqF~pN~Ucx#?mucs*?7 z1=sFtOH1vog^Se+iu@*%Vz71xlC?N)*n0j<f!@&{TMoYIj?6)}leZ8}j*{H9bzj}P zZP~lJKc4tomQ+#gR6;7xqQX?DIl+u&i^36E*FYMcG*Z2;BdFVnk+MbGNApWimu_TD z-IS;?bIH_Y`TTX^Zvvx>Ad5b#a|OuWP1SQEOrAkm+uf6w0r|5Y@2F!1$RTUfq&{>? z7#hD#mXR>8ecJiht9E#_q^@sE$__HdGNz5#H^6^StkDdpmBT+>Xfq4|fYkp-VpTRX zwl)^lchXnZH?T5x{3pj2sao5v{}4#Gf7>JfUM~+sP}i!buUK7oUN4l`z_&vZs>I@| z$JJ%M?77C_k45lL7!#Ci?KsZ%a0Y8>QL}^QW9yH7L}!)b_<~V+npsSx!GVD&Id4-& zWVDw|(WOBTz<PAY(8EHa4Aobx49&;uoYo_D>@^+zh3u$z1ji&BR;(p+*7U%$npR}e z_cP|AE1N%==Z)ds@xbYOT*<WUg(tWP`HDhC39p-E9p7JVIsF2yE@3M@iFsGW&W;7` z#4)?*vO`nKEA#qFM272l262efyC5sN`Fuo2i0hq*vGu5HehQ$LL-#8b8+&sEMTmQ` zt|lRRFdQp_(obR%+QZc{Qp6;h1Yb;-(0@z+EGC2*S!*Xs!uX1uP=WZV90w<sea^K# zG9k|pZGxw1((V13*}IO#JhbEBzDYnkxa?GTq<r6=oCpc-L>j3V;Ar+keK5xnv;tF& zT;MoYJ?=MAVCQLMSMM-7pS>;Qia1nh7|lbsvZ}Ul(c9R6`wGsKeKc8<B!FmV6<mEY zp74M_HAZ?tlc7#K_oyQhMl$$mIwbSke!P0Wu~<O<+0;C4%?2vatq6Ny8Vc+a>4+GJ zuy>Z%hXW)`jO_=6{B(#npJ-l)=K#8iOynj?(ioS*D2iMR^4R6G(h29JE9@`U5+;$h zwur7nk)ab*QFNfN7m_{8x7J!xe6h}`KyohGIx)^<um?94;cw5~FX;!`&?dGEXpG#t z{~YOcZNq9*U{?gcP|^so0lJQ|QC07RDtUh&8|-6OVo_o$)|^npJqowNnM@I8^pHu) zM83P(O^hY&gP`stM<!p;pfm8GKZ}30V#Sf8o3XE(X-qm#s2r*bXp2Uju*1IMD_3>u z*diX2653FYTljm)>m9_pZFOwS&zaaT3x}l#OrV1t4ORelh)Bd{(-YD4yGj^!_rHd= z|F6Ho|CC+*pAD_KwZ5tGzY6t@Y0}W?eoPXof8K)sRuum4WAz;zY+dOr>`aqlc*F%2 zP)5F=w>FgC9^SGgQ9_S!V6oKY%?Oou5gI{gpDZAwLV;3(OY?g3kcdJl%qa3=`usKB z<qc`)X2JdZ3|STt=(gzmleE6*TwgzD_A-gDMBtjg#D9Yb1H!x#==OP-ijv0@=<zFb z<?$Lx4-f05&Li9gg2sLqd<gnb7!Rp?Yf|=uwDbc}lj1;;CnDPi*|)iHEICNFmDR5v zc2SY~B<>etEvP`ZaB1TNGWDBLCJwob^I%y*{uv11X{W+dpzc7G<!DEo==QvVV`sk3 zew<#qT=+co+;AX3xH@^`G~<!bW_xADiaFOVf7^_e`&9z%D#R9)+1uti$j8Uk<haaR zf=lX8J!kaOZqbSaT<u-_1>a!ux}Aca%F?Km*uuNw_}Jh3zZ}>8K`o$;>D;w{STjXG z1*gdW&#z(Z=4AY1{AxsJXJhK6q!kIRfPojzlF=@_Uyp>dfFQ_aYQj|&ZLQ{7Ttp$G z#e!tO>1ahhnaRl9xFudmY9Fx+Y1=8TO(aY-_!(d7c0+(fh}F+52qAC=vqkF9mp1wR z{n~x)c|YUhVwysSvBp{!m0ucn8l)KADb^O_3L*kaNuSZ_i*hMje{y)sSwf^0Dp}eZ z$gi2=ArCiZVST`}D4~F-NsW?aU=o(A$3xMPs;9z6$;R1HUR+rz21k*HHx)W(OZU6P zuXy+*$rH>(8ZoIUs0(fUnU0pC>pZDc(sf9{RD}SD)4@o7i4CJ!K5CB72{gXLIv9+P zVEPT?b3vIg0hFj2VK;ywx0eA#pLNtFkSJ~xr&j=tDb`S(u2(b=PSzKp(VwhD<BXG# zyhzhDj!HBIcLW8aSg{O*8dt#Tk->@u%lQ{O9X|qKhY7pGFTK?-Kv2lF@S?QnVA$Pd z2S{571C~#vWoIr5%hf8zI6p>}HKSDmBX3|6rtgrmH-dE+2eYm3IhQ;WBC-&x&M`#< zzjvK_%22d;Tq{(DZ3c!RD@?9cIz!~pKX^t)BFvlVyE;mO>$SLR^75MDbA`x@EGiI1 ziU#aB$!?=zG#P<gor9u6AKI(5q(fJBM!wYg#tG3droI(l`()ok&SDz|#8MlPi-|$b zHwOuzm-M=N>XOBR5^*81?-jZc6<-?>FLLxSi~}FH1zSJ#%uOddYYE2Imr;TZo4BTF zA+&^yrR-#+ptFRZ(PzWNLC}WFFRUoCUx(4I{c+V*w*vzslh1wu74)`WPrH2qM<?@7 zVz=uZxM8T&!#TzLJNMfc@!nh&)ugXc2Q8DHUwf**zTCe2Y;CdBcp7S!wrAWt_r?-b z$|BsmtY@~nF2iO$&sI105^SaMm~A#g%DCWUdnieCWAM3}o$BsPByTT@q%N_KxII5F z92}o2HP}*e_*|neI}*D3_lA?mX6~6+MvJhsTOxwtGFnHuE{(f%ZFM~#KUQUb?=;Cp z?)YR_aPhcXe4LQy>~y%Smm!m1b$xzxk0jcJyzvQ8>|iC|T?Q=f|FPSd%@f+0E<8~7 zQf_RpeX%%O%IbJ8aj|;6v)_q$55d4+Eq5zj3CZTI&Y65xBAFj6noqlG`rP?11<e1O zqksKd;cM})`Ps9Z*)rlMBN#ya&y7_6GwuHz`48l1@lzFT$Zqf>ct!UZWDs3qfgkWs z2r2O?`-W2qEP*9~qliRwg|)DsFX|o>CHh=n3{As|OOlF(n;uVQrZq5!34s-blFWeE z&m|m4n?;9{WH>N(<{_gHrKMCJu!ECK=Q|7rI(=r&xyj0d3S+IwkM8)uocQjh%6;@T z(w~5I;FjdceUwr_OusV3wFZp>`mxxvI)75e7z61?tHvsjk^J@l+sf-YcMA!^+&0Jr zPjbpvsPRymc^!avi0n;xOnHx7TyL%>)A!h*SpOlJ5qAD-q~U0Oi)8(-TS@i2a^Cfr z-`WL~Q1Qh#AV+y8><GMbJI0YWFaFV(6{i>`JX8^n$EK;O4?MI~uoWZaPInd&Itjol z;u_FFP{|HX2!$ZP{NhQ>y6|mV{UClGJlS7}NQ|;ir+~To)AJl0PqQo){UC8#fVy(S zk{dm=2y`PutTtf;HRid9kg1Ob`UPfCXPT62re171l=WCTxs4wf3T4mB&w^)FnhCMt zWy)U}@JY20h?`o%`DZ7SCfw3$-Aj-1+CI|75m5Vu+~2726E7ihn(lQRWv+It&Sp7z zhr4#S3g}7o6<~mLC|-YT(Mj_HbBAAic`ma|$yU<DbjNy7A4<lWtHD(^VoFo>pWmrg zMK@KImrI#i*snpnHP651RfiNm0+Xz>5U!%{Uw=h#T>6~r8X>AeY_&q&(h28FD=l#2 zh6|!No&@Y`BY74Mu`)n$slf_u5b19C9EH=wUF!0PW~|twKL`ueEd%gXIQ_UokJv*W zHlb~pG5B@XK%Ms*rk^dQSQlJQCv=VWm_ezV=5(F7&kD}0S*ly^kc#9U`Mw=<1f<ea zZOkX4ybe))%4pjImqpo*$?L%N<lY0FaqzsaGA3j2>mgW$)9qHM3a@?mk7@Dx%fDHh zZTqs#F~Z65;$(xKnS%@L0^x7eOsu6IOaC=<L13oWUsw<@dU||orgkh<JNA=)!Vmqe zV<og{2{dT;Tpo%yh^>?sI5PFPey*Xe+FiNYsryw*L<}!*5nkDsIk1DYo6El9xlCRV z0J|lSj9mDR0ahCDavTNWJw7N;b~bviYC`Kji(UOAP`D!EUI;9Ki5rbUO81E)u^T`j zwxaLx7xh-)MJcwuR5fZ?Y$zBJ1KqV7FxdegT(<I_a>}$&s|haOv}&DdJ+r5gzJ}X+ z41ym21pV)wkQo9|(ai|}0Jt150Pnw>HZ1I&jUE2{g!v}!pWhqfx3(XYff@L#ec*>( zjWuL}M^@(d@y&m%*MYoHn*m5g9Y`?+@n5g998J~Y2~Tg&=ZMukrvG_OPESW)*SO}t z&%N)^B<yp(8GB;(WTBnrhwB!Ri@->va213U;L<qiszi*reSFoZJF!gB566aM&fE<- z$7N@!%>`U$WeGe?d~ip2XC$6t9`XJjzBkL3O{kPMnPbWz6;aM2pKAf%5&47o`LR-y zze6sPcBJvZKao^m67t8MHQDO)nIL02rJ*o#yV&P_gB!DpzDtv|sEZzSmMn1x5N787 z`OgCrc<w$FfUg0-Gj|wvEL?txZ4P`sdj?`}4L5^%q<xZfzN`GXu>%s%3)T9o#of)` zVV_)Cjalobod@>#k89h4G3!vZ`<zPp)LjMOqhq>>d<*{1+SJIAx$E)3x2z+PIOz(r zWVsY{3009>lz0<!7uKHOv!%91#GxTf^phljJ&CWnowi8miWYKEvGn?gSEkcgOL<C& z8OTD4=%d%4D*@FSai>&<sM?H}G=|eV6#<wyQ+{YDLaeD3@C2}?NzC^rCO}dOLl(3V z(C|+W4K<d1dJ(EBU4=mytw@H13!dqMQ8VNvibNAlJ%v<tVbz>DYd;mO4tze*4E1S! z&xXc3%ZU?0yzPO=51PaYaKe<{?>TTn@melkQP}XrbBuNL(y<KI=V_~g{9O6OQ}#lV z4)g@wYZjMDCIUnpQI3;AXa`!HEvwYiU{YWwlXyC0kS(ls`)fHXn|uL&j&k=5eaGva z3TP70E3vg6F8dr^<s$2FiKE}mIa}7x31C|!Nw?5Ps+QI1amASP^Jf1bAE0%_=ju`p z?)&59#rt}0Z*FO><DhEfbAXSJx7+9XNQ_4s6VLYX`f&tkiP@isC(7WInKMS}W%SMp z;!{PUEwls@02`g*T*8lCiW);VSuHWf3$JVG$Qv9wb{NE3M_bQvS=<yB`8R0^YTqAa z8v$C$ciKuD$-qVrK%>QF8Xl<%q_;tQZ5vh>W=)wHNH=x<TkaV>-F;>Xt$hor?uePv z2C=S!imES#Ki_7Z-xv%JCuW|F_pLqG?(cs$*lPTOG6Avj?u@zROxcg(E%5Ph;mP<s zIjLf<g+Qm|#?3o-Z}AD|f1HWM4iXkBOQUU*LpBC-h6fhN2U14(JU`3$cpaC@KZN2H zI<^M*46`mu*}HeT{E`wjGl%b)+QyRaU#IN8&6+_k@uH$lp5NbBh3@uW?4ZdI9N*q` zGsr=AQ`Q3we7e&%Vcu?lLp)Y@{2go@!e3xU7k)&cnVx!yPcNq544hc_#CegvvSzif zK;;UEZ$Y#%SHGE#udmrAekYm>4&93JLEYc=6y0;Q4EGdueU`Rnnkisp_<mH7Xb3Y3 ze1Q<66Oq=dCqptS{iP%q@do|NX(>euyJd81?2ZN;fZ3*O{zl4T@3#niIVUJv&#af# zs4{w@H>VJ7so{+<C&AnkDrEvJ!QBxZFLeU2Jd?>M7f%u)YnQQpU8yjy^a0RnmY)at zw~pC}8uUuH)j#+A*tYvGYtep1qw=Va&LKJ_%okDF^gSj`Bq+J(#LldH3uj2QX)RW6 zffF1zw#%cZH>Avg+~L8EQn|C(UxVn*R_O0bYU#b$d`JEX90dS79$;Bm^O`%i<jKO1 zjTa<&bcYe9p4_h4fX4Bic@UsTTQe?9Km-+C9s2mVLqZi`cz4I7Ce;1R-^dE8EAmct zG&6a-3HhNlT@I-*ZKP0mv}=iUo8a|rhV=Lggj_+iUk4cr$zUX6qCRdfR(L6YZ|zw; zarC_#Ll=OCxrPqGQ-Q2MZp>R2?6C<*W^K(?CirnTM9CEc`6VjCHX5!s+0DPZBZCIP z5fi(8kswh5WGv8o$@YshqOKm>x4r<r2oC)4{{Z%6xh;g$*9tu3J6|SbxW2nPXD4^u ze3orf&5lE#pqmXf<;g_WdnS8=8!k83#>Iu>dn_L9Ju!aFV|7$7;;32#C3H7<K%?yJ z^-sn5VuGkEJHEU?oR<dfFnn(FLM?<Tr>Q!#7j*Hc%dX0@t*?eIg9?6BWqd+7ZiMWO zBjnmh>#Ja=o-22J%ri0{0s9Gp2`i`NEDsMEw*zrYP}XYJ#NrM)juL*Iv4s>OniAw) z82%}w4IG0cC^$4^`gNH1F?^X{9Gk5xRyR)!05v;;3V|hi(g~!hNf&SKo*s^JTi^ut zXbzx_c)MNjJA`XwZYnAxmNyCziWx7v)BEde2t@p*vpw}$U!{KrBZUDWpS5)A=H!-- z)%J}#s3_E+5;?EHYib}Z^JIjM4d6apv5iD?O~E^fbjUHyIZ!J?8iy948srN&aYWr8 zaj;;u3qaQ&hnx7KXvw6kNc?1Oog_)9A(jIaO_#JDtW5QlP-oOzg{Tghb}v*$&mv1W z<QK&hgrmgx@ciA%J^NIu@w0T&O?b^86mPQ%0)U^<xjD!7l6x`hpo&UlajsWmJwHl5 z%x;rh?aPFb^Rw$S40Xlw4=WB5Z^DV!12P|#&A}|unS0ke-w>o6PzXNVug;eYA*UDT z$}&JH(U9_9S@RM&4`ip{l*8!_E0ux)AYic$%=(OoaylN5F<gM5XsT#FXleP<HN8Lt z?2Ngpp%5vOr;9iBRM6e-BK_B`7b3bmOdm;7Nb(KpIGNn>?ZbeCVsH4H`@=z~ADzx6 z4EQh%kS0GFAO#2UBXHRY%OU>fO9|iCII*0+vthtjbfs&7fMLQa!l@4gqLagozv?J9 zk}GILZijZF>g^#G$aqBHDiDMi1wJ14b25-?#&rH;7f%S<N{dYN<s$K>`^S(;py^h3 z89;AEV<7E06c;%U&iv*wtJK^!gIEzp(|r4MG;P(Y_=j~^`hD5y(`RM3<<isH8y#uY zav7bUwIP6ySb;*%4&%CEn2-l+G>7}QT7q3=Om@;k?S^f>D=J8PjJQio(q*HOO?odH zcskmC`*>YE$}wCiB>W2ki)bFC^Dx#%uOZD6zj9s845sbOeSSI}^(OIFVrcWO9)!mI zMDVUzWSd0dqB2B^Z%~y*ea0UmS8{rTik8`6sSWE<DOK@=!W}TR2tE>$xc3YIR#f%K zZB=`PIEVlyDTlh!YMtBYgMoz7jmO07(|Z2mJ!SrlS2?6rLJ7X}N=8IM6{dO@ArU&= z>59-5Ox2hSu*S=2tYf)+>l&NpPJm<xXD9s>VJb!g6?S|_)R#mg1_JeMJ!Vj56FnH1 zu^11fO=S*3TNPNvXtS85C_}E^^BLqL-kJ(W&;zuSe6}7~3!SXv`zL=RxAbY`RGRoD zPRrT_H+~{-B78+jfO(-N()E?3Pp$EQV%D-M8Ji#5YZ$y>Zb-}2Ukj~d&#w>&wKG&< zG1F!d4gxTT++R@gkGKdHg$K9f$<0{vI!d$BiIyp-7vWY92Z-U;Kr$uP6z2_J?`Rc& zLi36K`aV%@JWiFqqktw;Ji*jkM@0Zh<jW?6F_Ock!4RstyIuql;0#3!;nd3mCV5&B z7^QZPD$-kM-;P-gC$Qw)3NPKFKkm=7i9Dp~@=wXq?brqJtR=9Q6uX?2U=!@cp^_c0 z=)~B*!O$7GX(`Z4uadt*Ib`tuEV49Xx6|=5dEZh%{~CgNnHzxTYuQn$#0;aRovI0` zb=D5Nx1NCda%1_}Hw5y4)pU&|%^WmHlA+VDSFQB1vKe&x81aOBWD=J!+ulqQqs&}G z12+L&%BG<{`b)Xiqhb5I{s<WD1V#=|l%Wg~Vj6Fb>jZ2Oj;OBARu6U0JZhiQVEz5W zMUGjEL#`YuJ=cCxDHc$mLg-c=6)-n?$G}+wSG1~{P2BmY6A|mA)QbX-$qJP0wE|uO z3yz939p_5;J-Q9?{K!8+be~{d(vQi-s<K3{u-s;gJ-+A3^NKHqui#_$-0!WsDcDet zXWK1R<%9;a=>eQQmoDiP?n7og=`?2h*nIgMuH7qOmq@o!LBa`}gv^x29Yidu1<r}8 z5pab@;1G%t82M|-m4I~Z!X*)-q`l3&UU&1Vl(xaBqsR|BNEL>@r(}!+!$gWebvq<f z$Try^HVBufhD0uyhJ$!poh)u$;U4Jd^TsWZ@5aOLqy*(_O<;rU>h9EdUlwEw!z*b} zgDWgz($H6Hl161bq-_sVUk}e&!$bm97WU=gURyELaDD0y)O%xFT^ig;eEb`477Yx) z(2uxJg<rcB5Q`AcCSmV1L@qTepD2h=n5fo)ibU@SMwW5$2;P?q6=g2^&mx<;Lpdoi zLG3Cdh(*YxLSY{6XcIN5%SPT7qM2(Le%hy4I+Bn!QPgNG9)a^8-}LNEdjVdsr$~R} z=)eH{E)m`2)1Mtty`n3&xQm={;cWJ-HLQ=QbYuO2un1sA1b0pyj(bopeM+k`=9s;F z&3{u7Wpd{<fEngB;bkpx;gn9HPEgM-1n0yQk-crL*RF2BI7t>Lt*xDc!!4byvVn4i z=#WhlE+Kz`A%jifKNmR1Sxhm#`-_e_qNilXj@y;#3sP=Uj`HtEi^7#9YPN))JvI9O z)hEkgzFm_G*7{`7M}Fm=L7xsjLnd!VOIKX5N=x0Y$!Dcdr@7E3&2VB-&eZRKZp0nW zy+O$=@}GAeDr~G1`0U+LaS<b8C3(%JHN!BL5&vu8g{r7S?v2a5;Z|mYX^Do*aZN}J zn0wa6Z^5@-B7K<DA!BIJ5VfoiO3QdltqWRLV;`RnePal4*vG+f0U9o&Zz|4-uFYEr zcEY(^6lrPf&r~OhHgj*)5H4%>cOdas*oNqd9hN2pN|OwKY3+RE$Nd<s6S9GRE;A?D ztTDlR$(`VObiaT=j0T)oN=dEGA0`-hRRYBtc!0xq53+A9NVUL?VTX^3E%`m`d2lCb ztC4mycpeGy>aCb<GE~om$Moo8amvhnNxvuzSt|(=*y+d|fa2uVV@DnovuVdg#0E=N zO@lX;%=jn>PJbWda`h!R7Xc6uR|;POK&>;m?lnZf7hL76-DQ&ufO{Xd@Ww-zbR_0y zOD5*}c>`AMK|2HJCGlc_{W3qnSlyu^=~d!iLX{$wZ+`J7zBq7RzmByQTPBR-YA;vy zL?lLVCuU9$*KsYEGf1ukvTCG`zqUyh2s4RKlHhRuMj{%kH3IqdawCWlGcf`??@vR5 zUoCMHwiNXA1;^1#&7$w2z(VYa!S{T<Rq#r8_OH0inhmEHzR`7w-;ri=zW`&_W?p0K z_&}FqVWncV=0T}b;1~=Bj5zC+C}N&O-DX;RHH(Ti09GcN3qTQO-Q2?T6EG=%$s(~8 zf;of?43lt2H(MGe&0(;hu3Z|w^vvsyZKDAfeg!_N(%4X`^?4&)|1SVTK)k<Tf9^Tc zDW1~Ef<E?4#NPoQ#WM$3Q`~Ie<lzQma%aUA9N3&={X~5&0?roHRu__%8S0HL#myT0 zU)YD!D{ESV0AP+Kp;F=&h83_W<wF`&*NHSsIRv?9K5SwI?gNF8dIM7!pH}QVN7dCY z#<_?%#}{T^KoKK_QCsCkLCdPdqB70VDXvOXruEoOiYCG9Y<gbg87z=F@k{^&_*_Z8 zuFO*N#R8O)C8!EiV3y3|Ya!_`SSF5xuvgN6&w+@F#YrkdFSU7^lxiaefXXFxPQoIi zp)ufiHhX~?uf$%U<1~L!bgogd@(l%RE7~CPsr%u8N?cDG@Q&e8^b<(o<`Gk}m4TQH z#Rtq4u3+$hWAIS~ipYx(w&k?}0TrR+8bYm8U8e^xcyPFDC+Lkt+g{D`WrHOf3w7n; zD#?h!o~9^w$c7dP=u+e&zCKAvqa+(r8J{K*z>?Dzn8MNN1xqJwJ@vYIM(~$Nnp2pO zv!n&3|0+~^9Y@e}3mzGPhC!r6-ozpriR6i#jW#j%C?&_M1aTT3lp32Svn~`{%wbaI zCeV_-sJIs1W%)Wd>{gG;)#}cyiVt>s3CtEQqxuTaA5d4m!Bss6<ZNs>FdWa+OgcaA zHFzP6nPim;+!w~U=EvY*h92a67M8$a$(&A2rU_fmO_dyR<rK2q>CVpRE1G2WP(v&` z9;;@PIk=ipT|7?StaQ->cf(VgYdI?xx`#$#vU)#y@Y5fEgPXYZ?=f$bT3Zd2s2=wq zv(L;?D|A(m6vbj9{%G<E0?U`TP5KozY$9c`oUwm$eu}tEii?zycnXN|9l(Vq5TJMT z>$bsB!p4T^{`9q1Q~bNYpATT2p*w3gVnxu#{5pPpXZu2s<P*e>!Xu;+DUHe0j(ls| z2-0UaO=ebh6{M1CWHl$h!$_SN$qvZaMgxo+tacn|cP$XeW`rkFCuq4-Pe?hyNv1Iw z`j9h#Q-JU}wDmdHa$5cikazG5L_Apo7yX4eQI6U~XIvEIg+WU~rrW9KGgJY|lmdl| ze0hc*T_wOVpF61<%EG`K#246numJotXF#i<ge4eJ{@|}Qf7^ZyoDrO?S_c?iFd7Ai z0wHzm7vI>x4%XSj)Xm=@>UxE`{kCGYmds)am0_aw>&<ER&T&AS3O7g^B-<u%tO%kA zdhC+DehzzVnG>I1pj^FN47e_g3hnb`@=8lY#{efiLz$`8C}xg2a>Dl^0Yz2JNcbV^ z4?*=*TFTk;)p(pO9}QS(K*jn-<}dKreI=Q@ZUGLpU}4^BG-(>ivDyvz5#@#7{6%>t zO(1<<;kT9rHMC67-QO<{*N9@S;F~EqdEN7rB=&--A%MCUHuX@{0MTwXt_s+h!V3|+ zC!@(`7WEEZ;4#^zcv?dqxuRfK&OAe2$qMUkttYj*gFFqrP$9djL)RO){Hy#doq{@3 z09ufuzz5vj*DCW2Z)?$y2c!2+5%=yxFjK|WK}=c9VH7>P4M7C|Gxi~K+5W8u$Ubgl z+XaRJ9*)uyF%^tt`lSfUSzN*S0$<jkc`SHI*i5LfLPa(<{Lc~9U@pGaNOv?aq5K}6 zjXNWBR~m;iRw~x-_f{TXBQ2tAe2~$|2-peM)QJm)nP&x<%ZI8-eY}{{z+ejb_!JXh z=e$_dPeA)Z$$$9vRfCWR)Xo5_5i)fiWzfLde@)24%m`&7x;#^muPxTuBhLU=Or$Vu za}V2OguMjH;l0lF+Qnn@F_c3k)?tVHICvp#Nb66gIF)};Z_)0z=@c-LpH?Fn5p<1B zNR1I`f#?)Xe4y*nQEZ0Ny#TWv9Rrl8i=JlETPNh)-0%<DfL;UpffW08r~XW8G_e5I zt+Nf_G$z}4D8i(CC<8-!sL#6tcQmA;8UxE$G+mf@_<c6dPvW_{k9F4g8;h^zW&Djx z!Cl$1HS8O)4zhBAMjUi<oWk(&?~`l>N&_6~#TOTG0WPOpRv88;#^7Z!PguM@ndfKa zBCqJ;=7a6+pNzM^88e8(atgc8Fab#Uh-(N0H=N}cBlOQ!mE;^)rSE4--#0gHj;H0* zYw%RY83Np6IhYqdm|LlK3}{^oI`>vOA9uL~kzd`!BZB{kiy+>6j6rJ|Pp`q+{0zNw zd-YDfOFoh}s?HJi;f&>BGwhE-<wCR9?@Dq%g{}N4>cD|7s@FG(foTEVlO7$TR`O#| zi_b>NS<i8IC{i)~0D1AT5>mcu=%~j0Wc#OVi$pAs{GNM4n}dk5h!IoYGAv5v{f&~f ze8>WIrPbY+_=GkP#wp#F=Eg>lfES2<2M8#h!7zHP<YbLx(|5@214nuq9-qf&e1P6? zFcIl@(C%oW0?Yv2GSI7U%?^d7rgtI?f)Q{&$l;`>T-7`X<u=Ui%IjPbs7+33oC<R7 z@U+VfL|iVokUNdh;Sq4edA%dC6Cmgh?i7mtt&?)wdFf{Y0H><|VE^iN!xu^7IhvzN znzND|4&?Bt#M{aj7oe<*8ijN1cC3F1PVq+rrA#8V)Gr)j6U9J#eE8-_4S1o{G~~mA zsX@n;&`(9GlXfQ3cD==|t(08Z8HjLSlQQ1o`d#UyHBpG+-wU^x$l6RNmf|fSw}U4U z{!22NtvkDsuKiI`sF$yGyDYj<J2XD3sq6+aJE1c@PyMn$UC8b$YqzkQSJ(d(7?9`g zH1_&V;EnVaG)lXXm##OVDTAPP*aR&ee2Q=9R?a8dV_AHNKG6CMy?J$NIx?KYW92MT ztLcJ()-H{H;O?vU0*hJSGem4M*=>520VPE&%9X1m=8BY#EEk2C!Hc*&PfD(fi|uWE z3cD3Vn&`bvV6*tqSKD9xw69HH!Ab$XIVatwoFfwHv_O=p@V3cM<oYx8Si*TVULpBv zTV;^Y&j`Qx-k2{9P=YXX&+a63YuchE>Ue9(MREq$2f8h$59vvbAL2?&q|NTJlHZgf zny$1~)|PLp!)KZi5jD1B2g?rumFPv-aAAab+=2<i#<gUxbh}`H+7*sAe(&TggJ`54 z>PMq#>sW_7I#j}rH&E6k(P4U;yR$TblJbHb{5^v1){GFf)Rl5P!Q|C%ih~UvR3Rzv zM*JQ}41a8}<fExuqN{KSC68rzwQUPTe4zNA7JPpk`d-}GE`EoI^M?*4Q{P#Y@)V(G zz{~1{6L{LD*=2(V9Uc$x*Y9I8pg;*oTVIF2YT@{Ku0}@OyoIH)b5|K(iX(yE)M6Kh zn2nQ^L3$ZR0C0faMu80TT@=Xh5}-Ob87)yHxrgp5sp6<<4!D+2rQ~wz*Svduvfz5h zPH^iiQ2pjChzxK$)`5LzC8(x=brPAxuIyY+@FOj#1=R9IhUn!YpMZz%KaYHsOIBcB z#%KJRySDAj(0_=7m+o*8aLHf>$iEf_3`c<I2LOWtZEI%EX*NM<0fuuh5oMLEgWDia zRD=Kd?+%`;0}sxl8rES6Ez_C!-GIgRW6cqL5K$uEbz;*=z>&@O)cDT>E)lRPZl?7P z_?p-B9(2iKB!w%moI`0qgiQYMn9Odcc9W0Gx4U?1X1^5#&Ro%tO_dpTv?ul3w|aHw z31ecJ?{w}wubVFD+@EjgeJi(`aNck+z>y?e4byNLk={!IIUjPJXP)MhAwR9?g2YLp z#$XvreE=iugXX063qf@yOnc<dt*rpuoJ(qtvjh&W3M6Pe=W#=Igw3V>C``*LH4#~k zO>vlKiCi#;zr5BlH3ll5i-Ab5xpDTm6d1(+luocuuGMR2hGdhHtCX?rcnU`1vccQv z%t6@KfEpO^T8T?f<XypKY#x!Ru>&36F;7nbidysp>?b(7Z0_kFfF<)0NGORh=ms#s zeE8wm;FST`4iK0<EX;!eiw8XhYbWG(%{`yBABSwa(;)MOQ|P0ge#1sXCoNbVzj4na zyl!kzKK^a4XljsHaD&^ovUTAx%E{AXo>J~%pW!39*Og#SU$4SUWWp7g031GVL+H;1 zp>gKnQ;RF%?0em9yY422X0z;Gt-9WU#|jj5uGjC6&d4VzG)g@qLtzw4urP}Y)Pu=( zTV6@Gk3jwT{<-8gIz)s+dtnX4flJ|CU+AK&a_r^M-Axwj%Q5DYbDxx?RehPKGjYWs z<Dv8Wn&p^O=28njwA$%BKEt{n06XlQVuQm|M2?j-#b6ugYKFDs!*w0h5kG&-aY-;D zivc2+t9F1&9t<M9UQRif+(4FdwRBxNsw7MzE&?xogovxTU#1$kpb72+*@yf1p3u4L zhYf%f>(a_Vk3rcrP2HvxWfN|ZHMOa;JEbXwm5Z|!<@#%C!=5fj|1tLHdzDz@-t^FQ zH{ED8aS*gu6B?SjbI`JpGRx78rVL32>i3508hpNQsFpj7wn3<LA3IJ$w`M=Bighq> zq$myZt&p=63>>n|Xv-wLQ&A59k3_YstjJXqOTrbvDZgZO+BiAE1%3#ey;N=N8NZ;B zufR6AZ=Y7ZKF?(hz7_ZvOuS2+lS({;kxNJrI6C56rB?Fb1;`$0P9oGd5&TW&atM5y z(*EU&a&2<A<EtvcMkd9$pI+hyq@DpueJM%vTFw^TVK`7*CWhMWf08z^1c+ijbuhg+ z&f^nGosZo@&CM-ZZW>A`Ik;OAB;f7%7V-D);XpV%%5V#u__~gA#x_z5N7opEHNU>z z(=F!aMmc1ozh^}L^u;Totwpy+l=>Un;L4GS!0&c&H!lDFC90LD(EJ(nU>kOIl{Yu+ zmi?N3nVjlcFvjb4`5s?_#h8B2?<^%#xoa1Z>9AT$smr7K2xTrHAXEsi&KS35jA8|E z0JPOU(~%A+<e>Ycfi<>)S{*QhW2IibD#G5Jl}`={6RPmsZ<+E63UP>}uO*s`!YkNb zhzeM^#9ASvVJxQsE@H(YGP7_Y=rKDxKtcwTyiCETm?ps0i_3*NS<WC+HAuVd#|2xx z7Ijzfy%uZxh18Z*!>(p{=S{9JIRuhhmzJ$EeGq=q6f196Nryx05t=#->!A3K_7{h% z)_m*QKXx(`0FX<~CCc3Zb?cCpA#D|U`KnW=%y62SbvXK*h3T%#-(_IK&jC}MPL1NN zhI$1ljwH^Eoo12!Yp<Q&Z~R~lf3xOei_rZNllra9$u0NuWWK-vo+z(3PqmHzkPqPj zTJBfeW?nM}<&}K|tQ7<gX|7!@luUouq1lu=6JKF&XJ#IaXe)js5(DRPv}5){xl9U` zy{G|hY#iT)#dEUB`Qzf`RC!VmHan%BYWtSUS54ej8Xs9mwc{4-64d)Efi%@NP#$2P z91a=q{@rq|U`@_*n$j$M^B=c*eY_5b+J{Zso}9&4DO{@x-WL*tgFnmxVH3C@RB$uV zbG<>pQg5hC%)2dN>;y@{?NWzB%A(%C5Otqw*I2YFT3~{;)ofLVUth-BQSCTAKdnVN zrb7VunUNE)UU2vp6nVV}F;Pz~a6~Fc-U9%?tH2o*oq@-V;K?yXH}*NiQr*em#~ysa zsrIY<$~<cPNV8Btf=W{uNvV8u17#$VbR(T3M%R<EH+O(Yx5VNK{RFyw49A4zq`{<{ zH4l${iR}lyr#6Ya$e|eZORs@w#skjS?na+n{F3EKL!#7AnU1&16S@JgGLC*D0KU~( z9SC2kq9KftIc`vE$BTZpR_mc$0@mrL7u28u1>}Wk=EN@5di~alzT<nNkv4GThYM&_ zE84`3$8)0<xC)LqEJW|>Fs`H`_nO%?_>CV)(Z&e1ji!~c_SAtNPwlqg&DOLKz-q(< zQ`9K3E6cLkaB~n|3|a-hRz%l>E+zB>`h;uWY?khlt%<xYsZC3f+P}^h=<Le6y%#SV zPBA-v*rx7NiCFTQ&eO%M$oXjVjVQ9Ms(%L`<Y;*FE`-GL;`pTOi-q$WT;S;*3RCuj zYaMrSzoyR`^J66Vap7&K!b*FQ1*C_<M5BHM$Ic0skRKnmmps;cy!G-Uz1X%FRMcbu zS6&GLKbt9DDH)I#RIL$a;ObdQ5Vsd;19?=Er;b2~J#quW%Y!Q7YyxFhdYd?c)CPDV zaRJYI_({ih@B(zpq=c&!#ML<r3;EI^xzNQ62|adH5@dD9=%{=2@yT|Vg^}8$6^BP9 zW*%>icWX~qxSV@qh2+V69)^B|@Yd(~at?}io&qtT7$f=}DBZSB9R;~{sS6G1f4MMs zEA?os1pyV+zVkU3k?S{Ho5!TC0Y0Am=Pn|L0UUZVbDht-2z)oJ|HfbpUwDn(+|U#6 zuJ7mFGG;_IF}3!|qx0{AXd?ES%mKNC0O-I1=Xn7#o!dRbyR`@?k17cJ5Ux57eI%x0 zyN#?K;sbXz2NnYWZ~`1SP0sS@*GU0e6xDFoi{Ona@ovwq;H@JPL=RpBBOgPJJMRtm zx^q~MUBF0i^%$ypxBSDw@-_e3r~o!Jd#R}yRd9+-;k$vBo!T@g`d_fV&zZ7{#l1s~ zHNi%TM9#N{I<;4u*23Eb`cMSh0@KUYcNMyj+a>uMevHcM8lKXcrLfx(N9_XNgS#@E znP#w9F^)fGL{anzuA+SyKYmnU;PJ<g#_~6g&f!AG-sU*ojHtc6&1nuqG(nrfDO|Uy zCW!jo9JnaB$4*8MAMS2GjvtNV$B)u%v8?dO1}h=XVTw1$kGnb)G<oddfZDHdbnkab z2aj(p6nF8O2bN<I>K5d10d6#3xZuLK-q5hx?34h?2Gysr-3l0$AmDc8AeS!lL1DaB zkxuc#y1O|p%Wgd;zft-t76ATiuD~XdxaIhQTyYmA-82j@81mVyO}-a-K?=WfWhXQ^ zyTqY)a+$w<HCPc~$A4j?)C=<QvdUraO>w8bmfI@OtH4X<H%X<KR1~#b;xiK=;vomM zJc-s<qnt`~`+~U@03w|`_-HzyTeueh0h4F?P8&O(I4pJSeoTRJzl($}ycb9}g%|LY zue9L>rnlN8z<Ue82uldBg+=D&2CZUTR=Og^S2LldC+d+v73iku5^wE{re*n^sxSOZ z3pN5kjA6NsMVN_4UK0QW6+yaQfw15G_La^fI>V$aoX=d}6aa_@Tfz}MAWkD*WB<rK zUTgkr(&!xXyApq39CzD6a42Rjqg!}w^rz_@_BoYNp>s8p#1VN^152i;8!#3Md=taj z<H@hmioL!i;MK#OuOC89WoIDZZ39cY=Wr)XRq`2U_L_;z8SzC160h2aaB`WKSj4}n z1ye_92)F)5;?W*8trbHYQYjbvVp@AN1xBjum+DH5O6Q6Evbw<AMgl3~rJmjO5lhXz z0V@eHxe;|MZcy2(IgEwdCbQwm^-$UtS1*nfM6&}d$Q5+=^;ZKXa-<<rj3EavATuAZ z&)8<kPo!XPXE6DTKJNf;rJo6AjI>vU|DBu(h%XNZCUtgv*zG}5$S2$%xA#0Pky*_& zFq>lP8HUaC60;mrSZ<aEES01aXv3w$w0(<Fawc?o!<)|>AbN_2+^^xjfB7oD1_8(G zpgb>tv%CWaMTJT)t4QW40{M#+4wJGsr>7-IyxbWJ-fKLkQwGD-%G!-bh1M05YM4kj z8YM=XHUurVhhx)dlQ@Uz4A3n|6e{poPw|1=5?zUo(FA9gw0Uq5DgpB>TRhjfWjr{2 zR%RVOT^*HIzPDSR5g(;BoAHaZh2{zy2~On9I1}ytlXq72%Bq}UkZY)>MO!M}XK<mU z@1p$tBbQdYa(^5fO=s{=cW-Bx^yC#`fN*pxu8d+<cx4o8w9||T==>T3-AyLmQSz=0 zqBi^PN!#ix7R&2Z-q^<Bh@@oCECzl&FFDADKd|y;$0ZY>amL_U{UPGSJZ8L^H!56H zeiGCPukSP~Tfk96>#B>j;#9(K;YJrwsJM2r%9@ay5)}3>v|Ycb?m-|bItfLvElPkX z<+bhtAExu*=(P=Im?Xr|H`6NnOCVYisHUpwNRwManUwZo=)b1x)t6$xrwwT^D3!LM zt)>lRV*~r}O%0la9w&YfGDxcj44ckD=k0oqw3N^@Z(C%VOq(c8i}eTSOy1?a<lur_ zm_rPP&n=dYIEf;W<k~s2Kx)HgcxOo~y!4k13h*x%HCB$a+PC3b#lE2Pvy{@N+8Jnw z1*jkSCR$YW1E+a2lKo?EQ-1gwq&|Mt?EJZWx<|MW04ZMMZU9z;?~KPH96CNg*ic|1 zvetOoLYg^P%Eq2xGC;KFiq+BE_@2iCQEdl(nVumlgbiPvX5W4F3`pf8$I=r<7?-%< zNS?u3!TW*~{z&9gjhlBxjtWo=$;u6(7w%x6Yk;6#hdQ!?D>NW1<&<O^9tGt~Dp#@8 z(Ai|Y;}yek?}{b60MQ2EZhK&<6;UtEC~}p~$RE~H7V!+#U$N_UcNQOk%6JqFatX|q zDxN{DaNb>x^plgU^$vQLYdGem(EVGUU!a6-0Lc*i7n$Yy^!%Fr8;2Yw&s6QHMDAzt za7cx?30H{q|B{{C`D#`q1|sCvn_P8M-3*}+H^73`oa9VzlYA6?6Y`>VyA!wC-3<%i zn4SAw4R!4j?rKEVFh%1v+L?20mWqd{x69D!$vhA*y&?Vha|XmiY4S5jQ7aiy*yQWQ z$K6e^ra{KzZrecXl6uP!*KvqS!_7|BVpkRL|Cx3#<UHBlg}_em`aS#*_$O!uM3|}> zR(M>|FZic$R==*E6jt<h@GS<H8Ce@c+*2D7x>usE3rZ9__<BPc|02Od5*I!C8fAQX za7OPF_^=`|T3}ykGRK7IGG#%-x@1j{+L2T^gW5%~%6!lQ12##_MD-$lNSc77cA9Yy zmAveh!Z~SE?$teL018v>a40=8H}DuJ9I3>z639wwU*1SG!xCFMq?28Al%%>~e>ls} z&gLAE4@EEx=Mw$s>xVlJXc!>s1qP(P>e1u{2gLpj3$)Bdal7p|#i&+=5e3*8UV0Hq z6=d%1=?!SkZCg2#xpTb2K3%6LHUoY>RdtLz$@u=E;eA%Ijg4E-P+zPveA!f-xNe)u z3WP{QjB*psKlPmmK0T*9hAdkDa#^I;(VyaLxD9jJ@lIRtF^&&#O8bD0S-`YH2asdu zGB5@@XU%CyBIi)XK13c0{8K}c4a+P&J%wUp7Q(3TTP_=(z;PC`3eTAkwye8F#WkzR zMx|)W8dC~+C+?h6T*L7RfLMFLlMZ@I4rQitba`Fcy>O_=hgKwZ&P6X8@pFnpik8HO zKiC@iOQN|P)+|-$TTjFfP%T5-HY{*ho1TTUAJMasBwTTX&S!6b?bzHI#-q5tN((kW zvU666-dVV{qwQ-XE=?4LFUiJl@wE)FJdU9mC-Nlo=E-Of6;XB%anLRO$?6%VQ)F!Y zUDvEvP}_u_{L#6}80JreEuO!%pclC<3C$n68ppMJJPadt;b`2HPp>smJ{ue9^5i0| zo-R*LkRR^VsIu4Pd;qRdlMh{2*W`TK=vHddvOs|X@LwH(JKyV&Wrso<lG8wMe{%H0 z=>E~Co1;VcbKJi-ZhM`A9s-_N7`R_^&qzhMCXt}{8tjtph;OTFpl}1cA_Fb3YH5y6 z^7zsM!UIt8*RV(^Jg&u_ta9;`C|D4qni&5|jh<ajfo183yBB{#NCY2~^HG6iFM54H zq|Nx~`S^^(*|=ve5mb!f4hzi$H@=Gl#DQ=S?@vBX6Ezi{Mj+8qbs&7)AoTu_K<EWG zm6O<u5njUtXP|gOq};`a4`y94vq})%81F5*S5l-$LgY(O$Ij&qSkc9`FOn1W{x6_r zIxk^1o<I1>v*%BL{9^dz#gCs4cXp<y!=L{6={Li#zyA8+!>=BGy$%2A4zOmtKtBP2 zM4YNXus~4j7n@}n($76gaffpDRy0w~A>|%Ql0b?s^%KsB!W@3&$1d9Fqsi+Mt`&jN zz>JjVZm7;$z|^2tm<M-mFRN&LUramk9FJu9U8MVCKUBfGyBCc}#}2itkfDXVOd9<a zUc;`9X@Ey%Pp^^JI1Yq>g%Nq!Px2Y!42Dy`lO|JLi+%jdw-)ypw!%b0|DSLSW{j&h z{0TQD5nO-%Oe)wLl%<d;)Qd6BrF#r!2(6RhCoZm;k)lzcHr)<Z!lZ%6?`oLifv$O? ziCqI+qrpleyn8@R6=1_lCLlY*5O6H~j6-;wi)~>02qOVor$wQ;0AxN@ksH<r&uNVr zTJ@?wRhO&8dg{mTJqYBy;mc#<r9Oh3XBJ~&0i1|p88{@VJ%L*%6wf@+Ti3@e3kQ}- zEzQ03NaDdP=TTmhIL;@K6_6E}Tx7O#QG|+XD9Mo%c!F>sF)Ja08LUZa2f)uo;4`)u z+r4!T_t1kyhk&Jg^^-=*rscz6%^dgpP{0-nd{DDt_`$XXXi@@YucStKRaV1b96WdX zlD#yF0r*)Xr_SB`4l|Ip767kL&@>b;7+>&~d;1KLSsVV@+L9dHE}JHHEK{r7j3yG` zQv3CioUabM47_>%W<rhw93%f+pGt*CqN6vjU;S~!L_)^89CbzkK<ZzBwN?m0o<p-W z;<RUr!tZ%9um&p4P)uXycW_8;R~&rog~I@!R;*+Q!PvBoFgQ;n%%6rUq3{Ys(OM0G z58{zxjD#_s7h~bH*d^{uUU%{u;W;gDlv&{PnhfIZF<)i?h$MnkW~9m4EtGsMuX$}; znt;{fu&{EiG+#wqT~u6&n?&ZS+}50{A7b2XR8Z3^E9}N?u+plscnRbH@X--G*cReS zX-3anjfyr)sz)tyCs>h8NG{F;&LKr{NlSiUDXFf&2;wk6E$A6pF%%|3O>*NQ){P$B z0BhKEbJJcxR-HQ!3o*5-PQb<puJ#ZquD-oVN2R6y=dSYucgawtYyb!He>_5gs8B~> zYL5(3CfMREEtvTyZVd9~luR2hcYoClBDr@>ErxSr90P`{s(3PEE7B74s9RQiM$I>` zxodu()6j$Y$Kh7768TVdW!{LJub)5K9<?7e=VW4ODw#5xpRbfp|C5sG?Lr;e0{ppb zHRgS>*!8)Mex@|kka@y4*i!fOmlL&MM+X_l-GkQX$yOl~yUJo&z;1|u>1#$n+^aU= zCjO0Fea8xqC*Z`x&~D-MlRAUtMqMM^vYp=7DN-ucP-0RW`pk-8!#&ZHEmv_y3s0X) zl@@4SLN8WYP$v;@SYAwEgU_##&kC?@%9{hTU%#c=cw)2jB}5bObBC3c7$)@C+o2A6 z9HCghWuVJ!p0IAz%EC1Ie9TcLpq$tQ>E&UE<`fF9Mv4bzzx9E^wskF}bn6hss=#K` zl4N%_Nb5R6G$95lMlR}x<U23vW?+CJiOJ9lw|jyIz`UujN`zn7lsg?US#eiVP6QO$ zixKr?J=Gb!)q~>ZM&@K)9{^iD+xFH&i-g>G8|7VM<jaB{&_A1I3)KNDdInW>Y;rWA zK;Ha#rQj!pPYOk;kt#{iKzW7mWh$4gG5oy%lz?RErq4tbRzz9wbYb{H8d#|W{6Fge zojU~O5JkK7K-&X<Cg5ZR4%hg;pQCxz;c;tpf+w}Y4lVfV^oQl5445dZmKh8(;nfD! zp&$q`1y7+-WsCM`H^or?k~Os~Z9TRa7wO1_m0bz?0Urf7l2&X*ibddaR&(<Xg8!+b z3OAxebCr;fhM1ptP180~^7#g=;LlmI;U=}p@>h$@$uda|X4h0(X0P66i{jJTw=sj} zn|?3DV7AQHK^Xo1E{kL9Q+JrrVw@zKYZ#GLuF4@T)lYuShJ*^QOb*Tp_ba37tf`>b zgwqo%!>1}F!>-Ny%MM#Q^vX9bo%%8gSFcCDUhh$|J)V4XLk-s4@#)@cI_q-Sf2tBF zq4iTGx$<i#0Csp$n<k6M=^qASAx8tNLTfseOqF(%#rW!kjh5T<C!Nb3Zp$;iT-hZC zcUmk!2mwcdAE7ZVYB4~Wga|Kfv5VmkmJQ?V)kExI3sMkb*^IbB&NKPd;-z<SEJHv5 zA1=FwtR?(|r(nS2d(lH#f{GKIVmD}i1+cifGKk%$`W<$v<Ue%vIl)jpWsq-fHv)1s zCd^)qW0ypez)(KK6M8J57r94#=twz-JIGbs&;1B;qb*CA=qbF#Ms2rtA}})j`bhIH z*a@@OJxgeL`whd-?m8SN9CE_;@o|5*_GsB@0_%xP!S-sGnrE;#_jH-rBx;~-Y<wx% z8zQY-lOlL^Qg$<L!3sbO#m+V(T`LCM+i5kT`CO{N*}jMQZfp#(#^za*Ae@J;N9Hi5 ze%))EJvjSWHGM8(;Vo2YVR>)qLQai8qZgs>+l&@2eDG%=O<<OGn(GNWG{&v99ZAR@ zY4kw-iW-~ctX5scc+VV&!J}i?N^3;kQ6ZXyB-$p?4dx-G4ext#b#Ebe0;iozbNS{j zX3TO+2i@|BV{52$7(%$BtR!xDUEn78SE$-DQ6!~Y{L#$D?G1DBuVkuCiJzcVOz+cE ze|$Nt_Wa-)yASX^G%GL7xF;;@weTyrixJWG`>A=i;)*=*oHQeG$WwBDCSrD1plU0l zNimJ3PRZWHD#b&&U|WHN&(WCNtM94@$-RyU^&Pr*fT)0`+yyeMae^m>WbX!k%U)$# zpN}D2X?det4;<4Bnlc;sg`%vcQ#sXv6*)6lI2F#8Tf+!pA^UE7{?sG`euI<;+P&p% zR70@^-{`csn!wrIvgO4!3RB#8KX4s0TWxPHKyVNLQtYJDkKI19J?g=Emj2bYD-!7a z4(%z^xAL4V2;x*7@AsT(sB_Tg|GI=*2=i<5Iu&wxk7`pa>Y)JK`atVn`HiF6X(pyJ zVD2sL@Lj~)03T=$l89foxg!3`0g6{V3i(&(U6I@}F$j`j+()>Jz(utUV)_i57<BY8 z2g=k)zM(xgI{nDmh+%<gHqd3ldyU4dJcHZOXoW!YO5zTtv4=f!1=k`<wav~29rZ^K zT+q_E*^T#5Q~)n;Jtv8?gM_XNZY-Et4>0}FLQ6Ar%Z%ak2jNRgr}FACqj!~zD_!<% z5>yVTks=jSNpJP;Ztd7A6TOyOY-(w@t^4MRw~dqj1g{^5vNGk<V5lG?F&NdI&IJLb zntX~a>v(RJf})h$yM_Fz8n<X0)(QgH*x)u$m|d^aZ)0K`?fVe{#mLZH(%k14%6BU| zvwk}4&<4lx=pzmP=k+;X!gC|YMxV_w;LtDN_yCNb1KvOvXzVEQP<P}z4xd2LS(%<? zu&<EsFlnWu#rXmsb^YlW-gRZiKRD_I$7OH}roX`mAqGppv@pRY2A1o-{T|UP=H(%l zq4;}LctU@6S24U0cQVyf##@R;8nkRI{9O<z=B|}Xb;AiBAaIQtn1a7%@te<_ZEial z)d2RV$fR}WNJ>^34l$J-RY%3~7#~$AC~60#AC+5UOyTw^rQkC12<Ebwt0O8#V7MuZ z=?!_G_wP|fghC5|OkL&K4c*m)>=g4)!D@+@qgxBzuvB%!SFdmIifjxgfm)ZY4!XKA zRL0DG$)%frbmL8%rj#3vV1TU{FGGo~<j^Nwkekr`62ou2grCqDo3kL1f1uqAlkrp% zjfs$sKi|MlOumReGP8wr`2C80V+LM2K->bugDm`d%U{%3eg%0MWWcYt@QZ5Xb4i3> zng}--XyHIA{5-&)m<*;(dY-EbKfa9@m~@JF;P~DSq|?_^`s#K*t>ELROc{}}jL3>= zjn;zKXM}zDr3XPYNiuqwebnr}&Av{vyIB}5C$D9{e|zK7EOe{PbC}mKLSrj!92bx? zn>|AUn6!rC<^EQ_S#!4$EA{Oacpz)$3M?&l0?ZgGBt8EH8^%F8pt_6~q1=8yG!oRz zRvR0#G4pp*r4^VQ_2W|EVR5|Ez8KIV;T^OSuCQs+$XD7ln_LyFnx4URwH|NB)l|g6 zYPoB*j6LsNy4o>AZNMahP~65^6I+<fMkMC_&zPl#<)n)MAyY=k6fxq;IlMsjBS?n7 z4l!<kuDF?X1vqQxaC*$JLFGqk=B-1ywbxc}<s%#6kQ{B&^Siyswc2lcI~o5UF6odJ z{Ff{%2IgO~vU+zfEetB$W;p&|SaL9~_GK0@mj24s)LXrr?3M=$C<98|{THnuSJJQL zdR)1V1c)zM5*}{qJZ4q>ZuiSpPlfk3SFD}^M;EY%LG2Y{pC<J+3Jikla$Hp=*b@$r z3&5>hjymQ4+677D`?3XT!}fmG7U}0GNT$U#w?j4oFmM<>7H+uDme31<K=MP`X;8gv z6Z(k1j&aqQ1c45jIs{2J+SL84oe|h`y}eeFFXe$=nJ*a<3(SZQE6LAE3^>3oARM$i zjN9g(eKSyni1s5+fUsjUJ#fu{W-we4hJiyak4J1O*L3lCjk&RWA2(|AL^cl)Ylpqg ze>)^)9kvOHO<rd2*ID0m1w4^~hXy<*%I^2yyTadpFZY5*EwI<f=;|B*vwkSIR&}q| zR<M7Nxt5TK$omY)qCW2=ErPDjnDG<~jZVl}As)Fx#5AGhe{4VE4U}5c{pj;H2@{C? zxqKWAos1Y7v76kLv8Z?e<lZWjtT*1-XtxY#ToT()rC`8K)hWYS1~gV^6fRP8AQ-to zeI`7lS^ZIZD5`Zi+7wmetHSg~{R8t=fE<-x>)q^zk7z-f(BH^K2^2qH0c*k^sJGW? z{vEq*+08hi9E?8$0E%_tZUk{HL6D7t$Uw&7;_=z5EBe&4d#IBB!^n2RyL`IbEYTcg zCffawZ`V5<zxIwdwR01V1UQq*4XNtGM7Xl{UV*=yb3}yQ4}K@EVGVoN=0t)p?@NCZ zTzg=Ss3mWKEH{xhf+dM%y+x_0m7>rJ|IlY0xr905@_@9EL~bm+sC;=rH%VNAi>c`O zu1Iw^gD7?OR>#|eL9I&-ZPksf=AWeb-M$N+hZoqKj?~kJ*ohe3`&^q8Nw-0ejq*U9 zIwYV^CQxoah|Vf&XUfb)!>&tnTAuPuP~glyE;9|h=hhW_<I0V>jDy)@t2pZ#3endl zG2N!vNYO2MpBm+?7h-0n!?)a)%(Uw(09l{Uq>rX+kdgSy6qo%|j5_k*;lmwxc1U35 zF`~oq2f7)Au9fkrJZ_E-gs>O)`ki1nbf1K}REma_8jUyBp5j)^*=tIQX9sixO=X?E zvHM0XiUdOcjvhClD5#3LWaeFLqZk$BBFHVvxw&Jo#t}UOr<~;*Z|V~U+M<WO$?E?4 zZQgs-wYM~)eTHk|argR=UtB_G#P^^Od*<>P>RAz=5GJUazX$iEHPdNrQ|BTBOx*3% z9f@qWs|BQRPj>9x_H^{;=q4*v6Ebd^;b?`CaUE6U)*Ap;!vJ#ysp*wk4pX7%G0q_j z!=BI_jZFfGOO)!+Nde{ra_LnQ@;_!J#=(Fc$`pq{IH|Ddn|G-?AvfC%DsHvatRI6z z!G74C9d|D<*9&{7MxGy<i%uaIiB}T0oC^KPN7YI=HZ~e7iDy$*QfMl+V7B2iBR!iT zCJ~f6HH1+U7q)M3Urj+qC{U%8rau7WDCZaYbkd@}*wm)hx{+{yZ9@s@U4|rp$fyjz zjvdwcZF^_>_TO-)slWMX*6j}d`pQY|0J?T+@iLo;VltOt92^1LKJY}xzECW+FVvIl zi-WFNMGD7c-yEdL3$(!ytZ*g|-;75X?a~bJ-7z%fiS+2p&+j(D2`M@B!(L+f?A{+Z z(5MS`Ev|lh@;B|t4-l}`3|9M-_xYVekxT@mzx4o~czmDlbjo7(c{aK^eY{YWqsBpf zK`Sl)@a-$O<DlA;-jaBCp3se?D+%f*PCdQ6PzRsBoXQGorMCU?bv(~n3qe0VO+WI* z5!A)iIa<I)6!-^+>imoVs{^(LsK}knZsBRn(MTh>_V^MKiE4a;+PVA00|Cdo97Z4R zWdYHlpkv%3kdS0s(+n7mcZy4#&mDcatDgMe5*+3aiv*<zx<RLL)0^?t>1w`8{px8$ zCxkF)yOf7_t^%H54V<DNNcZd-w}rJvw@te7qOkiMRQgl;GU?o&k(46FviLh>T8xp_ zfcX_(y5koC*niMzGWZ-Dy#?@-?H#Bd_Ghs8;&&sj4o1^BY_I=f0HAb=I?5oTb6K7( z;~kf2tkGdW`vjjWu8ZM1B|dIR_X?Xf1Tqusm~BQGfX{z)6@&|nwpd#>>q2sY{R5XR zC72pR0dM5;6v2$!am@|Wxs&!d@<&>6Xf$%bJOPMGRv2(4HOUDZBvLBy7tw#?E{z^@ zv`?0hAiaGJ+iw7&z;8fyy@Rp(IY~W$`{x~Y^6|l~$Jf?d^W?!M%*nG-GL-DyWlvU! zG};QsNS}?Vi9929tQ?T7n4i~AX_|av)!pVCY@|zQZ>lATe4@Ml-6{-}b%>x|e&3?9 za5Z(I&;ZTqjObJZ7oM4sL{}yGP97HL>%z%LTzM%3JaV>Sb9*|SLzox|lStwBAfWCU zdOUqI-rgC5-;-=q!&3gjhCifP#SiuN7_xvxK@^Af;MKU(ByDpGsoz5~^gziKXbY<E z2HI||g^i6c!M6hnnFaZ37UVp0{#mj3kgqr=pSu<)dLOx7*S1|JYmO1w?Av(!RZ!Cw z8aoVa${{l|j8kU!7N&+haTD%w9jJx|ZbC{MaLp<PVzY<wSQS1~wrTx|(iioBm%6pA z0lLvPj2x0Ts-5khY<CP=k22Ib#~_Ysn&^wn_QZ>nHhf<ysmqmItG3HXDO6vZZxqoM z^o>nV%|@-$NH#*sg9Yj;)7GP@4PI#+r4FW!F}TUsAdT>GqL4;(zuR}4+uQu2RbY!< z*(u%A#jVRDp0nn3kk~%CwTvubjn61=2?Yv=XM5)R)G`txADgg{3;4Dnvph^Fj|F_+ z5SBRO5Qi~kvzFY01<2jS<xY*VSL{^WL+dhbdO2dc=h8UpjqZzgB5pS?P)<-6L3J?{ z|3i|!oUh^{fo*NZZFr87m=N)IQcmLqB^>_w=<28(-TdX4a!#l6zUH3q?sgG4y1}<I ze{oB=-j0s$ZFKc5%klkAbU%6`799|_<>`IbC_lo+!8PJ6J_CeHe4i24{1$FgsRu7y zU!kDWFex*OejmZU4YlxmmsTLwdX7)yzL;G>?AvlP(swT4_!lk`71!AC*lFbQR>TkD zHjHgUWlpa0`g0v`xHDi&*Fi7jY1e*Np&aN777gd}FHwR6Rka?0DVj|9y)V3qHm2)N zK;sZAnxaLxaN7%@e!?7GA?abr{P{ITV(QDgRVl0_4fBeM4bBTk*8XOD=bMgQ6Vq$z zSHL_0S5OJ6<Qcs_b&lbeK$|$3qw>Uj)xviK;Y;K}vH?lKq-9nrD9>}YGwbCFR1TVU zv3JxaBa-)4{*4m7bZCqe-AOgzvS+rU@>*KhC;y)jX&1-1cb!f<!q%o-hH$8td@>u_ z)7GUFSF*DN#`8}eJoxDd6QBt;r@%{~NNw+D@f`e&SHxW6HsM0mK{l|D-8#slTHjtZ z09rD4!=ZR(w7PV?;)x=+3i$SkJ}Elmr_L-KqB998aA!-4sOY7c#gD$Ww*2l7vXna2 zRk~Tq+U0lH0j`dnZR53()=Nyh=eWC`RydXGp4dgEu_<6&UdT!mcJVLJt8glA=_JmO zf;onP(?Q&zwTsn(v^37yo&$%u6(8`@PuZ-jgv^jl{5n_BUR*iXw)^qJr`jzXuZKqU zbJwvIsz3YHJXtD%r1e=Jj)^FjhtXn4YKl}c7MzwOTO>0%LyIYTGm;VpNTPRg11E{= zh4--idd;oItS~%&y}NAUzn?3E9HEioy62B{#N6GvQm{<Zl-(7hdVh;)4Of9`-EMQ^ zz8nI*cQ@gG-W9J{qi+L`{-E((vmw8aB9kex+@Xy+%t9$d9yT=>csjb6Yjq8k$b2Ve zFDj~_7ShpZ)E^<;_qrE3?B5itl7GR&ujmlp*V`&cS@hRlo`*cowQrzaHYW67zWIWg z|DSn)HTYM^r(`y3M)ywxzl=`V56bo?;Wj<t&H9rGqY7XBT`J%8&N(<^WQLj_j}1_U z6UK0`yJJ?+yB6q=cBCchrROP#V%y+on-@@P^d186O7nJX(FV=o@hv@=!&N6J;!Vu1 zDLIyJ?A))W9NlN|+I;9|0O6Jk7TZeV7A7*DFiRGNFu62Su{LX*?U3zo;xl8G<Y1*s zvX%uI%wpNv9uv&FT(Pr(YtL@TD?t&2E3bQ|&y|}#74`%LopGMx0o7k_8`~QQ`ZSid zBy|M>ZBf-$7GJzGF{y=`^m2h{2omUwmv>BFB>t)$M8Ss9l#bR!z_uve^?^$4Z6|Su zX2lhc_S1h_^La%EaM|nop^?!#@lk2**Ry)^G)J?C_S*zXCW=pl)iv*>1sHZ~M!;<@ zv8LpN|7ql}TyqAVZc%{%SDTMbM?cP!R=&k+CV*HQ{Z*1IV4nx82`pk(ri~ge6Ea8g zQzW<slrDH@*0cX$v2qDpO#V9`%&9@mNl*DHZg21OcTU+O^+f?T45$w!ci_D~@tmFx zG@%3!yb|O|GLYuWj%?z-TOnNJ^#fM;ms@q`swf=k(JCLN{>#+Ie^i~34II;XOt|O6 z%{jN30~H6n!F~^P3COBJ7(G%SkUmd|2tre8m-it&m9JHvr`inx8cNrNX-`zv96H72 z+?8rKjhatGLCe4!^^QD5!=;yVq-`#(S8K>qqlsn7GaaigLE*nX2*1ln_khkF9p;6< zVBN^5z84jozJpr=1{<9I6i+IUA~=6UHsS^_;)rb*cqkcHm5;dk(&c3l-rVQ*oN=~> z?SF-&`gih<cDaq)_*;646VqCxMM;*Geo<94j_ow=#7(AhTW2J>rNpyyF~w7Pq!l%C zpS}Bei#^~-%5gjGv@?w<9I#j{7QpUeu{)pqL|JtuSycGeL?SPrnx`zM%87-=-?E=d zESZ^%G1LpU6-3gXCT}_jR4KpC{+Pdk_=??5_tov`=}r&MKhc`Z8ESzz+RtjEqKc*f z1#Fl*_Yv9=2TSR~@7tgCTzH9kqiBj!jyP6JNu-fZ15hawjB+r{5=;U7^IO}RY6s)* z&9B(at5t;<kAjf)gVS|;Yb22yp_G)ZY_xdE*yfl;hdgY*vWSdgGUpc<r*eC{pY27` zNs>+<Bq$pVuS(n=RwLz7N+Kbh;6mF{Q_C<3(_*s7Gazk@o1>M|0Dk&ZVOt!pcS>Aw z4wU>}G?W<+A^9(98L`b**-+ewP&}W4DAXpd8Y$nPFkM_UWc30qWfT!xizIB6F0*Ln zIe;UO*`agqUb><w&R#W{<-;i$Y9|P%S>{M%J5f>_@eyT6s`n9%n#QhP^UBjUbqh4> zx2Gs?$RDvY7w%Vchg-m25{4VE7A0zyM9h+2loL(!P1^$fDrzjf9WMYgsyduVSh7zk zljB01wZ3898q>$_=PaC0947Z1^VZR&K^4TW7R6!E%*Ch*D-Cz|e&3o)$^-QYHvz5` z6D&=pe~rq!p+qc^4iLo}=%HB$Pxj9OAyaE85vZ-bVx>QQDA6N1?v<_~j_dVClZY^U zB+v%60fEOgreNXYgpJH~LDEjIFF<+*=J)d|u!k^7x-3Vs<5CR8xT7KXY@n4a4C`u? zMWWb0Doymkqz2%uDx|6#&nwu|RTDHOHo<Y&&@16<9MH`k12J=;396cvmo!cZIj(TJ zbxN37S%O>&>LE&&-{r$mFF+2OUwtzz!Dc-qUL-=8HHXpR&Gb6oWDD+8>|3f&(7{#A zY%5%#4ZD-@<;$1Zi~63lx}*%UF!j>{y;FpTzpui?;^%pt2u;Cg4i@BD4UuTMsEmW4 zq(%)tN7082o&`*YB}K_)HGUoKeHv<z;?EDOf(=8jfoBW|>cm$iItCP|e2LE*8w9J_ z{Pk;&*m$5;M5t2Cs0)K}RRStxUH40eYOIjUM2}~!6z1KDQ|{Pd?CamV=L=-3Z7UCF zS`kRyY4~lg0V>$~W4S@kxzsu`vy8=@6lD`?-r0)r;XdIjxWAxj74;3yq{h#hiWxs+ zk|TCaW$X$ROCP4wwj$Wb^O@e9802!2OL7hv6;MJ6jsC<p78x#n2%(YJv`!sePj^~T zd=&xV;1>=Lz5M6-u-&*XLmXBWoIWGIl<n|*cj!aCD&5s_I<}*=#EmN{M)*rIGY#7? z7J4<;^9#~jKGl=}&EX9vlG<OkM)o9Be*|Nsu4M1@PIp+~Bg!ubC~peA+1O43YcD%& zrHW%3B;`)ebMo~d{3Q0uC+xG{b?Z?GBUQkJsUe1^<ff05LhoMj$}cZ<c}k>MF0yl5 z9lrN}vA<7#3gYs>)P9PP0Pp6dFo<@+p>_;s+*Lm6qAf0TO<!$e;sz$?nYV=RP^j?@ z4;;F4!f!bq@pf#hHCVjiCo|Dl43*I1N;32^15^+z5W}&>?!OESDi6i`*PyfXMsA>; z6>puityifvv8B|5mB}=~D$O#d`4IS!`RbR#8!{xi3h#2ihW&ySV-;H045Dl+Qqkvz zevC46>E{X8`XG3CaZ!w5AauS@^X*x%*OikmzW!QH7=Z*VkR3`lx-wm_KFI)750B6V z?MylHN_*OqK%`Kuof^J>nfvct&%ufo1cN0VkzxfxKvmO%+i4(d*VNkNu!wXs3(&zA z2Wn4fxkC8s6t#16g|QE4XtW3kfO_&JqN!%Q;iwLV<rw&)xlX|mP7%Gm6+bclgzeME zw8qz5Uuvj@5!-f^G78gLZRk1(IJOBJwG3jy?rUGt#^0Ex?QRBf{b{?kIP*|fGy<C_ z<h&9ZB``H9@G@$JP&MTodCbZmsiwQQ@A3!UlzS(k-XAFSCb4@b052)p$M8;aI4Qs_ zvra*1eQR~2cQaht_ZptY>Y9y}L)4h5wc#fiv@vU|I3tc{yvv3j7dITAW<4^P+Ptr5 zGsSHF0EuF0SW<AHNl2r*Yf1DMxT4pm#KmyJN}k#&i&-c|B|I3l%t>3w24N*Ca5a)% zMnW*X22FLN0wMC4CBCq;5!)p*uf|d$R%M*5X(U@N6(L*A5({m|DuF!%-EC9=!Beu| zDpqA5wkRB+-n`S>)By-p;~A*U<eLAO6npxKyQo-Zs*J<#A`@KXV=^J&#pPqlP&F<9 z^h^2o+w5XCB`w_V&@}I(d^RlP`t%#PTIR6n;v=lghzTADFobr_r!V=RZz;C{fW^Iz z9&2U%$oi%H`z?7YzNG(tOY5C$O><=05h_3Wn=wMICeJ4?<=<~J+K;h^YI>n4iO4o9 zwcuTmU!!FzA3w>*vmrZJbb=d9q$`|Y=|fkiIBh}XDt^XvN47v?Lrhs+J2IB)A)h-l zrP^#d<k;PT0gwv?Mj_s&w3U`wP9y;Z^pp>0>D^9iZ>zNGdM^7&UK+v+yU|^;Pn{lQ z#eohK|8_M`vh8h(7G!2tEN5BBdbDyOkGgg1e5t!9*#{;$I<pU_Hw~?d>qdUzpX~kS z;V(EKOUMbA_`+X}cDjG$#SH2tj2HZ;HOIYM^B)V&7ETY5q?T+-Ao~qJ`L5`Bbx#ow zJ82khbQm!n*22sH4M$nOFcuQcYKkhu#lbQ*Oyc^7adkr9VSOZj+M*lyW=$eK9*!^O z*bQ$1yWhe9?1|ZABs&v+7`_`8w0(J!Qaim=v{6YryUH^S7$!42tfzEGe=v5U0iTzn zo3Il8%?Fa}wb9vD)`b>;1UB4(&8ZxZzsg?|3n2vfLjN{Cfdk2Q*izsnTl!BALNS%M zPmj~LNt|B5`ipV0PwfCjK)Sy;rCQ1-YuR8?@nm~l((xc7pr1sl5l&*4%k`krX+-$^ z1t5hV>QmLh%UYluH9rhI)aC&6{F;^ILjHVsVUI1lU?8P)lLq+B<IRfr_Bk}65~y7D z8Y@xY8Mn&0tAp^h4t=F|>XIR4knQ2Rq_oBd*+cq$S&Z=BG25rVrnnuhYc#ujpaMd{ ziHRolV@J@COR+F;I$axvQP~E;V7!=?o|dj_a1Ss(qEL0+tnuL?eArKY_!K@ogbxo; zURH*Sj$iXi1fk*rH?uyC#NNo%@wwL5@Gl_V(_b%agooV^H`a>&9Jr6rUhP;MwT3dB z<ImWNlV|kNo^X)&Fjk}=3YeY{{1I!?_N15igD~qZe4z2JjX~>`-uzQLle^PCXHZ*2 zaQw!A9@D#Hr>mqqYb<~$v|aL|pr8F%KP12|zErOqo`JMa?t6~Ktz#6o(K`%|8>ou$ zVMDW0MW!bDc@8Tu=Z7{xe49bTaH${ok3j@YlJqp!yFTc)H^ddz5Ce;;n$c@NZq{pr zY$_)qw*G07*sP4w#%wl{rDGsul6@Vz-j*R|*2MRrfy^>oIH#20z_wy@a!2=o*vr@^ zyZPKS1w#>T``$H(&WBzQ&jxoyVU$Nc_EsJ_*c%}0(kP`gG6X=#C8%_iU^Eum*M@jg zj1|akTF%*nVH1?MO+3J_%jsxc&H<V=uR;5F&(O$eAKWL0`&w_hkq}g_aqk}fW8S~Y zAYRkKItTJit#sOqq&4lJG9Q-t6%L0Ph0RJg=3NheP2X~qy(_&wAu!}MYd-yG(9dvD z5Ud#}p$BN7!Hpu0Dzc*(##b|V79zr<MmfqkSk6@ZvkwCeACV96`<q<b2xK8#{Gr>! zOppxk1*NBSuIf4&=EI{;pkngc<Y7Le<Js`?Dl6zw?wcDkzT2Jl7X^@}{Gt2F{;xmX z@2#_K3e8g25>0k|qnX_4ah^t#lzz33@NVgv+(Y;<oxY_wO%;Wg8gZ*s5^>FK7-TdJ zNx+^LK2Y>~t7(+eiauXr!|8|!!ilve7zkls`EXcSz)xT*8uio1&mSGrJ#F?Cm~iGG z$J6T{e9~c|X0ETVcdqv-$jpmBVu+dj-M>892H4wQ0j<Z|``g^bHhy}rzrVMeUtA8i z`2u+RoZ;<YoIJN7pv*EWd3JGNel-uAXUalGHVW0R77=8;ZVyb1Y=1NW6+9-IXmdKJ z2tDN_VMD36&h(zN)-1Oah9w#Uu8Yd@n+8iyZ4zykn^`Ffvy1Vl{OiHouVJ5e6J(`^ zeKAe%_!9Y}Qd|k%z~ycfZ#Gtvr!A=OTgWa}%Fl7PUWM+s{*>(bPS{u%ypg%K%C11~ zy6#fKbCY<K(s8_0+{Q~aqCVm}hR~AAw7=<7$%=h!>YFsEJ>f0MUSQE7UtkGMh881? zKUEZ0B6$_RLk~lsK%S)IpU@NzQoFGOh7{<v!6<E7ReS+m2Gm6l!CMeLdK~$2R*c62 zil1x_FE!j?jj(r~Ntm$s#L(l2PANQGa8Jg>g;m4GJj`DH>8miL32WMNp90hh<M5e% zE@awuzT;P0*LPFsl46lj=NvPqDlWmSHSM>7p|;o~2q@Aco*Z*LVn{yTS@*FHHx5k< zrVG(#+`;xe;Kg(Zbgyz0l2owKM?KsD!?dn=w^4vK^`kD`JGyjpwv*>xfU^7g=sMQ! zq}0_+IFG-uqo}<(Lx)CUE?NK_J!=9#s`>f0PV%C#2BJCo8}T)fgxHA;rjvbB(fHzG zZDbV05IzD1fCh(?5p0mv0hb@<V`DZ=#EsFBGf;Q>w5FelYhLaAjQ-`k6+mz&(HS-M z!Zb%EjgT<1^%0Ee+_*e3&du;G^7IrT%h^}WcGd-Y-m+@jXXB1U)E#S@V`r`ViW&|> zFIvFD>JKt|w}$RS))c?!J2oJu4TnyYK1z-}q@>dkRYD08YoxV$YTas1p$^2)?cP25 z*Q^RhSxx7G-!1tKldxHT-8Au)dS~VICm|3jk?(snOSoJvi;(lylL7U(8lS|xzSG2& zibUHLEG9BivoC~xSXL1GUEy9MAt>8zUqmYLM^glk3BOLrGrE8JR4{qqL1!-pEpWfP z&hA>85hg$*kx_98IzT6Qva64E!PZ_@=sUn;>BSij)OWCk+)r;@cI6CzE~E$O{8yOF z_&-JxxI}9b1fyf2;o&YcLBq6I^d-LP{>PwGDBU}K(OCqS+09m1vz-RP!{x{-r}*-R z=YU9gRmPW~sAscz0~NrX^kQWwZn4rdayfgsR5&J>OG+Epc&r~dr8TFxA0{2r#0pXV zH44(-m~qYJTd!9Gq@nsF7uYCykG_IV0P(?>IsVMidgG0*&lZ#%wsC<6D`rc5zq{Sh zXF;7#g!cj`>u@+rN71|ofqHrif(}RGAY#*(S*fn!^aAFMnBmpBq=i^)jq%Dwnn1Zl z+eg@KPW69f9;8BA06KVPMe<@-CEkU?!3HedoaY?G8+x4<`8zhdu$_4bRCosmpJ}m{ zyq*HsqQIcTkZ;DXI-KQ*OWKH~S?)RI78cUiG`*~~-e*cXQ@J&>KI70i;8K+PQ2818 z=Ns+L=fPfhvUesA0&Np&JJPvVInrPA?jctqO4LEXdB~l5e=@44B(5R1oAII3!m`QJ z=8jv>?d_e{=9(=vet#_6IilOVTp_N-svM_{13GFHH>QXPTy=z)8$42ovE!<GQ1|OV ztl6AZc!9FrR2vZNTZZ|ODBF#WTzg~EE|_U-R!W=8RBQm+e@Jct=}C&_vuALYp9y!K zvCrM+p(ifwGBOnsiZg##fZ9RBSDWw{_9u;yOwx7`nJc>~=Nwz!qW#Gs%oXq{Ze5Fg z$^=p|!OggyQ@_2fJhd>|75B4n`}KFBA121zEWIvtYSQwR_w3bJDqdDua=oqbR7}F+ z$?x<%m=mmamWa2KHIF{8dO(YRgA^z@0`NOyBD=Mx(P6e=_ui3x8=L8yMh=fJFZr(6 z0JTFqdbhVZYJjH?*oiN7jLA1ACXDF8V?hPP7g&vi-#~?%bBd2e=>^M)Jv=Ybl18p% z_@#JF-qL8b&Ue`Chei&6f2a?W8PI0cG=SrB(<pHWLwnG-33@|OY0?ypeF^~0Ov!e0 z?qg@&9!{f5!^11dFFU8W&-EdFfURyaGMk9YcR1i37SYwi)4N+>JT88s0S+?6!0}^o zEo<JXLR<ZmmKf6Zoz$zU1G&&$`Y^3VHNKyr+y2l#)X|&VPR1+--P5+J_95z04WKQN z@SF{a;S5CND<+*j!5f4!;3A_@+G>Q~)o2uNiDBlk2uJBb4e36zgLeQ*LzFFKb)dLO z(6*xBv|4ar<jKcA0>Xq&C_M=FrxsSRGuF1K9&HEV)SPrsYsLKR=m~um&OyQFiJQ*X z6N@EpRf*eGgL$nNQ?{v<F4TiMCWi69T#yNFZ$}V2H5L=D8P0+t(}fDsKUF$`zi})R zBfd}nj%Dq+*a;G8SM)1>+W=!^{ei%9otCVM_VUBhU69lHk@INlQp~!vSNxhwaIPW5 zq)yFlG|P6JPZrzMK~;u2DN6x+26gHL9UF=<VPk$oc|7d|&Wtx7mc2TbC^U&R&utXJ z{-8C>znN8Q_6@S$F&PI9HvT9KjCVp<+SqJYXKbBg_#SYy4E5tvnKv^dv{9m+x@z`N z({?J^IRmQv*5JX=3D|Ac>j(MLwWIlDrLMRWnIhwR7xt+s{DvgYI*3sx;$~lYR2b4| zAZQ|O{s$HXD7j(A6p0g0wiyuI3Z%BWx(|HU#Kx@{7`Zgtdg#ladf~#&xwH01UhNOO zR(y`H*l>gNQ!S%%`R0v#&g&NPF&Jq513%jlVg1OpFRn#2bz7u<ezt3sNjAV`wx=dB z5R~3pibCnUBFApa7jjAJBy$)Ii#^G8E3+G5T&mP*<JuuQE3lG=eN=X9@DX*<UHzD$ zoBKB~cFf43PVW|dS92#QV~mH@>;(}WeeAq(Q8g>81MZX1w?@djy`@F?^Q@q$UA=8T z>~@Re*R7|X?lXZ|;b`SjYYg+C<8u>fjK>5IyFY6=VtIV#hSaN<<9B#*>RI$_DCy(B z^I2jmu&Y<C3+KPxx^}rCcBfx0fzP`k>pIVeS1cn(LiqYxQwr~Y$ZhXIQ>4URQKTFd zKTV_z4+N5}k9B|Dy`MdkAVTOv!||&$c3K?H{}QkIy<a$RLLJz*-nI{2FF;nF1^rHy zFUkqp(wcRTcv<Uv0kINDW#ZCUXsFUsLv<IiK~#4`td@zhhEQCIRIH<^&-M?Lj_)Q5 zYfRg25V5y+x7fCghh{XXP-z-O1HdKh4k!C2xdUpW7&q@_i4+9<4Ne}3OuJH)79(a; zqNY`E1~>emG0Ho(+HjL|Fm1W{Pt;X9P%1IC*&kwLWT`hSy08nR@zec7<9x+<c=EXK z&AVKy+HHVUY<j-EC#dO9DxleG4mwt`)DG0P-~_TtT4NKWH4t4}-=Fol`yH4Q_rygu zoamL#+K)j75Boka!Bufah0KEL4hSIs{iRi?H?D#H$ljX`-3V^9nNQNxks+zryYjG> zYXzcn>0TasLpg~9W`>Su+@F6S59_`<2<nz?&w<oh2|o&$N!{4UF~LQ2pRzXu)~@RC zD~i9Bq$6--J_HBt+g`S~&e@_#&lJ%KZJQ-I3jjK){U6aE|Cf6`5-vss<?7_LJC+zH z>q1_}y}h2<@w`z`{P!#heE5?p!r%TOv-YGP>`mW2t=I?*<pd8BARIb1ajD)ak+_=; zE$GXN!L|{DCM_(AjY>996c8c|O%ess#`<y4XBYCBs=x}@qdI!Ews`*!o@$#qZ=9z) zYW(Ugp=kmp=|Iizi8OljsjT7V-@J89IR+F{ae<6dq2+*px0?<Kczs3|M6Q*|-9~RA zIKei;AVp(((JkdhP5zZ5W%o$H;x2Fz+Cph0-?J*bukxN`kL93HGGZYmX4e{B(o&I* zMg{JC!!d_2;KU&jQ^^L7!*qfGjHtDi$pnhE_t}jb@)&Fo#x$}2w((AyQEQPXjM%jy zAP{Z&Nk&8Oz=MCu8u*bu4Vpp22jONv#^YchQ$c@ZJ{G7ghKPZwt9Aw^#?@-fz%mj& zhLBOHmh}9YePIw5R;E2Pra(|OGVk5`Q!~m>6yhhYc_7Da0!APxs9tIqGz`G&slYvU zUKG`$s5&(*4nraV(8b|^@T70VV*9Y5K1_Sh1S*1HC+^B~u`pxL%vj~Xi8mjl`(UKE zd+bgIS}&bc+P*#vB)2V`1ApuEtW*S&&b>~2?~-*%>Xr*O(a1B^!!tC&qmMYI5$327 zl3`HnMx*mF|Dd!Nye*L13jLa2(Z3vsDo!*KI)K}T!l1;VNyezY$l}0KyT9O%`4tBP zbXr`CvL9Y?iv%dI<(8NMoZ(ow7XQ*X7VSDHS7_M9Vsr3kV23)YZ#57pNe&(MJkSbe zrzBK0v9QyWF*wv0if>pZ1GI;dmTGzT{syKBJ}&<84<OLv<KwKhD?FXN0X-VOW{)AV z(Ub!1JbbXX*N5{bhl}p-%j^q`LrbfL>irSg(!)q7mEdX5pS|d3pC3QzlPvnXZ@$XD z0@-3xfucuEo|n@+^l%yIlgNrt`W`JAm%Eg!IIv8^ys{JPeDapAxOTfB)SdEwPF_JQ z&aKnlE&u4@&(jn9bOPy}PfpLy?w_9Bo@{o`PF}%(?&Ggp{sO<S{uzpsP?UYP_0N76 zKAd9l?FsyO*6W^D_xtew-Vt`Ub9*|yJ)QLK_b6fXsGQ_<9-vwHm=m}kO2m14jkzP= zumxsvnxnuauQB9R7(OulGWf((hhL_j55c?$*1+#5rS&QGJN-jB`Aaz+QPE#^*`NQ* zoYe-6W<(S6`{BExJV?!HhS`-2km0wz6zH&gjqTAl_Okc~&5J}{DrWq~iJnM}uZK64 zBt3^61t#ihI4vrujjeUIb|9N98%B#to&mxLQ7yR`PDfM{(m>u-BZLeX4fm+wRN7A< z?&Ao0|6N&v8I&JgLDdsDejl7s97cD05mV8Q0bQ354$NjLtKcwo$)k#RKjRAk3Nfk@ zoD@Mz{dIfG*(9ZvssBFW)OsD`>v6N9u5S5T0!!%;u?Gi6`pa*ePDNPYQKhf?bwEKH zth#6;$b{vf=&%r!;CzYWpY@ryj`0^@G93bWsB}(Q-L6n&UPtTDd=hZ5Qsw3Iub_~r z4u>%OS&x>j7{E@mK$R}PfQ}Dqd;yzv&L*NS%dX0b#9z7lsP~6y{stb4V|E4r$f0E= zMZu_~VM;}@;;B&$MRNazPzdE1kuwdsOUiSx2ADDWB6&jjp4^t09q{C##Q-MiS^K24 zk*SqZGBxXayWmhE#vq3J=IdiY+N2IS5#xp=HIWx4=+jdc%~409N^}!eV+yq9<VN3c zHuA33+2Wrt(t5dg71IE;_alz_CpCmK@vUb*k?u4~YqKLY<oeMmkxjqzPy#2{CSuw| z3E;qNHQ<<<fYY2LmTf5T&6~4~O049e<!6X#DW<cFIcE+KM%O{>o<1$hnPFN~P!}?b zGnnrAoZ{n2h8^}Tem$%}2Gi!nWRg$g_7>R+cRFMa&ucB4&>?O@r19D^*TCCET$bIR zJz<quXP%Yh)(Woc?QGA2ZQ~wg+X&{zXycK7W*7<SZGQ$R7*PW5Q;gfxRkB-u?b9!s zI>1>tQ;ML#-C$^Mh^XO7v^<ie%LsBH*ur*+xB{R-W>K24dM|q~Jv9bt&7#%JlT%Zd zmH2;>hVRR^Iz5|4_mcQ1RXAuPCNJ#|qNFDyflBUe<~_lu4)tcF;uRGc|K<4c8sPH1 z;$lwQgwgnbVUaEgA6+h5ziHrS-7f@`=8tx$2|V9TZ03MsQ#)KcodVY;g-h4YX$0ry zF6G<fNo>ckSpsF?T8j{Kjc_L0YbsZeBG*MEku&Y23Y)61%)W&RM_y>0h=&xhz?q0G z(k0Eil(38@$FZ6zq|Brke_XjmoZjjzL0f1II;a7Hl}B$6y%!Y2wpz4WgTDbb%S%X? zpuEvJHWN}JcEe&)b!~xKvz}Qo93^1UaCgdg4PN+ILu((wo$!jzNn8Eeg-Pg+i$ z%qL}ik-yX8{eki7d{RKN^JCO9nq5S4GAid$vrx0ps)!L|NSfEz(~<fyH#NhiE`yjU z$*`#ba1yG6(o6a6?UAWc5Yl}xo>Hx#%&C871)j&Y-x*eVk5Je>f}6^vq$5EfuN>X@ z?5JcT(bn8Rz7kLJf2C#$sv0^RbmYxGL0J*}3ATW-2d9*DW=D05za65a_Smf??V7q} zV%4NJx1RRAq@BM+257fILle2-)MUo4;Yq>Ti@x}xs#*gt9iL-?UZ0DC!Fak%G+4F1 zs@Y?WhW@CTVvktD4ts1uu?0W@l|M|{%j7ND>8ag5C~Ume*WcpZVV7lQEHPh+Pz9m+ z(cy^QI+`7)A3)nUhbU3tkO*OYn=Gpx7!Ic2#Y;k`UwK^cRdroYp*OjPHLgCtc`<zR zhuUYl_JNVCiHllv(b}vcn6j6$+m9rTlA<r7Dh>2~&EY24CD$lYa6;68<x<LMj04e4 zkt~S)bxB;qE$fX<RDY77zADQr7AvrTCguz6x#F1DEQ7-@Z&Q$RnnscN7)5F0B)|Ci zneYkq#dSVtaWK!=4Ns{2V{fmC5TK&vm*T*ogbfi;;8G=8W>l<XRgssA{rcPM?-4y# zTz!X))n`sXvAn92Wru{ea`PHB<Z*(T{|h%%Yi#t6>)Gnn{*Ctp3*td2HP&e)qS)XL zv_DTs`j<sAZDeAi^ld_$!7w^;n`qR&Q{z9Cx4Os@@Kc6`!dz1BQg~F|%GMNfW+47v zd$|-fxny4wcH|dqhqP*6Wg8m=1jlV1DS45j>2qUSw3-A=OO3KIMUALoT^o2KPn;3b z+Qt1D+mU3c1Tq*AE;VfZH$8JY>NqC0ag@-=ift<suB`dugHDpLFCB+<W@3Z&(th@c zTlup~4o^ln<Q19oxeF>m9=BXs^1(>xSiq}!(mvMEV_T;?5B!-V^phjV!21*EvXa!o zltL`)9N&O)^g~7!F|qPAzbM~KFc5k$%mLm+Vp9eV%YZ0v#-+fS3t^MQG{{b}&a)@z zb^M1%&!6JIFCP7_15>2#G8`Y_*^@!G`w3ndot$2u&L2Fuc(8ps{{sGZx=r^@y{+CZ zZtIV~dUSjYbx(IzsEl1=-4ndvJ3PVbti`RU%IO(3e)QtSAF1(awWJkPfbZSY<D*0U zjevUHo%=_<)BW4-Cr1m~-|yY_ZlRs_3-p0*UnRS|-=xNu&%Q#+4Z0Ws?RGNz?iL;4 zZ(kSFYS!Dnfa82bw|<BgUhv+QqtPuw-U3KRr=zX#54g0OKt(NqpHQK9)Fb42y(8)p zEa%iA_Lcwr_RZ{eEd6oU+DnhG91$wC1p*wNyh7}M)?+ZoPyh7fYlO6rwhV>HdDPPj z%u~I<Jnh2I`#1v+2|sb?Ct*W)iwf|b7yMe8)jE`<sx!#=2a0(e#0X<3VJXIm{Q`ah zFm1~><lOu_@F5(e;^FvcI4Dj&f~Ex+m{E+xW*v)YM!LlZfWc-8Mi5kEmW*zzV_<8O z30pvWwE_a3B=9#Fj!baI3fW<B$EE2lK@^5s)&dRDdZEfTXlkpTwOSFX%u-DWV4&F0 z-}R2jSP(!TEyK)kY3)u&s%d+Oda;IAOQ-Bp=8Qm6LrtGni)TWES{xVTP};Nb9{%dl z5+|-Xi&fU3jD}bNI7>sVAU#-HQFl0f$&wAiQmyOFRYqz<K#3mPpb3DP$LzVZi*(WX zEabDyGn#v+Hdc}S4orvh%0ClxYs|9>SFXZZfm?c#W!7SD355&qQnxslF_JN64gS8I z0~GAQNqX-SZss3(NG+VqJgMN^O-S1Z9ZZCKG^gDC-53-gc{Xj`4OQ2%O%bV2!FZYT zM&*Pi1ICL#x3;*LfP68*(qc;0jUQXt`lqocey)+rgnThFf6ywrS6T%)Icy3#I({8t zKuaTnnRkqs|6H)<%~<#ULQsDmd<a$L1V<~Iior(UR(qRi7VSo_&u^ZM8s;vhnZeMV z3U`4tfZA}#B(q@E!E&CJ9I%%o<a|CJLTD<`BW|)!cYZ0+xhrW*RH)cl2>`&K*|?lw ztfyk)GgH9Zi(l@C55eh>y!6+vCzo);Ov;<Bc#-+riMSf|zyO%C7do;{b2Gr1RUe94 z!F6j(lxlftQAR+uTdCtK2QMaeCMeVLxuIP;wO4d~0|1{B`>|a<%=|O`BUWPv_$4Gi zYcC&x`e}o06dbF)t*3S)$Mjll9fMV;I;CNKCsSGT)nkXWWbL}$)DD%Ps_k?F%@2^_ zw2QtX<)WOrnh~sVv}+L?vKY)xtrgLwE04#2VBGB<VfW;8b~-too`JI^f6?^Rgnuvl z3~<$rIc@!kEm4Z6Wu1-9iXK9{HO%<B`Lb5(F#D!AV6T;}FtrCu7K7k;XSnVZ(_YjF zkVac+t-$#V1=XFGlFfxTy2rLDeR-RC4-9FB#MYn26|YXWZozVZOtHDyv-df$i^BxM zn;deTttcjZwuyFwO{fW`1N`R~_@9SVvOn2+i2r^%+1|r{w<lY_+^qLuJp0MTdHbk` z)&{f~OuA;$0J8w!H9!l)SSW#=(z)1qI3e#J{~2)6uUmWgondV3o<7+Xp~DDA6(3Bt zaJ^`02r{6+h35X`)IamfbIPa4R-4IIcRYlD#i18O3-Ls|;ZrkzL+XB${$0cer+ABh zO7D9;OlSGvAgI2N)v*fv;%~Y#Y-KrqSjrB_4eXWoHQIEZm+w$8kbH_T+6&J2a8rS8 z8Eb0uS`tLk_>~~+Eq1t{xH*$B%95w8gcVjC4Ne!4%1-JADn=!;EgGE+exjBU%idi` zqLTS!`|tB|mXFxOJG&lo2vZ~1r!>o%{$Z^33;a#^E*gmrqru|;JhZLA`jKNy3wXmf z?2|L4Hod#f)q;%*zPk71&t7Aei7AHt9-_?6VMK@ITR+Z!Fk>}6*oF^PfgdmwVqp65 zUdy^BdNmQvgA<Ej8@uMkZdGlU)S}u7URQFC5J~~v158Wz;-pt}6;w<>(Rp7X{RC$F zsmioYxOVla*Is!05gm;B#UH$ZBP!T~nL4&9ASuHtbU?+GysSebvaP6{%b>&7!;br# zPuRD$HVj0-OcY%Aahmf9Jw08;GON#2?M)qQ4b6Dj-xZ?~95IGHwED0fa4ZT&)X>$S zP}LX+kXU`S+u(4bU5da2i;W+=YjPg)EUhvHuzh~BEulcAorI1@-R_tYf@jy|^sTfX z-{^{O*vE`-8|87hcjJ>d2z`=f3~UL>HZ}+h9mS9F`o!Ajmshi!WzEyA*<Y>MmM)l; ze?1cFQe|5Jccx0Afz5}be7Xdy?(TP|qurvHj#h8LP?=i53eTSYlKkv{MNzl`w<}|J zJnuKL{U*lkqWA+}zIguCFC-XFx5|f8JPPvJMK5D`lv_AdTs5~a!a_`m<LE(@jYV=~ z;Pj?0NH(#%&ETGeqGB&0PlqZIOdF6<MdNKRgQE3X0bzjWWk9e_6M&9IQ-Lglq4io3 z;pd~vz;LZrAegCT>2Ro03kW)y@}+2CrFJYhhQ=}&T&n?Or5N|p(mJF7&`Z}F)w<=) z=vHIA-!icFg=ohT4Ec-jT%sK%v41o=F4#b0*p7$EX0?aQ5WRy_K=@1G=43EYX<7x9 zpJxx7=zv0XmzF`N<Jro)C)&$uxokV^{>@#0eAWU4wC9zfgb-*%ML@>C|5Px{DzD9w zWfHi9YyM0+;q7`+f4$AQu8!&(=o0*;A<0Q;8?$*2mqrLFb<=N}`ouPcD~Wv3C$oC> z()+9z{CHFZXgn0Kq<g}vQ-ymoOesa#Hnj*N(?RN64Rb2Q*NE*gttRDycvfb5!|+x0 z&J?*PC9PPo+-w6#DC{yGRo1=XD9tR2hq!viEP~sXTyJvk)pddGx;|<yrS0pWcS>gv z6wrPqC3f8|F!7)Gy1lpN?1x+{el3B*MNB>|eQ&x>loCa;GAN$LnYE1xU_%=ZmyB!z zocV7ZRfx1<#&*Afshl)gv)swN@|oc|+|Z*o_PB<tTIk-m`w&0t+O7gsA*_2}aB;49 zxP+WtxjTo52xw?xy-VS9P%b@XNp<KoF6uAJId(@oykco9n&(Zr3*~zH0{>0VEBCQ{ zTB(jQli>&ux3&ne*xfQypU&pEZPYDPr`!-qSnF$>X0bWTt@BDy_?!3iZPx2@&7X(R zV8Xa`mrH5)H4B8_o}RVuO|h06Km3ZdgHACDZ^fLQezmUDsa?X*XfM9=-YSBnVStRU zmryHWLDsqGx<-5TW2Wz&UQaG<h|={jsNg9HoHx0ya4tlmgISwYbTIEZl^)b(q~&uh zPY=vZMZf8tmV)pf2Uh55pr;?>$L3YNWksrV`W6JUxf@=Hhk#l_oh?a+>aeoYWCKjA zgGLz?9T^%_MqNY|@B5ndj8SctTB0`ptlJ2OP*a)s1rRo<DC`b6TSvE1Tek-B_*|Qf z*1^15I2fuEkLG8-kv_lRKU6Q_4&~3@0(#!IQ686#>)=7(0mW$60br!&w$3Zj#aSjl zT=agJ6unUo{MgcWa2Kwg+!_-@x;4`->KA!+F}!ktUxsYhzU<lKJAD5_n-UbGnu280 zI7}^%hJyVhcH#FiEVH=6PF2pQ7ddvh+dbOA2u0|+-Q(X~_}%O6N+nLzWe<@SbhO)j z6~-+(0vOs+I}d3xGKpJ}}FWV&(R?}^Ix8b2f^PfXuGc^yhEs%@c>IF=?q_11O| zEZm8MvG7s1u|qnH&Dy$@a=kiL^*1@C-Lk6{UKF!38|A=tm&GL4xEbfu^18|?U<S|u z4cQVn>4L+)p_nwxP_)BDJqThby-C2O^Eq%bFbn33FGtl5wta+|=Ad=)x)4_)>WgvB zN7DYgay+WCCtp8jmm_T0)x?0LziFT)^*l1aB}Kcp&I#<-7R-R<T9O~?g|b7A_c*kQ z=I7*rz3Ub_PRn-%h>k<tTgRB#ONI&53&Ti}(R^K#qH9W`)%j@6d`0Boio-C$heRX+ zg0?V>KtvkPXEWn5dodsR|2R7n_r~|(buXq{qf)K)+kK<VzlrOzchfQ#S*>~pScy=} zQx5B(3*O$G_p^#M19fmj614LV2Mf!eNbxrkxry<rf%@6+XXh@%3KCO`qUZ9eoLQhR z8Hv7@YD0lEs`G^i8q{_uN0@YYknKsg%Ug8M!NDT?)Ee^9!gIM2RVZ!982%p9QW##D z``&r*dpO5GhJohERjByf7i;hmXal%N@Y$R<9dgzvMo_u9z;3T`$C<ztHLUJ@2sdCK zJW=a<7d{L7QU<HCZaKA%d)o1+gq|P{?!{Z)vwa{B90KDpZ#X77##MqE5`chc#})K6 z&H33MqBimPQAoRTGNIc!>s;8a*(<3d%~}y|!ast{*U;bex~Ot;mH{^b3fV`I`2-51 zG@Is{AAFMMBW^q^>AV?b^DEqxQJx>ev81umY}zp@s73QDCqa4yU<So+c%`?{QhZQz z3;rFjk&Hk;o+B%zVV>U|=8$&GtKin~981ovMAGn3=(p?P7-J#>t6T?^8kZ%O(y)g# ziy-X`Cl@#C@pD{GlY`H=>DPI<H7mPcacC640)O$hG`C6RzScZwKF0hDOf0ApBb;cK zz+n2qIVP@Gn8NqXdk#_DVm9Z#xA#;TO`}GE8e}(eRib@}-7VU;Xgfn(raIYTLi19Z zL+pXMhigkp2<X_x!S%bb?6Q)D@=vp3T+D9jK@meh#c5u=gSJd|fF)XI`P$?;_-(?N zH_=Ba^;vK+pBU87)yNw08@KSsw!Uo9Ps-!J%V&xsM>(Wlj1*mKKYsG)#UuV(XDGJr z?Bf9#7k?UtG204kY=1^#)Q7`#_%0{sNBHMvhF)>FGf_;Hi~MSa+X^0ff`s4x;<skM zZglD?D=kbEb)o8w*=pJTv5N9l9trVWy|OF`=QpH}lG{Hv{yPTLh4J8r#xsO268B04 zUXo~sQ#>VlK4>kkXxz8ol*CXa?AR!Gl9c>ba_=e%>idORM^PIX5kAZ~q@o;}cy&Pu zR0XGQXH>lFkTs|nA%9gA@0FBS)C8YE)o!mxWGujsoN7`G!NXR8O?Xo-qtNjI0snSL zI2~>x>|%tbgU#K~I+DBM8IP^N$gQ)|A{EN`#0ml5F<I7dHm^8HFy{n>Vm{1Kj=*Nn zGtASB6Lfcp0)2!R8m;NvRw2cvK@+f#$|yoUER5G^Vi-2&l;?^xs%i`zk`XUgcyjQ* zP~usv+yf#BaLGk390g|w)|T8FMpNHK7b&L3`Z^d5#68Ro|4X09ILCdpQ36Yh{6h>2 zE$hvcxJDEB#I?kbZQF~7uf|b&A0xkOh*}apn<31Di(aDf3f5o5S6^~srPYR`72^>B z371>-u|)q(QGm8MGGWNN;PpcM&-1yhd4on1nW=?&+7S(la0H8oiI`(76t`Q2*8 z9TTrU>unQT@k^-@ZE?wmD{!;WLku<Xvuu9~gts`@!<OxEKn3_06><=gm;lWNkIPGL z(CH;|>P$*KkYFEB(Oy<9LT<%A4oYbY817oK!=*2TaESGjsyn>%(R_)-$doVfs;p2d z%j==E_!{5$xBRn9)(O)OwGM)(Q;T0_wO{%{4=X>zQbItR*b7@e8|No@lZ7!|a>|_I zp-+K6FhGITsEBu(#~D>R-27zov)}Fx=^!&^uww?6r|t^=L%8fydjpPXL5nU2QRs2Y zPk6r8qno518p+`bp0TMA4SjGu>KQ59HwwhGxk32zj6@=hqxVR|zPL?<c@3<Ub#Qh1 z!M24JmN?W?Ddw+#t*Gf=|4Q?cn7*rw?g9@tUpzg2fm3+JQwT#87hN<IY|bR#OE!m% zV@g(1VE*}}xF|<x?;TEu7kD8-`xv(_CMb+dL0q`RZ5axcEg~YoG$+fuogGB0-aG8} z*=9||SNLxt7CiyfeZ&H;TNwJa<>BVpi~t)pxu!;_mlMh^hSGtys-#i(*%Qm^1Yd!S z?C)G~8=M4d1fowfc=Uz~$|m@!_`_2~>lm#T6g6>J_eYET3gOJJbpO(bTNp^@^m^-O zz1vq1F$cq}Y@g9zpV%M#K1wL4J5VD67kOHwBfKIJ(_yX!eZ?P9+@4<z^rZwv0zy(W zH{{sozyg^rJ_~dVGX3>-x&VnCx_DPS-e>U}C>*<;UsN56(uh3P+xWYWp>AqD+d!J< zf}f%^`Ik`tyd2%guvI6(A{8@4aQUIAW+=p5<bBO}K@7<6(q=Y$OnT~>L5DQLf`t@0 z@m0^laW9*}Po6z#ojwaFxNmG_fl1osdTpgr#ZP|!{-H16g}N3gCjDF@d{SoDTWtJ% z_LMZouVFhM3QiQ}t+JM)&zlQ=`I=(ndkjpO@g!}XRch3jP2*#mSG$vGhZRG4pYU^n zTe}q&UUd3ULA2WR-tF(z@G1IHT4*1%cpN{XEgseLDJEwc-{1)$Otd{M=`|k$F7iqn z{e_J2d^E83O^+Oa{9?!;8_ICPh`<yeNHq-z5S&bcfK}&LV#}hL?!JJt`z>knk0zrj zS~KQXFlJO|#Q1gb9YtL32{2@iU(<D?9$DBU-}jl?(p+2VlfYJdYbcuyORQ}2whBQ} zmKXI2gl|^Z5Zh35w5+ZZWKe{Kr&2M}Vz6+0qke^P*nX|0k+i-n@+rPnsX2tsQFzLH z0vV3<;V*GaGsvJt{tHvNRuRJe3=qY}4d%BoU<G^5xw}bE>rYRAcCTa2f}UGZ$2qal zH*rhTqlWL7lnt}BH=ug6w>vLIxNa^+Y%`mP(d;aPzmjLW;c2V&s><i1QWvaz!!rx6 zwRI%v30pHJ6uUuV-qL%I-36PhYC?T?fn=(hMtGG%Pvo*9fS?%iUngAQjQQM`sR6%T zYjJAJ8tX0Zo2CuK0>j|7TRdrLS^#payd!@GyddS}Kc2UIy3Wtv7PGdmmsR5ncFME+ z7ut9&g0C>CNHRr*iDBmB5qvMkVkw@mksSxA7XlY=OY^kg=$CqCGh{suZLmu`Kl;GE zxIb(hZf>3pSR-SuS+Dss3mBB9)(^_E(5ZSYT}#~$h||92>^dTUC}*4ALNW=zLSJtQ zwz_+Ih!G+&H5_J&<FJ*qHyv*NY;W_d6TCF{It^o`7G2#|vS1GjhyX0$vfc2z7T$Sf zT%<JZZXE8q(pbp!^JbKB+o)|GIRJ>Ggvd&63veGAyv%lxuo~XMc9$~1K#A(`^gc32 zEglL#YkrY(y=!36kF|T#9$`ZoaU+uay0An1X6Kh67>J)0*nB<9v}ihD4ww(ewX&cA z+7bP93!L5duiZ}Gv;xF=u$|2U=a&Z(7_j;()QEh}2{bDj=KjvZ9@BR`R7;cjQDa<? z+O~BUME4>@aoJn?0E;e;FN8XxctX8~cDeEm$I>`THLlAqIvD9CVC=d>uM!XLXd=^r zx%g^b{EMO-tQtNIa9$}6XiJWVWbnf{Jd#;b!lTCBFrNVCXJK+R55PbM4>f`ZDpB}$ z!$})~^mvv^ir~RVqPWd(5b$xqYmuNk_*g`}EPc@s_#yaY&S~V6WaMvAyh*#+p?%eJ z(f=F=LFxYp6E(xN8|7Bvs1!?Cr+)LAC-ZAM<RT`s@tT*M4X{0ISR={`GYwJdEQ_zM z66_pz^Zw(o^<t+`eH+VoHS$`ey&lc4l0B}-j61YON16SB9+m^5q`EUH%|6^!^=?RR zY;>3SfA0O#<F=%a5W1{Bb!ZAj)8u6l9czuj!rr0I=OcClgzc}g<i9F$+~hMBh6qTv zngjC;E6g4);k>4>N-91jv+eAYPk+6?-^)lijJiCO=zd4MLd$Cq2$eW>2<ZXD*Gu@M z$j~F0N6ivi_$DWyz}e9t!xrw}GIcJ@0vu(sS*Od+;~-!r#y;b$f971%G%8VyPboXI z%!(p#)O=>z%jFzI;`5xgA@W;clNT>@mTD*HD##TFp!0RF1Pb`cibp6p*I>?ORynFn zTyyft$kO9jZkwix5+#*ojYLPhW$#@N*29deaq{{Ywnp-zy+rFr$zt^bID!}&TXerY z2$BQ09DX<z?FXNzK{n%5pZp+Yf_=uf=1xmQu)4M9+0&Qs)aa=s;+Ldg()K`0^K`BW z_x+?Z=-|d06mj2HPZG`<BuhY7S0Ns5y3^@b-ZEeXHj*>z_i!U>Y)vp&5rcU>P3MzY zfmGl96aM%aCPtWwGc`Vc$1nIANs4Z<jB3&^u$A?&1<>ygpt29h?ji4(#QcG)p}0iX zyL^NZ(J0g+C~8+Ak>?{a91D)n@g+DB6aic9_7Qqf9n(V}!e!^=)!-9Ih_TZ@yHD8C zW0<yQO7I<~)lY}LEF;YIZBO=QKAa9=ediSX2LO%c0C<?mY=H#97cA9mNH2#7clUjL z&0zdV=9rk493X*!1D9YM32G(i18aXFb@?woYm_f1Fa&5g>i(!Po8wK8SBkl>l6jx} zJix~q<WzEJ?O<#8R~w1_T2)DL@{bp&fNNi%24ZRgES3jLD_Fh+4VN$B8k%kj6M$0I zBia(xEd{t!=Aq##GXXpl)d`?VIO*Stvu`pL?;5DBHK$h7tlhJdDf#Wt&&gTC)U1m3 zgi<T^+9X5%XX$I6J`^>gcL5i|wqSED1y#-LR>dCJ5w&$M^fF3%vIR!_d@DT~J5QH- z>T7fMveyQ2cm^ALPlpR<V=Hqjgov}Ri^-(C?o!{zV=P4U`W#8cKGc0NK|We{FfQti z!Ma7JJr>pS-ZnNWyFpO`GtA}!a!P~taWO7IG)z*l@`92NCr&SRIbfu$_LB#JYFVE_ zwBrUaZH7(mGCZ-|%=KX5<dQM?p(CH|*~*8Gal{5#$L3$-8IxMg1#FrWb&xUr^_gI3 zGEA_pqi<~oi`av0S}jQh*AM5<9D$g><Zp{VV3^0Mo@(n#H2lX4=vb(_t%CNup5a;4 zw(5l9*&IC+&U?=6e9t#zNBk$hvhPCo9Nr-t2)(EXSV*IDTW|K<@y8l36B_v$#(?!@ zVx0m1lhMWzN1|zeoTR+BwdJ;;1+QSPN@U!4dMlpacy6nOlS@WPJ7w>1!v2f7YwvFB zw&8!rpW;UC7AcYCN1L^?<M?z<y6(|6C&|{GIbM%q-8eUubv<1<j#uZq5BLGNAjB)% zY4_T?)#4>V5ClmO#KRY+uy5pourCAYeg6Nhx$qNt`7MX*4SgVk+#OZ>3L2dlS@v4` z%ZiiK;`n!dwM6TTbG^qa4^WdqJecl&5k&AleI8g2fmPeQIuiGEJMAT8(fwSmgOAMn z9FmD$>%<8uc#Kptu8&$m^$81)T+xjkc(S^qJsR0G1ygGL9@CRVrMm6fGugFmTOTHI zjjIKX^r)m8Tti~5fEfZ!-yk$1ba$g!O;ELs`-0M}dn2G}v*3YNfQ~Xqe=st6xj!(6 zA$0f0n%+?|@`}|`*;Mm#;s)v~#=X`(TCJu=Co%w-02{z`<Xq$%9slBB!aMj&j$`MG zF-04^UQdDTCFBscig8N!*H#@N@yO6YyQ#ynm_MHKHe=OFlF@`C_@>z(Xin~{mPFM& zN_=TOgD-Jp_KiA|Z~NM{U>Q~-YEcy@+-yR7QJUs1m&Ay;iZ)-DzU8^I>pvd{2-Z-X zk~qq~v=<&OBC|^ONe(W;1VAr&ZWY(>xYnxn?NvF3ng3wqj|0oJn3=&`E97wrQBD4^ zJyOd;Q5L;x3tB`IKu7^jm%^(e3}2rWOmOnZX8PAsdbzDM37A=N46W;?tM6<*PAUrz z6VgHzg9r<%hRzt3&|7>6Xl-IW;J$q$R4HVg!P_Q~iLa`o%l!9KfGsC*3fPf$<wh`l zz*k`RQ-EEG-Ortx6jN;z5dOLF9r^A)^nAJ*yK3buRCwYiBBE&v-j1-J0N!CbG}_>A zytYh{-jYI;{XN@((TPHgYJ4yMjs%eUyw&I1jvbGc%)Qq(-=U)klV19*uQ9D2%VJ3d zH9lr&xLT3bB5*4EKErM2b-3nM<kX}>xSu<ue`xL?l|?mMh)!=pe`?*=i^XZPv$1hZ zV%Zr&ifqWiZvUbZ3P8Pae|x;S{mJLrYEcL4*)c^-I3}26nLV#*Ok0~p|55pN03%sH zF2tIT%w{z%g|uo&&UjZ&MhQZM&k^(1aa|uzOCWW+@%HnLs%g&3W@A#4hGn`>28vso z_cys6kCCX8gax7!b@T9h`)$$n%H;*r*9&{R8lzGS#geEYu9Qy<nod@?!on1N)`P1k zT~HU>fn{Z?u}mh#1ES0EmSkfICbM|dFlX0vSahZ8?@nU*&4Ox_^EMOGH8%)d2|QV& zH+41Z_l7+cc-S<>mAtOu&Gk|+|B|=@p1DK^Y(L#@u7?*UHe96wJi!clOQ;I0U_xY< z+0~arZiCwc;12ketgx~|QsNamD}eNqA+*vSZQS`*PlaK#cePSE5k-|>h9QM>3yn^f zYek|E^J^~c>*Ghr4}W=?)fV2lErSu5P+k~vgXQ2CtBe>F`RxAuK7_+)U+mxeENM%n zR}26SNEUQU$QBL<F87#Q$jG#-)Z|EcQP;oAz;=s>%r)a<THd<{SbJ?ZgVmYiJyE=l z#}4CkOfwsVp8=Tkfa{F@q0(6%_}11$2dX4=FGsqb>y*$b)rsodFBOu2UoH&1jeDG< z7WpxPlrWC6fcYTc)#=v)RUEe${vp}CQma=LzfJy7mKtOz>RZ1u+IZz+&?x~N(+h6j zVXumIZzt<t5Tobz?G~&YB33(*Y^)<~#WV%F{0Y<vMlJ@=`Q>L}n}%WMo*n++YDDzV z^7`@AG7hup;@#y&xLqFv*wK->w5Lp*D{&qptax}jbF?T9i`zV2f*loZ4l+A|JD{ZT zSbo~9*rY@~i`8;$ECZuY6bM88+Dmjbqt#mq9DeFmL@1W!UXNa&>ED-p*&Ou9)|-%> zmat@@2p~kuQ!-aj51D&-!hXlr`;z;8;{nCvl-w8d%cFXFSyF7j$>r<$Wp#3VDOob8 z=N~RlNU*v*9h0m)=(B6;&f&em!QUUUiTTFEjS9Uk#LE+4t<DBMu+t!l@z+Mhg^UEs zE`RyaKKa1zqUx-MwVI-~Be7pDMfIe}N#>%<W^qC41ct@3p=MFq>**i8qMlnJfz`hl zto})s@dW?i?|X-rY%)L6;*mf+pN~%|Eu214OOJGN7h6Lz^A?$?fVf2bx_8I^y7REd z-#4Vf!(JiAH03dgENyF=@#%zALR!~;T5Z}j$6k5Cg1Xj}zpdJw>uh@+A+1)Gzn7Z; z>?g}j=wEYfMt`hmORUk^pVy}v$0YKfDk%H842XHH9o@;;s?%Rq<9p3hMYUjt%@ydA zJoW3mjA%v}JWr4n$t3NzRgCG{->=w=$$uM$Y0(%kk`l~D0`qnHZK5aMW3}9G%6Wxo z4aEaqGY@gJJrEXtSkUUQfDRNCNNyc=#U)q%n$lqNl6a;-^f<82j4H*R5|3=R*{eY5 zhrd|7d*5jek!6l@_3El~H1Tf_lDjC=T1ZtIl%pY~q(8B@+FpF;Z?N2v&gB&48aPD# z>tJAFhF=_#a|(@vn<7gsR_LN?7v@M1)*ooZ6}belRL&6e&-{_aZutZC17TYuzR$Nb zbTq>mA)^TzZ<);{WfRYN_e{hpA2JsL1H&7Pv`+yO$i9lwMivI=Y6Cm&_=e9gS-w*f z2EFX7)FfYx4W!@U3IY#C<v;qHMB8aSEBk8PN^k-qUH;VEM~tauwLRylRin)%+H*t~ zb2LP+(Y!l`Oj#~kX^SmDm#e!$ca(_)SK~>{Oy`9;<)GiO)6svOhtTWIxM($afxddP z-~+%7!00nJ2K(JlnZpXB0faY>j33h)X;lVpl($;Bu?@rNqV`P&8b_C*6#6-vE%g-o z2#<i>o%xv(6rGqS3;JLz5K;5gwBM1kPs*a|(#bMnYPCoU^{zyEQlES?o>ix=coQq2 zt{X#G`m2^0e+yx=q<KDfP?rCX@QZtsKYvCIc8>8&w8#*)PW`;<-WsnT8ryqiV~e;u z(3QhT7k#)+N>BN^^jBPEJgdmV5MWIivfy%crP-pEo0IM}-I_#g&=U&whK`D^G^H?1 z&;RcUoN8@;2C*ZF+RXqo2qaoP1)USNYDyZj3o_FWTxcm~=NRgI*ili}qy}P>0R*vG zU!T;_&zh*Uc1xZEx{U)29>$s*X3D85iV!yh8dz?cJmB%|#{Jq?>*Xy}iW?Kg1pS7U zNeU~)1G5FCEBcHZ$egc?)hFcbZs<5=?qaLs&@6oj@fXo52GCzEie&kAfBt+Bw>)KZ zOxR4L|MH6im6!)BQQ?PX?IzA~Kat=VwPQp$T<|Lu8BEZE)BwP%1;&sjIj3<v1g;}A z3&&wGOlTP7EA#lRY&a9)JulMUC!uUFHuJPdmOdzcXRLC-d)iqypxD7qUN^IvVbR<p zR`)ygd^~&;V{S0?C{(eam5@$?U%RYq1$(RSj$MaBWHmKC(vKb!p!F3B>N{3vm@Sf7 zIePp!O9!xEd;T%Mkj@uJXA3NWH)qWPyJp)1waityJ|tJ;@{^(J)>OZ0l+d`2{UudI zra{CjPp(*uzzo`LRa+bsebWkx=ap4NZWB@M91h4|eaT;0?w$-u$0F^Vpr*oP<;TZc zq-6Sd`=LZ-@OU^s%|qj-?Lsa;tPCpJy@^|sYxg5#uqt6Nqf2J`taf~wsHd$@opJQr z5Nl;fm0&iwoatsQMBUI4bm>t92j4cGC%f;WR^Q0dc?<mjr4qA(0?o8a`Z;KoLbjV5 zjA_-joZOi59p*!Y%1##^*SU=6ZX;pw#1OL|!mec0KqV0;%Zb25huBYEm(x?WrYHn! zN$$jGSfqB`_CiFl8&2O%lnHSnU9m7MBy^ZhlrcL>5(<Y2E_8;a`Jk0p(vv&e5W5}N z@yW5W!Hvj}gook~Z*bX{S7SIQW+MD>&69%K_h4Yybtjh@SFMLV+Pdb}8*t%ZB)kxK z*Ev1ZmySEQ-37n+c((e^r4VyI0ZcM~5a2|k9sWz4f0Bvq4W&5V(S-chy8$saMy4ev zBiFjxCC$O%=0qHXrwK9<)}7B^J3S8@BsKcie0(ecq=a_E<ZuEovlkb2f1}UwmIp;& z2q4N}*&95KHmR;*_F_f6J)>4H|9}Xdoo@xG`6a`njU~GXN-hlga<xog?_%jGeiJQW zr;^afyn?toE8QyR73^~ZR5~9Z94+N(ogw;`pA(8{v7c^3#g5B^3WL91H^`f5)Z1Oa zl6lG>VL$Lg{G4-cFhh);3tbij`*>7P$&!Ta9eERpKYTBb9OS*ZHM9S<Y)|c9Trn89 zjmH@7#vwBLk1g&y*46u{k&O)uSq$eZZE8f9iPM!9?rYYGXVDv3k*kgcmF|&5fz48I zJ6LZUb^A69Z+B&7$3?1Ihr)?_!d6W3Oq;9wQExGa$?=Wk+#ym(YwBwHxL#~^i@wIj zvOc)Xa55)7i3ZU($7De#@y4?c@;eu6_<kem9th7SNWbKmRO1Qfog{KiFW_o0o--pm zBocCv2$gD1eM&TQ<Vkh>nnR=WReiySM>)Y|agZzy2c?4XVwb*J06{>$zg86&h4Wt2 z`NiV2f}ReIgY_oe=$yVRkH)yIEhMwtj01pEDfi6cW(8y0qk29k$kPi4$LByf$9d3H z6uXUaYl{AF$Rzfo&o@7#=Q6KrOQUJULdO}mJ&C3<o}P~{8tPn*pov&rv4y62?s(rg znym|4MSw+&fO}wns&=T%M9y28C#PNA4I?=M>>zNavG4NR#E`g9bh&3+OzPrcbx7$% z8|pLsxJJLS_C7>CW9Bw3tho!WvLIIjax9OYjJ<z_YH1+>z3CVr5^5T(@QM-Q$8?1r zG!O$J9TaOJ+7`(DWqo=9T?mn5e#9yg-Cx9H4!>7haE>^?AuSs;E(Tqp{oamUiTj80 zBKY|dTh+YwNiJt7{%ztghmuS$|1P)<3u|l{PoAAu>}9*CZGE~9nVXqonxtmcD2GE^ zst}j~rXfuP=RK1~M?@yxUDO`h5!SyB!Wa(+X>2iQn!M^r3WRNaWc*hS$cF5u%<tO~ zyD^;hVO&0;xn7h8aU=;K(4Q5xIQ^){YM#{DL9RSBw2q}uzEVx1qd*JxHq+UYruPVR zghgZ^fMn*a>ZJXmH{y^tJ-&<GySnnQ>vLxz_^3mJP5)#I<*Vvl8$P({w`;{>OMPbt z6|zuT0<M{+g(K=AafB`O)r)J@5^6&_?Rl##be}B&Rv674Th#?L%-|uWrksW6rKPwS z)20gm^qmfYrVcITpu}brUFoz!;$VC@$0TSB2l4IYwS&Q}*)XXaz#20ZXcm8M|H zLgS^QrJb^21e*R?@zK5kAWoKb|GUS(TK`<)2rp`x*uwma_)M-QWeAt9S1t(8=4y=S z%=3!wobw9=Dy3GAluGIS`IxHCxiN;oYzGKlb3iDl$@8lVtHWE487qK`s)kP33uPGR zf-Lg74810}rtG6(`|n`Kn?Zu<ChmBBZsm#gapQYgzw7a)A3x1Ww_Epgr;D_05ca2> zH&uh_v5P8F-$^n_lPs(Q0YS?IV3`3I^=wp7{NSb>0`zC?v>jJ(v9T)*_f!UX+s^p3 z9CLoUHk+4P#eFFibfzi_@}}J0ly-r}SQU_rPzfAC*lKix(WG4xzFP-yT;lHj>Z}o& zN~JvRccDo)fm9%o05Cdjr1a4=>(EB3mw75!_Uc(r$0KN(W(#QQFB_bHPrlj^^4V1> z$6eaX2{MWRsg&65XFF9Fl4cU4BZRe8a}|3^mB8o*Rk791o@wcB7tT!P6f@+SGi+6` z2Kfa+hTuq29XT5tqO9hw6l2^QtSeeOv7D{_*tRtcDWGM;@*)qFj4fE?5`-zDOjqTc zQ!-AH*=Lc3?hMBIDs6FlG_uc&x|Urt50M|`v_eeGyDr+rUZyJJ;rgZ9LkPNT-(C^) zPg9{WH4u)i4;Ypm5DJlf`!lz^^h!H!gh^~*IiU1<(`(qEwpaAGHnxjD{AN(_-l$6_ zN##O&dVN%liIbr2)&LWg$6l1AY>|TtM70P@LinBNP|Fc3Sa6jSWzgbR7H1OS+=@y= zqg~Wz1@qVg+2kMc*7yJx?GOEA3R)hI^sTx;4~8%2+#TJQ?j$EDAF!ro%<#magBgtq z4_6eLE;CaVYPmIgP~6|zrgEkq>KYy81yF0##>p}RS$GP(2c0jG*5v@l)ha!wzCh}b zmzxgk#n8CWle24Crdn!Mum>%e!(H25y@@e<$A?tF3(BWZYd46Y7Jl6-OKWcnO6tYW zR)Z}|mbt<kqODGD<2ve~8uKolGScN0WLO$OvERbh-2Uzo6Eu4ro54=f?|X?T89TOH zOBSs`?#9n+x+BP+J@I~TOX+VbPOYeR%mmCod?6-ZX7<#+-LWlpe2wVx&o(*rCSKZ| z?%5t#Rq-(<%z}@E2coz}yWbDn8{^Mc;G%}$muW*C^#dozVYIo9x|R6K+I`*B-ny@u z(M+3}q%Tnq_k}iYGHx+)kQ3To5RJZybwxM^)D^1McDH4c=IG5kd<M7Q#C=(Z<5TKU z_@kPMQzV%aVdBl$>(U(c2y90@gVmZQjwOq(qa4#)&g63y;N`k4P=lGYAl4R5TIQsk zn=S$RO{{p@)dL7-Pj3gC&bw%tNvtv=P=QLmv7|~o-<KcKW;IS1bc`dW`@7x`)WXG7 zeR-<Ij^ZszhO!i&76A0Jr8f!@;TqG_yhH?rx79dY)LEEN{dG$Yi;(aoi9-BgQhI&4 za4Q|ptLZe=1B9zKgK#ynt(6gFLNAaXgC%SC_Rv?D^AcLQrambJLbyz8{8(x!DvYGR zQQ^tZzNzcybv-p4j?XS&D=P2cuj|FEY?=`kVXnC`p2C+T$MBy)BF)ew5x_}Co{#@| zft=_p8X59k%SfSEf}zM~#op2q-nAQ7UL!;7yRw>3_|0Gr&Az=8(EQ8v=y3#6$<7Fp z(#~=r5Fo*Z&`hsbx`do-*PDf=i^Qdr`qx-s3c%z|V~$hOj3UkaSk5#y)0GRSAkgz2 zT=OeCF(k+Gy?f^L+C4|HzG&K#f~chjj;zN{*d=F7VjSn}_Ey}njogZQ@eYQu#@+kS zP3HbalYes(E}?u=`URt1v1HRj%XKSF=@H<hj7}%oCLvEQZ`B^9F%vJ9IyXt%OL*MY zZ}CY3H+c=T?_7<<Tf{e(>&vbtcjV@DC(EqU1$i$f)LEHhIJ<Y+2Q}I9U#oosRjCri zz1_9zt)cl}SDUBjAq;0{bZ4Bq1rxs9qYpioRgy4>!7r+sot0ioR@sanUEz@A3a3TQ z#$|E?@5CfGE@c3EDU)s^f==(~M(K-aEoK3^Hg==rk$+e8{)%)6>+lC>FI%}qPp6jZ zzgf=uaWgYg_&v_6lj6KJb{&e==)7Va`Ni{Fvd-{a(&L7eGEftEo_e_1M=Mwv^L0kB z`h>2|lx9#1fQQ_2*)v${Ps-EQOWACaEUTbTL7vgf2mRZccUGnh4iB~6VX5P^ET?oT zypj}&=;BoA8?&Kl|1>6g+7Skog6%`^=bQR%tE`*j^&YqfKTMRYugjeKKs+^Abggvb zT|Q3l(0O*YsLdp@P?vQ*NpK^zJq=^%Hnc(`AmBNUWu2Vkz*K+uVR83ld~sJS5Sr7o zImcJCF5L){4%y#`U-}%MWXUjz+8n9sxXv>zjE@dvnQ3!>XwOso$CA{GZ%0RvkKrYY z4iDh$E_x|A%RjX0I+uctjyJ={5sH1<2i+0FRqzcB6T{Ujpjf87K{$+Jw^(0)vlLoB zdxV$f2h@fRMSURG<b(dD<HGA;Z+X3yelcF9Bg3e(pNsJv$7I2&9DX2)t|`=P-nSCf znEQgU5US3G*Ba!r{a#j@Z^1Sz(bH_zcASHhJxf>=SN&nJ#B_tMtYMK4mX4-)OHwpF ze6k-3xqa9oi_OXx@X#Qb-bFoI6v4PDL@z&dqp?Ys1(q~oZj(yNZvER*j`uX)pOc?) zWA_JxjW^@BV}+7TmUb?r5IDhPeBa8t+0~jL>YM%95q{c}HLP@5i1`}CDNqT1P|=>w znGz38Ws*feRLI@tFg9$n%=Z;#GZu_vd>}W<2hloMWCE?L7I0S>(nUwLmCjiBIlS7) zMe>0oI8?BN(Bh$+Z9JA1R?(Mq`224Y7ef}nz`n3Wxgts6;Z>4iHL*By%a2HhX;u>V zdt=&~7Wsfbh%oIxgISD0@jDz&GB<2dxSe(_c{PJ%b7UqW{yCbj=<3mnp;WdN<0*^j zA9u*YL+#s|M$!R@1P}WEIUlDT`SZPZt*%!*@0@m6H}hF_;vlgQ@qoF4_@klYM$e@i zpKW|Drk4GWKHI$i>A;tM=*3Bsl#al7!fTn6kwFP;>~N&`3Z`+gIOoPE%O$tfn>=VL za*jaCbACMJmVa(BNPL`z*K_3P4j!LQ#&5>&`atk(KHX_6NfhzsVs@k{+NeOt${XxX zdvKVeqA`a9KAzSu$J57zl6I}vYX5;W=rb>KNrFl|57}yG;G22^zfZ%Eji;xtd0B7Z zj~A3@dT@C6#Xtgj)g&xb3&i=-Klh}91Oc0jo7Z1h`}O|8c>SM;1C1PZ#`g#=?;m`z z{x>Q{Dcy8W-yw3@`aVTC<4jxc2KygxRQj>~w1F+ZX`a2V&tYqB5%BrR=Ven*iCNgs zq-v^{6~`Z>^4Hab40Whf?Q!_kXj&ir&@0{#0qnbKf{WBa(fechYQfjEr+iDHFiTS5 z>ym#;jpy|#SNKg$MjR(v<81!rvuBJM9e`hwL`X<Xp7AABJ~G|$6G?WCXg{9vMjW5s zIfpfI@uG}=FIq+$_@9Y#W-7Lv4U2FDwD_9kMk2TdsG-W8R#kFGHo958UY`p8bbFWJ z^>?-RY_zk@L+Fi<j>^VTA*HBw2j2))LKjjLqd$cxtxybfL)r0aOs%96eYGfjdGJ|z zn4e7e^a1o%K}*W&`UmK)aRSUM7Nt`Y6*0yu>6Tb=oma)NOn}5gw!fF43cE4n9SmHT zm;7M%%3oNHl;MI{o0Y0QS_3hwmAL5m3(+&-`Y$(T?N!>jrc3zT`t510Uh=2y%Pyy> zdalP-pj$l=Q#&No_$CFKj1*{xh38OhY2F=8&nD{9T2D#U&m<)R8ab=7!3jz8clr*b z{S$^N<m~+uw(LDmH`jYrQ_OEH_Ow(Hu_83B>yz|1JAHqhHdHK~dmJUY5Y|lz)@z{6 zCoL1(Ji}>I-m}rrc!ap;c-hDdgLy(Ag-@tD0?tV|xmVMAyh!PA!6<SmVYe)rQnj!6 z3r~>!4QpLYg8cNs{I*;e{{orFz5K{9hJ-@L4B?2cJ6Emmp(vQ#5b+T!*%-WlmUj!P z!@V+7yO(xI0n_~+_epp0=Xm^cPK&N*rsB;#TEssK8bF#1Xt7<Tg;BX;SZoO(n)_wL zc7EBQ)eb;V*h@HnD0_=Hv_0X#fr?x;3-FaCLNy+${W1+b9yp6i{mpzYk||NTc5Sw+ zU6}tg{u9p-#7AifPiCFV5gk6n2OoX5we_n`kKLf}hH*ke5JL<BtA{QO5udW?4R3oI zlwPOfrh$3g5Ie!0(|31F8QB--c<kclh(lXkvRDT<!`E~;?G_W}Ah;kygMa$2mm`g7 z2g;mLrJ9tJp*#L@+n|<azd&1uxc(p+vefg30dNxdz2BqCumnIEh}zfDND-Mc*yY5- zJmd^uhY9P1ElViwM05$Ux4Sv^VtL?cL<4rGni0@yawp-BcA$xxpUubF|LOky&0kZo zM|rTd;?_7G6CnmL(8D6yrL3lMaV%7XnZF&J0^7z@&Yh;96;FEaSP1GRtO#kTdF<5W zyMgU>-9(LtX5@`;<D46|j-YSFY5>3H&;rTKN=2pU6<f3K$^X4w@ISlbT{G{i=lrKn zISB#R&UiZEYjLWF$jL<LUho3zMpPZ3e3OU)IaFSYooQj5ZzGqPF}dubW*yid|8Z6w z{lE#N&S~Mx>)}RywpiLQ6<ssRW`F6Uv*}pv#JO$8b!LRy>7HLtCuTKhZ$2e&uuKpB zsJqD!$B!t!`IEUsH$m6N!=*~rp^=8b*b1?OI9oQiyx8j+pt!!)f_tr-5BL!HAvO-c z@$AO2yL(4GE^S+4390qTH(aQ+%rl+))qPm_MRh5e*rUf!o<9Eai|3CY4U0e1*W^~! zy5QP9O1Ld7*d_DNgWhYFn{n$t=ZkpnFuf60!lQzAwmBFf=;JlFqp+!gvzYFLOZSB- zC|T(plukxy33we_I%Yl5#RTNLuRFKUuB(m>gV%yJQkBMVDaP6j`w(?qM{GE5`XEQR zV-t}7H-x>pNIILR?;z%+%8X(O!|*W&?RYNta68C!_Gl^hROQnizwY)@4~b3L^)`8D z@>b-XO_v%rN8`nJPHyE54s>jde#H8~*uTSmSuguK-W~p6NOzN#`nUEz2q$#+Ub6Pn z$9RJw{=^Z+c*QR3E@fWiB579KOQqObvhmz%y4Ij;a*TMQ@au|2qPBR)berWp{CK=z zhcRpn*x_ZfFcI>jt^2?Jb%^dmTFyppts>hBLx(HP!>}NNYDvdr6p1T0*7bqA)o<5x zuBkCPcQE^SlN~JBk1}I4n!iGnPzos(E3`<++*ddr;W{kl{k%+LV-}|FPRa(Nd$uqD z{e<dI%VT;V7=28pup5*EY;(Xw?WuKu;b7VzHf8z%-r-$4zb+HujV!QiT#(T!*)51< zY6PaKajzPU9znWbl3%p(SM~g;<T@`ef=?f7dL+3rR}><k%#wAhZWWb9Yp!&2uQkI$ z$6!DGSd{B7#%eTeY1RYKzA4%%jg=DRE|XWXS&2c3^h;3FsgjuzOhfseD*1&yY+m;h zNUdBT6^DkmXj3CN!s8D8_ny^B?BQiym<gTx%2nk#@nUEBC@RwJu*pjI@(WCP&XTN4 z4e4bh=>hA?AtiSUv~-b3UMxsBS^t<gc98jO+eN#d04E?J#6vc|rD#WfGl;>2bj|u` zuOg9BK#!rArY#PZn?6yM9o!T9enLynuDA`_4UJvZ^gD+qf0zZpFj}S<B3+t#@4Wk= zKXOrbccWZ1@se&%i3~EOm!F{%EZ-sXZPO2RY1r`Vk+nsd!IRS3hQhpU=dLFElHKpe z=Ven<gV%KI^CtDEBn#Td6G#ASY1YJYUj0C_bxA?#78_%7qvPbx8{3<kpKZ`T+n;T0 zeLlMX>1gZz#z(49UEkW=-v0F#dh|e45~;ZyPupw$nC9d7Y|80#Nl!CXB^$M}umf6x z%cxkH6R2tqXK8{09|DW9aHRIA6~C|xK-cL80fA;jEN{5f%bd63wb1Rx{c3fKr?=f1 z`A55VKOw}cncW$+N$UWyeC5W0p;+pK8-s@#wtjM6as*7Sbfk3mk)`*lrs|~6m$#Gh zgboB~8+b?GG&d|C6etLUOp4(e@w$0LkNw9smL}^PXnpYTq+VFQUGG08eC~ur-Chv0 zy`4sx(kwbvb>D^DS6O0PI5qWd$!OSvFCk)2yIA-{lg<YD9dIWt5&*mU055n5fR}Kk z>19ut`be5yf(75~_9ts08Jb|Z9>iQ1DU*E9lL_SYdm3MI0G_eKCByV&Jg4>2OZ&KY zbsyFy>%x_;AAqk=%3v}7g3!H)xJGn!Li(xT)*+ndGX1IIiK<aLK8(aXAUh!ZXwcio zUd9NbxK!JKPM+|@a0-L92aKV#lHWYW+*xg2PLaF!YoPZn;EKXAk;c`cfdO=oRlhPB z^}&J^Vm-AU=q3gXCpwPH$i%l-(=oLt33=_dH`$2e7u%a+@$qs_$5^@GvKI$04nKzB z$d^z5_!Ua#`!8lvj}DR7T=dcCF6zM4in@bENPl#9f3R~<yjUFGB?FWf^A|HtQ#U8e zkrO&><Vr9tN!CXs<QH?^0I6dnqg)h^zx^WtM4Sf!x4%QF!s_`Y8Ss?&Ki=yuITZZ# zQigYVQd82=OF8B)`DN*xc=vM7+v;Ug@@acX*1(tiWO<3!WG{4iUY0)$KGp<w^bGc^ z`=1Ocz}wdLef;bG_D(UaNmIyb)J07=uv=dV@)Lsi^hCcfqJ-z)iR$I$--)YeFT8xQ z4ts@$>JN5=OtV_;hHPZNef<3L>&IU_8pwC+Nzw&wyx2e~oIx=I`}i&9OI)DI&0f4b z`1^xH&ZkG&1RuQE(3EF`2Phug^&(0p%@D*x_PNH)Fl10l1kz$PD}oJj^97k&aXrgn zxM;*&X#baogYWka{{G9uyC^?9`r28c|92w7z)X#f!*>oe8W{TfVe#=6{ck&PHI)_j zs4zFR0kpZ0inATQxc6f8V*T*m&VUKWjJL7>(GCrtMz+%@`=!Bv$%o1Q17|Un7-X!{ zF`X~%gp)S<_V@gYpu0T}7XZNB;>o<!6}EPZuY7~zxki9y9l)zIc8>F;-gIO(3lbR3 z1g$ChO<5LfzP9nEsb{C7H&7QyVDK>;uMYrs8*rPF0YeR6PImBt{<B{E=J8kGK7Cw_ z8-DVU_QisjzTvIPt9|j+^T$sM<c@4p<U#XKSRh`P7#x}N5#`Sw5g)R3kfsgcR})3( zlL6)bxS%r7%*KOHpANW8-unpCqPaMESx?z-8Q~XSf-)0Sy+0_}ru|IQ&2nYpI0=O9 zBWS@x#q|8^$A2o!GPan|Er&?V&<SHmuL666LloHD;E6(K?74xZhs+9cuTI_S5pCam zL_`;?o(~?;alL97Z7Ugua;{zMur<k6#BB6O{k5tVVW)mJR{hDCAmizPH@i<hAM&nD z9yIby975E~OR*S?5#6}SSVHySQO<9F)*Fo_y%KVq7u-8umgNlok9a(em=}9FoY8BV z%H1`4L@wNH?#~*CkSlob6<W)T_!s71i>ie3kvsRE)Dw;kRxJ?oYL@qzW7QoDk_2ZM zR#|mNxPUKU1}CeBgBWV6<1km^|98ssvzAU4!Qc%~+(9C^=-;3(Lcifhq8=@ohSo2~ z5$Iu$NNi`@U5xoL{m?EJm+nb;eO~*v_wC#lRKJiO&gL>fAiJ?TsU7FUHyBr=&u3$J zwwd0f(G_4qq@M{LKtvjsZlVcDUbi#iJeu!y)W%h*1IQlZc3re=!^%~nzS-x!Wm5(R z58|ohu(e!#a72(l)%erFnLVg{wo<KJH4FI*Dl>6A+Ff(KYQcA$7L;AKb4=A~r!V0_ zq{Ha3V{KB*5DgL}wE*ljpN3O6aH3<YoTwq78rW%dj`Aq4=rnP@mg7)FM7p=3ng{C` zOVaMjNp(fG8(R|ZUlN=2i!E3+*@W|y8!3xDXYvE@?Qm5&d`q1GaNj&Hd8}&X<jr_z ztr2Q@deQcG5Rl(zSL)_<^-7EY*)fTXoQ><kqlfM)So{?&P@GA=rmzM035j*+Cyg(6 zZF=p3cQb)jzw@mXy!pppzkW(Q=p^5`>!D*wUbJ4y$<h~D-(6EhbhREw3A1g2*&N)S zgQgZ@sNkQ&L|K?BQBhnq*EAGcj=mVB#XkOJ=Gi+^MP!_kgQZbDCz_}-d=g}-xAFs_ zk}Wt~F^dEsjK^H$7^ExGiv>HZ#r|~@MKBUgBMBz#|39hbpqRu(l$d=+5Y*<Xe46tY zHgFLf#X^?QWd73Jax;F2nUnB;v9xg~=;r&iX<OpReI~uNTl572xDr2mIL!EHq>HRy zq?FA-UcEN-P5T2@i1(JRh`6lRf)1ETn^JmS@Z6|BvB!t>`H6z8Z~CwD$pOW$W;VP& z_#E(lsnq{qLVXCCsGCS2qs!TBR<dwP@9&URm+8~@wKiy@@m7mF9HXGrXKgxzm`Zxh z;t1QC8H6@clT3V~Rwnx9J7W4?N&?$Z?p~Q8RagX6FNiBlV%$LEo0OEPBPjH8OF1M{ zd+kY$w*gWgGz*#PkkCj%;ai1rvSg=rJ0z6I(tw1R8}%!edRaKtunZ&~(|-pR&JPv* zg<l$3m@aMEu!}2d4)NQ1-c|puSZ#C2HPtlEMlJFr_Nsz3D>gJmav>*4kG}NW1W}_) zl6W$ac`Aubf<dB=L1$4$ppBV{h?ebquTI<K&4aZr0%Owbf!6>H_!y(0UduIm3PW}z z`8(`znQ7`!(vcKnX{mSo?noaBJPU*zI<tY{w~c9-ULDk-iE_qrTwRg&Z4<Q_c=GMD z=e_te;n`z^yUZw0W{}Dx|JI^x?_;an0I}rOw6`4|T;~7Bu{C;a;f@W%Lb6Eo0G|bZ z-=RHg*1%2QLIt$)%Jc%}=oWM!S^c_kA!g|rktu*l*x=bhbBI|DW(&6-*PThACAP%3 z0=zx>K1vIj#>T4687}aoo8nEBVF0K^KbY~FQD4>*J|;W}w1?)<4yxv9+0;`?h1Pdw zh6?r5&$sXI6u&jI3)<JmQy)?_)6LYRe4ImHVP9sV@`Z!?<9aD0Nqy;>530VCcW&M1 zw3tWxyEMb&*ms`ul+04ka}aqom|rM!KncLOpPigsaFhiEYa#8S%^%-rL$<+w?*Ub# zxHcaBBb@-tmoAD(=WnVrlqhj(^kP8~9E>{}^Ns1wlX8Ai$))vCIinHX5mSE+@MP`O zuRk!g8<j{WNRl~7<CQ?yP)4@~XAuMasv^Kfw}C`FaTc7_nmH*QKQZJ~>DD!sx&34~ zMt#!s&Cb(Z9fbAft5B9vM<@d-=*~1~TGMh>9`m>>;^1uCc$#K~7QaN09qC#9bDoLI zPV@aD3;wWFgXY4IZRSLMA-W3uOhOo_BrvHOe)*bM07mIS;seVqD?TfT36s{ckO#P5 zqq#ouq?K?yFrf^`IDU5vPmP7M)RZGCgbh$I4fHIzZQ@t8muin{p&Kg0;>tfV9{AvI z!TPgOWW28*@mQ^o(TPtT%ro7939o9j%J_ARkJ<OOU$tp@eh#4b9*Wg1#J@lgOO7@~ zV|dNmjSWT~9}seY_Zqf8sY#9c`!D`#u_?o|cn{k%^xN`ReTqNq;KYx|yz|I+Ie6r6 zju$N2E)@}%%*yLx5M%t-O96gK=38DRtj{OGks!4%ocu>b`arxy_#M7(*oi!Ltj|8_ zgY<!w83HcRYv>Z+YnXN2H3yf-L@uvHJK2`t+^J8h1xwv4B}TMSdC`R@3vXk6gKu0! zM59)f8KuK$1rmiPlb3YN!zfLeqy*^rsnW!b(;&)N42(PMm=M1$!FEuBJ}ljt;$102 znwm*9AD*}H$Uwg5QiI<=`}R*eUGsS3zLqDw$8UGuiHirs>vF8UqWzLBdm5ExRCp74 zixv>UUTXu2zN9OBkbF{~^hR?dj8qYzt&6H<Br@ZgSJXFv2RPJ5f1V|7K1E+)484!k zz-6hh4f{_bm|v7&J0|m)32iNaJ?#i=DSu{Jn4pB~yhx<z?Pkt{3OZca5~PF}6(ozU z4z>BsI#$y^a+@LuIv+9D4<eXq*X2Z<hv4HRwOJ1P(IS6QAa`7J>EFfspzX4{%kyHy zJ3tNDm#j)#wi|AD4lIoDdbpu>XBSKnUn~N_RzlKDUEwj%_)<xuZTJ^`h}IM;6Qpln z2SlVp(UVGS7W4AgZA)(T{8Pngz3H){q>>Id-mRaXpRd!5oU9WzC1w7jIYOJ{x!d4s z02%+eahLld+Yz!ggnn1IL`W5>lG{tp8onQ%Bqe5=q9v9Z!G9)~<|KBFSl2Km-=odE zCS>uf>MiNXn2|o>H(RCot#>EWB^pr45T5(|7sjp``g<t!i!uMS($gvRB*nbrErH}B zh3Vncq&6w+sPf$ne%k|M*z`mU8JCR&7of3`^oKq+6o%gqzG8NaW3^8d;ya8Zy$KjH za;;(Qy}llr@hg!UAI&y^S!Rr_w%62W<dE<^^Bh6|S2GX+1-+tAS4)1zDGP}ZSk2a7 zmJ6~onhgN(h86{o#*&_>tz*W+jj>}rDcYjOJP7IWC(-|$q@((LB=IJP)|Ls;h8g8( z?y#}1<t<1C%yvrv#eh)JVrv+X$1ITYtq?U}Sj;n3l>T^V?eW3mT)^^>PvjQX6Dn~) zG@IU(euS2o-o&voJZ0}(`BJ_7>JlEiuW6bXWDNAU|ArQZN=yQ4S-=SXqNZ}>FR;0p zwW$-E>V(~KOU7?~YjmFqj%Q=mi|2acP7R&*BT7<Nndai3d(~KzMNN$7$gHKn>@Rym zlWUjjL2!YGQMc7}^;DuRY{id0fk}wcs@znjYV2@Kh1xIMkkQR3iE!=uIw`}dk;5TI z)c>7pRU^Ra6$>*#bP%<_(MBPN6SFCM+sMoX-*0q;g!go6wt;p=A+DTbztp{C4fES{ z{OsvNc&zc8<eTO+Z1pSa-*dl8K?aXC03lYMk?#?Qt)ur340fVFeCq5o0wTMX^HEmu z`%qI9ZqT@_Pmm^tx@>V0`4C^fq+w!e{ikr70wKbGQ%|67;?0-~y@Wy+S~W8}>@Um^ z56VR9kc~=fA{I6?eG+gZMepdTDJu22MRhIH`nHMYUlfRM68yXUVP92#kgImdg<A5Q z{xxqIn$P!jv72(6QxYQuCs+nq-RGtkmc&>_S0?FZTc<95nAPV*$+$k4O1k>lC|T6L zYmz>@{4Hv>{rs`6PZ<MPKVuT?%U2wS;@xZb!U`sP7ONQ#iq9AwmYAr_Ry%dXOVUWK zFRY8F>E!HO6*<kr^kTGL7$;br(W9}A>rUJnbyzG}rVe5x6BT&#ComNyl!M0S$rH;h z$wBZmGD_6<1(+C$#&+8;I$5s}fiLU%H~h@g80QvjpN%llZdGU)89Et}d3B|Z(sOwT z*mYtD1f{0W!xFmwJuVenbOP2QjnjLx^hV#zmR#-Jy2&swy-0T#2LdgN>CTg?pNeh0 z$oSm)zYUiREYWBgVkdhjfEW|65Urzp%%<>LiC0%P)@%DTuuf-xSSqzv{iZs>5s}U! z)xCC&kYX7vO`-GwEdC`QJMvDXD-B=9FCjlU8nT;*hpt;m*<Mls7FPh!b7o7#tpxG5 zY=ru;n>Yx%l;fE=R_Pj`wPE=tNFyv!h&=)OYKe@^avOtISq`@Xn_!s0ST>nA&6IQx z5{jI?Ga*1|bxLtNw=|?<O}9In*aMI&Xfziv$0OiP`lKfK)B3nNQUglfUul)&WV2Sl z&Ipr^-k%?-_;s>M6B(?W;G|sZUhu1fdtr~q1&Mp_6?EF9C(-t9+X*KjvSTnL3~&2P zPec!i%<Z1bm*pxEl}Dw=;dK_`nIs6LzB(SyUvjn`7ud96e^&F#<i|)3V>+#8$JwhZ zY>4feHV8+2{t#~`T`|9@U_mgniui{IPj){{+mm+WWwxUDE$CA=Kto%}72l`^Uek4@ zKkz=te>z6Vw#UF&bpIOSik%#E6>^&#uS)WzQ$Rp+iU<?cv_DF!0L=17X%&iO1EcG4 z#d(yBD{OENiJ3OpSIY_>6ra#<qL%z-UZs*xm9aw{0P1huuvvcwt8nUZqn`7JKM~)q zf5RKIPJyJepQYmGiDvpTlt%u|`!n;YbnNZhe0Ki!DYz|FZ1L*Flg)INDX@bCCCz9b zI<svsV8e935{t)FVMXWMwyRSv?+C==Z@tBdws4wt%~F0g^r*45wKJjRVmH|I&dy83 zj(`>?g!Yk29<0v!UoG-gheDV+FUyvaW2G&DQ8!ArLd?4mI_En@aV%b!bF941Zj$e9 zSNO#=Um|!qRPP8*q_kV1mH23Q7r`Xi!;^XiUKRSYO|y^Vw(%_^9N=bgO_GKe`kGuJ z0Q7u>kvlkmkGAnfe4ptUd$K`d@)=<{MD<pp8@F$n3eND~^)D;L6W@eovNs-M<_u?N z0zujD(4#rbWRTZ1yN<JYg7Q;5q}@8fCpQPoV_F4QKt!mZwL@LI(FGlFl6!f-@V^z3 z7i8z3kjJl*PM};nGFp(y=W#jLw`KA<4wNPHcl{IQ@0fsI(I)Ki5f4KnTj@Lb@S~+y zP;A_E_A)9n{GU5=!>E_`Ab1PPaukEb1(-b3AJu0B4qR!GPdIyzh5AOgCg0j)@&(7h zUh{k1X+GSBVB$I>=gL#sXDYfAxjDJ9kZ-we#^qmSa_k#tr1Nh!EA%;=Ac3-WJtHsk zad^%r(~j`?=D*cy^yHM#i30Hh7l-AEk86>zkTwpB;{X*75vx8arNYA@H^N_jmF$R4 z$L;q}wMd84wvj^K(}Bzo9mZMAE<SSO@swRq8@MwzC#<;t$<~gX2O^;I9M}3XU}3b) zY1ypFO_xgT?|=TQU+s|T*=Mvan==jmWcAml#1pKpZWP#eB~qhm;LMUg`Aah__udk7 zr~;}PiGsUN|E0h9xRD|aZI!BdcwEEfLPKMiKQuCgjg6k$Q$Lmi)!m!mR{<=n$hF<P zpvVf$KZ#2bfxCgzS8Kt|V?L>7YO#2fs07`ln=X}_8rEO!N6G7;@#1ObJ}9(`_$a#s z2-N5{Z6yHUs_Ijx)a|{Td^BFGvK^~<p<01Cuur620FH+a#LwY~AD?g1PX6hqpYTRT zKy{J%J8^*H#Ww<nyIe3P7r{`bTshlZBwA-_p}I{q(I>i2dscs~(dm$=pQ35C!5kL3 zA+>MD>;;g#Xi=$pM_m8<g~PJW9DwYJN_kA|Dj@vfZKSCtv_=&S-;o+REi@=^x5~hG z9eK_+{LL$HJi|e`teA#1tm>@IQE)9NrtxMVtqg4h2sj$c?g7eUg{t9{{1M^^bgniV zI`4+2fdd@+?a>=<dn^YrS5Wv)#P9eLAYS<#!U$34>K1ylmWv6@FX70(caI6F((rZ1 zHt~5c^2ayz++X?3x(^r`60#xBY9FU=BVn}MyI<KgVt{YP!$J&-<;$Yx?U<^Er6B{b zUHcwy+Y;77h-X_jOM1VAjJMz8ja-|%)TY@E;%!vDNBQ;EOr^;dr&@<?g`XhYJht0I zzu+G`&C-_DjE53b=r$;>04^7<#`s)hNX`P{VR;X;=b;PDFU^>Kzvo&(TST&647KFE z;*iq4kGH-@tU+`3u_v<N|D|mvh^!A~87;~aTBo(C8htJ#>ptY|zQ%>}$++n(^$aO4 z>&2jPK?7sqr(MNj>?F=ec(d!;Rh=8<cVgvJ+_qV8-_TG&m@j`B>M6u^uGHi6Ap+K= z^dC_nbt;g$7&QJiA;-gk-AF;CuyYDz!vPs?1XSkO@o-(yhxPANv%XgYTFF;mh}o0U z-IM?v?c^;_gIo*5CpCuoSjK52kO+@u_hR8YwXZq|pEpT#m*@8@D)17^fQmqH7jf8z z1sO{17XR4W9Bpb8R@SKou<B|VQikwoO>L~~zvgK+s~L5gX#4$Mzx>_`D`=}L{`*Vf z2IumzP&Qg^gCCOk+=H>IsMtkba3+`CnJvGWhOq>Z*z@bPU40qly<~Yu=|aaN$Z?<D z{;W1)eKX=QWkN|Z%-@l11)<|NNMahl@J7=9ShRM~TdHKiUv^h@+fGA5eX%q8%DEQI z2im`{^`!M?*UELX+AFi2EHX5&hZ(z_y}Zej(mD;S_ovz;>GYyO?uuuLtzA7`dA@_3 z_w!UG3@)fiT)(3o>U&XgY{RBgR<gZ8J#_IZ7-NWSZTsXD-DDz55klJ16(>XQ!nIC8 z6Wus{;?rgW^W?ZM4Z+h4$ra3nYM9l2jsr^{Gf0oyGj4<@({+*Q;$4{$W?DManX8DM zS#UvYAkTKQI*LBJ?K_ape6b*5Vm$xM9HWXc;m+PTBrwDJ(*2fMoK{hq+wg<@2COv9 z?!AD((q7OY{iP4nbfro!R31;TVeO2>ePyv}FIq-K>l0l~T2`40u(|NRt$(0WQKaiw zt3@NVLtOL@rw{99U;gUT5s;dp(8gg-**Gr6jQP(`f5)1`dPXz?x+0cAD$8qVC&o>? zewYT*ENZ-JBte5XYr)p&lhJmYLC<8F&~UFSt4gSFox`whi%Mo^hnP4j`cBh7&1%MJ z5nXooqPvOe3r26iIucshYCYk{`)~1vAa(83i403CBKAi$Vl2^d7Dp6()^}ICq5K)< zhW_1|Fe#<?P^MUr=+)Cnj}z3u5RU)Q8LN@BrJO5>Ni`vo4U*JV3dP*ONlrhTH*^V| zUNG%EU5niQ-|_M1_d2+lKS9gBR-oxQu)2p~(aF6eza>1yQgJ_8W{ViHF3FKHdQ(@k zK3znjR&RTg4yk**59cXnyO8Afp&U7ktCL^2J_2CyA0awIU<l>HYC*nxYmpPsWAr_H zD-iOf#GGkCIdKOwyrb~*oQ-h{hMx2*_Sg-HG2{8j*v-fNR#+?YmaR7jQZ;!06EH<z z7neP&4UG4Ae^US)ZJNk%R3H=t?;`q=LPAswKR7;lSskBISbEV8(;Bt3%Jo85^&IZ^ zPzMnolVm(#mC>Dr1tFeZBv8v11H`kCVOYAw>4hXC8ZS6k$3o5JCw0-(2zv*s9Ro1d ztAiY$qvA>3NCZ|QU1@fc8cPm1-m%f=gPb1MbJDV$5Y?!WX~zi{71Ox<)pUHU0JsjV zwIgGp08Onm8+INboBmZxkN5rq-upd2UN9Obwp!-vw|wGMdh6i!hn%qY>SYTCiXlV1 zwk{FNBjdVIl;$Sv{*vF6E&#x$YN(q#&l@5N5dq95YC)`zx#qoJY5<nM`>tNafeeqi zsciK6S@4R>M%5cjt6e+O<sOz)p5{t{|9I`>aebW$ZX>3wH`q$O_lTsdVMQ_w3-CSL zbdqqrS&+e#-kOzGI@r-@#C!@<FK9bw3t1CyOPpi$BR%B{M9H6wFLEbP++^kbQtq<# z)bw~3xt_R2G@_91Dh`s4->@qd2*HfT6ai4v37XWOTP&uU4fU#Gg#-V&rvB1*<*C)p zF*R$g1g9`iJ8KmDbDag!2Bzj#_pg8bt2zjV=x(UYF%lY2&gapX`X}Y2g8Qg?4Fv;G zxnRH3;78VI0GKLeHl}0~G(bhei0W;$N8yK9b^R!j(F_++yxWh|@vVtklVRqmh3~Nl z?rboRw>T~ECV2!PRxocCRzNc&2`M{iy{3<`8qY9x<<6~njV9jFms%ch^+Oi7y}<!s zc!D>=%idAtP90*sB5Q$9riWY9*P=BugI-b(?TLCwvGX`(5~a+;D;+Jmg>Eh{+}f8n zywxUPDSp(YkE|m*ZA?G`_kzf+YlfJj!fVj!ZtN4}9xF7`(vgvsK?nj^7l1m#x9Lla zY_W7g{NNj89Fe30DrI11pk<S6dc<ti+34bIbud)qW}1sEWMSN_pU*GM36aGOuO2Cw zcVw!Y2w(KY?mGx7;!G*{fQbr91(e~8HW?|s%dkEjh?hDLp9HaZpCcFy-uqFX-LX1| z=D(GP18_;);Nrup`i#XqpDQyhm`sB1SD!=hlJ9RksO|Um)f=kvfFtL_@A`0iZ+Y^y zZqB|L%-!f}?R(Ht#lz$P|B?-8m6sY;21>l+)Nr4N856S@WIrcXnMmrnV2{uYCPZ_3 z<<Zkj_vW9`I5jv9U)|+nDCJIt_j(jvapEYmyKk3zDzOS@?V1p}Y&WBdb=)pMA*4~R z>a!*+M!kMyE1KJL1B0XVU-pUhdC4n+_Fipug{J63X;?upa*zXUxn=Z#`TgpkziMr* zhiAnq$?jOcYiR^5Cp23n;gg&ObTPpzy!h+sJ2&9&5oDcv^u^x^g|I~>i9YS}!qqxM zgZgZ*aLoaGEY&FvyG`3HY?)7}PNnD2-1UjiLmj)e%BoaN6a<FF*(v?acV$b@y(Z(d z7V)_EzEF2J(cuFybEg5vrPM;M@uj$W1t*B5<ih}Dk4}8P+HXU_=Gh67%ruufn<-j$ znmCcP7JW}i?+tM-rQZmd6oL>_2Wx?48y>YpqxGi4LXvwFz7D1rell@ArKK)}EFP@z zAyx}>V#bGNc_&pu;G)!Und+FpCRE`OdSRSaLnaak)wd3p$q9D#j?mBn=|b-y^_DdB zmRfO7Ow}DkoULtZWL)FDUfXsny3<90!AsxA<+prr&+2r3%`X*~`(Sr{ThKCAvgg3; z4FXSA&U~<j2Z6n;RUZ=Nhdo52H)A-*P|$PSge4b1jB;?3*0yxdDaGw}q?m8ymKkD; zl|S1KG~O1YSB`+($G`gNLA)ab&?)ZQmq8Xmcu9Up69K(xj&hroH;sf@@4wg^yx8ym z^77-sWuN|{zbQ8iUy?oMD$<y=(P-8(zkeD(s*r-o9#(rpEi-?+YohDX2}(O&4SN$P zw;1bt_m=Zu!(V#no(=XIYN^QM<1Wkig1lR1b!ABCOSC7c+DrAfNx))#%CLJhrrjl$ z-?^7pKiUPx(~Sq>LQ{Sp6cogQa=GVGAm~+fOfe^Qw9sv7<f)!HAlm+z;bs^R)eSW* zaG4SS6fmy)S9{mq+(r?@|E8bfFpr+8<2dD=5HdW<Yj_Qm*M!h<<4b$s`Z7L;rVze6 z(ofQ9<vl0iIl~Oh0P)_gR;%6BYPEX2BiSm|+dZI*<9e+Go#oGDSw&J`u9xBIY^@BP zb`ssb21hw8BCsP1e+G=w2xy(ai4x@-R7i$dyd)!-TU30TR=N5wF216JBrb7xQ1cjM z_|K|wxznEwH(*Opt@56M<gYM4QWMUuUu=WyuItaj`9xuQvl(#wjPY(pum`AKfim}7 zppdOb^bo>8E9qs4jtc!L01XIg@1uUqA0HNPNDQHJ-DdEPFF>UmI2byrIiXMMqv-;o znS3=XNKWac+a@!uBQ?BH!X9%YVfzGGjM}5XD0τ0Sv#^#mf>(%Gb#+WaZeUG_n zs<Et3*$95i39bwFd1QYGGqj99F-Vg<Ezu-aw35M`rzc#j>Cq7WUAqXkfPqv%lR+3_ zP^DzU>z6O`Jx?1BqJbvt0z;1u82#HJ5)5xZ0G?W_<tKthA#_XTc?BzwRilLPbJW5j z%6Z9X@jpH}+Q9qkImKgyF=;@nbuIkYs0b0lHk4P#k9y0`xBSaMGQF7|Fm{_jzVIg7 z(j<n=vRG0IHMIyqd9<)L<D==^KJWSLp#*c~a)&u)$&15HjVe9mJ=UrQ7$7&v7J^ok zD}YmGaGWW5yKkL={cqkX`huW#2!oFjK`j9ItxF<BjKS6g`w%0~v0JJ2<&5ebPAj5- zJ}o%}q-uaVS&h+wauGdU+WrB#aG|S+ej!#~nzakRFD|^`L1o#g+qa+Goj%~O#Dp@{ z<E_f7P^+CMv<}%r<)X~iTDvigq48D2&=%}v$;3QjY1%>z)_At?2X?uiJW_`=eap78 z73@uqwS0fQrXCxipLTg1t>N9-PyO<jnxT;6ACM7PO9d%_W})d4yWcPZgpr%%H(pQn zShuj*bRsF=RRC^7$n&wy(5u;n8CKe%nN@b7GdfIC9_oga>vOt~cG1xPDEf%JW1#)D z$3wHHH+8H#lAILa>6CBtpEk2_edbEzCBVEx4?r^=kn$U!rYy8Y-l_b^y>MfIHM0aX zgHI>BPlxLkOpxZ73nTY`ckJSo9;J3x*9%%AE6HDlYZud_IZ<B`jJ80+@p?&H;%8`E zd0t*2Go1%xKr&`AUDj>YY8FD0kK0P(uUR67@|oMOPF@F>edeVXUwv(e=0e;Q4WsU; zz$d&S01+J!>=5%<HbHb$GNUY8KZrN8liNJT16L#HJ@fMI*CxAonAXQ__^a153}mix zDg8@(Gj(dEf)8iem7R-is#|>+C*cZYg1JlQ=cEaZ%{pd<H+9}qRGrXt{60jM3*sY` z5pGUITuKa-pE%I%al?ss^maXGJnIt=hzmNh?Z6p`<Btl2<Y$YoP>3}L3R~Pdy^@hp zmozKGJh-hlIFXt4`#ItE7N%WJNn-Psl$lo8=FYQP>r0B=c<}rWwk^})<B`HIS2S;w z_MZp{RAK7tS`7GrX)I0(U-<#KA*%U3-f?4&OT6N&!G8-Y;Tq7jqS>+xKB@WCY))3_ z_wL=#2gQaSLtIBAs@i+-$1<9QOmRM7WyQGFJO@nM$3za;!cXZrvnJIkWlHI@{N#1N z--~{6faI;+5DIn=mmbZm3;9>sKp96VFpu;Ve*bDw!g9=prMaEikFgz&0Hker@tXH> z!~@KyUIoWDG<s`hwm9=AYaLrmSIeBBh-`m&=QZjJtshr-cjWuIuE(*af9+L;X(|T9 zO@@h8@7lY#$d?QzeAk|Vuz6tl*&XJiZs4r~TOW;CRApTXzqreFu>Ub`)MC*$jl!V} z#`spg3>eXvavfFRh8(!lyG_-?&d3H}9IZ%2MDEMgdJ*n%gEvBjD*CPgi=eaxID|k= zBI$sp%xaiK{AnXoX2t<zPDSuI^%&vLv3NO5mya}@$G*W_0Iu=IVZ#9J+(wXLYBK$t zDk|yp%HY{O0#ZOKTSM@M9btv&rV6>5Ap`K)gNJML-|u41i>-&Sike90o~pnvQ9vn^ zp3SYuJ!lM&KS{xxRs&9I2f{ye0a;WK5nJt7z2{Iqqhmu>dc%gbUHRuz<Tn<zs0HsH zk?js$&?TxrqOZ~XG^b~$L_mT>Us(Ql?Uk2@fMc?`HczEJ!fxD9*XAlbQr)8YrHs58 zzFDwvaBF{(xi&m+hoQU6xcYFZ(NuV>_aT6qZaIZ7!S^YzU|5N7(|%e5MJ_cuS~2!v z!InzUjk`sL<K&i1P)}q0F%n`Vcm6qm=pm0Tb@GPfurFQ6MK?=^>j@Jf*#eursjVTh zy+3~VgoFJd{=oJ&$CIGT<&Vv(Y34uGBtb48Y_DowkK3=m^x7-KuJJbzrsNW$7!h&I zy{&KRo?g2t6R|RnZZ0xczrnX#ao~fagpO9L$g7F|DYA({PSsCw!Yw2$6}v!hADeG{ z|8<|2*L(Gng!c2|MUUW>FG8iq`U33tZH%6caWT3ybdO;f@;GP;W>Q(iOS_%Gczijn z+bZTvm)MQ;-QMJ_mENb<b288(X=v>@d0_gCWq>iMTUePnL#v7x$38fhsSqr@J+rSH z;X-%yRUB+pV@MidlXy}aBD-egUUL2@T%B!p;ZW8(+1j;S^Wl18jhhoa8BrMr!ipH> zPwMQ}9Mju*HS_wq<sMe^QwlUVCS%3>6ibEAcaAT#4L^nP>BH0Q&O_>+98%Tn9?P2q z?H)Th?B1K4zc!h?G}+nNxmSMr<-I#!eDT>A_dfmX?!C9Ze(S@J-+KGwJ3L{&UhzY> zF)M{Rj;N}I<vG%WYw%u3!ck?(&LE)JOwnBP_+9TIs==3{_QP|w9LLz6VKL+?17G^k z72v8jZS5**63$Zzmb#{W8``4H^(g6`wK?7M>az;xeYlz_Ts=CXLL{c(TnHf}R+&yC zIt#D5N11rqID~Z~KMf))I3H&8EOxe%o!T*?9iV#{y52oy)p}z|Ymc#=$5-~Pr$CbI z7&g;xl^~gT3#$VS#5y$|;m$$-Ti1(H{%+E}y#DfQmc09^9Ir7D;ntB(c}1w)Bg!6$ zZvzjB+&6NO(9GEw4j`B>Jn0RvBrGQ$Kam$Yo?hUC3s>yW92Ti=q5#2xO74>&z;>F1 za_7yG;Jc~+!65B35=kvCV>m~@;+Y?3>#f}GDh)J++j4k2M)n(X!JL{Sd;n8Qp$kSh zsUAb1p#{y{MPkFk*-NuD+(+1<Dg}f~(X0^@R<n%qJO30X$1pBdi$%!`Hr$x|LS*Gz zb8RsmkO~y>q9!lxMM~Wv?~7-4UV3@53l|qeTj|^}c5dH((NqWSv_!C80+48E6~m*V zX+Lt@zMs`323T<cp2%K#3)6AOwu!^vtOfSSi0}*F2&pHQdQ?B#@fJjT?>ZW^$F8rA zXT8QWbMek)B6nh-*~dNUktFlLNy3GAPqXS+^CWT6yj6?ty?Lg#h;($6th0We6+14o zn_6ep_z}Z|%aS`A-Sx`0@mvQ@qEddttuW~DQuVQGk290^WT>jtLt|0E+WSv<Er?20 zpRiCK&Y?`{8>h%ECRR;QerMQ+>pk@WP57-_fOeVG(Jxped0C8}9`b&}V?ZvP_07*@ zv@`69SnK*_H@}0|IGZ}or%%jmeR*=eQWN*>AIgK>Rr7!nOI;8Xd3^DZE_}mhx1|=j z$Vr{UTi<UT?GF#i!|!Le#`O2CVR<;+`sKN!7pQVgwV62)vFNXpb9&r^aB+A;WaJ9I zXwyagXlki%=*ov;WX*guU6ShKZgc8C-fmW;MnFnU3BAQ%{g-}*HI-P0&sGn!9#HBq zKdw%a?!G|p4iaDeCq8=z4aHF;9dp)&mQ%$WPaW;`=j~^@hWrJm6`xDhl;wvkL!`~w zsL)w++a)yQeT<}?Q>-Xau%@?d+qU;U+qP}nwr$(CZQHhewr$KA+?$!Vxig(~vYx8b zo%OF&s=xY+Pw=ZXzF9fGT2ht1$4wUw0}yL7YG|Rf*J8x_iMA%;w&X40C$0Dzo%siU zByca4;;3c?&I+~K=lWg^$uxJm%7K$bD!z#9;Ms6CPJFfc4<HA$uRpD}j72fpjx?cp zJiTUbQzXlgH@!vNyG|OBQezouagqws@Twwo!?t|jK7@V#H(dT`JpKh?J^u$F%yXp! zY2cC_p>lVK{X8{yFfN0id6GXD2-c-X+rBO=&>&HM(Tjl!BP|4+3`+~@D-dfss}Fr8 zX9UUX7A8$DDl)k^&LsikG?(pGqdbrWDUlGpOl|((aRzTSDEX49J??0`EcQi!PXiuq z%l<(HYY>%9<uO=3`^D>9(P=~5T`-!Q2a)4o=cV51hT-2?)E%*fs3@s5rCX{_#{{A@ zp?od0sI{aGM!P;<;twgBu&xg^bvQNnr$$mMCp1-?y(ey)qyQ28_dvi1W4Rf{It8C) z7ndE>AG>Pne;#6vf{{Jc=*ULAD#)l<)`Wt>hTa}>lCIEv$R)vAmu)QXFNVUuyEi=W zx9qSww=4BImJ?uyi<VHI!!Z%Ha%lR;KKQn7P2sGi=dl}_^2oh$iQHQT9fi#K2Cg^! zjQv9VXld8p9h&)nEFAmoqeV&EaF8-j^wne=1L!iIJ`4EsOC1}PoHp!?E%H~%-cO;r zl-VgotG8In`oQC(r~#V%1jR0QO2aa$Ghty!AD~-gp9~D=GC4#jWI~Pba6%eQDJARp zb^v@=BD<FN?6NeX4XS34oD05ib%aoe;o+&AR|C;bPT_ngPY3vl)qwCY%jwatXM~ns zX9o&Yh+!u)#3Dxm^%>L=zF?_|=mhHFVlC~H2zN+k#8xc7EF#aAGynGHOcd&?=hC8K zu?i9F|1;N#@Kiyx6)op}WZPjwQPb2fBR=S<xp+?Q@M4lICo4{@hN?VhX^3LCL9$p; zeMAn8bh+S0ICxBX=!L!yydVer&Kzn>sthv{)CN8Dq6ThCrvwr5%@s_!x;U+VYewL3 zg>c6&_khC3*_q_lCLJ6R`HJO<E0UzHKKU?;bfbn4U<fhPXbWhM2HoH4f%z^JzEL<> z7V_Q9TVJ-SSV*Q3x9=)1#aVl>PU-e;+{3&Q)D6y`5<{T|PJRAn)|5zHi+;js#p_|b zS?4f$DDC8~`O;ElQXi^);*weKU@H4cEt|pB%QbY=FzIbJ{623mKPi$o{|-^Sh374$ zd)gYXy_J!JK<qiO-pOM}GeK3}1FNWM*<(YbK(Wzg0N7#V*ld>eY~DfRw<1_%-<B4? zNVr@;RW10d?uoTvURL!}<-gZh_#N8slO;Ao-*!E=MBc1eof1LXA)S~Aedbe|J83fD zzSfU-*9E4J5rgv4O@yyUUgu66oUti|RiNJ!V{v-3#iRPY$|!A>tp_K+R{ly3QIOnj zYGt{mbe&dukTok?Yd!N|{|w&CL}%hnWC=4ROU{9!L$K^{I%RKmVMj@7H!d%0eqthi z%mt#>oD1(3y;4Zvoe8q%Emwl<+V@V2^~1B3H9_Ico{})&IG1X-V0y^~5&*iY9llnk zD6Yq}X|FuM-|e{#xp-zWAci};inuvUJoV&dI4(P%h*<##h&LsB(s$S&o2gy6Epkmf zfYLL3VoITjg`j{%gb2Zj=h2G=f?b;~O}dZKxwy*EOt^%!k>+fA%b3-$joTIn)sG_A zCL+V|JQa1Njo7|b261O{#sUuq%*E3dmCu*9(R*T)G>4imRW&^eDVF*fEDXRA+B`?C z8Z{dyYbFt7u<bg233u&)0^XP`kz+%=Snn=?u+h~CzZ|u1W8--);t0LHOY|NtI8G;M z`H&EzYiT}xx1BAg!E*y15A^U}*pnKYJ3q#7l|@ru<D;vs#U=cLiwC=6hy}0#Ghs>7 zYE<Hl?{JL>X1s)ouDc7uC3bXvvgrV5s9K5d6T#6tmMPkDy4^&VWHrmvyvPMoMl3;( zAdW5h=rC&PJyY2sgmPyEynJA>i}&?%8St;VB`SV>a*#0f{p}`!3GqyQpUJV#PrBh5 znHuC~F1YbGnr!VDub<A;ObYd+K$^cW4?IdVMzat~G`>~5SPQA^L`H$a+D4>LZ8=0x zK-u(@C~VAmK$4u=$xL`3*e%3WCFcSX3a2cmgnvzFA_<xH>WaG1Jl@Vm=H(@$D)`-N z((s<{QbZ76aOne-u3PR+2Ge|&Q%D6@BE4IKbgAwB(3==6Mny-15G-|=4G?w;+=1qP z*o7Dm<DnfWPs!6)#RN1Y^@g_@<JVYtKXizOj=_+}P&by_9xa|pyCT$syt{6+;;XY; zJ7K7b`(Y|oN>5M`rUG5iK($9oVas(07({MDyw6uei_#M6drL<JR)iGPGJN+y2<Xeo z01JSt(RZmXFQ;bE%vnDVw{z{zDIN#4aR>uEkM2k|;l!=a%1X&ArNqBS0~&C*DNH0O zq}3ZLhHl|BcYS1@{;d39LGi>bI?Xd4nqJXH9bsnCICPoyrc^GkAEKG5!dgigls~|w z+;9>#0^0!gn#=?!qF=221D&q-kNZ2v6WZx5%))dh<%>=z7CSjPi*{o-gJW=Jeq=BN zY2~n;cs8Qsg$NLakcGgcx^sH#A1c=-s3R{=3r5)xWS}AeziP7`x!YHcqQyOI?b!ve zZAviSap$Ojh!7H*_h>9pIvvXh3f$m144f>uHHGs5%STuQZ=MXgpxjuFBk{tA1a5Z0 zr;2jEOJ20L<4b5z>tBTY8XxKUUxMz&<6=hmh*BGm51^l~uc3n%8#EoVqcn|pfhsNB zbYc2h@CCZV??<C{x7s@MT)`n{Mc3)eFvGpdtH0<xN(;TzLRKC7?b`RvtvF7`XxM5L z%u^A2U;Gay;lm+^BQr9zd_h&u4nXD<cwW&ggc^eJB0*sPivD{TXO)MkKJ_C;LwFUb z^T`YmvdzxJ9VZ52X#dXiF<UEG9|OZdK@KL?UrWThEZ=9iQ3okc=^%x)L&+0*&*)iA zg~jDuM8}?b7p1pg{EhSL%@wLG?a;HjY=6&yrQ#&ZpMUrv;S;Z;l8*K~I1aciz;|K@ zmp{cHg(!#vjx(nBnqKO*5r0*LJR2?)aZiewnf(mDwHh|NhT6teuB0WW=E3=5F>Qdc zS+0whrN3n*D&cLzr0olUA?y6!UiA*RknTLF*OpVpKM4o1qBeptBM+8nXk?m)%tJLX zXkaAy#y0tEyS&G}hv0Qp#f<ic;D0fj*CgI(5{ZbXGxx4_%jK_%%4!kX=q_5R<FOgz z_wT(leplAjL|ysV!lBE#|IMx7lgaY#pI{zv|2HC?>e>(moh>|2#sWR?xU;BwHm&Zl zRVAbMq@v%?bCs7y?a;Z9O?)-$TeubX4a;dB_7MCEdI;&UeRZ&a`7ZhIj`75UDf>(Y zDg1|m-8WR#F(VNauPP`|l#vZEPfZ6MuX!hdGz;}3<+B}#Oo#J6oJjkN-R?Rf%u(iP z)0sc^3h=heVGr-x3HDF1xf$MXIEJG<-RBnb4hw7XboS#X8~IHhi1n4PZFnd+X!ZOX z;2mLT<E%arv9b+>s6kc=t+#uyYnqD_+T-(!(~>UI>jUIzmjLI$*JmHoK=fq`8Ha4} zLQ<}}QslP5lr+w?eSid@y@g;hugw_NnxG`5m@Ioe>u`4y9wBb*)M8uYIATd&Hm(Y^ z=|NV<LaZO^#PD)#f!4~VsOovRSPDdV7JF=Fyzbp|f|xZ7W&;h2Y@aI@t2|%k#JkaY zsPDBCQL1qq<FydykKc#sAD)q*=u1n6vP<vv=32VqQrtk*%T1fcIOC{EyLZ052HKLS z1XAuImdBJQ?3n!WnwWr~qyjusQ=i~4|K$^QH|#9B8lGF^GsIKWnn=JvHG_i)QI=B1 zsh6$J9l4DJv+&!J*W8)(uB;ds(Bc6`V0)!Ob}9ST5mOcdIn(KXbHm@0YqcBM60_g$ zR4C81%EU4pS3*6(6&Cod*vH*=Gq1U88tLx5WV^Ui43`0pF!Rt28(K!00SN7bL>hMH z>^N)g&Q_2tS|NOvSTP=Q4v2tU_GK-;>v)t$cn8Hc1GD-{!3T2(TV+2Dx(tQu1T>kz zJZWYQ;KQ9AYw%#!-c8Ki(|hVde&Qs{$oC2mmyDO?lrAaK@Dt$LS$=R&V{TVMw-~Zg z$_Z>`8<ptnKeR!+xR=h2GU#ST?hym?mI*blT9iL}54LydEa!r*bGDat@@mlgw4-`j zL|9@m-Mbrr+fM(+wEdwCQno6j>lyAgpTpc>xTji>m<)lO2Po#FQAO>qL|YU*o6+F( zH3`H%oM<NHxw3gr0C^MvrfR(8_~em6!H}!*SKP5~H_Z8D$T4u}XryMxD`KkV+J_zA z)d5=|8wP;X-mGrekN2%~kLN+Qs~o2{d`p<>p_nbvrO3jQnVX7$4ScSBS)=`cUhCkI zt3^|Q$g$$8z%hg}?8f_0AFTh7Ynf%Par+ryS!YZkO?T6CJ^`2Nya>@@h6>HIS`+f( zFQmsv?jHK9sg}~-S6IE}(SD7UKj|uwtq<2TsNmdjSN7?62L_E>UY^moOM)yCLGRi| zIq~HD0-|b`!OAg>(PB+t4ReANQR56fu#LgZjyMMFbY+}hia!d+7Gu4)BPPFKzNN?G zf}vT<QHb#6t9pzx%tvR64!<%Nw!NQ~@&}F)lMb&IZ|1$IrV6k_uXiV#&~ugRF_Wa0 z{;pY`o-LGD+e_DAg<C?#z~L_<vgx$UBRPrIuH9@-dxNK~#b5tRR-Sg(SqD7cAw8l@ z63eYk5)?iY@00@x5N25-?G|q}a4bZ?Ply<wg)^Hm=~Gq!Ks99sW596+sqUx<?p9GR z^6<1$FPBDXTTRj2)<Ss3YQGP6@OGz`-t<(30RSOj_3Tk@xo&OJQ|zV`H@;7hswQGu z1Ng~ID5=1$#7w0w{J-sM<HIv>=QZ$QxZfCc>$|41wYm>Uzf=_NDJmK3V-ojT^38@& z48jQ5#N_vpk>Tlk1fA*<_#vb?LFLB{s`-!zI9`OXAa|>gWD;7gqER+A^P8RtZ8j6{ z?!0ThQi68U7Fkud#wJg~N<>iJg2JOG^PNZ-fHL%0WIGU%yEAQmg;@+l^oh2r7-2J- z0@54<HdW{0VUte!M^2HGP;e<RniIsyGM<fO#ysPgPC{_&ebX5~W|Ejnk*HRQ=J8@k zV@31xG!3SDjnW~MshfGk>lF<}&DBwTzZ$xTdq3RRLNUB(`Hf?1F3;<lo)Tg6Tz}Qe zbvG{vzDKhED6f(WA+x)Idij(J!fsIo5E*C%)AxeMqsE{9>k&jtl5eb55W{>@<=&Ui zKZXKw&Q^&6`oJq`$x%qu5@s^Sz!Z5KRQoLYgk<+WP9hBj4*Gf=cGi4JP)q^arxS!b z^Y+4JJR&bT{qTjfS`j7ErkO?N$G-Y!r1YAU275wjj^WYL2irwY@iy5ls}>Nwd(%ks ziY78%bNZNyRbCFxyx^iIJ+QeDJ7;ZxH2S}Q%ZXnfN4hcp^+$HOTSKIu0%69hN z8cR~zxu%cM8~(9&=>wPDYRTp3Q;H=@^ti_A$ih5BbW>|~Qu5iPoHX*eX7QRP9v1M@ zkOx7;@J0PviWPcT>1bl2in=l;2~!3N_u2l%DF1t0h2Q?2bS0AT5amV(5yM0|?f^&Y zv>}@18IT*WmMTzgiqV>G@)m%}%8^lhLC&g?qQM&;Q*ijc`@y_p`L}em%;=k$^-#F< z4LUpUhdqhW$B+<v@YCy#_P~;`9rzw4P33)cd~JihT#k`=qt60a#BH`UV+rJj(T2=R z8u25KzmU&(<+j(`Q&+wxQ_x9{EQtqpn}4ssbYtfa&mQs&)KB+2ncMRz_SS?SW4T}1 z>tT9&t?FjqpM*VHi|QwK!lq(BvtX>Bp}y9Dy{yAC#FSLtoI)3@1;Gn2c^GSmAcgj| zeRxcWpX7plIei&gNDa&4^ewqNRuGNd>u&tWy=9s$#(~cF{Tp)prQwIK2hB4T1mY5| zi^k+e{lBeW5RpSKlG>n`ik0fuEm&0=A2F<BdPr7ehUCwJ$UYP^aH_pW>i^!U|5oos zY(pwe6RaVVH0HI%fho}e+e2ln;^je-=myrdsYcptiThuMcv;9b0)=?u9Ld;&^s-PS zwg{#A^x0v7;UWC<672R68poACMM`{$4+lR&{>#*cU6(TSLR^`(c!_(R1>O}>5jk}< zG;;rCtqO_#Wq<GLwr0SgzG6@zoJ+aiPC;gFk0!%<HHe7e*2(G(ojz!LviUyaR*gZj z@bu=ZA;o&!-w%%_jRN&qi}`-<6H}$@+o&gVVDJ2Ue^kcRQ@52qw%GDRe8!I4+SQ<E z2(C%a@=~&m?l;m4$L)a{@FJ>j?(J_!_y@tD1=e{QwDpj{O<7KunZHG%UD@?0GVPXi zEu{hVBqv`+jIWZrFs@ahx=_}8L&g1Uir!-IgOXne3&lbvH|M94`=R#6+1Gn?m4ng= zTIhwD85W}fVQ)0cTF~7|8OL=!2I}_5T)kUDS9THE`oq8^ifT14P2I@0A}ReN#*ls~ z4|kN8nMDqjQi^&bVn#7lbH{U1w<=N)H%`W06ew#uyhJ84;Gs>qwtR8~XH|exz22F* z`71sNfz+AWm25&+QBWJ03@mFXIQyF6Gce$|k`vq0)B)BAL`&eg{O$zn*-{f1c;$@W zfB8L)nO1enQU5C|?=d(Z0O!E4zQ;dgWi*n~9EIZQ3yzh;$^coOJ{xU86bBUub)G&H zKNrU(M}I7Y^J8)sA9_YrrO)7bsgh}@JpIb=L!!~Tj~_kr9a`XzJ@FFEK7riSqyZH0 zpZ7R5sN(BQ^tZ7st|cUmsv|3RV&odhP3VFPsMN#!+nIuO*m5m$+t2dE=nbX{hCM2D zi}f!&MnvvG^s6Z8)4bdY=KQ?HeQe)(NRo>kBhq=pcg5nVBg#~<g*U|{eK5(!cjQz3 zq*z0vg;E=CQ_PVVGv~z#7lG=WWp<joBIFg3Lsy&K(X=V#OJ)fl(Uq9jOMf2_KOhEp zGQn9@K*wNiTkn!k7z}kCk@N_nSPsNJ*P-IkNQ$CJvgP3K<g4TDrI^Lnw0~pO_N&-P zVA(I|%gxj@!ZPpL*6WYFyA)bvSmZ`34dQ)~#!6>8$Nb$=W1PN^>~a-2Wi}46h^)od zSQVD{!e**_5U;7g(W(<)rxh%v6{3XNy%M1S&{jbxuCNe-$=;YHTlN<qe!pYtuAi>j z(D5^By=92pN0u~FCon){;*}e9e#FUQ9?jI3V*nA$CB;d$DIX<U0=zrv;4t{&hDBOJ zBMxVs`mAdsFq`C6z6+2rTKKI4lQn-#%dFWr<Tq!IdI3D>NO1!QlBWb7#GwKG?@QsI z`i26*S;g_93|KL+;=73Mx{qzrAiE|8hrngDw$2Ez9O{aE?$vwdgQI%RMR3E7rsT(N znD#YefLpQ;V(-MF1)n*o_Juz3#mdX(jDeKwRe)7AuMG5}L}4abRH_1t;y8E{efnd^ z?7S~`9*kjQCfA=FDNwLqd#t_h4}~ZhKjN~+R*>#%>Rl0@Oc5FEuM|fa_!}5u&EWsE zf$Jf3+Hjm_dobAIS)wPD1V@`{QgFN|QH~*w^l((_D}9-0qs|6MV6784%G&Yo-2;b@ zYaSRtR7+nhqqtO-Ujhj}YoTb5x&dwgA>)nzy7G7$?LAWvJ%>#rZ;#0Ua(=diTeJE0 z%hmKa3_!7#-}*9##$a#A#dGl~g@D~RXc}*BS=+4A6xl0GQ%$|B(~O^W>LxM|&)FDw zoNER<toiB+?+%0*pC*x*(U#bKROD)AHX-8Rs=XjrfL}R?d;3zlVoK+qe{?>=Ibu}m z8?W%{eMJ43rg9=Qp=rHO6Zz~KYE2}MS8I~s++tqD7Hb{Nnd6TyFA=K9ZrzZ!QCMZx zoMVVIg}s+1LAiwC*@UgXZw<o7Mve}TtMej(vIi0^33>yFb~_Kg1?gaz=3i}c#EI&n z2CFBPl+XDxG-$$!-t{3(YqEwiNlU<{T}96~rv_PR=XW(kXk!gADa+metB1ruX+S(h z*ZD0<%TLMbzg;O3=JhH%r1=##Li?-16jD5Mh^EedWRD6BDct6Fh8$gXTW%G^u^pLU zz_xdS`Pys33=?P4HYl`G|8|wgHqZr>1JqfFm_+BAK5fK0(^MrZa&CX(%1Z%*pa25^ zKmedR2=E_sgFvkU0RT9F0RV^s000OZI2$M%7+RY+(K6Egp<|#oad&n!aH1D*akdk+ zu(qbRF)_9<pf|QNa{6COODB3Kb3sQJCv!<9BS#B+XF5x#6y*uqEd~T0Ej>mNxI}F= z$0R%`Y*F;G@kJE#%k4!Ra|;^A1c{I+bddK~ILbc``rtM&83bW=yWN;@8LnM`&IXNW zp*6A|3aU@+<=G7^rFg}ZRrV_4tR`gC4hhDNxi<l~Wq`GWX@Qt@BZ-vK`_^Dq76GUF ztmvTjOF^B2r49c&OD5MXE>$x<RxaMU`AaB^v+zm3kB<<A&ssHwei7h4Z$BHh?)s%y ztxnvxExR@NSz;mAfA3}s4xlUilgKf%C{X9*&7B{Orl`!<{-`G?-INNyIk-YfAKO1X z8aCDB_+h~mWuRtIOQV3l3XscC{&>@kypx=#yTmx6QFb?J8^G9!B5*EZqNj)5S;&=$ z%@-EQrx{f+L?`Ji0|eJp8X!2cEgV!ec9Ov2A}wezfVQ>kN~Tz0xC~YZx<Y4g<xHEv zXP|^aM<EPq4R+~?cc$0C9IF>Nj6tX;3`KW1U~?ov;T=6-+6&~dNgF3$v&ru-LYHJm zs{l3ENObEuCf3I=lddV7k*4V<i(swJFT-h*O(m*99IJ%Zj4_xe6$f6UF)FC<Uj)j9 z1sBdO*jaDJkEIlKfZJjDOP(gP_2mowNp;mcpr?jCMJ_6D@Z!}ieFhM`rX}Q#U%+*~ zS+GAln7_J6D<^M$|6RV3{f_D!;J9h9`hz0MbxXcj-NL&d8L-^P(yZmR(i^$p)h(Uz zv#=9XoQ38z$X8T}x+-Z}-l7~k+hl`1P%oIYsTB-tSfu-?b_XD`OOprcSo4A%Wmm=d zFs76LzN_nR?u2}Z7d*lp?Nt-JD!Y)Sz1cFi?}@?P3itd;*&~@GeZMKJ?9OMAnnuDz zb`@kL;RlX9*)P7<o0E{%vX!Ux7@n=gr|Qs|pV?hIh>e@Lo<)|J*9dB*wnn#1_jfsA zzRCF}q=W6X8D#g9;-E5h@|-75u`9{_6?Wz*=@Efz!VmEORF3hZBYrd?002E7008g* zyK;o=98LZyCP(Y9VU{Su&t6%7a|)rLxPLG*gDUP;#Px?bPMHf)6>S;-H15Iyv1X4~ z-v+3J#BC?#6(bkd+U)dA<VTa)p7>m`o7_;wuX{GBMeMKHeK6M2hV|9*r7s>IS&_v4 z+#pNu+R#G&5Ba`dtmtH^A`8|>lQoO?9eD#?&Qo#Og0`SWrd*Q&kqNU5)>#8z45)GS z?^ws>NWC-LI5ekkdmOovw1kP2-T54?#GjlqImMym>CgrFiXh<7qWh)bJNfJUYVpYc zsD9BV(fLK*@_6042@11`CI&oNBP#saZ*8iJ1QvYJeV^3P#rKJpV|e1f&sj~4UXn+b zd&953wNIx*@y12bta{Kby=Ybmo#8zyUgdOT_tv}u7Hf8Pc3cfiFXT&a#vDq6opqI# zDhh)1U%P6r)vBL6)<78-Jrm~k@gGS+3MkYDE8Yd11-#f1x+9G$E`LpVOsu@L@`jJL z;f+duq;!zKD?8oAn{a@wSX~fZ<mJ0``;c8Riyj(pT~wb&NPYepA5GPE33zR^_;`KF z@91_Gn9=OOF6aB#S4K6k>n<=x;}=(P{PD!0#z41LvzVl!x7?a&t-L3kGGV-Qudx25 z$mt@V?6B-kntqM6{%G4`uGmPMEjf)#%n(<lW7U(IG172B#a7-}6#i?G|0TS^xfVlR zQnsjWl|R0!%%rLK2$jz#*}L`+-fTO|p{9Uo#ssL6oKB~yqB4C_xp+kz?Z2<sa~HTp z|M$Zpw2npj%<wOsR8I-*!ukl~!5^Ech${dQ)Rxm`TC>Z|c3Sw=me1C&_DYSR)~{i! z{+Gn_un~}pLov#y(~k@^i;C3t*WHw@4+n>e_W1fLIwU(d2gI5b;Wo0A$i|fO({x79 z3qI-qD4U`$33h3Eu<S(7Zcib>3T4Ibm@^Lqm1ElK-k@54Q3E=?m1tmcozBq_B)=Lj zQYG|w!&Yk_&26vH2JTd%cuut9#QGZk-*W5>sEGX%`6{o9x7<1Pp=UR*kBm#Ts*8xl z%Qu}&wD?{xZRXUoTv`@U$-mAm{Xx6BmIZ4By#lTUqM4+-58T8^P_!`xtO=UrikB(N zo|G+c;v+T06|AADaT93EClQXnCGTI-s!nt*y5cnf%aX;bMaz=__+Hw-`PfK|^f*HV zEkPuYVq>aE=jxFIIFerZT1`X?SZY1S5vctcAYm0^R4^_4QT)wyeQJt37ge_E&x$)7 z=PaEcm`0-yLBjPy-(ZTr+mM}_aWK@%Qvv`eL2uzFVImg;$`FGk0lDOE#wo=nx$XU= znVp3b?tdL|g7Z6{c#2B;9sQK`4L9ZeqA-oF1&&&8(p-0mZHaff&BYiT4R(JPdDd#Y z<k+54cjI+3r<t`g`<WY};krMruiYfK6m0E?zpR>O-BR{!+q$T<C~|K1aXM98DprxN z2ddnBElPH%lsMbkmbSLsbW|+7Ox`!HYXtN^b-&T`FPrmJx~u`CRhC)0^D3@OJiWGT z*H|0*ZDd=Sp3vB17Xtt8n2+{SV162Rj|NAAZ)z!cR$)3UpwYLC30}B}fbt><jh%ZM zYi<%&CrCGdb6!Mnfp7x6K#cP228K?T6k5tzm5cF1Mi>fM=>g+;WRqF7k2Ltbph>+t zg%z)(M(-ZRz1b{R)8TRLhzK#KRWAuAtZiK(GBN2bOLwha(#^B)RkNqjTwSeID_lFJ z)qqs3zSE3O(VJO(eM?g{n=R`)OKkp{sfJ4A7sMXf6r`|(Z{jD5bAtHf(>-6c)MX86 zqo0z8ZL?>atNfwzDXh#0K(<;P4q!g$9l+rNG(wkhkpTO%?M%>9shuVz1_xaF6B~D4 zib8su4g6T3DlTN9gWmM8s;b-i^3*2TqXZnZ1KRvvy}8PYbV9$^U^n25{z9en-6hG$ zw0lhPLMBP$4oQ{5%4I7J*I^&SLr>->T?}@uTe5g0yJ7d54P7>7@ilA{Gdu#V=iaC) z#iUrVl3Xp9@82I&mH3t_vicKIt#&dyh|~Ya)g;!rTjIPVkY5R@$}&NXdEZ@$9wm7I z7uBIaGe-Y_FdK>kKvp<jGGy|O(SA1EkLs*uAf$o#lt9yZ0z5EY8O4LKFx57@`R_GN zG;$b}6fGzy;wC5}B<(FsEyp94Z7X(vi)lE%a3_*;BVBnz3hzkUD~8EV%O|d<i^Q#L zp7vRyF_vQa!ki_T5k#!n_3(X)FmzRDr!r?x?W+H7@ES&41rO*RqkOUtpWli~>z+K< zJxUTEAk>L6b7tk~5MLC`af9N(m6vD<6WQNM6pm$3x3RKuDkwE>C0Uh2%{QZkQ6qus zK0r1G&5LpVWX8<>F=rt>nHW=Ylw2uN%EK5D2f=ZCDpb$Gq$(D+{&juy;dVg$b1xA) z@^VZan9<2_#Nh23A>O-Y#f?ahe{RH1@Xg_hHLb!p+MW8h^0eHw2*HcgUl$dj_C112 zTf$3PMFCmcff4Arn)wulJgHW3!OKP3(d4Qj>45EtO<PB;r%0^Ls&)jUKs#G9Y4ZEa z`u^M+l^AZ}M>S_qdT6S0waV`5X?<Gb%gRBWx$(LDh*cft1QyAOf*|X;@wkHSbr%y% zo{;1PO(v{Q42t4_l|>5bM)JzQ7k?#2g%3<5<La^a{f29}4lN-$71U0?aj9H+l8Y)A zbQ}je2*Rx_(Ol<i3dJ8t84)_r3DT^8hlrkJtMY3|$Z5t0iZS5snBY11nIEKRi4~Ds zQ1=@cvL4(Toub2{3_(RG2f3BsWt53DRdsTqt;!t?l`r~sez5YdYDKe^S8U#8MIEKO zEd@i9`L`)S4#~VgEC$Yua~WVBcp^eglx6^IyH{vQ^j(0VU)3cx703~#@PdI1-vKok z0S3lu#~1+_2lUP7L(c$`WM=>#AytWDLah_d=?EKO5$j;6X=adPzu~u_#1U|<kOOKQ zBCG)4Yh8Y@9-k-FS$A#98`e03Z4U#JEUS@z$3wYxPDrD31Cjphj1vcmBI&5-bb#Mt z_HVp%ODz9$6y}FK3!JQ#lZrMwxQ!qo$pbM5pm+{mH-HR=cm%}=g~8eIk>hYA0Jtn6 zCNG0@&fb^-32#s)MUoFbsf$pUSVEd@$A$0;S0Pt_K&V?5QM|J`Lr+QMZmC7RujucN zYhLpf8`{UJ<S`(y%u<dl7D!3Ez=~Vk1)_=-)X6pk3=D>rrlSV3=GnQSdfz@muI=~2 z1y=Qpq*?3wuq62Tzz8$gi*TU6<yAFr9vxfcB;Gm*$YYA3l2&S{MVSqKR<kaLYq60I z_3*WDQ(Mf}#VhG*<j0*q`d7G(Cs$84tf}}GxvOy2{3Jkg)M>B~36!vJ13UY(-#pp7 zl2@_vTMZP`NC$(2IRBNPsN)iZ-b2UPSNI$^REiP$i?R~Z$8tn_MNQPMHxm8qbeo+T z?{J&4<(`|>Kj`Q<8_;>8fTC6o$g7rE6)^d_%Ukf;0o-QjxF6GcE8lSOxYMk6wZ(gW z>KoSI)$9c7nj0@q@<dmkO0Vr0eUR!F!qfY_`S-2!y)&xXn9vVe0E2L_Nj5}V*H!<N zIK87F@v%V>b2q75>EB~&X1ZXj0ee{0%mb)>$xnPGPd>$Fp>6yvqNEY?74O}MHUEL& z2iPYtqUeMa$SKB7nBlzgs%1b?C1?x0DY5+Ctit7Y-rSR={45F(g!G{e@PP)jL>r|9 zfU!&ibWbt6o`-nq?79W8a@mN@(&*$+=(*~qHQ<}~^g`;A!o<zOI)cIyS$L7#-ta2s z6_Jk#r^s^1ut6+MeWj}6zp_#NIBxXl7lH2kgbbvCfcLrj$Z?Vgsn`Lrr^Nk5wEoB@ ze1v<}yc8%L$Pl!I5gigOlHIOI!;)|JhGg{GqCiRzm_V4N)yjdi42l*0W=EloDpKrt z3e~lfs|qV&%*bKbualyVFrSgA)l-CuN{CHDh)vJ})K7u-5}WI0==uFj<TNE2j9_h0 zz$06a91!e4)}ZD^4N_YXk@v@wmK!9r(l!yMS+h_gz5Z{Bf&R%5{3KEWg38Yz;C#q` zRjOl1F?IL@A9?NwM};1|T~T8Lu({;m1T)XjOAKXo$RPLP7Zc<)-{Mv%@=wq0+T3Dr zC&c^vU0L~6c7+J5C%asX%;Zij*lW5A_PvE1>C#9`X@%D<As`nWf0Fnx!zCY-i1<bh z36+_v9UJ@=V-u?Z$r=`B(9^3*&5xj26{-p-KwFMK`D-3rLHuY-oI%1<i>t>5Gwc)W z{UqXU#p$&(!l+G%_QAsY$I?%NhA+Lk=~AAVB`?@M=3d-&3b%^@mF0j^XhS6PPOp@l z5wLpa6(tGc8_rJ+vhZZjsSqniAx}VtcS5A9NFR~@xos!-nG$7%T%Kd_R8u@kPf*Cs z`wuF1(WQa0DPJIc1qKrzrn-W;fGP+mP>oupC45(uuj&wnskgnjTxzS!TljfnmJytT z)iftB#RiCkrfulp4e@(VNO$-I>#c|Nk*g8Y{hb?01=A`Z-f2YLIG?(pa&Q!qG<!oE zE1M}~1+_8-P6$kdvpmEEzk3P?&r3a{PE#lBqq_uHsjUx>taO>Es^`h9kq9s(d+e6l zcxYf8)&K&0P_2Jd3@AQuCbu_jWQ?DZ&KV4ppGmtR2bDSYe>ycA6*kZ#wLp*6Ct3>K z@GO`=4r4Hp7ggzvV}nQWWc~Z>-z{r9Yl6qL@T_Tvhlnyh!Q;t~FO1M8YW>==TBBxy zB66~QWb(Y-q)YkmXK<!N3UYd|+YPNTVR;%in1O(yDU&e;7r11OVr4pGI*w}&_X^+C zeO#t#)p}wURZ?|^#iXnP(@7aNYqL7faun`4^Uo;YXgMo(_wJbsu=;1PV+AG}+dCf@ zlLv+d^BmxEGi3QjaoLLV@u~c3w3wLz7DXJ1;ez+kxJ~me!Qt+Z*M45LhS+)D9kzdl zF^*(fEQ!?&NDOerdm?@~#$w4Zd0J*&`P!y~ew@~fRkP%bTcUQ=S{C2R<!Zz7mj=^Q z=<-*1D!hH>sF=27hFqshsTSXA7Q4$Oh`#%3rrpzNMR%JNg=}{n;M_$Gv$JNISJw>m z#GATRu9xGbON|Si)Jq)0_EhKnM#`1a9B&0rS_vn@%*z$?F=v-cvg;+wzmy--48V5f z%4y8EYQv7@Q?ZHO@`ZZMw=#q0OzU&uqz)WizVz?<YpsVy6CCbkKPccD&OqgeXSqhH z(fP}niy5PBpDBJp!fD@6qg2~F|7VGj-o1g>Do>xuRs*TYSh6e4gs1XIJx}j6w1c|S zj(0isYol>@Ahsu+Q?YREb8rTmz&Jb#hAS45VZ^uYCgW4#L~rU<R^~Is20qDWd|N6H z^8_177h#U1s9usLen}vJ7u}OV7E6H5iglN5+otQ1)y}depPHs!_v%R+NK0)vRK;^r zvz6}3tLAOVYRj@`TT5oGZO`z~8_ZryFsz@y!>)lw`sZxm#qIqfjq+7N5D3O^ZjEf? zR(XDfZD=MBh3Dl*)2+ME&2k^@lusEQb&j6xy%=EQRC#gLoN?qEar8Ewr(GL+mt9+h z-&Oxa9(CImDO9W|K#IF<TZ1CsP{XDYAZ?vIRI{ExunOeQL<Kbp<a%wVN>$CDsukhn zb)^Wv%j|Zqa?U`J%|9#7D4Tm~+-KlzpV8+}4Ig=R3kGwCEep0FEUi6)X*8^#BWd}2 zbpU<8Kr|m%M^70GYk4&e8Ef9lSow7N=N*8;p3MQ57;7B7A%_6>je1vT);l-~D%6fc zviM^GM1BE$9jEVc21@2aOvL;6h&c8>j!MB{&C{|~c!NTcn3c9T%xLA|tmTnYxEa+l zrxKl}u{d4ZY4RwnespQ;ZA^Ldv7}rl8t8k!-l$q`mly=}f19`I1i9d&HOGU%`!=EM z*+Yf`RHBaqVgs?|8e&tDWp@@UtzYZANOla*s0zKa47uq-P&Q-{=Isk(bfgA29QAgD z*N+3P1r-E<Jsz>kh_k>%ve=pE7NQkbiGn^L!`3^h4TnaM6$?|@u~4$sIPX|viOs=f zGfK0-X6_X84>5y%%Jj{|ru{)8Q+*L>v$%*f=_vDQ-Y^^}D7NN!w$0w>{mC%rcrd-( zh1%@@7!I&inm11uE_|so^Cic?&NZ@3e4S_DA2Uh)iX6F#mm69c_$edkPXJr;W(xb$ zD?0?s+x~X%+Fq3}-z6yy(%zS8(2nWa<WR)?`=D^9fBEG|qzt=PXdV+~-Fk=-J^{aZ zUWh3%)6r=Y4!b}=l)dvkY6~Nn1V{`_eDz4)`rk+^L&obMvr;{JSI<Ns)Vdz4^GZTf zmsFkiA#VqHq{J+4Gx@G5)e|ZuVRvr#6-z-OTyCyh+8tKjCO~T>#k%J$w9|6-{Gz%9 zV-eCh@Rp5rQ#Y>JP+Ox8Y_XBZtCVlLDW_ZdWD~@8b8NMpXkF^HJEQqTB;}^#TFuQk z`US$71aH_Mz&>ClZ^p6zp2~@DVcSs6lZARA#^AZE3^?fQb}Y^0)Us=mwe$I$^sB+< z0CU9PjLomt9Xg-H8<G2vQ1vmF!C2Mkz?ZSo>MjXy%0VGvZ4kvIXJrLn5)=A>=!%bJ zB!7Z8w|+ih31a(9m!4pFhyAe#dFB#9TNP1sCuI)B9rzaALcM-?6D`P~cB}L{o0yTx z*pn37<<(T)#q9_m8neAI>2wjY;KQ6JdUc#<xWh}yzFg&>^S|wLZR32g(w0X4jshIs zkWN9b<a(}6od>%xqn@X`0e^*XRBlqOhlOPY%=21$>7PhAqsp+I9uE+xbAM8JET15) z?cqYVeWh)NdktNro<IKQx8VtM@`T6QfoZbJCF6@B4L!?^lzS||xJ!_99rcA>$stC4 zvO!1UcDyiDq8f*{?0Q<W{Y)7>{kWsFy$kA|yYNoATN*OrCMkxFF2x(DH{o$89z7~= z#r&!YcrH6Nl8McK9kj!xkI8@SmLq^J=A_$8Qndljl0yr9jd}aL3O<~zL?gf9O^P{| z_^x`|Wh-%di4CT3&Us8%1i$^g1JnN5Ujvcmer6KxV7u6HiS|@Nv8doUX@_#Y9DDqQ zbB1x<$17+-<{W(3FDYyA?A#@0<ZL9y3{QB<HK22|qp;-fy_W3kT4_)aD8#}y2Cu8D zu;p}}^nz8~yPFfZyk`8J*G*2kR+_V>bFTSbY)~+0J)Y)M`1q-YF{8GfLlF+ByihI` zJ;36Jftp+tIHM3Cs$+;k9xE%VW#^IB8F8f80i5I3WxVZ{@6=EFnuLBBAkU_brn=mH zRER3_UDWpWSISI(9+Wj_BK}_`>o~!KQ19L*-QeyUg{{vSMhKw*nNZuC0H>I~w~aJu zCG!AG_u#|F(Awwd7`;r*8(M-qta$)$+{8HFiQ5u1&A4m^gKh#YStuob%uvvwYQ4Xv zu&-A|IDhluO`3&S<zPc_91ac!3|ra3khGRcQXbKCd~N}ga%bBf#QjK`bPyNx3%<@h zxJ*%EKPf=E<bJo(sqV_V3A=z=1pTW9-m-`ZlL`)fy2CM&rDz>6NWh^#_=My}ZPAjV zHWqmN<=c}1-#B|pvrH?y4MdBC*?~fU1e{y?GnOOnZFtCcyof{<7eq>p*Y#gVDQh#B zA#>jg^hgVS-^g=^*H~OFzq>zh^$Fu?ew(SRY6fBbP=p-f-BmQ4?g=}`xu}UCAM@L8 z@sZsSqlzs5nuxzg91PH5sTa0a7!$icipx=;VvP!Klyagk$?*3mXB!G8Rq%Z)OXUNC z-J^2y@+bJlAhm*z&uD(4FXa;n9tiFVj4U~r6OX1EL{eef0B%bAXWX`QI)tH4*3C~& zbEbtG|4JEwQyb^kSAF{<lG<BZ?>v8OP&=2}3{MB4n$vJQ4qs?z(J=O`#~`vd4MwgH zyI%6wJA_s5{O;-B6SeC3!>=ON_xNazRXUnego!ydMx5w-ir9Uf+-{<({taryIB5}@ zzIjJOR07#ydhyR@&jH*VB&boQNE2dEz(Ar`+>=g@YYLJAI_CQLgl1+3_pF-WWAtir z&DwkIg71+4Tc{DK8tB^3u0v_HFIh&VDAW~d+}OQTw=Cz<Gh_lu5D0)PzSXj<KQ`3y zbj?m2LSJkP63ec!-_T*SIEkr=JftPV?vu4OzHbexe3W_AzR;CtXMewm+(-}RC8)Y1 z*voSIA*eg+`YJ>!!PqkA2Ku!F6ts&r#k5PYRiBEyRYg8!p{tN&J$Z0|g+xw-MgSX3 zaq7AO6QIW=%@XbHZzK#rd@{0bDd)be<+{(3aSfyd`$J$)aAJKqA9L*#+&h8z2Yzu} zj}77{yRO~NOOagA#N01TrwA*na>T_h76pb8DwzFvib9FDNCC1%3kQ*b4;CYrcv|)a za6Tc~yyb8Xy71fU$Z=6qal)PCd|}mOW1QUdWmiZqjzNIqpeoeH0HIH&o$2bw;?mY! zHlvJ)b#J6I*<`TY0q;sO)m^H3Ptkp{fAo7eEDH79En}_PPqli1)WCw<>(|~EBmG|x zPXoEL7MFX|9(022Dbc@#HQEh+qJmDzL+HDiX%EV3`%8Vlhe!k`86TrS6~*fv;GKc4 ziE>0qV#b?5l%Z0TCcP#t`5Wmb>CZoUl_eZnD+Aw&NfFq~#!fQoJgT*BBhh`ai<Y&P zIyEs=rL2pC4*Q9YFTF(7HVEBrPZHt#Ufx3t4$5e3dZF24@29YCfc+;vC|Y=vxKcF7 z4qYPA@xdp(M$|ba!j$T39qQk~@PNLO@)(I7?3w8IYuXUN|G+a-bx(uM!{zWj6uL|t z03$|0V8QQ?9A)C+zeZx1^lIkNyBCY!#0=cQJy8a>KMN$(O?cL46@Yq5f2iMURdAz> z5i2hpquKh52nZA84-dSe`*Y#UkJ|A?RS$SmhZ6`G{ZP@Aqf$QM9I^-3^ipxVdywjw z7hmQel?dJP7sO<SMn#M$ew(c|E^E4-NQ~#{X)6$`RE&<34BtZAx6JXhO<FPCJwbI+ zPLvU|P44<g=E_VJKx4J{=Uc<DVYy|m?C!e5nJi&^b;6ccn3%z9x#&U(>k)hyi`$Sa z!A1WDUe5U<>+h%azE*bCY>?SP!`Niq_dO7Uyx9E=w}H@HHfUtZZ1nIMcyLRbQg$Kc z5!D}X&uQ4P7-05Zxf_p+L0Pk9jJ3~A+-$h>%4i_X?Y<%V^$X(f-y7jHa^#I#b7Rhk zHkC2zd-1X!|2Vr2GKLfx&`YKBNt_0`b7VCd4sMtyga3ehBlaKd!f=e`Gxgqq-zUrb z)j}HWQ!&sOKKDw}Ws4?e!#&%GJ|KodGfbp>EIRjGjtdLCo5CYz66IloCEsu-^M@eK ziakZn$3gz?=Yub8f_xl1`ie-wkF7sUF(PA|GWD2Fe23B7ujlhl8uInY9+rR+E%lyG zK4BKcKd;x|&S{u>UAvWqi}U5-*z$Xgg*|V=LX#E`UZ6M*)Mxesa%eObRpcp6z#)`+ zP}o1avQ35!_=IFBK56Dh{PaPxIG<Yw=D_2rcfz-vE-g`Cg5112nc+r59#y(WW5P&M zyq{Sx78PXx9bvZb&yZqI2iAKlJ<Ew-XZgfwLMVj0heWmpY3_U2KzQRAx(&`R@_B;S zh;;bFKmyDb1u<vNG&HUtTN-jBv2E02%{1a~jTL)`sf5!*bAH@}Y<&~QxJ1z&CBy{n zohbaT*r^g7s;!9Nk*J^AAh(IBc#G*g`WZTqJnexnykGZ~96sRv<uNOPS#OOt1cHZ$ zH;-R45(T(jdd6(XoGtfG6x8mRxzEr=?kv9pDvkEFXBNQ+tVND)r2>tcYqC%OTvq4E zXK<$d{%Ao1;&M%{bV2MR3_f^lz#NBxaAq`4LCku@lRL!3<jRtv4_7-+`PXjTanQCE z3!@+OC0?W{`HCktjNydQiWRHAHrT2gocPbAQSVcDRO8pf-%kI#paq=i_jd||KClkH ztEI~DumwO~<4E=Jy6P7*Yd@y@ynmy2TKRlvX`Hd<!UtsDzcs7Dz<T&?#9ochg~Fxg z6XW_N_rrV|fu<#CX7jhLXf$TYL(L3+BYd7D#E|n)09$#-yd#4A5D=E2(20WBykAbx zovYs%VqxpM_3fWLu&r1$=k(TTGEy%f)fpoDWw}YLUIo4pj2*c^#>+gwa)O6>D?BIR z>fkqsH#z|`h73iMf_c=fc_$9u4GkaU|7Gbj8Sqls{lZdJ-3YDYG0Z``^y3(0pO9`q z!r+>aw%0mDU`T_!UHB%5G=S%^b#rqVEYe6B?*e#9aTi0MGiJnWpmofar;GS~+0qq( zE_re0DcM0`jw*nxI9{V_(}0^6y0VzBy&K_f_ED%a+rE*UlaSHRj=ck@63+fA-hgH3 zY5u`Sncd_D6y0;?uH6r)$KD}1C^V>|6KvmByn*@bqxL89?a*h#VDWCFJkJ1MIQj<s zQAHBo`*I;0LBD@G8ZoUgz2`*Dio)ClcZwal-S76<B%#?t(?ja(7(=(#0GlP8dES-? zr+LD-s3^z~8e;-|8k9u^1C?wqkv)0g9Mx@DhOXdI=AzN*br~A#yx79ccwh5G@-t<= z4p@jm)HO#FM63;Y5q?g;r<#(0UEMwGzYk^*hhX@$z^_8HhM!TnI`!AGj3&T3N-5N3 z2Nhe>2D3hRkZz25jTPd<{!~i~mj$7y5^hhM#L4puJjQQpDW|_Y5fY1$jY^A#k8f+- z%u(2^%P&WZ9g$#j*EpisBJz#O!52xefI6{7l@-K^z$8<ag1#eeKcL*q;>YeIk`?p6 z?U1KK#m%4H%Eqdr0l$CVx62!fJEK?3$Z_xA;}9N6?pGy(rpGsPrt{W%5OrY>Sj&du zU>VCYybD29N`-_u<i;7`fNV}3G<ZOZ$XRB{<OXvQjH!UEP%`VO$CwTo{|!$atOJZw z?K55AL=V&-N$Z{lM}5slS3WIbT$AIArKB{B6YTGk-GC+A--BH;yd8tlLnQ{_i77Zj zNQ44M^a=+~hli$Uv~`DXHs}CH+5i6QPJ9!+G_#4)fVt^M<5=P%my!J~8Ibrb$>;=t znsTcbb=Qd~r^}lotZxf9_vFe81S>+uIzoJ=dn&^{0nd;NUg+{DutB!!w9yRqiFAN< zaTk}w1Gmcj_HGUPc@yU@>&g8Zz#2FN24q^dc2q!#Sh^$lcti{Xp@~zETiL4%o{{ay z4n`jv{jqQV>zT*(V-10wJ?F`7O2qjfx_HeSqHa7I6iu@^=E)KJ_=(XlE2ck_KfiXz z`^wwIFk`QLoLv>y5(NS)Wydm-nZZvT-MjM-e`4!~gLz%<dyRT-%NScAKd3f9`|JI; z)RTwkrlY0i(O7fC^zEX(z@V(e_mS&AI1hmTK}h{WJO1<H{I~kA6H?X|MkcmSCiMRi z_kWUCa9PjmcK^sLQV;+D>Hn{|N*=b(2JQsn7G~zw|88d!N0S7(xGV;Qk=q}XqHI^v zW}OzE=Tm=;ZKUYvCW}}QX?qd-V40%t7u=+oAB7T%@t5w`EDz+Z$0_63p0KV{yk1^j z->AV~w>Jyf`Xy5)89DKavLuJub;Rf(UAd1tps@<P9$VsbvYG+c`KM>+Wkh%A=QkiT zo<At-L3K0cqr?>j0-EJdJewR_?@~M#G`0n<vuvfJeC9UHc~9q7`0hEF%|TpyR*jXq zs8ye!ix-{%%s{;Z*N}9hudXi)7H19b`-lb#%+ogK2QS>|Ng5Dp???gArA<o<i)J9? zTbXp;&rGWxyfCBBh!!&SywiB}I_=g^;gt+y=v)CyLkKw0u2a>wJ33bJf(+QleWK0w z^gTR2m9P?Sk1Rxr;IOBG3ADp}o%aKz$!@L~SD<1-$LpC437-PtgJmE3zn0y-Htx-M zTClX*==Q!_7uOTdtS`Rv$5<GSjJqF097_FMaZ&8)-y5<4uY2k6<8v6wL@HcVn0HW; zl(`;*Na_nvb5#(o+9rlo0MsP3%Xq?2&Fe$-x+I7OeNq#ZP{AO*luomW5blU)TfyjZ z^`bh2D97GIsF_rN5ZxLMp`FRr>Cw#Gi>z}Un_}^fDj;(xGL*^6RCsnyR0Z3Uipnte zkd(p$QOZOiHtGd<@sSkzbMF3BMIOER=V)DNQhp5-uZesnP)rHrF!XED$Jw<`X!29? z4zllLfx))t$Xd!kIwWv+t2=Z?2UK?yKZYYB0>Y6mA&KtM_L3F5#ay}#5aq`z5F{x; z*FxFl2m>VNP_8bJ3PWQt`V)@3s#iT}!3#J&R49H_z68Gj|FN+F0FeJ7h5xCRe+#<* z`;Bd3V_;_D^uLMZzsFjdxHD+@ClZ8zBH{Qi$1?o~ESfmd+1r}=D9u?R3t;U0)HeqR z(g&&}8+amR?QDF_E~d9`)W-a4cms4QpP#v5(b(M4a4VZ>Ez=Z1p`voX$G_Vb0Er7M z$)Cpq3IrG7rU++8<aVbJ%$7-_5ag`C^2WdI@%X&X>Uw{d`fsGYV~i+a*Dct#ZQHi( z?$fqT+qP}nwr$(CZJYPJ_vX9bWRgkl%vACumHM$$No7~o##(F8e-SX|Fr=~3!M_{$ zhnb_#o;P%U1XML@AstDFV6v%%D=l+D5;L%>T-6S+@?+!~n5W;~dyXQ-jFO$)eCS98 zf6%jJ`rVS~dcC40fRf@c!k~CBHnkH0!vjh;`b1%7X0L*=^L#IO`n{l~y@1p?tp|dP zCmb>@t)h=vjaKbJv96rDzIzvqz)a{&3JNcs>iB^`7zd_+2g-sXL_p?f*p37*HZ~9e zDc(;g00Sz*o)RYk0jL^u-8`m;2Gyw88Ld*WPO6+1Qm9(>(9$4>165FlEU`z70>vmS zuhZbqGPLH6x|ZNb%?Sn@YZ&O4CT${XM!=oKitA>4^VUk*S|5mfGibc{0DqtMja!+y z%N!l;-tpnQjs4(=5MZa#^gKgg?7NZH1c!R@5G7K>Mvh^R6oq}|5LkLJ#aMZU!8_~V zXGu}jvEuTAovNJR%08@csv$GPFtVYOrm|rH1vMmRP?8%_f<(w)3AqUC8kr_mWUZ#@ z<zI)t+igE)T2@yWm+ERbh5;w!(qgXk`!yc4H9OnVMbv8gCPBYGO}iGwqq{DKlM!-v z^}`D{b?TY6uI?_RHpa*01+Vp8ESz&@EL2+r0?#`R^1owgU#vP%e$}(7^4{q)_$B1+ z-9|t5gEfVOqJMG*X>C4bZa@8h+P`f*@kc5z*~O)weF}+wk8YO0#Zz2f^qzUXy?>vt zAG_(r@O3wRn4V7ZmR4O|sEOpVr@T7y!SS{|<J?>SilWWh_oCH$iQf%X_=-0&KRz^` z7hm)LcS@oB-%^U||2z%;t>*q$9Eks!nz2odDR!s;0N)A#0IdJ7;{4bC@4r>WWgK%g zV$nP1uL!nSQ!=EG!OQO9sv5tD*k$LyRV}q$l0``{vPFA1p`1zI))>AM2_Xe-=Radk zYOC`)Iyx#kiQlg+!=49`6e;pSKd)6|s4PQ2Dk0wdV=R%%1KXiL`MyEb<or+90QHV| zH~NR=Qz7OolZaadh{VYeiv;j=fr2!Mq%N|`6{Gx-hXjav;N}>lif)hZTeBwThE#(T zccByXHQXW$$%1skcu(4-LS7^v4rDQKaPUL>;_`f7d*k4t2ai9b0K&c)(L}J_j!?j^ zL;8d+X$<!sh$M$Z7>R2F-(>nL<<wXcB#X!o$C1$XjwH%ZZSupPh9w0-dAdaxQgDs| z72~c22|Nrs(jXi7OaKE+UsmyAhmvv&SN*kv7fnv00LYRA=@Q0di`bYS3@GAyas@I* z6%wI}QTl|SJTZ!t`PNCZfhc0=k`zjWg<e3ud#UkMCX#<T02JcGG<pDVwt$5VObRea zkp+K1^aTneb7pg{ZbJzi<(NLhr(U1Kc1IfD%#hmz(Ha0gH#a|T!|DIBLKw!wF3S{5 zsDBIkW%lvn+uC{-5@8mkxO3y)gTs}&I|-YVcZ3V2hc|BKM+v4`>f>__hoK;`l>2Fr zF!}$}Gq_)8fNPjCJRnOpa@T}$OkQ}Tkq9h*6Na_>zTI+D2Tecy!!!f(O6xDSjUjqS z1RLiIs}`SXG9<Nttg4zXN8c&L2sFR`^Vbvlq#B>Zy$NA397lI>0jxbOu!{1F9*Gkj zu?~+!I9#H&ApUNMoAWHv*Wtcu7u|LzY+;d`cb+LoOF$o*!V0ur#!<e>2WA08g!=l@ zJpR~_z+WUuToA{Y3B^%?QL)alJ*|=j#ah1rb}R-^h00(9`OT@-+HL(_JRCm*lBaWe zUjsV}Icdxi{{#OM{Cej5s_5aBC_sg_792)w8!z!%Vi?bQB!e%+B4>ySLdzMibr0P1 z4gYI>M@U!^MqeI6m1piL%q_6SGxRq**E=Of<BbNggeem=kNmp=D)OBKOAZ8+W{#9G zNK|c+0vON!SkS(-XdD%_MH7519^qUatOJI6jKxw!9%yd2E`T1RjEGz%qL2sN&;ToH zv@bm@WbRrJ{@Nrxz=R>a8jZavhk(#6OQI?5&TX#v)E(sn*(<1&+v<b*3Pw3%ge9s$ z1BV93+N!k)x4O{N?76=pt{<4w7E4JAB~&zHf}|AF?&)q^G4NdOF?Y}Yw(b(kr-ofS zWG(^4e#)8&(vsFBA>STlC|!G&$C{NfXq^ahVoFOXNdi-mJgb%}29SLsNM4aFPv<T& zFCeKN`XXgt{a@!dq-9|M5{6tKK}}sR&Do}gJF!Q(5q4!K-00M|q#>;OIV>mJpAwSv zFXyo6g96EFP4ED-1{nt#O*yrY3JRMV^XRj{aozF+P3_4?7t152SyGN8=G;znr1?Rl zY2L6o7L5Q*ce^z6lmMoJ=QCCmK1Ltv%f5(gX&Zim0!lg#YCXsIOM5&Yv*XB$RXHxi zva(hHnubARn9XknT5F~Lc}6t7eSGG0?qU<`CjC(vP_^r_aa>ICx&HVs?j(QmUS^2x z>P>HwI~B1zvAg_=%rAwClKR;M71TW@GnH64CzTU7es;RE^Oe1Vxb_NIXz|en1pF44 zCk8YhU(BQhrCgRgnIUUT2;8x4;Sr8@LPsyiUtGREu(7>dSeHKIDV3fyN#&W=#t(BR zV4H9aH?9S=vyOc*+yMSu|8oP_Z~~+=*I|H|JY_fo@POkGT0A4e5eY6^73-PkQE{-+ z3N(+GR?wD}ZawXU<)4QLK@&)JyX?vcx55I2OHJv<WsifTstSUU{;vE$v&fiQymBaw z!!qgu=yV)Q<SN>_O+XnjPc9#bzlffa-Q94p&0=%pm*93TQMq$X>R1OF7zz2f7X9v- z7E03~f?fzD7yopcctdFv$YIV#nJ@#jd}s>f5y1GbZVI|c>b6+~qQwFDT-I*GkX@GT zEz9E5X`@g#FjQg)xL`LAwp}d&QohP@j9Jgf%)u{cMep3MtR|$v?p+g8sfgte?_i8@ z?JPt0$uxQiul6jp#hv!nyg>z2S+55I(1I+~_Yg1ODb+a-ftM{q=Vdd)n2O{>huQ6L zA{ConGWj?VXNa)M?DoMMG1npzB~e0i2t&@Yur%S`fL}N*l3?zdYa>y>>#=l!aVsyd z;&kZz*6y3sYBIazkkh;lnP^%8&afuJrHm%8qi3mYID%Z}VCC6oZpR6L_agBP20<jb z(bX_&&@jP9Fs;Va4<O*wfv=Zb`wJdCX7a&-EMG)z#~S^QlL`^jaO@TjgVXw%1Y9d3 z7{$BXu}Joa;!F9$9Ik1APP7Ef(Y2MhR^+>QSiX~;x!F8oT*6)(FA`hNO!)($2ECfH zE|}sP3HTcCqoIm(#4iU1`jkfiA^H>BRSxuFGZIz`0W!^Lgld-5Z$R*HpjC`T{X!Zv zT@mcg)4yizM1RhF<LF(&egmWO#ckFrva3v+&L`NGF(b<ZtfS1aYn{?2W9&?DvV<`Q zRg3dlvxI>O`fmV7TSpIW)~*Oxe)JH+mFgC~aW3EqZznSAs7avfRj_71fi_?xuW?*& z7kRuhLa%Gea-MPVg}vmPBmta(7YA}9aP%z;Skeup)lA171PF<KnyA1nmJiEuDrOGn z@n%%iv>WjObI)H{f5@2o?G;a8?t%k!B!oChMS}d)#M3>A#KI{2A;Bpax-d`l7HLZT zfc}m{a@SEsKZq`8Q{J0@rFIKDY3IDa-OcXg)cXugVs3bj0%>~1BM-(EM?IRMX|+OH zcZK<Z?<E2ol3k0SbWgB!N9cZ%p2Nnfbpz)V<(xbDtSpnS`Qxw68j4lsL}ET)Tr>kX z?#M-)3zVF7D0k$%3;`C*aj0(v>iAQ}G3KZ<+7xKtAN!#p{h&a4Wb;L?+}ZRLb7xFZ zCtj=+uUzyvi}xDCP`{yryct3M?v62L3#dXJ;0+7dV<~Qt4_V~8z9Jq6+9A7{vj=hJ zpYaL~LO`bNgJ6bqySyh$MlgJ;+SmNCuep6*uH_fR`0C>_3d7>9cwGIU?W_9EWXBTQ z>m^0e)#(j6^gfts$M>J_`F2qrUK8YZzeS+bTDV-<^B8`50J-G<%JiB4r7K^q;Mke8 zPGM6w!Rxo;mD^HEBymXKV7#F^Sq_#`ks}_=KQS?@*H;uQ)pnkNPC!q1^s>7$L|UnP zM8cCV8n>9~XPZ#GjeWc7Xw;sO>h^X!f|Ee<o1c_*ffcP27pbIkl7$KjH*L?pUdYLF z@wF3Us)8!Y82C&8f1*0fmR=|6Z@dG5q6~PQ2wcrSHTMbwaSXUs38^jYlfDN4!u+4l z3;F%G`5;18;Ry_s2jc7{szTHnd-VK_5l%M#mZ9j128O0VHpLjifZ<GSm19VC-20O~ zIap{2O@Y^Ia0-H~yKoK?58-2IZ-pN*Rgok1E|2GGMP#A76>|qx_DYy+tAx7`LVBNI z^TABXLX}NOs+`9MCh&vAQVy5SZOt1ffX(P^+;nldReKYdsN7y^34q_=dw6rS4XP%O zTwX%L#xV&{wlLLkM7@|hk~ZC{_4q<5f=<dYRtfPl8Q&8|OPFgtcu|_j4#+u5_T&cF zCEy6xsweOn^zFKVAwQtTnf8Hy%_>+n+ObX~lg^=Z2GyQqHcZi}h0K!03M^KN5s#4~ z0qL@TtlhV7Uncnha0m8<V)b1UJ|!u<A4OlCQ<}yRLjxUR>aQA5?-^c*A4&byUSb@8 zl}Ft#2tfF}eCt_oM*$*_XEz3<NH)WkxIN=7nZ@9gZKOn2NrG4(D*H%t<Zx+;Ou62n z0ee$SRqfr5R*Wmi4I9Vl@#<Vk{pSgnOKA!sqYK=WGeE4!SuN!9oX$h(XIznfQ+7U_ z(k;;Cn+IAQGpz2q*bi}8|60`SFiV99h|%q|H(Hg64Mc~9(X6X^f_Y_zT*r-#C<Hvy z{s#b|HNAD;YpEVoC<>sBW6OHlMyvQGjr^)*zW<|R3vJ0@+J@3u(}t6_A;%y@WB74i z>l9PXj&~H|KFo0nKc#UksbrktWawreLlAG~Vg9gDo8KvydJ64tPPkH^Ay5uP8g7jV z!>OTw#`gx~<`juatla62#EjGVW)-WrDYEhLQxfTEv6JhtyUFN{vAV9`1S&^B#~f(z zgY~#<>;NjP|5;_G$2O~fpiAX9fZL8gJcb{(K5ko19O1j436n)lzFJQ0jJ>sL*)2K7 z1jpBAF#ta|z{ClCVE(dQ(S=)|v!wus2&-Pjlw<2tdr}rl`c4c#K<wfn%MpsATaV<a zO+pCBOwM3hvHRF(7;0l^T)-Rg1eqn|AJC%mX3AB3dr0|X#gxb}uO)CE=h27LLl4t; zEK4}6%J$9?3!v0)Aac85P`5hdBLAq!!_&++oDmJdvqNKbuoEbK%#ZEovr1;W)vSNt zRa;k5lq5}^l~i-!5NLp6u!trE94Qb@&MVSz1#yeNbU?do_vp!&YE%@b=pLw$zc0L; zQ%g35x^7~wzARaTb#=pGUbtuGIZ=(C#UK&knO$p^>8?B~U%N^TuT#9DLqz&YR9FMu z)e}{D<lHgU*LmCN4L64AU4AGOobFV{6)DjR%N0~trit4p?jMn*NZesH;&8&v1rVP6 zs^j1cSfa7{5Tf#Fqv=^4QG21Oe{qNZ-y!3%wzYP1u1MFI_))Sjw;?p_FZR<&V|^`A zS<e`_-;)i1>?WWtHoaf187E&_So`_S5b?~E1nGqUSl2!;*=KASl7)^;%4Xp@5y^!K z@7z`^=p#-dmOi9|35c>nVIu;qC<Ird1ok3Zt9tj0Uc9&8<{fHV+AK6q>FK%fc-8q_ zm)CEh?98paHI3uo2F%x=`146GuLTf+<~Zs17p;EZJx$o0ICR|bLRlv5IX+BiG2G#E z?g5BI>a|S%=vLQrl|!-f8cw^)K?@oCiS0()xd$%TI}OBja`>zoRd^QFB^-*N(s8}A z@u>~kM@1qZR#WKW^g&MN7=p{r2^4p}Bzp}3J^DuVj!WC6N@X40Ba!8_=|F%X|DUPK zu<s;_l~TtT==HFP>l*)Br6+dGhMqJc?ytO8&#@SLFo_O;Z#FPQMga5#H$h)0fL=FI zqY7gymzK3IhT$yS6kVHX@RY?#Ga4dKj=iy0CfGuATZx2f$e-*(=epr4u=b__a~04m zupa)B8b4bEMYX-#=rTwT>zO{4u|8knxuhk|J?gC|IbxwwnNg@r>v<N~L}38RtLP9* zXmjXCy7Mx(=M5H^8DxDlwMHYV37LYxWk-?y`3)%c6=Oy1YH3jLZPiyAG@CNjcmm6x zsxdO%$GoTsawE+9>x#j8!;E)jvxaK)N4%cgmG_-ZPfIWE?(jDYZ1tMG`b#%NBUQZ4 zjSHF}?CrXS1Jzdxwek!AJuXL=fXkuP%0iELsk@<xjWF7rl0iRdst$vV8(QNqF_xlG zZ_m(UNpbt^70zC<$0V^jwZJz*At3$^x&i(E&P!H|I#0}ynrx)FCan#99l@&BPkP;d zT4q;IU+cEBJ-uHqk&ls)yC12h^txHyEPw+J2_GFkl(L2`mCb$c6=Hx*J`Y>X4rP;d z#O;uV{`hxc0dPY_S}Hgfs@%matJ59N$2gsn?oZ5RhJ&;>AA~BL*<`g`?eb)zK+9)+ zyrN<nj9GV_=*LIauy4&$Uf+m#XA_vD!x#fO3Dbv|=nXzJui*o@7p_!qfI5EZfY!P% zjqCyt0yQW@;cs$jc6L+{S(9IpXDc|z87{{Vre_PBcs!#6H1maUz7g;{{~Xx{^uAU* zKM!MQTYSWUd)x~{)4W#$MLF%L2fVOp3Gv>og>3|=?!tVXBKNU0wP+V$D$zZl@7b1( z^v-*09_F!%ivUvLN+}ZUGCWvnsNvwF()*{<gBXGXR#F|jT%gfPzAI0ASIuvco@}u3 z_^z*-vdy8688Q-32_Tq-d*42B@5{~Jt95Kb2l)dg^zkbQ;PjxAiZ!72Pk`O8ZC1&K zLWd*rUlxh^It!W|+dMLFahms#nz{T#)=`s@=*vOYFW7riGFq9j+tn_FMHqm19q}sB z>tQoa0wysVJ+6c38Z<RVi0as&*$@}RsFS3hJk{K)Ze;v==OFR7v}BL7M@4Z>3Y{;` zW{~?(v&9PI^BM{f_$2R+L!)_yPNn>bQ?|kv)^GUS-K3m?h@vHkZ3+V$8XX+<Dl8G= zeGYF{CbhQr(6s60pSLX<lb@H^E*zvzL7+7_sae2}ukpH#$V6&EAR?|XdH5>N=nO8y z$fI+3FYH4I1Ej`nc>-GxY5a+c*$1;XVbM%QZ&`bFCXZ`^nWgBsq*1x+8qtoa=50+C zF_uNIX9@s|CZWArgLO%3ds3kdjYON81SXSlYE~^Yb^WxvTl`~ouOhgXEGw&Pd`^qx zlcwrW@H(%zgiGrO<TKeY#B{!Q?)@!}Jq8GhS^@AtiCu~C!c>vULfgH3>Wz}i80s2i z+C7RyiIy^}k=psGU9aHv&&RbG^DL`CaHaKz0JFE&MW+45A6WFI>oyU9gWxV##kOL8 zPr%4?nv`B#p9g614XV2u?_F7qgtz**YMhUk<(zBu3PKtt>5Xp`jl#nbQ~EQkaOVHQ z2F!*2;&rz$w{#fJ;aHy}%;<K{XJQwnRyxpP4IYweu?!Tir+DwF_iK5OLCWv01dalK zv_Su4KqP7aG?`?lkm6Z<wtJYnFT7>o^wpktm766n1*!H1`Gp!3IK2Mo3XN;oY7~3} zAtWPRtHVJ3BuWPy9EZ76s3nJJt60d@=Bgf1w_!Z5xK}>+?U8GlcN@Z8+-9xp02)tG zVE2OWQg@dxwNRw0#paEMKSNd~_OICz*U0KJu%1KoFG%G=eHoQO_P8&aInuLYps&!J z_wY8dyY)LsE*TXe+*q2PiR$i%^>0KQjqKRAM#paC)s4R}8Li|rWwEjqPt!$ub@^MY zxjQ~<;6<~mRPQXP1-uUb0Vhh+A=02Hzdk#l4&7FD=X`pSc+0d!WS{>h865g8=es%h z!vEO}_vUQ!QAr8p<@sj|`uEl6EORl8tUI;*X<nuiK<im8bzg<tdl0>K{v^bgi|ka) z&7Z)J{aEDLax7yvre6<L)dv*iWVLRe<_y+1R4p3vesF#A=e>0|=}mn&?7gO+3fqGx zp;R|-+o&Ey1wX86$GNNW7Al>NYt$F$zgxKfX$4ygda_JH0|4}q0040Qe{11do7?<r z<4$XO%3rdf{PyM&i72I3nVYSbNW$V7YOkeXFl=<fGO}@oFM=%;Nh?aJd~ClqW}9XL zc}jLJfbz%8PLA^9=hppdNWaT)J_55TH297_vJ435%YDyzNxXf@)5v{MB$0SG+T!Ua zA<GrG#Z^NAVNvZau00Evm_-f`$e7$aOlaq3$QjMxJNJbA@`syDuHnlo9_OvzI^P%S z>Df@QK%fXFP%uiXe+_9POTS;t56LHyWQ@Wo@tjrXT@FVXOi81&j9j>%HK-f-aP`xF zDfD#rDCEE;^|`92F_1=}PH1>Df909wQa6slE9poskhV!;)c_SunKt&B)-(W6GXxZA zhmEh^DvmxUvb<coM-=-|u%wAFhk(hV@`G}xnKB#aFxcW@Kv96!=FW=m>UiT&j;6Lw z%#O0NkERxCNkha6^yj1<9m^N1&JmXwbSM+azwbYt9C6R#`#SpA^K~3wwWXV$7EUhi zD{yvp{E11vJj|SbA0Lf8#6JEwoPJ)uTT%{*x=h}rwe}OPUoob94h+)j*!3u|NBp;d z_IQ$?NJPX^Qu|<_2(tmUtkzR{ZJ(M>jy^iLKN*>^SngSbvufUVpseIuVt*ETC`c%h zK9iWlJr4i9RO+8=^hwa<Z8Ry0(m7E|sO430fd-8<LdvuVEt^{6By#PS%~yJ6+V9C^ zFjH9aGF>~BQ*p^CeQI9@A&b-yu&!WKm%)JN9GFvox9!AqRt<~o@D_!`p^j}MGa9Ip zu)y(cJa>&<;H=doc0-T_?%yxOZW)34*JfMS*O~+_fEA|-!7<DdOCo_(<fMU95(T8t z4D7vt*jf4=;7M}PY{E2)B29kK$j-HwEeO|!g|sqBi!NQNP=uQqn5S|Zo34)QE?Qp~ zw_RUXY=7!7E%-ca<nKQ}ZZYYx=K(@#C5*Hr#=Ke!ycw3SZRpwhTq2>Nux7{Kzb~U( zv51lQ4c8*bnWKdsILuI|lscdc#4X&Yk0xUa-t3w|f+9L9dbQO+lP2~_V&@JcV^oU< z3h-)pdod6)gRDH#7S<h<_0%Wk9m(7qC`6KirXfP&(B$HdlCyVIN-SLQTE<{BIHkyw zyiYW(i}Q}TIGr^`bK2XAoL=sJg6QPIl~ISXo7W@z0ngwkq}MJpwK$6xB)*BCXqO;v zItH*kw5e_J%>Q0kM*M2lyw6QuN#_?*e2F#Nk8GSYn@Lf>|CUKarBdBe{AQu35i@3X zd<b59y82C95gC07L^D%hLqi}{q&aZRUAfVE@=V4(4+1#0s`?z8<Uko3Y8|8>?Un&5 z-Qpe~JuV{$4M9A(H;nj|6Dy+8f~>Ve2^Pvx?0vjFN;~B~M>Kr)Z)_POwAlqe<8oS@ zP9)7O?5;<2PcpcAGa0L|2dXbx-oJX1qVPE)4$0!DK5exq>Fqf;az77(kjSb8vBn;b z>$n(#0}+}?yA04#(VpH)nAiq*a^LhqX6OKX3rSc(=x@a0F+g%vfI=t(>#^XgGnQ|5 zN5#Ki?l#O9c^rgw0l8nH)wI%b*@a3n`C(^L%gU-4EDsd|C13&;+*~{+@?RRin1qyU z1I<?3XE?}av)0Pmk)fW#SF&VRQ6e*3KO*8o9H4Ar6HY$?pP+&FrI1ZYIG#i9)1GZG z?wz^IF-O)zC{nCkrZyD!ck0@^_YYLIPQi{v68}@@{WdzmSwi0juA@W#tL3HLeOtRd zX+7PJ@9q*6*Bf4aeMPYHbKu<ES{_-6rOj&-NA2=E59_78j+S_Bo%(czb$3}~k27@? zD)z_%G3g1W3UqZ@#gWZ%tA^Y0h+rb#^-D~S<QoE0@4y*I;e`6I?<CYg{>K~)c||tr zkkB)NPeH6H#q<jluv93xmWBBf?ioH*s&lQ03`I4?ICXA!31BRBJ7P(`UQcfmb70_o zctwRP6T<F=K7Y@cqsQ86enIVxC3ma6_|FXG^SJN+(}%EJk-lNDE&`b8D>7*S{rZaC z=No2qEnawzvUaK$@e%g0=wgg0M)h{UNB4~2m(g@+nO`wK`@clw)(CdlyAL7M&EY)s z24f&F@ZOr|hc4o0p608JBSXm3F-2*_n_n6w;3L3gap8eyh$3bxW<8S$FvM%^J(m;V zfwMS+>*IOUMs@`}qX=l$#h6>_HmZ#6**wayK9LP>Zhmebe1<-#0UfM_i8U$jwiSc^ zhYge2FMc(5nWcmFvBt9w<1TzeizL!>aiK9>o~pFt(J~FXIosB^PIB?2u7WG1(d|OA z3x~eM;h$&p>PJg$Jwz!iN9whZSiii2mVdd$%{eY;@7)}viY?$r4n#rWOnwN+Jb5Em zTz$k1<=Lmbz_YjZToKSd8)ZjiC%?J?T`~$+tr9>1{RSUj?r1|&HwTGRIhy|zWgV}9 zO_}#W=YXELSKDm#4bdEC5*;%~0!9AW#?hQ*@C7KAc`q}#yv)WqZEStd&Sy)Maj>DC zp<@?U<(wj|_s9I}qJ>YdX96t|g*N<X_17CxqDZ+BOsRJ8FI!rw!ce>$xw?bqU&n6R zTy$6~?%IZJb3I)UqB!@Q=1JEe9*q~dP4nS-TtnAMA4wDM_0J3&t{yEdbNv00>>?#) zqIY27Wm&8bC6JsJD(XKjr_xDTa6M<37Jgg)2W0q58uXpCo!dU}l{aYA(pQArTYWBC zl~8_7)zbj<W%8~ZJ%9Mdb{&D)Ftk-p;%tHd&Ni=q#geT<&(D0<2WP7Xb%af_;5KDI zE%Ha0Km1(9S3)Hu_T{0^eh_Q7--5_w1}BNg*NC;|k_5e(@lGxkpaaw`_)=k{yp|lP z6y0ax*6=en@*zZ3MmJSmT2~ES9@i%uB@bo2i@1sevx#(QOlib7G&v>$4E1blyLm0d z&T%%Pqhk5YiY85>1NZ_%4Ebvtk^Y#EdVKTQeWwaCYrU~KsWy(T{K9*zj*JYmmH}8V zD?QqsPFH9-58$GkD1}$ISF9!VcSkCcvELF+FJxK|;Bsp0Iso~}*yFS6X>^d%m7X-N z#$6DQoox<1j1fe3b+Qiyu7fQgWeIp66KSC&ljQ2pJupuBI&)F9%$$siYzm?DMv%9> zcL57LvDV(&{d`mX){_3(yyiZp<^Tl?5)R$9IVTQat}<qtPd5XnYlRPWj2C;9*v{V3 zt4m~cIUM3Y^xREPkO#STc>AOe1Uu}G9Lf66Wc$wQ*-VoL!wMyVcqf4^?>|pp!<XXE z#QO68aCC5S_qM%xb8vO{@OAg+n_ZXLT0MB|70b(Wd4v8&2zs4=hJ!h>xiJ*<B~LR- zrF4A(Q*7!qnYFr3FOzrzgjq4S;IprBYj4kpZ1#RGe=m34Ud4h&+{~w@;t8H4xa-bR zVe|Qtgv+}NgG5@B2s}Pb`QnvbY$T|`br*`BC+!;eRR!%&5zgMeI-yY8ti3(Cmz4LK zpO|)R^#6s8CjLfF#)l_gJymnm<5!fO%H-I1YYJ)cS?vuasjPvSPU`0a2F58d=;S-U z-Kmp@BPdtciVsdT&~%KAR|$Gfmfa$@kotpb8pqxV*8r%@K)){qk|(RoT5C~wHiSyG zWDpXKLx4W!T37|mrkbM6pLPGyLfcZ{+Ex!4K~ZT3ut+ON7jd7!S4gpnlRR`6haXZl z9OcutCzYf!20K_xW}}n1ldsj_1S)NZXJ(@V{1-i2r#op@IO}O{U$42>*gPIl-yQi+ zj=^0ju0A+F+)X~|EGm2CPp0I7?xJj*Cl+Z3uKS^A)7axkp%)&f^-h)QkM^H;<nsLy zd#euQHxr&y)HNQ-%{Q1a_U^A8LYAXtneO%<fwFqy-U1H!>Du3do8D1)S%B4!g!ReE z6A6v-S$LBin5)Z<MYqoy`+}CHb-1VKg5wr!rW>Ncf-lq7bLz7n!PZ^C%4nfNin}8k zqvWs%z3q_OBGTA~g7kW`uNAuAp~A18kl7&6dHGWI!N*GJf(U+cMQl}cl1$5$j+eW` ztYPUbivLw1K>d?+0|59>g^+v>b_W9k0Pvr~^Z%zppfmNrkA#3Q6Q`610{-6%Apfg+ z0GQS^u-)W9`o7Wom+z`o=EE~O^?s;q5{pKe!Wl<at=$Bf)D-az$zus>35OUlzn`#@ ze^RX0&#i6!we+>Zv1VXG2iao}@w%)rY@;6uj&z8BZ;djB84xxO2^#Pf@4u<#7YJgK zBt~!6LJd(s#O)JixgmwIFn{wPp^0qN8`r1g$j7~=Gz6^aTS{XkrVxK~M-ttUV8qky z*KV4$?!-&EaIslnU?~%@Am!a3hSFh`hOhc5B%)bz$ne;`?l%3@`1f%}zO2NM(|DsX z<YDlPh~J=p7<@Y0S#sc_8SdPY9Ejy$sFc0Wd|9e`F%vn$n2d_nahi^q_JGvW<;V>B z(iwqO@+7cS#jLv1xLnoaOeFW@nA5OC76Sk9?BD$})EyJRrI|e*VLAR`83L1#(%Gd0 z%dP2!iAt>0I^2}3b#-8Eb1u5aAbCSp>j<#FL6t?qGIk_>iJmp>UX&;Beb_&EFtnpy z?q`~%2U9cs?y>jTW|oV}Ox)Q!c$z$xoNaqw=xo2qT^GxBELR>Cs{#aqa>Sf9LntvU z29GAsKndSxq4C9X$21BWo)>~oG@Khop#|FAKqhRIr<ecuPDNLmO!qWmjWHWboMP&o zCxI$3Xk{>rDm5nyKoJo{n`4kr`|OJr=gS?2WcCSvyFy3i<dJEw8?)wbz??qw>mcO! zoY~`*-&sU_#iMQf`)koE8-$c2n<!yZk(~fagN<`eC#G$r(;96GI4QRMg4C%m?)3*a zRC)@D>xyn6ifp~NqZ%$nzIAxf&$-YX!w`@0o5BQU_~M02I?E%j>W?cRC%C(;Fewvw zVz4zr_@Etve317u5zp8Vz+0m6z4|}lN;|HYg`4efq<@ZjZZc@;>g|dd^iq74#t_-X zt2r#{SZ{ersbX~PxzcWnB>R8Z^2XyT^GR(aI(?Q-HNc={)Hwank|9p<d|nHo*W}X) z9fsCBej$JVV)gB_^Icra0DAbKYVgW%1n*(e3im~=*|h(oGrGC-9cZA8B&D0RJ3-N8 zlGvk}K0=a5ZiU*g>WBt-GBGj^_7rxtXozhsJkT7S3H&qSq&&Kk_&Dnuug5U|+xrwg zQfg6o6(>GubyP>ZYcNf=z{qJJBdHF<S>i{JuOAnl2t+q{U-J3cJQ#ctyCwhn+T638 zrh@vOxWTSm>bFX|oY&e95!ro?!8G)8^ph2=-K9YWowFClv<YpV@lT_S92Ct<jnaZ^ zSexC%F;kAr&Pz^Qa7;ubB8}R7Kp<Vj5<AWXX@Qe*o8bjdw%b~2Mio55ZZ4kx5|&2f zs9Y84VO}V+qmbjEgc!+4gvy7@kArL|(#<0Gu!pD8#UrxIL2(V4N^VAF%B{u|snmar z*N}{-NaJoumWODQjPr-O{@L<xC0yNk6xIEc^gWG${~Nz~;e7@oBrCu52`e>J?~emB z5K4cTOr|}Iv9{k#1qD#n7$hUgQk-Xc6?Ent#B$&LP&!v?`x|0~h@Qm8KTgRcu(AV` zAccKOdU%m%F6k|^$pIAtA$Jf-gUq??7sy^&PDy(Bq)+m7`IoMSRsm^^pEx8Ds(|7Z zAeRHrfH0&}63Z6Oq9$&sw@8_=7Hty-(re7lrt)%x@`MLKL>3Gyh==&rzftEfVnoSb z^Z_}RJDA(9&u?!9ay$i8_Zsqn{3WE^y1Igh-g@ELPh5+ZK&Qr;fIa8=ItxJaG5qV0 zulOLZ$uGEjFj&KjN$JW)HTKJxZD5!vRY?nQzuDQ<9&L7^OSh`j!KA^-1u>|y8ml5Z zH5;<Ft80gJJa;%+mGTP82<!<oI`q1TVr|zMrJF6!hQ0VAa!+fR(gf$`3%sr@2LjAS zk})^NFWIi~dzQmQ!!~&OJ|91@N0~p_4*`zgo!CxIJtOU=3#3i^Rn=ak!C{Rmp_&5G zQ1uc8y|)?kYMO-tBY`MLoyuWlOJ)f1#2=qE@1=36bkBH}PG{<g4LEiDVeMQ8rHp%q zu(|@q&VO{r6#?poL|m^waaPb~bpS2=j8V$Jzzp;Uw4n?&EBrpVr<Fb@LDcbo^UB`Y zh`=os?5d@>O(rteUX|cv04T7)gDYLjZsI<CRvzx+-X7}9N%qK6y_B8+`2A2A>=8Ub z2;Hd0y(T2V;96&FDY2&qTk*1btf4d)LJ+7pMlSMF%tF+w)K|D*tAlD9_OcU(hk=7e z`N?Rc2qoCXjFuW6-l7pf?9_d{3E&S@hNi_4+D4Z%2gk_p|FDe5Gacod%jNhJNm&~e z?K-%qH7;rj#dk9Jk~VAS8=l|S){_`M=~azYT5Q{-EZJA#hJ^Ue#PQf$;uN2hO?Kwh zPz;n$1lPCy@dwk=3mezn%y;JQ6}&S4W^$cKW_K&yv+!jbS^``QE`@PP38k`Bgarf$ zJ)Pdy!pO0OgU7h1Dr_*#8(q<dqsSmv&pT-za{)wl9AO8WFhz$&)84_+G)~J6E-Lau z=`?FsIdppH=y@c7T8Lj+iMx0>E~5+O4ZVB}f_uN-aI<I5^dEL>ap#>ph7uq$W|wAY z#>P{dFoG7v3&#hMCX8G?t=xew|Fh{OdY$roPKE%OiT>WG(m@gS<k(u1odUE?ViUOn zGULALBfko~TQTJnn|~0~P=6*e06Hkb79GGylGCj2T(EW0`GSQ1(;YpH&;}eVwNqV@ z(~5QT^AlTUVO{2MgtzbvyS3Xo0oK&~VB$w-mumy-75%MqP<*#S({?q5s3Y(1YF+=; zJCHo>2YAirwJK&gM+4^yn!fMUW+#YJ*4%3g$2ZU|+`EaW9<LTj^8?hneUwzP6_6Q> zrmiCcWwxN87a8h-=YXZ3vN5Xy3WXn^LR9=|mHKOtE(=v|M%1=hu{zy;=X|&UZH3f( z5$h1T)UH$<c>t|FjtX=6ZZ~yu%YM3pw_4Z~;*xbKxJ~QuKuve_$N$5E-}V7*-U9cZ z;iv!QF9yrxg-;qU+s|)atCOno{zZyk3r@LtQ*(prq_Jq7Hp8W+)w9m<HOvj_xQBxh zwWheOQ~-8X)u9`qpUj`w3u!b5W%~+VPgZ4chkzcssu-BMu})7K`YAdBT9gn@O@@9n z(MKY`u3T<^9G3tSWcL@NjF>7|5y%O*gN<1&01(>aS#g=FuA<-Wg<Xs9E+16NIDo2+ z%RXKhRd%WX`^39&m0fOyEh(hSj<|xYT{bv6cM+cLcF35a&Zuc30+FsJu7Wfnh~*yG z@k+4n&OP0&tqUzE%K*0^;HkRx-t%oAzE3y%hwr1wy^pVhhX+qzI~PaCl|bS7wS`^v z)n@|D+#aY8paW`fV!ltQLCRacJr1J_`!*5j`5z5I4cSGa+vH^*YK<3Efw1Ya_N_Ly zBpX{J+^z2!pVr$<aN+O*&!^*JSrErR@w2|F+8`GROC#p^|B{n3&)o%&$5qzxyevWZ z)@+^&l@*47`q=Ko@6>ezf_dR^u<<n9_-C_Wm#7gkmDP<y%vQ#phv$0s_63lO&HBw| za2}2cI%i(z6pw~e#nkKu=89S04_qK*nmzj(`{e|I1~taB;+`l&A~_`T0-`WjdX2F; zxx8d`IhGcFO~6C6mLMt4kB(7xdzsDe!%sMv8>h1mut~5PyMtbRQ-dkcjOb&tW-H=l zeuE67p_&K)CanQMZQ6}8SGwv1r#6UCND$@zXmRhc*s0)5sD@VCeV`(zDRxbYREdi6 zLbK`uaEI(PCGtTOgq-(bsCJ|G-f9>Ep$1(MMtJKAgx=v6?zUfA*&w_Epek{wyF)6E zm{!y2x$B-O$9%`Fsu#GF7DKxHaa8$KUSY8LP+bdIpE<`FyhUh1l^<9NP3dbVpC?QH zf$T!;*I%J4Snm&sr26)?-s|`4P(CDKlMJP&y9Pd`^TlIe`FJ0okgoN!4xRL8LHGKK z5Uqz>ror3>=wLxZx#}zRS-(N$qH@JVwAeD>0+mr}SVfJ_^lgzP*F#Ln1>*AeO3hFB z=*27RqB)9?-mJ%W<R!J?gs+^@%Jd4+rDMvN$J=QVxnmi{FW`SB4*!`p{P!H<Kg<kg zX{TQ~2mk;t`hOC*|0h+3<6j3`D=TvwQ#vyzYpdyu&4dL8jM3U>N<-%)+~VUpipst+ znjHA3y*6FWd{~557FNkr(NS#tVawbB@q5Xy1>n&QYv?lO4(nbLJ)if}xj3I_>e1TG z@7HZOj|Ja%Am?2^uluIxrUHYm$`;teHeVbPoQvWH11DW`32f=}9oDFGrwaK>u0!I& z-w}+-aBnk+@p4LMX-&;b2jO+iRC?AC5G}jzr8I=_cq(0zTpo{=C7Bb6gRz3Fb`jxy zC8fk8?GL<LLdU3ff`;>PgZi3xU8{>MBDt#)vXLn1#l$e7Kd_Yave9yPVHo=Jb7_eN zj_GP`UTlPD!yV&Jw@Y`ou)RSHA#XD8^ZT)S@fFgF=7}r7@(tokEr^_>$g5<q#C4T8 zLNiteYPb%WLS|#~p)c-P!jT?SvA2&4-dy&8Smqrzef;<WsEjmB2Kd?l^T~mp=%>kU z`lH6WMv--==~!TMVq0XTHQHdmVY7Dn%O?$%{x=eKjqL&Ve=zX*-GgSIVudXI|Mu?L z@M@_a^jH+HNs{J&2GePIJbylF_8XS4`^)joaYj9A0K)Q)CM9u}+4=R9@ubc$h)>x< zS`=6YW2+6?J00rJj|jy*Cy;rNnYMiEc1BVaFI3NQK~!14#p(zW{Bek#QtEUQ!KF#| z4zm{Y`dkh4{8=VcLTPSC@CPy13%nEpX@f1b{M%QBS)i)acod4jk>-cS3+&0@$><EB zb~0zPp&nMk_GI-rn55|t1?GfOq^FrHW+p|b^9EZuGxloWhs@vl%R<-Mk#}K~cY?$7 zCdPjEVk3iNWY2>os1bzA;>te~W1OfZ5o2KZ5luTs$dwaYBAOfqC4ytz1cz{_ASB3% zmN@{*0}C;*=Nv%FT5mlYkP!EYHUKo87Fu`d5Hek_m!wV{ur}ALw`9PSmJSz%fcs2H zXvOo^l8>c6P(nn(gM*~>kulVWmZt&1l`0xGM-hquz4k1??OL<d5I}#n-n9}OAv{8U zVKbloPqKK@g&<whYI8URl$E_X;e;O=J#+ri&py)58T+|iG}!Vm{e)W!ivgC?7f_;x zZeqbh7>5FWCl5Fed^v+Fhn(*y4{D#fr6#&KfG#W$)pL|SW(ESC;aoLgqZ<#)-fB8~ z5EWvH6zga&Vf;6WRv<vz0_>lH<JeRK-`lWU(_HfMg`-9PT|mOh)(eVm@fIPH^NdcW z{lGG|7wIVXMPA{CtnwMhT}#Hc=xYAx4KB@TI2CJuXU1`;WH>n$qs15&D<`p>-}X#| zPUNT@Q8_7T3p*qGuy<T`LrS`${E=6j)XY>~D?8(5cv|bD&<XnE4A`M0`g2FJ$PBkT zr&8qm-ZL}{1Q|b78F*xv()d;&##V31*<ZsPCS|uxU*)P@(N!Oxf0UU~sySk)PJNe{ z2@lGe+jxK7SGgx6`^gWR<LB~U0gcUohMZKSqG<q)b*YK1ILzXz5d~E_;)x5;Byo4j zMalIM<cqp!!FT>M^gQdRA(nz;F=_G*YNFt9oq(IO<TclJe_cc54)o>c&0*s12iwyp zoL7T3i<Q47vbBx1$>fD4wR@+(5Ylg`c2D^7H>p?5!MT3-mF~0!G~`Mr#xkX6K=oPp ze`aCRHO3~;l9IcUG>WTi05zte|E)+3(o(=bDw-rWw16Jjv|dRjwYKJMeZxJ%$GIA+ zPBg`}uRc#HuC(S&b?1~OHh_m}O>vSkH*5Zk)@H{@>u{)M_OG-yd>pu6)j_T!YiEVr zj_oB)s36`WI98}WOv7psX&A5e_9yODtnXDEPwXPqAT>hr%i!3B9v9;Fs{F{PP0OfN zDnHobD@wh394IhU2IfXNg(fTNwlq!5(={sOx}RXAz;ECVo<E9xfQEUZ*SU5!{bcbR zxNz_6H3r04HD78EFm^N!k94G=BeF~iVYCKHzLt#1rpXR<=ze^LrHfSk{u1F0N2J|+ zk+B<+A;uc|a4%nal1)(=Uf&X%AlXBZ!`)Ko6c%{`N>^@EyGSv5sL)r(2pF$Ht4a0i z{;>ni<(s#s=L-K-@<5X0bzfa&!($0Lt@w-NEJ=F0U|M}jrE3Cu$?3@FerEv8)zQ&1 z>Fcxgr-cMZV(0j^3i_@h(+&Mf$+Ziy%dZw~P)+)1vUfQ4dnIBRgd5$*LT5M%&Nx!M z-BkXiw$fa{(t{K3DTa%8#ycR*Ld1l;dPv%%0exmI|2+Z9@%!oxF_a)J+I%}5CJfXc z^DZ30a3XAM`?|bICfuzJf5?gXi^TsPW5yhV>iqc|Ag5@aA^a8;1SbMj8eeD-!SQNc zH*cZ*#qcESSF~(+N><-vLy&&mZ^OuY*0_I?OGc>G@v%6wUea${mwkh?YV%cyRqgs3 z=z<jl|31vnS)11{jTvm*^2E@lrM1$^4l*!ePb}EIIVIp`X<ABI{YWO*o6=OU=lQNd z4&j^>E#Elj-<C;{O{M=Jg*FE8k+zy(x8@}w+LFjpeu7~p6wUV@1q`Y{_;dkTV|O_5 zzyPnIa8?%7Ohyc4mR(S}1QSTUn<+wTeHe(06L)M?B#!tj1U=AQ9C?y4#14^KeY7Jl zCSZ>WX#fY`ZVZ4rXjlXYI8}$8-}K^`_-0`DElCoYQP{&2u*@mkpzhOE^o)B)0i&5Q zEx4k?LI;NrtMlE3*pY?MnuXO=1%BPfsM&JuU8w<p<I<Su5fR8#`FxDBlOsl(R*+b1 zR%bs?TWN5@poB|-wy+yD8tAvoO^Wo5dy+9?5!8Ijq<z||?8(dxVOsv)0p<xB$V<5i z9x8RQgQP8tn|f$Il}3)*BX*lu;w*ghFYJFo6953*f6(L~8u{NB@xQzOC&sq0t(Bs& zt%H%V!~caQ_n!bGc$iGp|F8`xBLD!?|5*S7D<?hke<W`Qr~d_SGPN8Q8BjuU4NwOd z=HQUIQ^6D^m;|tIk_0p<<Z*{pk^YP_C2X-Vbk(8cXn;x^km8KH+_beM0x-*1Upjof zuMS6iDfPDedfeU#cLwL+^>~DDh{x*kZ3>I^H|(gr&{+Q3@lUNWMv_ii;9`tnNSyCB zRy{sCK6V*0?X<$}Y65dQxzZ4FHW!~ujGF0IS2mq2Q$GXt!{O8}g^Cy!RiKZR`sJ{~ zWV$D~H4upNF)BDMGmx~$aUFOY!84$XumP=8FTvmr7w=FW3|V6s_O&$uhf^rC#zibJ zoFTl1gHnQF*)3SgJVNEhh79GeHKk)_X?|=ium&v;no`9;`aVT3b(191ncpzJ(i&_L z;>1JqJn1O54&bPWjm1kpO%pq4K>(k7xefR^x|PIG6&C8c3xx9N6A!Y`zLg>>qfQbE zyBq*Vlml(`c2y1OxN7W6)<eFvsc!@Aq-~unr7oV~-($ilMb|%xmGL5N*-ZI)p{$I` z1MU+)7BXZYsH<t)8i7lDmE|Z^9g`j2AseekRc=0wqzqo^L%?=hJDgn?(k?;sXeplL zS6e@cCbv6;a2kGSC;)G-bvW~0NVm3-%eSK@cN>Ozv$5RdYuRq&r7rarC-xRxf2xs> zLb7Iw6;|yS&p`YsHQ;z4=>Qh!R1XXB*TIY-49yWtw*xS|K&(j^d}_0zx7$v1ych$# zSnx^nHMS?obA%!#VA#h?d5R*qfCSoBaAv-Ec2<WzxB&RDP_SqbEH+S!CT^Px_j!~M zuy0yDCx9Z>EF-J|?jRPa!yp`=i{oqpHx0bk=}4=DK@`YFgy!HP-ww!2NISC=2o8yn zH0a<!hxj45BAnvPTC-arr9c>(Hz082>X<DfM;whCBE*HNlu0{gxP~u+g99*d#xh}g zV@4BCbDqp~ze~Lnu)jIl_l$yHUN16O0#I`-TlyX*tGWC;3h0j|Hb1vIFzVv9y(|k< zdYIx;cBjL`<W$#&U3Nn_+E{;dk*Anp8xH=Q{55o`Brj_lXn#VC0JW4RX(_x&aYkFu zo4B*EJde2#^zkE;VzI_II>W(%<1c`FPy<c)j{vhKL_$$KqB4XQIfZj7qQ=cupdj}c zrv!ciSau$@nB#8Ygb=QY-ZROuf8orfbin(RvwdORwEVC)%-9iXBNVy4n?r}ZyA*O} z(RD*&j8{4JCU{adj(IP1)m^o=e7q(}vRpLPEjlG?k8e_1Wm3X|%!yx;z|4G>Ejp!1 zbduc__deX!+2^(;mhHkB|7fE-vt-EU^^N2_*dN=n6f8VcZuIkl^dHoMY?#Z`<m~j; zrqCH`^Y!&}xf!dGH;R%{bOn?=b<ofvj^?q=$(A@wn|_(Bru6II&;evjOHV413E0q; zkkn4dETy3#q`?<WNu8>2b5blrevF5w7)$Fk@hjMiV4Y81f=J7*$u$obhQjs&*<qQI z+A~S}1hqNWRc5k7d6jYO%Uv?s7F(dv*kZKgq?wuF&Sc>M&^!F8&J^SFd)WUS;ayS_ znL2y2oYs&elb*_$U4T5K=p(|+Ze&6@Nv)9bKQT%JkP#`pkqM=%YTnkkbh^sK1ytOn zP6PR$9SwhnZ|W(2fgK$trIO$&-dfX?h87^>n|Ge<B;2(`!yQV@^7RLPpX(;Ci$UEb zh?Jh=b@W-}SlIE9y%h7e94GnmEL6l-hEfYMJ?%Qugyhw4Y#zv(1lSrys$bgu32C%_ z?r>b2(x%Rn)`{G6s`T@UV~3w(VX1RncwVS+i$ikaZMpWeRN88XrfD3fF(6NXMR05Q zG;y>CdcmzWzijT|_sb)^)}0?PJ>VdtM%h#3nE7o~w3XnlusjX40b}YkC)<dvpmmX| z^x@vvG|8cjU;2X^Ma0GH-6OFnl7pLsUAg9s5Xi;|_3!_HnydbpK~JeuigU5P1q;_c zIZ83`<^wBuWk~FODatiK6&u*l{BOA~<loXSk_63%3fox^b#(vQ7Re>T<SeD!W?hQM z378e=6K|-!K`<64W1Hk(!`|YB1UmxH?A=DX{z{qyod!9bN1;2Uo(rTN3nINA(w_y} zYIT@;*Yna9jVU*!mby&OC!^nv46r7PlobCRmCn(2R|KW!v8$rv;{-h0AV>36FVSG$ zUe~X*z-(g!_0|xb1CAko`5^r}A|ltu(gh~cgBcTq#pt_3kP+{-QiC$H6*geEEU`h7 zp47b`WM<0Hy*Z&NM{#U_snU(fc-MRMd@^Eo|8ouKZbO}mgm>0dVERi6=<V_8RGT3( zz!vUnw_}Ff9>j`z3vuMK)rlHZrKy+7(3;9E?Z@%pEi3UxE4wfmQM&>w-D%3&EUt9> z;NkwHYiZC-w~LZ%<LWV2w)zy%8ZL`XtHu~&X__ZM2Lr0m>Upmq(B}SbG16f=RCNnS zln`uz==X{ZAvdIs!-9|Oxl?xQOyI>zeICNF>8(UOm7IQxF=qIj5H3I$#3N8)_~3N} z4$dh|)PEW_PwgY{yy2gJFVAQ}dWK!~DWA6U^ztNQR}0aHAQ2ToeX1sI&mYPMsXMXv z%M1CJhm}BHIqfCjd2Hk`xE+)YS;oVbVQI7U|H?v)LLQ07Z)6ER2F(MR{k>j3nNlf{ z)RANTmAMP*8wkm$m=)<4ekX{jfjHj?#T;j(gUPm($_%>m1IOz{1}w>Mi@Zn*kOHK| z=<59+oV{akWo_5C8{4*Rb!^+V-LciNZQHhOc5K@=y0g>w{pkI6?Oo6J{!CIev#M6j zwa$5*;}};X!%cu7W^sa`1kG4jui3sh6`+8B`LxHp+$FOBJtmjD2Zq?&i|A{{>@0Jk z5+dw-pI~4+YAf`>$LgdxD3IBj#Dv7XgOGy<+g&~?#{+%^pELATu`SoWF6ew=`fVdP z`<*;GK+E+e^l|^YXd&FBsjhZ8xDM3X33Hno)f;;IXyze?=TBvHezxyNF;~Q?C4{4n zlei|=H0V-849!LUa?@q|$n3+&HNW|wdj8{Fqd(zi!zzlm^=rVi@~b=kFT;<Kt+n3Q zu8pt7Gk=F4txeT^R)p?ixx98hl1sx7{$v0NSq*(H&14xi>y+$lyl6w}u--atDX_Wh zuG4~tcDY%x(*!5c=6kD1qkfllo)x?((Hve0;-PE{FOP?}n~&os#@DNlMM{evZ+j01 z@krPSj}~Wh4Y6Y}g}!Eu)yB$w<^T-fq7R;l_O7mPwk^_#4^{VUOZ>2#-=)fZ*T<a_ zjT(6^aw{LlG>v*oftQ<xV<{zT-@x8!57=Y|(6SA)*W`(FFiCtYvBEbgzuV`m0Aq<4 zr{|r0Ux58Sbhz~mGIgEhfFEQW4s}<4k-)sj;)d{&8JYwP6QpuEbC~*<K8rD2Nipr@ z&Dz{^ay4NUUY7tD*~cubfmS$mN)uerdvI8<0ic1a(@96Afe2|S@#3gS`z=NrZIOTz z#{&Zl(1{YbbK_!@?aK`K${>Rb^lu9Y^&y89dF?lVAz|Qm_;ac?=lMi(OXQt0*18XJ zI&v4IK4FdB6~wDo{yY4GWG>5EF;?m%`cY4sCD3AHmRj(Xjr~$%Xf+VegNDsbovMXe z-`qeduAT1mqqFd>8F9<Vk+o2;jL}}3pAR3Bnrb~kG#F`WbLM^qI`&P;xaB7tNYrX` zqbncA6sm@<J~!2Sb)GbqJR*Gb9Q|-147L-d0Lc2vXF=Ijtv8Y;ci@(ln=`%;Q}f+E zOFt@WM*a2?Qdt5w`M*n~)=Q*33ipoArm8dTz<m_4tMuoIb=T*zHd{)|uoYPAHYl8= zh|jTxVZ~s3jOl=$BM!<_)+zgYmR{9%Fd_0#>;m+etRxgBH9<73-V;HSR+((cvl&l| zYg52^+2}rT?<5S|x3Mog$;~)~3A>O5b4pWQJ(`q#MAA6<pL4E=ruBXzYF$501+sb* z>cz>P?62XtY9Nt@;)h}rz`QuLDehRdYa3iI2|<E90R7}1!F87&ca~pv+M#eA!cADa z=>lQ4gfD(QH1hvO-kSR(pUy&7fhB}*(+1u&MjDrWi<oh@S*nP;Ku9!Q#!$KqAs~@> zvvqtelhYjg-F_BhIr7CDFH(mM2JMZvkG&aZcLLC|9QyR7n4=5))J-$*_i@qV^xmau z7x%4H5l9JP%;3xl@wqJ=cJQU(z39XxX!!g2v>_~(+y?PdLhh>+%sITF(|#H39G)|& zv^Vf1xOZ_QQCYm+tmpoZ9<rrD%EvdtOCi!hgn*M1pMcTOD+uRJH=c1Gqr9Ai^FfKe z?_Q$jPC?8>8x~m6?U7vgmv3-AfbLGlxf@1+;YMwEA;q)MI?syN3bn#-3a@K>Td?aG z=DqC)wUvVDzN9>t@cM*S9cU<4&~FyCtCj)eI4<_*A>gzRTE`59VH(=;!1fVR2xw$! zmTLa$NbI*1+Jn067yby1xLfCp+_(T3plnE8;s-kVQ|~arNG^moPJYT)Cz#dNHw809 z<<G$3$ZTiQ2X9TmY^np;7}{EWuqtut*dh6ZZpJ8{JN%fCgS0D=+#%Us3|Ii#>r0Ab zzAoV08~}q`93a}9$-)y7T2a4fa&z$#9pR7qAUZ4}5L_@8vgM^)<0miE4x}lHZ~Z_R z#X^wJ%2LI?V^wS&M@=BQ&#bvI8mVNoyPPO8_;Bq!5#a5c+x7xN>WF1rG0h#bNiRz@ zgDCp{j1q=O;*Vm$&|wq=j9jY{+d<(%h^EPaosc6F#7@S4n3eKC{?6kjNer0nY+zTy z)+^&UQi*5|iU?MhH>S)5Dm>PhF3pzf73!MM<ok4+iwm1RrM+Ad4gA0w6`q$<BzJkx zR$)fGMFu^*JLh^jIx}3XswET^b3xS$Evad%pA!Za<L-U6i|NKd=LP5p(OiJ3f$b5J zD^<@;%(t{S1`ACRxg<SnP$Hyn%4M`~2W#rbUIixGehM5Vz-`w*H3%wp1Cx(y%WN+d zr%aZWv*}QY#&U3AlZXB2(jBJWna=u=+Vv`m^lGUY25!(D_vbeczCT-h`$NQtv3xp7 zut6SlN@FZ6`$_#lG+RA~R^p=}N5UXl8HNM1z&8NZIE41Xo(!eq_PMq}uW@$dt}vrq zck*4W^b+Rk!1?IJJP)MQYu^tovI-TjEBE2rvQ*p{W$th+xx2+`;ZuTiq(ZWS3X@gb zS|J?cHUbV6mXbv+O!v4)MULnAbLjgk&HBA`QH<@GT+tYG8zo9~rUu)TP|R$Y;B|Az z=+Y8z0C9dcA^C8CUV$4uXqoCkD|&eTb|~l;<NZ9Y`SJPTiH4B*yn}v^i-SaEVI)U$ z*Y0Rwn$TfUova)6hL_kRmRpG~0=Ym3SpP;r1s$LrKVF5BxOfh7xCBh$8j(LKc1Vcp zAV(uT9^=;ovDPm=DWqv&{wmHDkTcKvh`GvGQRdkuqN{)%oU$-=jNM`S_^C5*)Jkty zqamm9Eo;Bzj$6vX1MK?zUAeEObTh`yz6Yttak=Ppt1~%wV^UND#fVpw9DyxDh~?{_ zr;nZy%d1A@YbTFaiTQ3&K{;4Zwcz_XbWn_&lvVNo9azR(Xi((v0Ue&nr9S&^NZcm6 z3!punODSpm02%N9&5fUg>jp`~{lXNqbw|AA67798aK4F%<6Y5!J>8OxQBMw(GQ7*R z)OBQ;EWB0#C??nKravL9s`F@jLu02k;kUk4=|izsP8o7@ISJX))z-16bLiuwB~?(N zQZW<*&r#;d^S~Z@J2V}C(p-_0zjDVkvffX4Ow<Uz!|Ub=fNz2}j_><&0OFFZc9hd# zwqbd!h20Yqwwf0pXPkJ!y{F%$fI?)~4Ab9;EZv=z&(MD;UYU^u4{uM2bdJv#)=@@s z<oQDhV^5Lfs`$gDd^rbWx1MB)mwT{Cd{A!tnmtEoEC)ng_v+{1w~~WO-Lxz}3O6Ke z4oI#6+xu+dQ3Y~$<R5zOXz?CTW!E#D=A$zs%Oq}NBF776Rrn0O&R|RM{qMAa@YoD9 zT8<?j_|ee{$)MojYOg%!fNok5H+bwN)h`4u0Nt8U-I`?Gdtx68wpGe-WzRcbfjxCh zYBg%JzryUbro!EKX>y7sm+R%J^#*%To7us=aM4MUJ{!dBY{6@&i0AX_#RLG*7<%Fj z!>}GFgyV}d`uC>Ma9^~wPD0whTM!&+?V@91#O&}y5ui5wW&xnTvr7%SMqvUuh&;f_ zS0q@N!sUT1^{UK@?(Bevu&j4rX2`-xP|KgtVf}IBpx+Q3F?!$sa#yuN<9jK~#lbN- zkpr@r+SGz9U&H9cB*4g314po=!hf6TR>08Q0v#u3FORsPpQvX=#g1xg>JNl$gz*?M zOeRn{KN~cnkeib!j229%>uf1gA+X<wiA!Z+h!#ETAwb#!31()0<{*&-7o9%?u%KQk zsRJ6P&7T~8ZuAB%Y<7w<Q|h~dfI{UDLyS=8jyV)DEGl~yvogi%IACIE$ZO|<l+cC; zJ}c;@v$DOTv3Y*WbtH`7faw$VrZ8z~bFTnmV{^W3@rX10%a@}PoY6+s`n_t<FV9#p zwiX+lo;k^YPG25R%krE%XcViM?8K{@zZFBX;?eHKEYb`knRQ{10~tH!1emLxXw+HR zS$aerlWZA<4f6;PZ}3G&5&}!IxHQ>17lfHk|1-WliGrATBGDgXOG?6aI9Z;b-}h0( zwtcxf_QS6Ucx_;CZZRe`UU(}TfmUX(8=Z!waz;n}h@80s6@h&|?;OyIC-#szWAA>< zDBknV^a(}wTth}yZZ<Ic`G(E#B!OIVuTS?#cDs$u)ePvH>$vQd7p{Caxe_^#%<(S_ zsjG#|#?H*bTQ5wGv{QCuVGbp`;yc@Jr$wJk|9ca?%a{hcIYqnVi5|a$jG)O3FAFw_ zA2)IX{h%?ZW_REWHkbt~i~`JXn_B=ev(HcY`=i~6Toml`ZegnMot&*>+pAlqLp}3U z4eqR|pNy9X-HkzfYvgvyK*Zbgy<fWlEKM4aR-0#D9_mcJfR_(03Y5Y=f&WQSA^xJM zz-nMh2#^2(3SSQa|9@-z{)3`^JqNg0IQ|2Go;%F(V+8*=SE-zxbx8~qQn2(>(Bj6I zmp^BhHIqP7$F8?;XcQUY(+%(Gf}$UyzFn6A0x?VnkvGdETOCLtzs9S#);&*w)4g!r zZqhn2cwSXn@bSJrE$}Wxh1vgZvdsY34(>A?txJO`dfpb?n1^uneSn>ZXHkxtb04_i zeH<e^uFJ^HUrFgCxwi3Ws9oAhw^JS;$-3`W&|4TpwBEzd3u`_h*px{OK@4SZkQ585 z8Y`W^Oi*M)=m^0vCUjW+0s5PaNL`s@BzqlpI-9X}s*xXs@?vb{+{_6Cd?+9#7M8=D z?c}`&T~1`ENSzInx0iLPqtN0_Brk8Az0*s94aqfWX|04~&T0+BKH6?*=5Cx-Li_IV zC{uRoitr{k0UM8;5EXv5-6RLMl322W0{uoFF?wxW@j2Ls5=4EtK^!8N1E5F>;L}ff zYP;!ZYHn&);Fu`N`)zq!G&b>6v})`dyIrI7%yz@y9DIAo7bTYSE^{Bjf_QA$h-Wd` zx3}}DH(|eL=f8NU$`=oXhTcfZce836WBHICZW`1<`E8W@UcON7sk2(2%7G`4v%bUu z(>aEA7K5uKf0X-&izc_(`EwXbQZDeTHCOAvwLdmprUh#WtU{-|_KL23ce-5k(P94X z-?r5Ft}Xw(7L^NPdIPW@=g9x{ZR&MRuJ_{Kh{uf<WFEUV(kx~}0NZ~Lh*(ZQl?Q)P zq4yEM=_Ru6iEcKMhGmB(P4bA>Ko+VAJB1_$*v9uw{Q+d|mpiCZh+P^^VFv3{XYdmK z`qM0B(;&j*N$+$|EqCuMWe}22Ln#8-pnTBcV(o%;Kzl)UCe)4~Y5UYwY;K!+H4h$2 zX#mBf6;4L~eE}53p;&hE33D`DaTod{nfZmFl)M>%6tyTH$$7;Y>ti4{ThaxBt2mAW z&@0C6&Jn_<A>6EjD@4f+yy=9}7!fc?%&FKFVn)_hEF-&sJZWfnFormUAF`!}9RO9t z!|h5i+!#VLO(+q&sPTcILMw0~7;c+QD`H*tT*4`jnSY;B%)x5q?m;J+9<Jb{Ou|Yt z^fMqPmZpNza(2YjO?yeUa&~Z)mBMt>t*}zxQM;&)w4R{<M1ZtKHxb-I3K6myKQ2cF zd`a3fJJ%ybOkvY^8j^?P7F-G2vNH&*-T-^Fv9)Wb8DAqSESzY50(b-0;8^JoGizR? z#CRiGeP|KWWaq+iTuT9piq%7u_E6vSC6>#$izhh5Qs<+!NMt%S#5g3|Jhm&<nu4li z;OmL8?@p+i*0!GA(r!w~`4hLD35o6$%md&Wxxu@;FDvgFbrrXNGu2-vlP31pe=*es zWRB~<nCg_tAEr9>7gKE-bX)nGsjB{As$1T-D32dsO!Xj0q|>Nx<MOX27}yYxx$&{x zvq!!os`_uHN-^UNMQ!gAEa|~mefiY{JHb5~+e^K99I7n*$gQmA*O-ukoHO;MsUb13 z8I4p_HKdprAv8I}8Q<(oJT2T9AwH`ulKpCej|*rY|JejPs<&mVke(##Mti4VpJ1}) zxhu%@Xsj$we7Z=>*<XV;n9`d5lc~PpG!uZS_r~~be!AK58Re9H-+x){#8OQD+8fVQ ztmG7|J|0tg96U*5><&8apgUfvsH*B)c@Q*7bNCY~k;|R3K~h5p(4kA}iDW#3TE6;6 z&@1?;79+EX=IF+~hbg5Mwfs@`^jBx?=S_2jlMt3k`?<d?J5f|SeITuWsukVshR1F# z%nE{Dva2=6RZK)hbY&!aDBazuFGWIK^Un4acSy0di<EzB^(Ptqe>2rc9H=pe|G`vg z7EFvBA^tE`13h=jPn^Lh=#@4N?M~S%`}0fN8_+&vnl&dnKiEetYMM%DcSL~(nn3%1 zL)FuNLsgr~(9<Vdhd<3P+fj>BRkJ~VC6VeU?^iW^cs$aQNGCrR<y*9P#lcmK!Bc}; zz#~s)9Y|fIKYci&Jz{v0i+nZsNy!&hnA~}`&UUrbRY%<-aqtCI9dnwp#iwOK&LJIn zqjvv-ss>4)2f3v4|A4ALzo6=VR>NOV6{p)0M(<l3{U;LNlNR-p=nBWPk`)T`Mk4LS z5gyNKPjxY1)mahyjF!VQ`!k$jIbK>;BM$xPt|+@v#}V^cT7>7wGslWfa<H@20<r#j z?G7^G%UWnk$EuP=8j`&kbLgq)iviF+;Ke+H@`6<cAh&dZ0n)Y-1CK{sB3-I&Z<Uc8 zD^QYbQwj3%1-;;us14A30h-6K#{yY|6&<whk^owJS_b`Qs0@&`>)P(P0i!puveKgN zbgnK0gJ%%RtdH|@Gh)C+(1D;$^RfafJ4i7RdmL-cQD%>9wy?H=0fWVRe4i<Ar@N=d zgsX=;v(@TKve+S-&652NNH8z|PbUkSrS#|CI#Yk_XsGZ$nUEkRF@sjX1@-Fi@AksD z2vQ)AMFniN$Ao;qe#^^7+=LJ>XVGs9U@HCuF*t5mmQi)M9#<dM5SchffgbY+{xGfm z&znKa*t<=jDF%Y0ygbCoF|kxP-WpraUd3?qmo|YV(ZA(U<q$UxL9D}e>>K=7YIs%| zFs7IUoxROS)J>85?SWne3R%r&xP2NK8|&&z9ZjW53aH34_>i~>Ys~~@R?Yl(y1nxB zkmr(wm}8AJF*uhqSs`};;kkXp@KS^O>B<$Mm_Qr#Z+<KG_rgP20LVd+))I)}@urE! zLqZ@KdoShuuuO4($gBe{5;G`_p)XRx?(zv#rpou>QxBJC8-AK&_<@31#jiirVas8W zZR;a@?UmiYqt`T~yW`c(iQuVp@0fYdk#YGtAhLZz^SJ=~3c<ubhy*Pw%@IX(ItVYl z13II>v++c}!b2O2Q!GwSvl!w71^bz{L5I4@tYX}E9EoeSW$(3Ud}R#ZcK|PdXJjKW zZQiC%^;QRq>E)B3o!!fr`L&()`Q={?_21d56Z)iq;)}6%@Bjd?{C5SjsfC+~@mIid z{%-S+gr)WAy2gs|$?=Pt<ytD9c4dWM5NW3>z<MINxU$gd>Fw<<kd{B{i?RmRR(-z9 z*27|i+UM%dEiZ|ZXYsnW&yPLnTvjZdA1&%#GC!OzRzNTKyw4B0BU^wDxT#rUiJq6E zB8_{@vP3pW!CC+lejpEE#EiVP7B=MCYIiY$8J;A=(g9gQZz4u7xhW)kk3#2a`s$ap zT`h%(7~%(@59UL+7Qbb<`@7{6knzsSKU7phI?$txC>g`s^@f$k2-nCjqM)aEv``S( z=<EZdL3olN1m$7HYoB4^?(s6_iU<YxKAhdVwc$&D70l`_X}s;<7P|68?FvG!N$_!h zD<O}yfuPb^u%x{Q*Y*+u5<R<}bQGEfqO68Qgh?$NAUb3?!cuaIvqJ&JmJz>GRCDpo z<-z|Qu2c{X5C*;q=6zrk9VT|2ZMB{1j`I7;b(ojRjNi;%<Z$w$LNVJcI!B1$VSsPo z&UN1F@GGN^P^^v`cK*Y_RHKw{G$W8=CD}q(^PDb=+Cjcg;Cmoxzj^j1i{Q@M8Ho0f z^Ia&Ob-4Y)oZ)iImV5ljBpmepL*-H+`+^-Kj{p~8<h?pUT==~id%*B-apAO@%3v+> z5DD>C9s@=B9QOB15FyFl#Hzpf)?vMvaB!*bP*dW65+z8lPA9)a+<+e3KQW>jbvtW8 zCSrRv95Z;bfNZZU1Fw8Zucd5v)&glEPfxRa_0vCb;SiKGg`6Lzwyu`r-Y>7FAKK6# zH)q`<V4IK|--j>#L|!|<?L9}}QqOgPWtby|Y@0;-+m7S-6{sB-Y{b9!^IbRsIUz=h zOJBNI0mNjiI2W-2*azd)!6D8Sawz(j@(n+q#EZ)r)w*)Pz~uA>v-#uF?}R?d$F$o) z<Er}>iuG<ji?X1NI!Zs<kQaWwUwiFOGX|_?a`B+`ikFFK(&G_$2z0(#LljrdKs%?n zd9MJ;B36y@-W`SDn?^1;TtXcOdaY4kUE}3);8lV`-{Mv6yk-0F<2zkb@xQlkOg{UT zg+0j`W#{OTROc8?8KR|YL_DycJbEu&;uli(9i~e;8>J)w7v2^}v|W^xZAt`?)kfsX z1!6^pp8$uOzA$6~y7u#kJ-Nk90yjc8w@2_wd)B6D3FN55Vr4x85v0-|k-Xqc9K|uF zU$>&K))r2`O?`md6d-7vGnx69DlOyKBd>a3Jm7eMUm6S!qD-o=id{A@@avpMX+N7v z<EoF+U4}el9nJ&|qj*g2D@DTW6b6^-0XNKo)!?|8lm_6J&)Rlk%j+|YI8OR&MZe9c z1bVgIVan6y<5|i)b2o<YV48?>Gv5CORHP{5ug!#c1>CJAwhQD5#0`=B(NAaC?LdRw z!Nh$*rfQ%z4C3kQJ3Nddvm)M}IudAjft1JneGt$Z!LL~YfD^<g99Vy!x6UGFt-OK_ z%Oy`KXAAL~z)68JTFL{6ow}N;`|`YWfPZ`@fss7)5vd>0&)>?CgQF7m3<-PSJB0n7 z66H@2mXk~Wt6Fp*unS*}CrEiYrU?1|6AV6kCnwapVB{I~IsPXINhJTfu+X4Ad`v%G z=8r*3J>S;4ph;Dnr<lCXjMW@&x6y_y2cen5^EZdQP9Gg=%QLp;I^18;d##;OQ7qx_ z>4vOkyWbdjNW=McjiD8nw3j8fEu*eG>7M0wH@=0IMX?P6Upd(8zXRonBm96`!9e4g zU2>_5CAz%*CH$U-6@8^o4aOxEo1O)i%H~o$xeN7jK>DOXn8hlH7f}|hZH0(UZqwY? zT6CVyun`s(RpHCYFW#6n5se2K1(db<ZZ}Ef#~n=G-W4FiSN*|YrIlTgDcYGln5I6# z#DbsLx27CCzHd@mh?sG1?Dm=qQ#55#%B=~;qY|EyA*HaT96n%zSzgA3b3`IQ+5p0Q zBPO*|vtByitO&|JF5x@S1k~x}?bp7W9r$zrA9ADB_wftWkb4M;WbqZc?rVw8p&1nX z`~_Z`hkeo_0dUuq_W9`=+hga0-c)3FJ?NXI>`4rBeoOP5x9-W5q3BBy>P^);hK~j8 z$A0HdhSd(+ZLEj&*iDY|p{nYngyVGn@diW6l74rf7%TQW2=3`p_zu<O0cvxfs=Nvx z4bJ(}y!AIzjtU$;k#%q9pm~>{+2$oI)Ec{b{qHlpXg5&1FC15#Ayx-&L%)k}j!d0< z%Li{{K>6l5eo6WBjl*nh;B;nVe^{EnETP?0b?)Gs1?#N=`B0L-s4_Bt+@ak}xc9L! z57bx#^3{aUPK?8R+Cjg#<K9;(n!bopyZoxWxewP><zW6eL%X?$(p+laS@(0Tp6nn+ zZoB6jD7C7JXgA}11YgPMZ5ZF<J**>iCt83mmTqrRCV7nZWY1;NrOioEV$^!=TB<8g zQ%J!JX*bq<J$+**wzL|$SLXO7Q|z9pB~OdW+)u}Y<uX+7z!jD>>0GP#HES?+7j;N% zpHgM0TUzB@YLUTl5*~E{XzkX><4Y1m`i6D!dfM3t=Y3q;`ogtY?bvW;+-f~={H-tE zbSD9zpnx_z4$9r2#(1dvEH#x@{wVkt1NKw7u9weBOugZcV2>Kp0iRCA>(wpcuRpO< zKOLH#Sw33Sr9^1dsb%B4Fk`!<N!>@!fqpzl5NMqf=+$e5&zdx)YGbV4koZbj0V<`v zL%J(e$$q3=5PDz@TfSLzT69+4#?fz|k4b&skJ&yn*8in*G)ktG`fLG`L)m982`%T) z)ADn#Ib;QxqlA9zaNNi@CE2gWy?*r4SC`id=4KpfCrNoni+5Ou4~834u7&~M&~~cj z^3EUN)-|U8c6h5pq*$!&%?*;Oy-m`e`1R0qpY6)(l2;^nU&gprwWi<M2dVHt93?@Y zq6NKY{R4;JWoORE5$x4ES_o&9-512QpN%!|dv8WsU&=jTPY}3TrPB?q+y1D$Ld{Wt zSJiPb0eum1kFO$BwiC?grs$+2xg1bSC)m|s$7jzhE54|fgqWvKux=e4$s`?~`&Yvz zOybnac-OR*>i@xj>)tUR4Q~)}`P%3G&ahz&;tiXYA`nS$(M7K#js|uo=xAWHV4G07 zi)7}xM39ge78JN>mRf|BABde+yPhibn9SyoUc~K?)=O=YQxrH&4wVzc(czU$!tHRV zf@=EBlAWd<D&baTt!L>4($P|gimA}i2tC{@&_Bii2&0Z0rDHGHBNr7hDrHD1moI4( z2MHljMIcTX3R&E}8&Zmji0l|oTqq0CWk2#P7AA6jbwh#IgixGM{${}VS;ObOS~~m_ z8L8geb%B0{<yKkM6@n0Xzs>7v^1{TD36jb2Q^k3@cO&G$aSoW;iD=8VO&cT9G*G?6 zpqxkfS7B|!>hD{k7GSW6g4Qx?ZxvXGCJ=)@82I}a<VhtAxe5fLqrA605D#;B<YOf% zG{qHQ?wfvWIF0POu<~SoYd{?ah-XR0n^;PzyE%18no-yhS0&kcK!E_9X^(rw_sIEg z-N0QTj3qHYM*Eo`o^Z-kg@w4(_vD#Hui`Uu$UDE_=Y0?XphacP_PB0mQ@(?h^Qx-k zl&WOkl2JtyE8XH+rR@2wh~{?No>QJIbqZ0{H2uO4h3`ua21`#W8uE5c&3IO280UGC zH2S5M6^hWc#_$wAkp1eZrQhT7kc#>1t68YN_P#(rbS2!d+m(ypfg{dEcs}Z90QG!k zWTuLI>N;zbcKDB%yh@f{TOY~EBI2m{j@h!?8OyhXn=&4J7eBhU_wWE-zPV6fRyKM3 z@jt01Ii=bsz!%j-{-T=9{};*I+{EB(PV^sWb2WaBA0_xpU5TEZt4lQY6_^E-6xl#` z8onI2j0anTJYCrYoV^<syIm`}QSd^NGc&+sNHFHFN@tRwC)fMzDwOcSKEC3$#qU0M z+3DMzC!g_lJ{}uj#UP#VQ2MU5v^mhBFr3|{)m-_L88|Xe@wd!Gx-{8Qp``<3Eu5aF z&^L!?nlg}vq*IC!^Q`YDjZ3S{QG}#$c+)JR%7`<IQV&MG!!iR$+4<R2Wo2@(p*88j z`8moM_V^csi1Fp7xo<`7h@$pst|0#HGD2`|@-Df)1}eZ#iN$@Q#{9I>jQSMjJ#C}Z z-i){kA&B!wrgp|b$ExZ=n%+!H_R=5ZopIeMhT}z5tgd>BbU0MLK19UZMX=Q4vnGY< z?JS+{(l$~S{HZatFoC_SxF<{o3(PGmqhi(!()0a22m)$#IGlUe-olK|zP}PCsOB7( zQM1uA0;VI<o>$1vxN||2wp(<r6u=h{y7^;P#DM#NrzuxA4)@5UgQaJ^U&^&C444zZ z*8N{C>xS@0Q-#ZhD@P(rC-|W{+6F%bH1T=Cl%=QO=gbXuYWGZuxrF0{Xk#`;WlVRE z{cT9-;^`m2w)9=x-?#z;F8iYgF7*S6Z|W%-&YZyC{LH9_c~;tB^qkU|jfi|hECrD1 zF0?uE;qRnUjybOeO{RSbukYgQk?Fdu*<jX-gfVDa=uz(JgGjsk4}aYZ79gve|CIHD z&*GtHwZ+dKh88Ip$)aQ^`Pxn6J&7da9TLUJqsazwUpg~p-+qZinIXz&xA}~Gv=e(( zCy@BV)EQ_X&>#%7lOa0DuODl7v3BDu-@G6@``QhW?5!$DvX=zm2C{hzPMc_h5+t4o z=*5PCf)V~ryLWR{zY}WE`8CiTxUyLATW~{1jsngb9XZsE9IU;>F7FL*vT#`I`I)Br z;w~~W8Wzj$o_K#?`;}zIQ493GoI8LUJfhm51YRUJq?0ty;IQIbHKKnv1{ovCjv&{q zuX}s1bRXW(is`^z3W{g{a08L!qI_^1Z-#50Zr_6tkz${yR}MSeR*S_2)^5{7SeEv) zps{!QL&HGfb$l5jm=*>J>^IL1iadDEqQ`g-b-k8w58$KIM^E;NPU06~#k#~L=digM zuDd%$5AsSlBPx=gc}0~^eSk0^mdS;Ch>#D2m@63Z6<<<|V85cr(vWr7=!X4P$l?~3 zJw=H#MQXq~<dT!A1^jIvEq8hD{n!XOII2fat@0i$TsC$Sb?yA^%@}(ZBzoP*6Fq&h zgpH+<6HmkQ9MksMWFg^5>7#FS?YeuN)p^~#xTQtfrOKp=z3p*H<zX?45{Io>JTu!# zlggwA)lpM^?9fnWcmGQ>H29_@)$wC~X4+8auMfztGvML5-um<IAaWp5mUn)C6S-D; z4;}bfG2mJBCewOz|6XIum+W`NxZ!v&C(r7-{K%tz^RZKvMrX6SQQ1lOh)-cv@>M+- z30pYwtICp^7>s5rsxHf`Mk9@%K_;?=E1D+M%ZN_yQwQArn4uTc!VJ?8rjAUOX*5%o z$aq1i&PZySc7V=C!tOvnJ8GJPZTO?Lz&y)#S}rY5rU(3NR?W^#=N(9a1<t=&?u+_# zbKpD7Njr~!{L)(TXiAjOOeTv@aO$*iW@%v3v_{7%DX2v#?<F;OK#iLyjBO~NWd+*Q z5}9feo0Rx%Tqd$b-7irRGqw$W1Kz!*CoxeQ?>h6eBt9z1qv=jJNVxmbH?+D6mv}UN z#Ncz`=DZ5+$=IK3Y53f1Jimn6K-y#l+nQg8mYE<*<Ukaw-7UguQE8aW_w>#0l)wJN zYpFLy?oQ#{c^YS9{ZM{o*7?S!Q>94R?LA7dc^@~zpwaU(Cefm{N;{sc!m)G+hjZ79 zw|CdqF7%P#82<xkZwZvUwb}E7(|ho{OXsc`NZE_S@~bjJt50~8a~TDZWpaq!CLGy% zLOz25FXH*p)wb9qso}3r^xI)g#D=aO%E(lyL2Ro(W{VctB=sM&<p@dPM~v6N3ZrB* zYHj5j&%Rh>Z^PTw9mE2p*6ujP3UhGYjU)92kNDOfo*7k`-F<GQ)q>4*^Js<SJxX%i zZ&o$3memmWnCgiS{88(NtHbkUws^G^%+J{|cqVK&$o5uL?`74>ZQh99fOM~6b!$@T z-O~PEv#k=24t3otSu&YCD6&2k-Ca%iJhw!fN!QQ?_t5F#q5A-1oDZFp)6}3pU9YmM z#!Z(?YmDjP>L#Cgsb{L<D!_BbIolx@bgEU*XkBNvNJF%@<qG{e@NOMtxZ@=|c%WKi z8*XQv2CMj%N5Hc{TarV#1l?{r%LbGx!&0tztE30wTTUCLG(6W$;&ZB0%yk=%m->i? zT@`~~GiC<Z3eO1{SIGXUR$hA9lO^0E&XgEYo;sdd%Pi9{<GZ>;8N+&o2`l$tF%kDH zYt54Xm~0MBTYtR%+EY=$)RbGqQ@!lLL%gGv#?G113AD{O@r&0XMt;7uH9_mfD}*s? zmKw&P&<PTSJdW@k*xF%BmA&%kNufGrZ9Pv{WJm2pz>~8i?LrU%+s$`gM};KzQ6YG( zfy}SR&1<-PYnV(t)5!yxz<glDJu%sywwjxGR*-H}raIi>zzZu+{lHjCJ9BdDkVEE> zn9P8*0x{Dem_Ba-+%>Zk^=PA>__!p8?6^{F4V+oH3?y0k$rxg1(2=XKe9)DVJWO1j zlr;v-<oV4W6mHU+$r?=Xm;<TElvF${DkBclAbUGn^8_Tk+u@VVWOFRZVDnVPIm%Md zkz+LqnBTcG(Kn6q;S_JW@wYVbvH;REkM2L}7I{-H0^0(L#3Tyg=^K%;b$J3AP}N!B zREbzBdv(%|;8RSgk=P^9v<0-tu`?Pv(!b6IMb~M<??|VITktWoj=mVTNH*2UH6YZS zOKw|4#ZC5b2f56RiCQPMUhnO|q|JO6r6HyB)>SNz*@x$PVD8e`dgKcdiRMTPJEn<5 zZ#8%P(GK5QY7{Fb%)SP#xk`I2T1SiPWe=F0wZo`UH1Jt>i~T<X73Xvbz|xm1qx<E` z(EfLU%EHFj#O)tZYW+`3{Ko=bIx**x?9Zc6(N_*X2G%TpEN>u@()cQgT`B+50(MCN zpiCtLT)-@mc)B@k`Q$N{_`Otf(PiVz=d^Yr@q7rqz~T0?X90}~I^m&bp|PavN<aFy zCey<d%NRS?W2LcwyMm)8JseYYrDa7BaurQVQqs(Vdx|kN;heP8=~c!{u;RC0^cE`~ zsr(4^%939KJ7Ahkl1(!jCI^F}`wd3oXJND({3`GyXk1j>1-fN$^q%51i2WWb45PmG z8u7n18GK}DMHrTy!tK;!RNk-M=R$QB%#Kcmr;bv~2&(uw<?LS*qHK!K@yhLmtA<xv z{jEamL}q^|rVS`Zd1Ned%1K7ZK{Eo_-0Ms~;_*zew~DA(ms1X$cdux$h31VMaVb@@ zQ1HblIEoTztE;_6nCDe}e}f_OjYVBMXeVOZR2lv8EZ?3IP9c`kX%xRFN$X~)-(Q*x zaX<Nym;no6ZFTF`C|q)D#Tw<3LxROi8WZ*KqPNHQ34<qd2;47C2IDe;b^+hLxo}cQ zYyBjG%JCG%anMOi9$06+-ToVn6kD@d)dtjrF4G_$HkRvbREtfH)Y<mTnBMGD*F?j9 zB$n)ehUzur7bu%&z;Q>}B1~n2;|Y4upELMNk8xTb5@d<|J?b1YybuSxP%t9!yJ%>( zrb0tr4t+)~K(PUs7XN8s!xuX1gslUZDqj<#_*|WUgP=47v}slx!Pw|!;EmJyO0=7c zlTLnG_?ohI64_0XOf29LQw-x&!%hm+*H_-qH^6fT&$%p<U@X^pfmdL~F?QgVF_XXi z3cLtYxi0K{3+g^C#>tLq){UQCp^nU4dWb)(59=^GI2&q>IMl;VNCF4h8GIJ?4)al8 z1gX6ZkF&@yP{%cY|7*phf!hq#8Eyp>+&us`6%z)l0d=r+*#fo%q=h`#5|2OVM!n4| z<D=e;5)$RtSW&Eb=}*(H8dbO^b}K-q3GWMb{uzew;BGYD=7RI=Bc+mA1p7Zu4Wm<S z+pS8<yos)ZvpnTg%OLc+Sf|lhnX@Cql-KAg21!Jbvo;OtL-I;=QH!&)lVq!}1nPw4 z<#mA(94=;2KO)2eVLCFxKSW?f%l^MaVEbsNCLv;&Lza$A&e~pn8ME{!6ui_8Vx*>N zuaqwl*pX9pkLPj5=8<g8(i6#aK*tH!<6`T{EA6D1Rah;eU-nCu8jr+sh)&N$qVKga z8LFoHBLb6|G@~)1|0M#ar_D+KQv^n5wEC9_476_me(5?Mmg#!uP>gopcaC0)F74A; zM2ABpOLE`xWhZ<S!AE`%%&Q8xDiFM+Yk&GHGVSrlP+T~#Vp63InRv(0Ja~N0NTanF zSF7pD`~v^7RT7&z6A8Y9jowKr9tBTQn3zDCyprTsYV)^cq%dVA(sCE#X<;OO2KWH3 z^@~drYuYqA<#!P&uB?!sL~H22(X`A+SqnYqr@MF5S|xv8W@hj4!l+HH#cMQdZ!L@` zD9o$f5PxDwy&TrQ|7`+0>vVd3s}W5sG9K@YJVnVOOui#d|FU_YHFW*zGgFu<5|dB~ zsND&frP>;R4rTu;gw=etuakMg?w+6$&;LqHKjV{_XpOI&c^VR%P$?X1j=!4f5OkwS zE<)r#CU8tvv)nH~4=z>KiCgfmC9VH-Y93@uBO^lJQ<a+H>1|e!#>UTo!)Al1je)6A zCVeK`9g=3;WDNqgD6Q$-D;-WdB~3alI&geG5f(Ysgy01kKkog9Q!{|GU_$H(FadrE zvvYYX_!~478{O{H<@Uq*E>!E<EkF)Qu-<L?HPFb(EGWvEke<jqImm7mj%+i5h|Pc% z(aQApkLp|Z^cm6Gp*-kx{dfQCI%Zp<`F$WzL!|Pz_n<UUxoy%lC6AZ{8&I-phuTG; z;X}D<WDI{&En;<|e^>rE*d9Y;3x3y^3G9O;LHlI_*W)b=jjGlBCDr`tf2q}^Va_@3 zd859h8Yid24Z6=)U9BS0UH&J|9y1+ZHI2az{haors2xzRMN+Rt;qDKukD_hOIt;_> zez_|9$&(^$1GeXjvER<$V9gh4Xo0&5w(yR90{&8gY3WlQ?1(d^LXM=UF7B_R@$GLW zX{67eYQ=Cu*uO^fGL3`}uAY=Ni-k8<VGP?beNuZ{!LPqm;Pj>`0KDSARNxgT5t<_C zCHg^b*LuWKr}C~;H?tpzmaLA*soBl5Qean94nEU|y#t(+|5Aaoe#tgEvj4Ga$}GW| zOP7&0j1Wb<w0Z1w1_|D^9SGUh1u|jb^2#7&6Q?RT%vO}h8P(KLq*uF@Yt!m%w{(}_ zGIb42X|dbRN`JLZal&;qGk}ezl~s0#-siEtD#S>J>rmA$98tiq`C>(=)KSL(LF=gN zxtk_&N&W0}-YG_nBnJW1+f>MD&y~bDC<Cv`gHyjDn%0Sh^-CD=wY9|(L^{#=euP8K zwYRm9;31@eysd!vii#}wbc$&Y6sYWnUv@{U!|VLg`!kjE4Oxd<#4ZOp<e_i>D6kGb z@azj#VaB!lNg;pKLGH5qeK077FrVPz%B-_BL1r?manLw(EdHw7f%FT4{kE728PM{x zgQkg`Iq|Ci2K#pb3?wZyi?B!ungpcD;O1jtumc|CU`QSmuO3hACsz`u4CD`@lJj`1 z^~a}4{o~V!eEBq(C9{1>e|(zZKR(Sj2lV3C`4#IgpJwalmrr9@;^>iapFhIE!1@oL z2HUa5-$Jp<P27D&$k7GRE~cxaPt$E0V$pALGD7mvKwJRdo6J>8<Wm|w>^;5d(Ulcs z#yR6P!4qQ10^$zFQEZiKVn~rO^n2OPz17(RNc3!f#pnHi?LPw&0080tVIx!icLC|U ziLr&jzntX%x77S!=B&RjW90asr-1%3eEMUfZ+E|5i5?&T0N4M`EBbS(e~<goef{`7 zno(|m0YUWmO)Ya=zSOuRtW-FQF$=T&YBUUfxxbF~SP(k&Gg^s6zM^{jw99oUz7Hu| zB}PaYx8G&^!gs){Li|$Y+|HM*6*st$af+~g*6y5Hi9vK;M|x1|*k8;WY$sw$bFnK8 zMYP5pU0WO}8eHmY_oG?yw`>ySigMHKNQ?L16`_3|{Vcm;6{iGwktJ`*=Qb);Y*YJ1 zRov@qxqN{RAT5nulEWUdgpxaloa>*gAvK93GF!jz<<z_(jU1k#38B`h1B48I`GyHU znBD^L-UK3|3c&S}Oyd9g*U}pR0HXinz5Fj{BL999jBSnn^IiCJt>H3jII*v#ok3sW z`D+Z|zp>Q+<611N>@4i2tftI{e+B6#6`7cM1_Yjlp8iy59L<(m@D&*%VQ8Si6m!Hq z<*$K1dx<>+Ii$C1OfK1m2^UavkqXx6<EeYkrxmy>dOo_PZQd^9n&s>5IypVvPR|B? zFQUO^a%jTja}#{_oS#R6ogclJ(+CyNgzeQCE^@`~vO{kTqqU>cL4BG->@p0yvl{yE z`3;@|U`%<(UAX{>lf`m7Vg+ll^iE;&dm!+rc4*JGgkmpY(YNtKX_c`0D?2uKiCk#P zsX`9|X!=x`1E5-f`BX{+4=(VG^>j-1M=OO?uo2h+?ed~Fj{4;rr|q$&PGhA*Xq=xg z?XtPWu>u;yy<{}A_DZoRA<)8ndtZB(-2%Y(>cYEbRxo}-i6_Feg<1K|opwHJqb60y z*`qfw2y`kz_jHol)CX1X!pAy;fzptUH#r+epYXF=urzxUl9u;Za6Z>3dDEK}M+?cd z^TBnnaT6hdhyBjl7uig`xEvR`9&Y-a<@avI2A6rf2JyQ|!mxIBu!{_{)X0=F66`)_ z?KaN6LXY(UiK|Qu!j)4?mRXyLl9t*iY13!LH%yW?*gFgP9Em42bL3<F6>}#FnOvB{ zW(eX}YGvL2v`YD-$Xd)XW=x_&v4`Vi5j@??{E#Z&eZq1j=)*6gHHLPf%KxXVJ^_Uf zltp@e?4zGpMfYy6YTEqrvCg!(FBwgViSAQW0%kuXSGz+8$pH(0`8Z@*hyK0B<NX~w zj~`WqDMf=cDdeTO9thd|W^uU+bsSu!>JhB-&tYlJt@tvM1H6W@Lo^4xE>%ccR|0Ep zL*7vWaL;iJPPMn`0e;;H(X3)+jxE}lH&?5>IJw(IH8rQkx0YaYa)C5{2PYQ3U2_1~ zWYt9Xp?QSv%?01qfQoMSdcj|ZyFoGQs_*^SPgmDvPO{d~7~$Ih@~5`VZP7jJzb-){ zOT7SKoyGICdJ?6a-KG+@>jxY!dJJq!zTr)izPEIGh}5B+EX0e?_wdvjc(!J&&8TEi zO{QP6ECo?0ON&X6ZB>W*ie2?(uap_IH+DJ(T%cO7?yr6@ZU)}pN31fhZzF;az*ILN zyAw$W{XkCg^%vV;JTONLry{qQpT*;OM`pKc@p^#%=O;JBUw1q9z#2O3*Bwgxzq><C z8JSpE8JL-j{<=epRHnW*LLl(A$kl~H;~<fKho4!)3kCth$i>A9-c3}fjH)u!swU-{ zT5pKIY~?%UFBv0wTea=kOmb1{i+FvtzJ1>V_R{ovheGGu{_%?&n04=C`8M+Y)o=?+ zb~u6Z7{8lYzpUwy@;GD4w37qxoN6}$pS#K3r9Y}l*?MG75)Bv3hMtofLJ=i?IDkNm zy0<Lmrd?HL)U>@;eI;%)d6d9Ljj+MZh-V*ju&fkjt+x4m7W+t}vK~`(TO_&|g)zJT z*s!WXTfGRn6jm~qbOnWQxe-Jo3`CT`S^HS{+8)qW0}c?UsBRsm&wUm%CdweTK$*yx ztQrB@_I)R7TuMhnU-w8q(`^LK=P7ifkXdJ!k01iYF%y~^%`ho%H4peohj`saAiH#K z>*-#SC4bXIznuL-yvD_}1|}kOP$<8|v9rc9!KdwE?$};OXIcGw&WM1RcMidhjteL? zZA-R7IoO^w26FwQ>1n)VDNw}|(5V;#V9;n5j}9m6t}r|cu6@N(&}m~z5>a2=H2%{d z3yEzBF8(igGH^{1lBzMl0Z3u3frV-K=U44eQ@fYYPAla(Qf^u<fvm>{X%Qzhi=gw^ zu7?o&E&WA`jaDH@_OWL|nXKddwfd9#EVtVG$@k^6&Ba*pl-SwDsr4~k*el$1kwa!a zV`Bn^q0mmQpwq%mj&)qQ-0=D<C2|!-#UvMWE5$C2<Rr_$qT#vF%HpZ9TnRN*-+01v zh6(9P2BTSWQWb&ag9Ah-!Cn}hV}=Flwdo4}joD^S2@33XbB%>+o!A<#r0Bb+D7d`e zw*1Pt>f(tVp~ap=X9C{hDTVIT#kwDE@;rN(3QhA}m}}o&f8OSy{28<1*-|T7)4O6I z`2mo-pjXX=`)U8}92Y}g1ODtjRyf8-BIWKzR$6E5X}|W9ptEVoW!Y+D`{Str7*dfO zDLMK_Q&2beM}*~xgiNB$`6Bxg$Fz!c70IC<U6`+kkFSv{OD^;X*EclYJ*a51d18;v zV)BxN7MmYJIMwGHCgcv3qajbulrs)!u+vc`O{poEZLE0x1$CF@fX}wCdjIo24Ep6| zN(Kf1u#fq_`KJ7j!18DD+$E+}%^btS*XiY)1+&5!FX9iJXs9ffULuUca)p&aDlN_~ zxZ-;;&ks$o!(Bj@3xih1I@1Nm-angn<_;d+-fpLi9-Q9pKt1k%&qkOT9Xxt{4ph}$ z%M~L7w{GIYcz@nf!@JidzNTH*ET8{=Q_YDe;`2TqVUn?V4?>}d_a+KMcL8ofci|F{ zX7sZn7cUzWk9$5ziLVmfN;Qi&ttV&Wc$7E363s5uD>`z+7hyyLO)5~N^Kj*v5@AZ4 zvCG`aXBRTc?kv(qppu72#7m;I>-|EAH?W52gd!@VGJ<iOqjxdk{X&$aFfpA(NQtKD z-p7Daj&vk<EYf+ey)88}*EzuSdyME0;1u(z#ZLaD*?aDS5l~z=P3CsZ?SK;MbQuml z{nXYjJj$Ww#%Vs~(Z7`42pMK6c5k`y!s<hFdgf<x_8(8BB!-TT-F(YjF+sXvbM=3Y zi8_*42N9tH5Zl&em$mlM6!fzr{04>+#gtui=T_UO1!|%|H4-ZJyPfHC=q%*H<<sSw z<Il|_9>Wdlet=jstat(L2NS7=umn64Qg7ao^^G371%zxqE7Em+wus$Tq5VB|gQ{Cs z1pA}4$(PB#A}~llO?_r)w4+ky-a}+4e71>6VF%a?-&CQP5)GT)%M1-l19DC@?a=>N zSzNR)%(lFVh<{ri8&^_r5^|?|0XnKQiM8K4LV)6h1MnbBgPn1WA|%{k_6J3<9+?dI zStPD|ZeP3!PwhS?7TjIUGqo5P&4d*C9V0PFc?9ez(UBEGOjT`QdP~0qWJW-G{iuB~ z2BtfjS@I5tOy><HF^v{jw|~ee5TZ<Jxf|#L`@Jh|uhv35eG0;mssTOAvt-YC@?gF7 zux`~^9+ZIUe5Aah1<OW3oR9-m7w~wnESy)jBHTWCBhy4zoAG-LY9}4xMsa8baYvzi zgDEOpuNFjXVS{^r!F2hOIiO`F2$8zw;hDoOhoG=pIju_k0)=L>w{IG(ML_QN>sHF+ z$J#{xjV<~Wrh$4CWkjmdjz)#WILT6mg7d2SP}(V<C$17!xK7oUA#B*-W!RR2KxcHK zzG~x<Xy+#05?LY5TU20zNg|0fQ}ZDxR=L!TlU?B(5ZYG$rq=RW@LO8_xV{S|(f9z& z9lVdT=<<)*%glH91DS<hCvvX<P<1s$g-pN#E`(A)WpWiBp*~b*kRN_dSqe}MMy|8z zh?p^*8Nen4nAf0iwz_3N-+vYzoLbvd>f?Ms`M}zj%#&be3LOQ_%lMEC35ANX(v#9g z7i7$U(jl)BIE3C%&(gVEewPA7&!hk8KOSt^$uR6RX}uz@XyTCevyb1O*64I41C7P$ zQZSy(kI@8|;aex1S)q}p=Mwbm2XfQ_9ai<lK~prrFq$Vo)0%jiNkm&SzmSUTs9*Y4 zr}#W)%J16Zx8c+dhvr8HnnZfRESGiM{*4Rz+eHN9UgsaR0LyqA465)_wXB)z(kcEa z?gjlVBNS7rsA=VP$@l)El03|LHt_7XwCvF1F;xh{s^4Z%`sOwJ7lpUz7aUbk@`cs| zGU^z9Bm;g&qtwA-6MKr#iJQSh1G1%~`e>SiN2S_>4ooO~ogB?%Xs;$$@5d9D0S%JT z7qyN}y<uN)H%;drbTr-Q9R2=d+$!RNmX^XeUI*v2%G8xD%tw)JdwsZx8-l9kd~Pj; zLEMsjPt=q3_oj<U3y1Hw<xS{@?dDsTC#_zar{!siT3&`%+KL>h-_Q;{yk(L?o`brh z^cbW+$bdeB+v{u%xw|qC$bSZnED=t;EpRG}$iI&j+E(<n$x)zH$5>zf&hve1AiW3# zk57QwDC>Lt%-ff5|8bEwFn9q!a<l!-_Z(mox!jIZO>Q0(n1?QN`s*Z_qF9x*s0mJ; zz%4LHwM@icE=|?()<wj&Ej_Lk9Z%Q?pvUzd-jzONQ}mGL61#^?D31O|8E1!izu^>n zLt;r2>^ZK*xF40!iqwaH-@EqqLO+6T&e`I+7r(#}%4W}Sv~yr=1;V2ZteXXRTK<6L zR_?cT1U~`^fH?{f5G~sFN?foem2q4&du#Hrb9PzK)9?Nd74FZY+LAEf9P3vQRQO*7 zK?7C}Lk1>8BU7e-1i@|FuOR5N^*el^vsdUG&CQoK41pE`fnhKlK`tpn8#!hWt}bEj zGrM7*1^XPtyd3MZ^_usG+4kyez~PYL<F9)ww~n_LK;9qTkGq>dD}nd6a_E`#Y7<*G z)|?rRzu%C7Rn@g}?7P=5i#tk`HV?cWgV39)a_o(;)7C6ZnUga`ZRj|7!k|zvo5&S{ zRDB(DcBWNb7`4nz6jsAFmq!UM#TXl2COn26#i3_08ttuG5{@Su)Gef>dBdP&Xcf5w zf~u*i_)B3l1J;`Z4~N8hk*E!sYZqZxfCy=W7zvW<1dAY$N1fI<Lu(Z)LZ3TJ0BjJA zo=N@ZQ4b1-8A=%vh)l`8BP6Lg-YKd!+0Zc9Ix@(1D*ZpCy<?EA4U;8Wwr$(CZCj^o z+qPYG%C>FWwr!p=&aJom&h&R@;!aF=?}#0-f90R&$=oYfuFM6_-#cg<8De`!AFnF- zkTwvRvX*QPcNXqt(bR$+kEFSI$yF;t{;mmDB6%p_>7wyGQ5P)1L-OVqt1fF5`I5Hd z$zM~MOUw50;V`H6R}$eq-fmvZ%xgA%yoUcP-Nwx-%~XiW`W?84Ul4>svHi*UdM%iF z`@wmrJCpr~l2(htA?Nd3>qbucGdl?N2Uj#2TC#b$I~?%`6)GF8zR1Uk=8Le0-Ua`0 zWr8Oa7}PhP%vYZXb}cox$8HSs^`hgl=8E8Ml|>}~U@Wqzlw$Ep)p^E+cb(|!*|{wd z4|S#?#XV`b#d+G(TO*|U1<hCp>R3)zbOUqJ_`dpP;6+q^;VMxgWQw_L!(pj>w%uWC zOirWAmrbFakrk8U91dlS*66R9W*9^&y)z+G!E-Q^Bft<_inS$=CwdUty6hqMhFD-C z$?q!22S*q1@E#GH|7|6pLSM!-1&25tC&J<%8c#R=s3jBhc9RD-#9MIDDbCEo10wjU zk;O%_qmb{{v0zijr$6QkEl}ROlg#zCU$F*_p?C~{^$;)P_C59k2*qUbjl*2CdQo@O zti0NMw#+=f2m^7>ZIM!2{2IgZc|I$x&eo@kX*Z@>mQibswIH?cUeZMRkaqi&TUql` z4zsbL?d*Z&O&`hs>`dooPwTb4;X1Tso|17Vm<6)@xs4H;)MVll$XPK|O(U`43Kh5U zn-$yYefifLHUA_eXJ8{>5jX%qI>rCl1o1zxAN{{@CuY`mh6dLEmW<a}7C*`OhxrSY z45CR=yU~`Q-<(+g5Mwmm9FQ=WjNJiS7%6PcqI@Xs^i3j*?b=*DPbY{pc6Z<HV_5p* z;(oGlr?WBaO!9Wv$@%%c|1pX9=&IvpGl+PV_XgLhZ~8=U(gi<<YYZ|(0$$gR2akOe zTs9SUdxx4G#ld;;n5eMF9E`}mOH6ylBZm4qeh=VAeS;AZL-IlQfwQzQ)@cYy5UHM; zjM5>#HkT`w;8*a0JNg^p3<qMi4vecEcVtu^5z)?J_>)7ht76|L4;T{-h4e;EC>ugz znT`xmAc@=H(&?5UBP7KQ$JQ)_B+4xHi+NUq41st*Nd~lc=8t^~5C?pmhFDL~0<@$| zY<(Z^RvZL<{bmgk>`E#;0i>*`>P(z_@KaTg`-vOOV%%{9e)}OHa>zmT%%NcF<DG@N z;OgPiy^~zSxF=8FQX|YpO+<!kE-3OaV;=F5c=}^3Ge+*Dem@K0Z&!j(ASf}&*kezc zl&w0DWeQRw*%E()O8;Va30Kum4zezR$khIzN)wZL3nu-Hlwk)z$dW6C80<%5$-6PA zhTH4|MBEI4P;ua~LPHcqcxM=9rZbM!<V1RL5^O~#FcU!o|JlJK51d2m19x5C_%Wq; zt_hEfAAMdRlKrSAXDY}Ub;Zw(mM|KCEp*E~gp>uXbPGlxAiOAmHw}0w#tVwcNQ1dv z>QHJ~bKEk=+CzUZ;f$+5TzEw*`Y*>;XX8vV3q24!i6DTBU`SfL2F7r4aSefStbK~G zabD?h<tzd$XPh7>ynVh1oLfj(b0+Ifq#HtD5fY*XSBEmSceBcv(lStNI6}Obf!NaA zV&Bcsp}MM(990+15CVQlr1-q0GFI_IpmK$B=w#Gvs5`@AsA$%vg~9fA;}&@0Hd?T$ zA_+xAQ_1}ItTYaQT0()uoEPE~zeH7GNd5W(pmGRX0NPLRCWJ85?8vY;p%jbCel=oX z3KXh|Fj+ecs~MM)!RX@#4lTW>A@y@)JaeXqh0~!lRY~>H^JEx!{puDKn0|R~1W-&N zW0DtjRDt25=ssN<5jMM=MT0=moPH>FA_sJw2~fG<Fd3F~?QDgL1C@!f`Nxm#n#1x; zl@X*B_0L#>vpQ-f?Biov1clB(O<j3GgdgXd;AATdeXyNmRSg8|AqqRZo{O9=9v2?w zSJ6<#3%vR>R0GVbP6(zLVG7F5vS<d%X6w8QtzMbri|M@r1YL3=b=JQG?YSoI3%JVr zVX^E_Z3Wa+O4bJBCgAfTWs@zYjfrO?Cd^_U{Xksl1bYRk0$-2^QW|%hL+pZ-hbkG` z!yoCWCcS9)Rv@1jY<#8;1_n=cEk5l~5BOI4CJ40a$)xQpCIdhN2Bg7?k<1Kb8G_o7 z$Rew#ud~Vri-1oKD6$B9g9~-{a2lalLOm9F(J^nX$l0kPK|J><t;T@)fFy)K2Ll$S z%RGSoDC0Cfs&9@)kWPuw`e`0wWOl~NK$O2SwFc{{D*S@kizQ38-XdgFut}>WO#Vo; zPT)aReGD5X>6gi)q>k(s$S$ZX(Lhb{9Pg#pXITS4xj!Plrg`@}U?nWXobhh#3VLyu zh47in$7#aR_<M;7_+p}`1FKny6BfWvOP$-OZ2rDzb1*P7%*ggMGX!YNj<|j`=rT4k z)Tmxf*O^OOOHs+pOP`&}R$p${nX7Fzv8#%+C~c`-zCB8&HMdi`Rnoot>>1<AyHXRl z-MAXTZ5-FL46wVPUGePEEM{k}qTkF^ZB*%|kb98=O*`+(?pLy+^Z)X<*JKm$t?aS2 zMbVAlzjX0QgKfD>bqi&#%k{704GwQ3?Q~flNfx(3f}3)V4?i$hF!mgoDqw^aS#x-P zDWVkNKwsPF)dN$>h3r3g?3uwj7t%doxlf^1ZRiFyj$O?xqE^~MkH7xXLFmESX2jg% zK|(D6LaYIrHq`FLf@(9lP}5M@P{^sZG(ww_@&B=EO60i-3Si=b5$)H@-D-|hW<ykg zY@$>J(TtDLECN#JTrQtKSm1Ec$b)47*LM+JK&yN8LG68~(pabeaYrqbXc4c6aghST zJXBbQWa;8#jL{g7d1<OvQwpurfVjB(k@@zH3B<2vGQs;K*JG4RPYA$Oo*V=1@3}2E zj?PIA<davOX`Tc?`eKY(9*!&hk!s&wBGe{vVezLS76aD2#B!}|xXl86R-sqUTeGnQ zYlx7&X!T&t=@i$UJNsm$pZVK5XhQj&aIH`}Spr3PyH6Ond!hHLerp5o5-8<k^!hln z+tHuRSdmNvl}IHtbkVa+uCVP)yQsbQ4ENwb#GOYHN2K~;pD}=c;ybd#;iT8Pr&|+S z-r5hn*X!E(i5rVcf6w+Jjw|)O%aB(5D$X`F-NT<l@_d|d$unSo^#nXov>?4K>9rsx zPPJh=yN`XW`~_VGXjJg|DXACxV_}|87!X%jH+S1QJYM|n9yhq^B}_HYwfjf&YGf&{ z9%8#xSAWm_A{1_^m5nCBTN?p8P6Ge>w)uHKsB>j{u$$WvFS@{TlEqCQPd{GJ?=BT# zpDX7JNUk0gqyjX2rRk!-o1y64`tD!!M*sZvn_$vt@Bje-Jc0lKaQvsoCjTKlDo$4X z2ZoR4uF5;ScHej00Jg9QS%v9iG1!QPlOGMO4yz)WJr@`6<}@xghXf*QBxQF#&bp=j z<@90w;K}yu><oQ*jBB-jIlg!vL>W?;s68xCZhWh9%OWo&rmW?ML?Bi4B0To&mRmU- z>JaDbO(R`iZvS&6BN#zO+aQQ#y}n06t7xGozknqv$iX*MI#WevXo)=#8ro!`C@}9Q z3$hO%IV4RXb<DF+R5*Os9FD@IV!)>E5u%S?XX1_#*dnU_sFzSLOZCwQD8O-SF?hdU zK-+t#ClIqy7I7CMY)$liR9&up2_f<)gkgM(B>30&@a<%|%WGV`M+EB(N_l$wu4pM! z$%tDR{LE03bNZ=LwTd0;o-X6MP+F%|nw~LC1mXH$<{F*T$;_}bA55#arTopV=>F<& z-1v!V|Anm!SrW^}zyhTm`60tE-ZQb^V7h;Sl|f@F231>N35Hh+nE~6m3D(nKzY&^M zjqyi>@c2Kx)4XT`r$QA?4m9Gjp549V!Whrok{vvY2SpM5T;f(7uq5X?#-73CGLYf> zweZvPU0h9AJn>R0DzP;%?H(rP$Yx?2QE94zy2sKHu~t_#LKOXdx;v*G#L-t4oZJk5 znT92S#*Iy@1!FzHUR^*2UB4N)v#7XwD6MI&l$4>SJe&jo5=B8r3%lrN_ThR2x}^`U zpPxm8yF2?jypyf1P61Het8)!DAK<(LTE-WRJr9e~7;LL$X*JNtt?F@<N7FCJ{||cd ze;*3|UoP|h3mE<PpZ^i@e;pbB=il*vkNE!``~DO4HkxZH0~7!t8Xf?E|395M{}J_P zmif=<H${ED<|l!CN`4s#gp1mC*lXX&l9IT_y9)~)K(^l(F>*NAXVIyAavO1%Cza^r z`IsB!V$No*XN@P#Q>)@Ntr>^%NZ}>DId>EtK~E-kNb{jcis(s5ZuyF`sN}Ww5u+Rk z6iMWj`6qSk<wcD9cYXfJ@cuJ-Pr+OgO^ytw9bW;0i(9o(2Efd@WVjG6ZfYl{J(r>& zDpN9VjVCKEPgdA`06sCC>L}TspS7r^L|Tr*k~wcJ*I3HZS+E{xDy?OiSH8e03o4-( zkY7MyB@BB7yVz$gxvE6E>$fxkz>3NGna<peD9WRo678gDeYabiU|<C~+PrW!&!MQ) zfTU~jw<;s1!dQ|TQErMoCQn<ucuZXsSq;lMh73qvE}ng2F;Ga3x=^*ge#H7WUr7bS z;RFuJ5GdEc(M0uCpVBT(z8Yx)m}7DQ)ESU{At%^!LgAC=RM8qreelxWjeq?K&pq<N zy7T+qg8}~mYY|lW7h>a*KOb3m;J^?(z83hZm8@o<9FF6{lXq~!EGa2l;1Ng1B7$s5 z<$QLi)!#bgEn~)du)QQ!K>V7CFJm-aS_1MHzLki*=&nT=<|{nXTtO!_1}Q!B{=488 zf>wQzKx$O#3dWLB2}RTq>GSlh+-cKFM66&7l;Y0X6>l=AspZ4-yUa_AcKFbk7%C&C zFz@C1%({)TngSS%7cD7O$U`ReAY(D>{3xr}hQ9o70O=GVSMV}wGf@Z>kCr+fmjda! zK!t^i0eNFM(rD=tO<R|J!^WX#hYjWO^avkTH;s<=c1=+Ge#g2!TQPkKQg{p&v!M9= zKz#wXkL%4$KB1s;m-#Rq`Px$4F|9_BX^c>&K;EAdAV%6!gq<VlXXdBM=u^MUC<Y7B zt{0acxv5`@l$7ip|6WW#EJu|d)r?91?5W6%qNv$9N;BV%W>zb<u=$I;H`eOnaZc|b zUugw%m&ZRLf~8E&O@PhAzH4C?I)Y?x?x(;gSLe3)^w+H_EuLgW)Dfbuu)K`c4<z1V zSJ%bGVfVOUwp60ka<tlic!lx}+u8P(W}Q&IRkUzWgItB9;?cC^fJ2A*9*#mf^i`yw z)_c36&x~igl*j0#`aRvZoVr>1?ofMp)4gC|UU59<sxDSGDEEJIDPt{+(`iS}B2SFJ z*1?5*zK5{<>0u7`q~;)zV#fE}yp}KCMAmmOUGFA225&;qYg$Q3p-s8#KAcH%r5t4Q zD)(7lu!Lncqj78jRH-~J3{zxrh+7V}sCJ!ib$q;Y2-^-_FaOKi{Bu{r*hyvc+HUQc zJBGb!f_cJI<kzg7MgxxVM}cI})%jlZ+Z!g`L2JnI@bcvF<uLwCof~Ra?U#`jJN;YR zP_^$qnAIsFHBwphf~x$??C_1udy<<xy#;(?wb%aGu>K9rwp!Uy#f;+XoSH*f?_se5 zDH6sBQcluS(^{+|SOVdrt%<~k#cusKy~A%=Za95P08{?Ihh=x_J!7)f7fe(-XgR!h zL>tco+FWKq9mV}SeqJ`cc<G|97Ym4RRQ$f+bi7X^Tq4=Eg1fHnXYf(#&zB^b-#$ur zFLHWfz6$V~nmio$+J@(Gq6roJGNTNLw{3LmB{vjQ&1+1DS;qxbq(8^oPFm$<%k(#U zE>x}pT0PS+a>agpvK~SCau!aNPPW7hFsSt=<^LoO?&zwURr)SZ;|{d^>N32pOMsfm z7ZCT<Gk(0WakqXl)NbN`WoY7A+pAaxq}SZ?WNteD+tJNhpE_IY9t-`Y9rZE8m8Lf2 z>q4)>(59g!^B9p>@oxD67&wD9m<=PhZa*ql;^1aLO;wMklr9`LDVFP}&a0O`2Y6UJ zd`i%Zr7*3%l}EnLxh%Nfi7?aq80Efe&EDy0xGC*8xq0OKFXZJvW#1bg>Gk6WEQw<P z00{jz%D$7iu$`mHKb5~)Lo@Cl2J=)MhJZxCCL^`+I7IpYfq(?zR_=feEf#lO4qolk zZG<y}P5jV#eYvFEtmhslcl3D%kG}^vZhuq|qv7uu8{;Uya0+g8jHG%a=Du@p0u=#S z^!W<33Dc#*EgP_mFbOE5OeC)2QjokA#~92VF4Oc7So&{)3Cj7VxuTu1b~92MHc0v} z_wHh;!{q0$h*K~6+`hqCOn(1f{}BEcd`-a`jEO&aRk$D5x=)~ZJzl|)-;3qTq3ma% z-eucmru#HSLdqZCe8e~tw}{3>18cG}`<JD;0wN&zJ$~gw8wX}?JlWt#xg=3C9b&{S z*EsMdBHW;%AfJIh_8F38bdbQ9xbMeohK}Rz5=xW7wy+)SV^BcsZU7|_pUkjD11xf= z5gH}xduhFHnu$^-;S9A^C$V6?za5m}BwoD=Nm9)~g`hSN(Af~Su-L`Os0n^2z|Ln# z8*;@AFM+K<9yo6k>j%nF?`>r+7UjnyG#eCL=TAisyF%EL=EZfQTK_iH2nyvPRSd4I zgOw>Z)u7Ij#@6XE5UzR;oV?^9)ld!I5XdzA?K&_gpA~Wkg{3cCN65P5O2gz}kf&Po zrP9dn!H|y<3MC!s)2N3Own}2~Sr_PaTQrx5>|^J6OU;&`a4@ND+9Zfab{9nj#2-HA zFNBisS%RVTguT6;nf!|ka>7|kXoGdJrm8reim*#sI1{)O9mQIP;x-QmS-gS)QF&OV zSB%@h@79@iAd_p@Y1eOVyk`J&myf<qOfj};eF2XT4X=IlqjgYQ-UyQ6mfg(N2u)N4 zCa@oxBo1M-EE(4YfH{Z<R@z;6#BdGJu3Xoc+cZ>;HUJ@qiYt0r+oDmarmg{aaQaS) zw*~B0Q_o`8mkafzZPvX_T=&`%bd;Qm!Qh-zrrrVUQnqwnaN-&y%o9@%=nD6De)jaX zU2FG=J~!p{bRjJjFLg`S_jUE2s+(wOd(^ZP98H0?0_tPW_*BBP?9H*4B>fxOd5?aM zPiLsla#pjfnRHHk$YEL;Ga$MCzGx*xPZTy+Y9|ghW45ECfTttoHy&7MqEq5QMAO)K zc}$kTASn;yJ|?Ayz>)`@kC#;csq{zH&eq5Kp5USJpc}7#`$&Kc+9{>MKx(<uYUT-z z%U1e3*&yGd*U3A5F{SDK86JNj{@XJLhC$kOl40kcE-Lo(p6%z0eb+;3lIsGr0%)2C z?FD}2(6pNFl$h|DlS$^OyUmgan5tQ^$-yXsfld@6EUA>;G$*V-&39DwMmjvj!>Zl> zgcn^1JBei5cxXFsZ%%DQE6%d*C$eY7!dW399az&kZ**)*!@+_Q^EJE!(>PrZOpFe| zG-80UM4jQHsURvb!7*+PfHk<GnT^cB)YLQ6>IO$6b;6Q76<hERx%VZpvCAz$ayqU( z6AKB*t9RW@hHpnreBe6$?Z4Ce>fqwFL!$qZNi*1Z0?ApPHg3Osr9tl+jIV^=^+e|) z+bdX#rN&6@*?F$*-?#4HJf2P-m#0+LIG2(tu&6Q>X-zU?*`aVo*Ef<zri|8X=nCm| zVWe%-_S3Km>Cug@YnTx=Wi6Yzu3Ww?9w#xn3b7cVx>SPf-&MaP!{i&5w?91l7?Qu} z^Nl%Gf*i3mPZ>a`MW6}TW*dv}IsCpHf76MKmD2NXP1{ArSi!Uv|NB4XfDr#C?TlqW zts431MO%KHwq^fYrB%h;#Kz=5d}{uwvc+mPb{h-`-#fn?kbiAd1S4o@H_%tEZMbX{ zNp9lXBMDbwaW~-Vv0eAx;t0ee1SX9ONwsyJ=6Jb)wYI9;L-Vr_#6O|4$#Z_gs6Njw zrPJWRK$Kp#s~|EuNTun~pa)?+d1B~eAyI}KC{=|Q;C0RD6Fc>pjj<v->7T$c$wicC z%U(49;a&S(Y})U}!$()XaJIk~$Fu8&)Bm)ZW!DE!a2NI+gNhPaKgBk2u-1D14O&ym zUUnAup@y9k588!ee${P{rkr2y^PP+g*ZBhCn4o_}R($vMgpQEVHyLN=Rp0U)L@kdV zP$WM7?gWaE@M=>-LiERIyco(Lg-LiHSKC+#lV}QjDMQlWJ>#o{5N33}gD3^#J9<(T z;s-qrO|JM|>Ud>AULe|r&d_8y1Tu4UpNf0wB*6V80qx|rSLK!Ve}8r+BzO>QqF#if zISBW|oIubHPB(Ui<6852+(Lm}ppjd9!03AMwUjUBRHI?E2;a`G-o{05=lJC>G+X}J zY(tU+qLW>C^Oy0A7yP*?+6S5pb;hMv1CcPAAwbJ9Rlx4^&G((f64GN!>$EKgs8Fvm z;t$hsaKC70)L@i@i-G|hAYpR+03hU-W1_`m%VHuY&|P#g4^fKdgfvER^iqh|9>2A2 zBo|%LK#8^piHwb9Y(0uBosg=MBZY&o+(m(n_OjBeO=cyMOX>ERNfv_xxS6OxN8Ul{ z0MMomv3*ce^!DS|XrEg<R+A!!68M#}W|%F|ZH%p&Mi*4+$H(|kKZi1lGE<4xq!R8) zq&3b|nh2wpY)TgL!`)tTJZV1!br(4@`JyJBp%?v+34}Epjy&D0L;Y-1%4Jg3aD7mF zEb62^_6>i9nseti@wl|`rbfcz@im`s2-}YJsfhqra^oBvmOe0nE^;hbA=nWj5xZ?~ zRQIoH5!5~W|NqAJKczhWH~s9tx1bg_24*JzDyIDh<e1R>MyLCcGuQllMgEJK`2Pkr zaCEeDqqDR(ONrx^5K=@L{rj@Lsr>%uJx2;9`~(LUOGCk&P-PFH355395;7(nC@r)s zzb_w&D4fEaB0sJ_P|H)nh<1JsJRrb`WeI_9n=UX#`<u?~?Q3>Fi}*$quH{?e7l;TT z%o~ATzn7U9c_M+nfMRz(pRvryh<^G4!hJAk{NKV)AwLR}VGUm`$^nqp0U&Bp94PW+ zWQP!kc2~}2N2&JmhP9(^DpJ4XgCeX&Rp?f39h_jM0dvaaVb=*>EGtNl!64oaDm+E% zPE<M04#deG?;AJ{=G&a7ndR%nuXFEBM*@VKvv)3YUP&GHH#V%eOPz}Mt$2CXQfN0} z_K>W;cDEsZe(q+c6~0nj(m?8Y<Da&RRy62l|LPcglga0P8hScgvr2Ls?}qd9VE<oO zx__Pr)G3{(&d<cW_#fc;-+LY=?muoS#wNye_O@m|%G%M;iWqp2ESVi52MtI#iwHv8 zW~SWLu{P>%CB+o7+AK(hTu#>HQ(276P1_Pxqz+Mgkak@XIz%EwLtlwy?so)8gjfU2 zLJ)!%Fx#Yo{J*FE{(bAY^?sc7b2Uq&!&ql4k0~fiI1f>Z?GkT~a|03mvGmOB@<+Lr zYdAZ)=PD)A4woux3l`8y^HP8tx3oFrU6NG9)1pSnHZ+aM)90n=OxIUsr)1~qtSG6f z5{IM6$D0nHx1;-28c;HFmf{U&DubBP9MX+8@j^#S(S4axCgnCPXr@X4#N}wLu*{Cp zq7XCB?+lvQX%h;@PcZY2@wKSJm;_4Hg0L6Fkk`imV!$@$8cdWhhSMjA#uRU)LDwf1 z3@7K0&=g2ks(HahNM5XEmOv$zhC7OaQKD21LX9hE{ls9+g5|=>K_`F!*lEh)$g02g z4G0Rk9$EZ5HWYSm#SzlZ(U9d!dBugB!fLIWF(H6ab=`Q4z}Oeql<9BS#XG@<tE2h$ z-+9-3QzEi3>#lJngn$p-2Fh@>L|kiBh8+fmVQWn8H98~Ya1T6VV^QX<j6Gdtp^ZA+ zbp-{j$oV4VB^FhPVkJWkoK*L*2%5~`?XDp);ZL14TGHVgdt-lU1Cyj!7&HIM?*p>G z!!F{RhQ!jF(M!o8E_a7Xpx5+z`WjLtLXrt#@gJ3XQI+4DQLpm!FpPtr_l4U(!{{w% zdmBl{w%0L&P1}U#8DX@f%;lU^q>ziGg;mqW$-|IMS5~YTGS;J5w}FJ3>ifaL(W#e! zph|kX@8`Y#pp&zO=bv*OowyOG)FZhi0=thpSBbvdl{KVqF^8>F-rxIbtl#e60YB?8 z>b#A$%R95~-uvT8s^w9h-8Qp3-PaLw-WO|I`$={(c+9q2VddO#a=nx!dOz#$Ezb21 zrc(D;#nRW<Cp_L?SB_54RhsN+x%_Ui*PTh-1N$Q>WV4UVt7FC3IjvElaG7mm+}9@E zdUkr=PoHaYzjmADqj&u>ExCC;EkDo5b9XykH_DO8Z@Rxedq$IO!`}G?DR!|^AFhLz z4m|94=kkSjXNnG0d{mkm?OrV}ma{uQN?onr9vpU~KEg2Y*DBo0R>N}mYI3Jult~uG zix+<1G=J^>PZyZ~oz!IiFD9_%|5~NJdzh`FeyV~Y)PF_D`S0cbC+I%}q~#Aj+LYTA zK=6s}HOwTs#sWVSm=sp#SMiUe5?lsL0Y?#y>W*mTxLndZB}(?Yy&9f@m5?G8k2E`- z%KF{N93c!=98NL|;xM0dC}SQQNs{Tv*p-irLi9VW>W~ARWTwDzDA@TcYu;T>0aOHQ zU14n359Z8&FJ1n#zlr_~q!YI^U;eX<0%GQkA)zf~3^0Jjfz9QMGR_3ZAXY72k&NUx z@VJf7ZT=n-gt>i)37+Jfzew{>S=Mb3-Vw4d;VI=Ka!G@Qx@`Ybqf*1CRA$5_>uBT2 z!ZyjqLyxlBWz~Y)sep|uD527;e^9Q<Zo~<A*G`-hUw-0~2^&rcOk}tc9<Ob4bw7A` znNS->+JoL4B6JFXPt+}-qmZ&aoG=POkj2%rxJ}Xfj>ci)0(femFp)TAziuIO&6oEj zIG$E{I{IPqj39N@rWFr*croZ^rg&Y_C~DkGF(Few4fHF_knRjA_iTgsOgP)AOlrFT zFciwZPk<%wnhX<S<Lh*w3gEL^5fBfxq)VGJvKHL(TK#LU%K8D))d^6?mHctc#F>vU zIZe+7jtX}NR#%I>g5yJndnNRg#wsvC1{7Z)w%C+Kp@kzWf4=J+Q>wKLG2N*?)TgqE z)>>$_t+?`Z!`I(*>*BlWs_W$}ZS1!YzS<Yo1+`(N&)^iBY=oQG$2Zm}&TGF*J!3>Q zi0wA0dpeN<8RbPD+(;o5r?a2~9VG9fVKxRRZgp7UO(MNbzmrIsglj!svCLHm^gklP z^(z4UmCi2mvZD^rN6l!P<_rN{wNRIRMj01NX*Pw|GfCZJz2;CFX1U#Go^wL8>sA_8 zyQHFdC;soJoI&aIRGSOQC~w15U$Qz5z~wP^;|jWPy?Kv77o5BwYmBKF0{RHnk#u{N zY9i~Of#ceIfeP<7<~#oE^Neuvd^kCv7Z%`xdqDV`wUg`Vr!vRpt_aNZ28)Y=#?Mdh zE!0kB>ZbuR&-mfLbghNAtbm5>Un;`!hOm`?2airaZCq+<sP$B>b?JSV5fQ@+UPV^* zXASNm?d5T-dasZd2ElF%rXm-8V1Shcy`IKE_)ZKdkX?*Ds+rOT&SBU5NV0B-cou_8 zVG_pTkTU!dNbCm@h^^^+1I2t5`A|yiuGNeiml_L4#X<M%2TgauhgPh8r=7Db)oVj5 zwyfKx+b$evWNzWMpF*G~zCiy6$ou!T33CLZ;=3~d0C0I=0D=E{>9BNgF>&<xN%SpT zk6)V;_jaF@!I}7L{oqI4O|@jfC)O5^i7g&B8$dp&EdZoqj-;4E_-{AaPG;(fgy;8{ z^TZlnGyi<1W@ch<YuySy=0A36k`B1uO}sICv(e5ABK3;NMPVe<xC_GyacP|NRHMe- zKfh}=oLQ#nN8%$fXCH=L5^}QD=Yy`ZvjzW5e)2^5W+tCwp78w|c{I<FORADFooC7< z6;;V5pKk@<74<;;`dqCo*d-VJeWLkCU^1o9G|a<+E!Fz`g&=b#t+6P2r^N4LlLxb# zzFUj5xSJkyjx2c>5N7uA#p4eXc-{dNfWINY3r_@gJX}GkT`qh9M<!xlEf0f5v_pza zft$jmi6av4E7iuE<-^_nQNMh7t$Ev*y%+XG40rdU3EOau=e%mh^g|`!lT(JNLM#5) z+<Elq{Ov^Wd-jQFf=s1(s(c!{q?+hGN}{QSD_d{q#d3QS;_xsg`dJFVzT|iPZhJIz zWh*(Tct%6i8`F8bl>#NiEMyTy?8)2DO99mu^`KmisMdm*GLF+X9R-*?TXAG0O01<F z^bD}BMa=IJ7bGQ(AqUz7XynmLLyhH-QH-iaS7{hQE1D_kif6WH+yZ%xBH2vSKp|aI zR6TFOHb6zI3tvDqOMTwZyQ%rXa^{SXXm=?3!!2<EoH1n#cn_XYyj4h47BxQeo?@N6 zcCLW+d)uiZzf?W*mcNo@06jzZnI~kCi2@NvRp4Y2+Jlzl$SL<Wniks2CZ7)*=7^}@ zv#w<4kT1f|Q|?`$@A`aD0Zjq=B)2ud<y@kxUS%IGa}Kz><j4g$1MG;V=oR_>h<Kf! zR!z9R?hXzM0NO_VZm#9w{(hdl`rgj(&o9q+9#)Tj4f6Bz_4wVMi1W%|;@LgjK8*q` zGY1m!#u%P6bHz!&jy+gIe5p#dhnGSEV52i!N(OL9Q)B3*swc<!;B_yb_<}>nkAT?d z>gYSINSMJQ{~|3#?e|cz6{MB=psli%3U2ZOG+tVv;gzmLdLP2qv1M~*){>otbk`8L z=b6>lJ7A{JKCqPTiJC2I6z?vqto~N?_-o$v7lYx?nYnk<V_Wa7=g09Tdu>2S79dvs zg9(qk8OKSYB|aW5JQ=??*N>yTFzB@WghkihJwD+=r?|NIVbWq%S*%@Z*ydpF$lxOR zVA?3Z_g6VTpVM;1r*NWT=k_4KQTA0CN6&6|KuXe9*2p7M`*`Z(+qC^(^A^x+yqH+i zmyeG%;fI4)duTEQr}q!NOmfh@w2fdxzn<S)Fz<K3VP0#yfsVG0k*_dgi(sB9S>F1| z&#z{G8Mv_UiSwiV<;?5efGQLb-$Q8QZhkSH-rllL{z|qG8on3jhkAVIEq>%|9qBFZ z{wizBGFQaN^#80R(G+16{01RJCn9aoNQGonKBgoW^#wiVvXZ8S-8Q~A@k9d-!faQu zcqe6X2v`EXo)?m9VAjuWQXM<fpI3~v()2}`mt^h@mo^2K<mrq}ls*Gkna$#tPb7(w zv(MbPtx{Z2{sd?<FUW^Hu4gu;2EEa13(UJbwd*-%D?X@fQW^8pJwm61`6eo#dBmiN z1||2N+@14m<qC^6tHa7GbcW->c75{pg_J#%KRUcqu5b}QHjM3RgZ_I>EwdkA;3P1K zqX=Nn3oHj~QTyPYI#u+!`HG}~?l{WSo7X)T)HJcX00I<kXU>fYh@h&cOP`o<M5qc3 z@9C7%jCzpu3t92!P?U2$&20W&QbBlaw_`d?J1G?2kE)4o3%sG-h#r5DkUNC-`!I7c z6^uk&%+LMR8ZYhm-hss%$H2EKd=Y4bd-w=E9mwYM&Z2eE0h@qi&dx%0QUG^Tj9e*L zK(aDov+;I|!{TpGbjT1mVsei^5+q8HtR;FM*+H>p%*|8B_BX&c!C?Tt2Vifu`(ju_ zo#3AWm+PcVw+~O3oYc;{ukszLxe4eqbo1fneA(y*?^JJaqm`DrgoH?ZucedyXU5M3 ztj?Mx95u_3q@G4EXq4Ukf$0Q)Ob`tfr`K1A%d+5IhOZqysKp4C-)b%#h26Xwa%*zz z8*AY!phBP3nO_i2n_>GC2zj<L2CCTUmnxl~3yjPszyU&FA}YUgS4M_SI)Hd2DeJUq z<8g<b#t6SJ*u#nt%?R?Zj68~HgU2BW3XhDKSda2QN3IJ>;&b%G>lcUtpyozVA+Y4m zx`5QQ=n^eFGa^y$3!TB9EC6&6?{^A+g>jG0Pse1&^Thx{G2`WQ`F>vvgGk(Ub)>%- zs1D3xq%j~Au$4{Uo!#@Z*}YST6o(sDA?FwROb`CfIvb^92Y8HBYA4ZJSM*IG9d`Qd z60991gF}l@1M&@=JgO0hI8?aS4WJi@!$W*kylh%tEO9o!L6Rce7|#icrbpTUR<8C& zs5|DXN>q<byB{vAZ<#F;#!4{_;UqaRvhc9_$T6L6@*<OR7g_6p;%i<>0Pr(Px8U4a z_AFr=QdNyE$@6Jy5I`w_*=v@sd!00Pd2xGzp{`s>+@FHPn{?*$f-FE~cQj9S;o0*o zFaoIn6o$_TsP`vB$nC?qu?kX7Hlln~(YglC2iYw==X8F@N~d4|2wJKKv$-ImoJquE zj1*)jo-SSpSzftz%P15DyI`(vEJBLr?dD5A7xJ{f%3!_sK}1)8=_g4EOT9y#Ad^46 z|1&75)ED{g`R6b^fKK-s27CktNK1eWkb;x=3AlWf<p}@lwUqyRf>=J##VF`Iw#uzg z&?spQ;oJ`b(b@4XP;Cqw$qh6ruTv*k?fwW0WFjhf4G2P<0w0g(B^AgmbEe>_n>P$? zwN*CudWm?;^K;lV*lfF}9H6hVDVX*WikqAlXJKoFO?rNZLA)5Fd7)z_mbQ9L;?pJ~ z<FWkw`KzkOYWex%osP76rJOFn#t6Vqyil=smvO@=LfDHfmecdEdXjxrTu#cLx=p(R zH&l?0I0@Idl<OvA+l)Rm@C>wrj*0q2lvB7eNcdL-7O{Ltml3SZJ|miC0hRjNSxmdx z$ASzx>Mi2!<nWd~eF)9R$<RIX=yu8EB^8J?|B!0ShD;A4H*$Kz%GSA1=}nt4X*G$Y zqFpfcD1H)>gpW)BHdKx19W@8V1c)FeX~+7q8r}QY!@;Do&8Os?^9F&EeHDStH+iHr zLP`G1Dn>*hRi*}4VNp80nac20OtrX7u%_!7tW)^{n_AnJE`U@B7iWVs5h_MQRStY7 z)YoJr1_F&8eP&Q*Q+*hi@i;H#Efr2eJ5^YvSo65$7$fe!%UR?TzS>GB&_lGd0`^{5 zOWo|#$LBy}_lz0jbehCvE~~mlcL5?_B77w&fCb@Z(v8)WFYSq-61MVcS=%YZOc=aS z9!RTn*2Olmmp2H6x>>4-xEb>(M?sh)o^L3HCtL)}qQiUg)E2A-UFA8MWUDmPt4QlV zhlr6jK(eJa6qk+PA83^x;RQs;{?AmKPt#=|D4?kn&oB)(F;PI01#(FdjO4JtVF=Yc z-L66iaE7CXaT*i=Q@pJSjMIC@l;|yW?#Hc1l2~%@MV9Z;pAHt-MgRQP6PT8x+qDnj zT~FdDEpfdl#U|KKKqWg`)s3@zhoLie*H)yLStI{|a?Ip2<{~rau-El5{n%DS{~m^V zogakfZ{1a`!i=D%ovsb5bI}QYw3&qZc4zrKFaq*|)pCm`%^EUHk)<<eP^<E@wjFZ* z9QB5LVv>+F-`V;tPMNii25t(toI^u>a!k42t7-SE;RG1%3`QPLjG-J7Vg_%X`wVOe zj;OxgP9JsOBIbb0aO30CRi0U!Q@#Q!BhO(<IUZ23Qutm06)-P$*U&{1SFE~*UBcz0 z3lZzA%!dMx$r_aGtrA`m3yz931LsEMBewnLGG1Vk*a5+YQ~;B!bycZ;QHAX`M`G`@ z_YHp>f8pocWx#t+bEuI%?~Z%A>KP4Y^B-`IJi3%~xKG)Ml=HZqQ;U^LxDKD7JtDm( zMM-CD5;8LyPZ05#Ryb#>Ccsr1!6PU}VC3&*Hv-c2E7xR<(vEhE2EDDDGTKJt&f);* z5H%S3-qLYS3{z<WwVkkVVY^hr_z+y8S`ztC8cyOJ4YGs{#Ydo%uRHf({yVRLvr?4r zb-_)tn}>6g138dw44;%CP40-ODI<UFDH_#@u=agS1AROfO;brwIoQ`fk2*@>MjO)) zpuU?s8ZzL{5)*&%=Fq_Kivo!IRRwg~0I>-1Y?JoS!{pPm3y4DaMTqJgsYvusVB{E= zPT>8yQBme&J(k!t94knP3F_7uK`g_j6pQk4$C{~0T{rW$5zXBq@PB`aXCMjd5XFqe z;}N)c_-Eu~ISBHBJx2$c#0Cf9cZ=$!o{!^5_KB_9;VyB(MY21v)v`UI(v1%U!y<qg z6FfL~I_*Qb_A9T+T446^w;ZP<%I3{$0y8XV!OL0U!YQ9aouOV_3C)WuA^Y0dtl!*$ zagi)i+SoXUMq0U8=K$pi(;=HBT|=^hA%jihzZAM8SWYv21d5G2p{M1<PuQ0m2vKfP zjtLyZioum9Yqf@7JU0a%8<6EP->=JuYJV{pAiwd<qR)h0Ad|PCWhgCL|4!ejEnuV2 zpt;f^&2(l_$uj7KZo-|&yF<w;4qR{<E^4Y5{Oa3PbrmOKBYDfAHODZKl{hx^K~>Tv z_r+!2bT7BXv_iw>yd@+C%)96ou;kw;l{rf3lr=JJj9D=NrDeRQ)&s4tbx16LzB2+i z>gVLV0*#b4Fq7ay*WoJyJLB3bj<zxhWU3cKn|-uyjFdA!9!zG9*c3an$I^m8X_gfz zt6PZvd>p5BMm99aW9A~8Ga>jWeGuA+9S{`!5l@S!mDcHcFu}m95h&Hd0~~#Lk^R+% zR1e-9ar~^@R@k>$0C$$L9_=uP=arPG*^b*GL-kI2%7`tIpv*du3W&jwvz8=*or%r` zC`oNQb>c-apK)43Y_ww2GJIFfN{oTv3iLy+&{&3Z6$AlsqwpsH)V`4KSw{qX#Z}4P zTQSW9c=ThBY&vqyKw^HeVq$JsFl5sivNwcYmM8%@C=U>d*Bc&|StDi@t`e<!4@f-o z$AR-<J=I=nois_PyI#{5l^n&LoIO9<z_nV*B)JjHu9ZIh-XU2e%pyKZfx|hDMl?}x z0t)EkK@cZqVgz<Mn1KYpS>_>ZE$r<NO`w;aL*GY%h1eH|@BMzS<df+dSaqE<AIT_s zr|Xt@AkE@=1;(t)y2aM@gRa2BO2=x;hti<HF&qjSb<r<X!aR$)&$9e(5ff_!tV*^J zgd)toyN4MdU{d*(Lt-xia||0CA>oN_u`)`T$6!HSzcza9UC<lfK?5%O4t`Rjv87V) z_eHqX_q*X-q|8|u3*>v28QKNJA7%#EP~NiMJK6^`ax@!8#aYWT`V#S>1)4!yQbSKn z#k`228=l7c{IwRgNNuGR1fU;Fny++#7K&O&c`S^jvKql6%?Z+O#%FB^dIKC1?+L7o zk*jvaBfh*$Khhq~F^X=gCxA#CqNsf=COBC!RKPSnPgx_SQu4GW8%frGY3-?Zgh><6 zc`pM1@~R`*Q!}OXI1H4WNLmJ^qMtf-XhnEVuR#_YRHwe+KN}DpIV?#fOyBI0k!(o} z=08E|A~!%(n9sQ9&gK<>Sv#bccgW(W=v<@N@Bj;HMZH1rQ2w#+FQp@obr-v@_y<{H z{{&IFAtfLkW*B@5wMPHW-{?*eByubYzU8<X5D+#05KE|9S+^9N-rc^<iu^1_WK(bY z!6b+j8`|Y~pK3h3Kc|GkZ7dWG@=WQ7sE1EdqL2hz2{V@ru`h8EEq!4A98{XzhWDw% zL+mb1B11Vnp|J?G_%D@;C$9LM6Eq%XK&W7m$j%TER>V<6Rty{CGX?2rC5QtSUNTlD zc_ST)_LPCr3E5m?cUc?Sj>#Jr$CX;##PY>VRV2Kt7vvNgUEw>_9KM2jProWJ_>r|W z2LsORk_;FB4XZn0^l#%7s4eu7wv*94{ZPCkZ?x1tgYhgm*%C<YS=kgEhhvn6t@D|g zGwKZECk0^|ZoEp<B+j-BMO_}bohs*fV7Ec#Oe;=mw2m+_g9cB2&$~r@zo5*vr&~t5 zWG!vj<TAV$g2ve?MQUf&c$8s7qHpsDNTA8IR@rw{R%;@Y`mB0CN8iXcnaHT*1b3+L zd)&SdGK4(0KbI~2iUT8|XWxIC)s;Ux`*Pv+v-7#F*bPPJMn1WGeat?D;*XGrVh4ze z5GiBEmtwuGHX#<w*kw)CTv3Y>Esa^pdj}=5F~;G>*2I9Lv8!Bh%-v`a#!Q3BmB`K8 zmE|Qk`y@*kG2i2v{gwUiIGdh0R~@y!q2t}|U_^K{fziK0I22<yM9g$hjzR>bg-SNd zPnlH!$CH6VqP#sq@pMW17<0MHu_gxku!qpsyz2lyS<D0~^MXk+6u<XsS^YMBVY3jk zs<gl{bQ!Qf!+;1~uF!Ya`rua92bZRI2`)TCI=)&An^UI@AyW(ro-U^?US=EwGNITd zut+w^?5iLOAUv-UyM5ujtbZft{>szo)`4lGi-x*>G=7kh78wN~=N0~4zCvLd%jG!m zLI^0TIwkQ+cnL4~q@p#k{<!R(MT-xsVIeU5E_OnHx8_6oyVDjBu36t;$CAYYYrK8~ z_7(9sWcO3lgG`pdM{mD16_m9}W^Q|z9)304ux2lllG9`RF`48!u$<7p1D)+jVF_T~ zmaPVA?e_pQVi$SgxGCBboZcSedWpN1FkX9szWNN0u--V-rEN8NbH|S!s9S-svqE?k zyX~{`lO{WmOBp~bzMv0$YkQUI5ysAHJ`TL_MGo=hMwmf)ctub~bIJgPw-Z(n<S+9x zq0{<zHTW2xt??#kC?H<!0um!?wDEf}#Du0!{~OS+l{^m`cgZ!GvN|DAHnz`M#ASWD zo)rl<7KZ#!yqp+rVrO-%FlIHXmD?9JykEq$1=im2^J5TekSj|O&>_FgK+`9~DkOcn z(ii*mq269mko8ZyG?wHAK7_{oUY}Ki;=z|@04fogT<}ch`ZoMz#|Eb$Oo%#ol;dk@ zSJsJV0n}xR7_6P(H;se4K_>RQXP!2OjUE}3g-KTo!ag|M32h`U<x4nH{1oiwZ(7e$ z7!q>Th%peIV`L>_5G?}EP-MOHE*BK7Ll?RM8gX%flgpxVOc%7tkG8h%;5YpBfIk9I zK3q$`Wh`0h0amITVfR?bHr*)(io7X+g+0q=JAvI;iVCoRC)HVW)7@Wv*k<Jq+B@Q0 zR$j5AYEMi)W2F0k+#*@8u<PL(90SB~oE@_U?(T1stihy!aW00@(H#KkN_EsQ!6-)d zOc>=gy7+#dnjI6>o*kS7U0>%$xAtN(hYvbJb<Q#XO1y<zL4dGl9itQfnN>?U!qF(c zHIv$9XSazhJzliBQyIYo+A`uyN9Rk|E_a17*M;VKQRBjQYX?dAwLL@}_%}R?V8<(3 z(CWv;qJQHPrrXKuNv=nlFOj`s2Jv}6`q+T^Do*HFsB!gH%8@^$`jhgaFMz&cl|3TB z0&qJC54TY5!AK!$R%}9Z*1?TJiSY}-<GvnAsmJoHY~<7UqtrS|geLAY$4e+PD7+yY zQF)h%M(X%0Cb8Lj49KN;c{}Yjm<?fsay#{8L@eGPJ=_-@f+DA%!L#bfIL3I<ZR{FY z+!G5gcht<=f5)By@!W0h#=HP%3SgUQuF`HAE~L1`jR+<X(VlN?zo<lKnFr#SZR&dB zQU|F_R?Z>|%JKTHX%bdMhpsK2J7#_#(SFFIo46jC;0*o-CGxvE$#K);+zbeywBoP+ z-wW44bjbtGj6$i5#zY*rqr0-9%?Wh$ys9Xy5T|R`DnCfMdvV}m8KUMTdK^RKVF54i z*Aod?_xvT6qrt#(!O@gCdC`g_SF#1y?&0d{WSw=)aQk0LOgjhfy5~i#isAda(5>lX z8#3gn2ebsOLF9<v(o7lE+?@$EUy4d)X|*n$G#!fEEPNH^S71!s`OLiXUkw7fV>i@R zt#z5|tA9~2;!kf_p5Nv6V*a49NOdNp)v)JN2IaY~fzaZ4N7|jL&5&;xX?lnA&Ar2P zd$?F~F=Y)J9n&aPo(KA`(8c)f-Bi8+MQQFbi&!(Q+jyn`l8Vwyq*RieL?*}5pogUQ zN44?DOVvb0UE6p=b)t%7oOR3UH@?oRZ~ppfs+IlKF9q1cNxof@MT~UbB#>Nw*D@}D z^v?W8W59z|kMPY>+a!K&7NYlcC!HQvA&|jo_J+j8YNLSk!rf|I)DdhIyo0s`{#-H! z|3FH*X!@o;aW|PLqozr1CDpES&@2NHk+sDLd=efo<xF(V-XPdxD-d#Uq}jOExl`YN z12vY-_x6Y;$h-*eLcGx8QX`C;OJyLIU15cE-oP`Xvymkr@gWfRlQ-~YB^sf5DaDbe z|7h7RG6)t=g^==A>=REM#?QL$sIXkSpwb?KG|t4m*#=s~JMT3I&D#&>U2kih&NnRl zF$|7Wc~>*#0VUt8Z}K7-*?psA-6RMc7Z3h!_11_fPXJOv`&U@6<^HQjjhNV0S4eTa zlRD<FNaBE<B}4SE^q8b%K~GFE0DJ#!u>hDyU6ipqq&zMTOj<>f_OKhO@`Ex9xVBXJ z;v>h4)h;iehCR<wIr~c*g|8Eua2R{;l>i?z(y|hN7o^`qHCH-vcf_=1pi2*;p=ZZL zx&C24U88r3w3@!&h}maGXUp}}oL_iQ+KoM;{kT5ZST7nFjJW?9I6x4Pjg{$)1)HEb zV5k!VqDe|s&?bSrO3>f8TezG`VECCrtQ7-D+Qr|m+y2APM$?Es2#Q3zE{2PeeF@Vq zORuxQbcl77wk1z+uNkX<@SMjDNkXXWvV<)Jf@Qw%(x+@oU6bM_TRYt?O?y#6W_0G` zWK%F*o5-IwTRmM)A&m@w-#Xv$)MnD1ZROgX`B1lJ*zedg_9c+$z%JTjChSN9a^gE? zo8_D&5%O1`1rA9TjOb%Z`2Y}K1)UT<Lkqf)%6J{kR#yXTWl3AcHG;s^LXnvBoH_`* z1Wy-#QOHbEu_9{5$~vT*Md&bu^>(c=vVu|NMg>UJwmUqxp<oRCO_r;ZuUWP-3pGwk ztW2)Ic83x>Xz1TOn-W}G^~b`v(~6LmKho_tvBpa%uLs86VU(8#h}8N6az)P3VSRIs z?@#)OC_xdycm~GM@BO;JwwD6928WQ&OEVP&7zNG?W<`GFI?bEgj2~v*xk&IBqI_1E z>pLhWOirtT+v_k(++}O6!1rxaV{RF*VIQ>F+TgO!I5ECxl%sTGkh@RZzM7&h_p5e5 z#&`fV9RP>VPWWsVG~eN5Upb0;|H^CIrt^j@)U@$RuexI=U=#|)xn}h?Zf1;}l0}M_ zSl9qXx{e_VdMRk!Ra;N8HBR8`?YsSmol7KG*vkNRC_s8&_t#lLmE+a%+_o&*<s{=t zl2dMSk*d${Qf7x?!o&Q>kBsAVl@ldszNU?H9=^d2d;spNEW@BdWs%qvmSKJDGt1EC zqd^zkB}9I|DF;agq9{P3v`SZhDLfdWE<HKU^eur@r)Fnet_l(vB03;?pWyJy_FpAf zZF!J4!0TZjuQ_w=mtnB}D3=Qp0&#-ttg_oBC??3Z39QZKjoihQAt_OfD97(smV-HT z;(r;R&%9DJ4tM^{xv+1WvpOI&sUu@$bU4j5Brr|R$CSWGf?d3XUSfIo*p;PnN4E%; zIpcH73ALK?S4X-q*cVa2K32y!qQKxZOqoxTbSW#s1H_3mS5=LvqDT**_EGj4yKHc9 z_JjIDWOb|9Tw(U+CDit@wb|vWb@R=d!1kcNqRVtiXC+DT1SLpIAaHOUXcwzJ?17Hq zS;!GBu_J!Uo;X5yXDoalM>^U#wjNee^^1`Wx8>>`fEDEcO8QVrK5EUNZ5wbXXp@C* zT>B-m)q#W?^0_c{bIcqfOJ&Dx3r$bcYT05*QE;|tBa!S~zoOm0-0TZ*@J!f4XT5gB zI*za@L5r_q1hDq@>@3oroQQE67xtQoeE%7y&aW126-$1{-rSo=i0Hd@wP&aM`%PMr zQabmE`9~ky)g^_U{VMe<!}oXAg%-oerRy8sufXAS-`QIlQss6l^n~*|E$Q;f!gmN0 zIsyU}h}s#9R?}!hP&<I8WxmA(IEtgZkD>t9mH;i>{|7}ty1y`kW2IibD#G5Jl}`={ z6RPmsZ<+E63UP>}uO*s`!YkNbhzeM^#9ASvVJxQsE@H(YGP7_Y=rKDxKtcwTyiCET zm?ps0i_3*NS<WC+HAuVd#|2xx7Ijzfy%uZxh18Z*!>(p{=S{9JIRuhhmzJ$EeGq=q z6f196Nryx05t=#->!A3K_7{h%)_m*QKXx(`0FX<~CCc3Zb?cCpA#D|U`KnW=%y62S zbvXK*h3T%#-(_IK&jC}MPL1NNhI$1ljwH^Eoo12!Yp<Q&Z~R~lf3xOei_rZNllra9 z$u0NuWWK-vo+z(3PqmHzkPqPjTJBfeW?nM}<&}K|tQ7<gX|7!@luUouq1lu=6JKF& zXJ#IaXe)js5(DRPv}5){xl9U`y{G|hY#iT)#dEUB`Qzf`RC!VmHan%BYWtSUS54ej z8Xs9mwc{4-64d)Efi%@NP#$2P91a=q{@rq|U`@_*n$j$M^B=c*eY_5b+J{Zso}9&4 zDO{@x-WL*tgFnmxVH3C@RB$uVbG<>pQg5hC%)2dN>;y@{?NWzB%A(%C5Otqw*I2YF zT3~{;)ofLVUth-BQSCTAKdnVNrb7VunUNE)UU2vp6nVV}F;Pz~a6~Fc-U9%?tH2o* zoq@-V;K?yXH}*NiQr*em#~ysasrIY<$~<cPNV8Btf=W{uNvV8u17#$VbR(T3M%R<E zH+O(Yx5VNK{RFyw49A4zq`{<{H4l${iR}lyr#6Ya$e|eZORs@w#skjS?na+n{F3EK zL!#7AnU1&16S@JgGLC*D0KU~(9SC2kq9KftIc`vE$BTZpR_mc$0@mrL7u28u1>}Wk z=EN@5di~alzT<nNkv4GThYM&_E84`3$8)0<xC)LqEJW|>Fs`H`_nO%?_>CV)(Z&e1 zji!~c_SAtNPwlqg&DOLKz-q(<Q`9K3E6cLkaB~n|3|a-hRz%l>E+zB>`h;uWY?khl zt%<xYsZC3f+P}^h=<Le6y%#SVPBA-v*rx7NiCFTQ&eO%M$oXjVjVQ9Ms(%L`<Y;*F zE`-GL;`pTOi-q$WT;S;*3RCujYaMrSzoyR`^J66Vap7&K!b*FQ1*C_<M5BHM$Ic0s zkRKnmmps;cy!G-Uz1X%FRMcbuS6&GLKbt9DDH)I#RIL$a;ObdQ5Vsd;19?=Er;b2~ zJ#quW%Y!Q7YyxFhdYd?c)CPDVaRJYI_({ih@B(zpq=c&!#ML<r3;EI^xzNQ62|adH z5@dD9=%{=2@yT|Vg^}8$6^BP9W*%>icWX~qxSV@qh2+V69)^B|@Yd(~at?}io&qtT z7$f=}DBZSB9R;~{sS6G1f4MMsEA?os1pyV+zVkU3k?S{Ho5!TC0Y0Am=Pn|L0UUZV zbDht-2z)oJ|HfbpUwDn(+|U#6uJ7mFGG;_IF}3!|qx0{AXd?ES%mKNC0O-I1=Xn7# zo!dRbyR`@?k17cJ5Ux57eI%x0yN#?K;sbXz2NnYWZ~`1SP0sS@*GU0e6xDFoi{Ona z@ovwq;H@JPL=RpBBOgPJJMRtmx^q~MUBF0i^%$ypxBSDw@-_e3r~o!Jd#R}yRd9+- z;k$vBo!T@g`d_fV&zZ7{#l1s~HNi%TM9#N{I<;4u*23Eb`cMSh0@KUYcNMyj+a>uM zevHcM8lKXcrLfx(N9_XNgS#@EnP#w9F^)fGL{anzuA+SyKYmnU;PJ<g#_~6g&f!AG z-sU*ojHtc6&1nuqG(nrfDO|UyCW!jo9JnaB$4*8MAMS2GjvtNV$B)u%v8?dO1}h=X zVTw1$kGnb)G<oddfZDHdbnkab2aj(p6nF8O2bN<I>K5d10d6#3xZuLK-q5hx?34h? z2Gysr-3l0$AmDc8AeS!lL1DaBkxuc#y1O|p%Wgd;zft-t76ATiuD~XdxaIhQTyYmA z-82j@81mVyO}-a-K?=WfWhXQ^yTqY)a+$w<HCPc~$A4j?)C=<QvdUraO>w8bmfI@O ztH4X<H%X<KR1~#b;xiK=;vomMJc-s<qnt`~`+~U@03w|`_-HzyTeueh0h4F?P8&O( zI4pJSeoTRJzl($}ycb9}g%|LYue9L>rnlN8z<Ue82uldBg+=D&2CZUTR=Og^S2Lld zC+d+v73iku5^wE{re*n^sxSOZ3pN5kjA6NsMVN_4UK0QW6+yaQfw15G_La^fI>V$a zoX=d}6aa_@Tfz}MAWkD*WB<rKUTgkr(&!xXyApq39CzD6a42Rjqg!}w^rz_@_BoYN zp>s8p#1VN^152i;8!#3Md=taj<H@hmioL!i;MK#OuOC89WoIDZZ39cY=Wr)XRq`2U z_L_;z8SzC160h2aaB`WKSj4}n1ye_92)F)5;?W*8trbHYQYjbvVp@AN1xBjum+DH5 zO6Q6Evbw<AMgl3~rJmjO5lhXz0V@eHxe;|MZcy2(IgEwdCbQwm^-$UtS1*nfM6&}d z$Q5+=^;ZKXa-<<rj3EavATuAZ&)8<kPo!XPXE6DTKJNf;rJo6AjI>vU|DBu(h%XNZ zCUtgv*zG}5$S2$%xA#0Pky*_&Fq>lP8HUaC60;mrSZ<aEES01aXv3w$w0(<Fawc?o z!<)|>AbN_2+^^xjfB7oD1_8(Gpgb>tv%CWaMTJT)t4QW40{M#+4wJGsr>7-IyxbWJ z-fKLkQwGD-%G!-bh1M05YM4kj8YM=XHUurVhhx)dlQ@Uz4A3n|6e{poPw|1=5?zUo z(FA9gw0Uq5DgpB>TRhjfWjr{2R%RVOT^*HIzPDSR5g(;BoAHaZh2{zy2~On9I1}yt zlXq72%Bq}UkZY)>MO!M}XK<mU@1p$tBbQdYa(^5fO=s{=cW-Bx^yC#`fN*pxu8d+< zcx4o8w9||T==>T3-AyLmQSz=0qBi^PN!#ix7R&2Z-q^<Bh@@oCECzl&FFDADKd|y; z$0ZY>amL_U{UPGSJZ8L^H!56HeiGCPukSP~Tfk96>#B>j;#9(K;YJrwsJM2r%9@ay z5)}3>v|Ycb?m-|bItfLvElPkX<+bhtAExu*=(P=Im?Xr|H`6NnOCVYisHUpwNRwMa znUwZo=)b1x)t6$xrwwT^D3!LMt)>lRV*~r}O%0la9w&YfGDxcj44ckD=k0oqw3N^@ zZ(C%VOq(c8i}eTSOy1?a<lur_m_rPP&n=dYIEf;W<k~s2Kx)HgcxOo~y!4k13h*x% zHCB$a+PC3b#lE2Pvy{@N+8Jnw1*jkSCR$YW1E+a2lKo?EQ-1gwq&|Mt?EJZWx<|MW z04ZMMZU9z;?~KPH96CNg*ic|1vetOoLYg^P%Eq2xGC;KFiq+BE_@2iCQEdl(nVuml zgbiPvX5W4F3`pf8$I=r<7?-%<NS?u3!TW*~{z&9gjhlBxjtWo=$;u6(7w%x6Yk;6# zhdQ!?D>NW1<&<O^9tGt~Dp#@8(Ai|Y;}yek?}{b60MQ2EZhK&<6;UtEC~}p~$RE~H z7V!+#U$N_UcNQOk%6JqFatX|qDxN{DaNb>x^plgU^$vQLYdGem(EVGUU!a6-0Lc*i z7n$Yy^!%Fr8;2Yw&s6QHMDAzta7cx?30H{q|B{{C`D#`q1|sCvn_P8M-3*}+H^73` zoa9VzlYA6?6Y`>VyA!wC-3<%in4SAw4R!4j?rKEVFh%1v+L?20mWqd{x69D!$vhA* zy&?Vha|XmiY4S5jQ7aiy*yQWQ$K6e^ra{KzZrecXl6uP!*KvqS!_7|BVpkRL|Cx3# z<UHBlg}_em`aS#*_$O!uM3|}>R(M>|FZic$R==*E6jt<h@GS<H8Ce@c+*2D7x>usE z3rZ9__<BPc|02Od5*I!C8fAQXa7OPF_^=`|T3}ykGRK7IGG#%-x@1j{+L2T^gW5%~ z%6!lQ12##_MD-$lNSc77cA9YymAveh!Z~SE?$teL018v>a40=8H}DuJ9I3>z639ww zU*1SG!xCFMq?28Al%%>~e>ls}&gLAE4@EEx=Mw$s>xVlJXc!>s1qP(P>e1u{2gLpj z3$)Bdal7p|#i&+=5e3*8UV0Hq6=d%1=?!SkZCg2#xpTb2K3%6LHUoY>RdtLz$@u=E z;eA%Ijg4E-P+zPveA!f-xNe)u3WP{QjB*psKlPmmK0T*9hAdkDa#^I;(VyaLxD9jJ z@lIRtF^&&#O8bD0S-`YH2asduGB5@@XU%CyBIi)XK13c0{8K}c4a+P&J%wUp7Q(3T zTP_=(z;PC`3eTAkwye8F#WkzRMx|)W8dC~+C+?h6T*L7RfLMFLlMZ@I4rQitba`Fc zy>O_=hgKwZ&P6X8@pFnpik8HOKiC@iOQN|P)+|-$TTjFfP%T5-HY{*ho1TTUAJMas zBwTTX&S!6b?bzHI#-q5tN((kWvU666-dVV{qwQ-XE=?4LFUiJl@wE)FJdU9mC-Nlo z=E-Of6;XB%anLRO$?6%VQ)F!YUDvEvP}_u_{L#6}80JreEuO!%pclC<3C$n68ppMJ zJPadt;b`2HPp>smJ{ue9^5i0|o-R*LkRR^VsIu4Pd;qRdlMh{2*W`TK=vHddvOs|X z@LwH(JKyV&Wrso<lG8wMe{%H0=>E~Co1;VcbKJi-ZhM`A9s-_N7`R_^&qzhMCXt}{ z8tjtph;OTFpl}1cA_Fb3YH5y6^7zsM!UIt8*RV(^Jg&u_ta9;`C|D4qni&5|jh<aj zfo183yBB{#NCY2~^HG6iFM54Hq|Nx~`S^^(*|=ve5mb!f4hzi$H@=Gl#DQ=S?@vBX z6Ezi{Mj+8qbs&7)AoTu_K<EWGm6O<u5njUtXP|gOq};`a4`y94vq})%81F5*S5l-$ zLgY(O$Ij&qSkc9`FOn1W{x6_rIxk^1o<I1>v*%BL{9^dz#gCs4cXp<y!=L{6={Li# zzyA8+!>=BGy$%2A4zOmtKtBP2M4YNXus~4j7n@}n($76gaffpDRy0w~A>|%Ql0b?s z^%KsB!W@3&$1d9Fqsi+Mt`&jNz>JjVZm7;$z|^2tm<M-mFRN&LUramk9FJu9U8MVC zKUBfGyBCc}#}2itkfDXVOd9<aUc;`9X@Ey%Pp^^JI1Yq>g%Nq!Px2Y!42Dy`lO|JL zi+%jdw-)ypw!%b0|DSLSW{j&h{0TQD5nO-%Oe)wLl%<d;)Qd6BrF#r!2(6RhCoZm; zk)lzcHr)<Z!lZ%6?`oLifv$O?iCqI+qrpleyn8@R6=1_lCLlY*5O6H~j6-;wi)~>0 z2qOVor$wQ;0AxN@ksH<r&uNVrTJ@?wRhO&8dg{mTJqYBy;mc#<r9Oh3XBJ~&0i1|p z88{@VJ%L*%6wf@+Ti3@e3kQ}-EzQ03NaDdP=TTmhIL;@K6_6E}Tx7O#QG|+XD9Mo% zc!F>sF)Ja08LUZa2f)uo;4`)u+r4!T_t1kyhk&Jg^^-=*rscz6%^dgpP{0-nd{DDt z_`$XXXi@@YucStKRaV1b96WdXlD#yF0r*)Xr_SB`4l|Ip767kL&@>b;7+>&~d;1KL zSsVV@+L9dHE}JHHEK{r7j3yG`Qv3CioUabM47_>%W<rhw93%f+pGt*CqN6vjU;S~! zL_)^89CbzkK<ZzBwN?m0o<p-W;<RUr!tZ%9um&p4P)uXycW_8;R~&rog~I@!R;*+Q z!PvBoFgQ;n%%6rUq3{Ys(OM0G58{zxjD#_s7h~bH*d^{uUU%{u;W;gDlv&{PnhfIZ zF<)i?h$MnkW~9m4EtGsMuX$};nt;{fu&{EiG+#wqT~u6&n?&ZS+}50{A7b2XR8Z3^ zE9}N?u+plscnRbH@X--G*cReSX-3anjfyr)sz)tyCs>h8NG{F;&LKr{NlSiUDXFf& z2;wk6E$A6pF%%|3O>*NQ){P$B0BhKEbJJcxR-HQ!3o*5-PQb<puJ#ZquD-oVN2R6y z=dSYucgawtYyb!He>_5gs8B~>YL5(3CfMREEtvTyZVd9~luR2hcYoClBDr@>ErxSr z90P`{s(3PEE7B74s9RQiM$I>`xodu()6j$Y$Kh7768TVdW!{LJub)5K9<?7e=VW4O zDw#5xpRbfp|C5sG?Lr;e0{ppbHRgS>*!8)Mex@|kka@y4*i!fOmlL&MM+X_l-GkQX z$yOl~yUJo&z;1|u>1#$n+^aU=CjO0Fea8xqC*Z`x&~D-MlRAUtMqMM^vYp=7DN-uc zP-0RW`pk-8!#&ZHEmv_y3s0X)l@@4SLN8WYP$v;@SYAwEgU_##&kC?@%9{hTU%#c= zcw)2jB}5bObBC3c7$)@C+o2A69HCghWuVJ!p0IAz%EC1Ie9TcLpq$tQ>E&UE<`fF9 zMv4bzzx9E^wskF}bn6hss=#K`l4N%_Nb5R6G$95lMlR}x<U23vW?+CJiOJ9lw|jyI zz`UujN`zn7lsg?US#eiVP6QO$ixKr?J=Gb!)q~>ZM&@K)9{^iD+xFH&i-g>G8|7VM z<jaB{&_A1I3)KNDdInW>Y;rWAK;Ha#rQj!pPYOk;kt#{iKzW7mWh$4gG5oy%lz?RE zrq4tbRzz9wbYb{H8d#|W{6FgeojU~O5JkK7K-&X<Cg5ZR4%hg;pQCxz;c;tpf+w}Y z4lVfV^oQl5445dZmKh8(;nfD!p&$q`1y7+-WsCM`H^or?k~Os~Z9TRa7wO1_m0bz? z0Urf7l2&X*ibddaR&(<Xg8!+b3OAxebCr;fhM1ptP180~^7#g=;LlmI;U=}p@>h$@ z$uda|X4h0(X0P66i{jJTw=sj}n|?3DV7AQHK^Xo1E{kL9Q+JrrVw@zKYZ#GLuF4@T z)lYuShJ*^QOb*Tp_ba37tf`>bgwqo%!>1}F!>-Ny%MM#Q^vX9bo%%8gSFcCDUhh$| zJ)V4XLk-s4@#)@cI_q-Sf2tBFq4iTGx$<i#0Csp$n<k6M=^qASAx8tNLTfseOqF(% z#rW!kjh5T<C!Nb3Zp$;iT-hZCcUmk!2mwcdAE7ZVYB4~Wga|Kfv5VmkmJQ?V)kExI z3sMkb*^IbB&NKPd;-z<SEJHv5A1=FwtR?(|r(nS2d(lH#f{GKIVmD}i1+cifGKk%$ z`W<$v<Ue%vIl)jpWsq-fHv)1sCd^)qW0ypez)(KK6M8J57r94#=twz-JIGbs&;1B; zqb*CA=qbF#Ms2rtA}})j`bhIH*a@@OJxgeL`whd-?m8SN9CE_;@o|5*_GsB@0_%xP z!S-sGnrE;#_jH-rBx;~-Y<wx%8zQY-lOlL^Qg$<L!3sbO#m+V(T`LCM+i5kT`CO{N z*}jMQZfp#(#^za*Ae@J;N9Hi5e%))EJvjSWHGM8(;Vo2YVR>)qLQai8qZgs>+l&@2 zeDG%=O<<OGn(GNWG{&v99ZAR@Y4kw-iW-~ctX5scc+VV&!J}i?N^3;kQ6ZXyB-$p? z4dx-G4ext#b#Ebe0;iozbNS{jX3TO+2i@|BV{52$7(%$BtR!xDUEn78SE$-DQ6!~Y z{L#$D?G1DBuVkuCiJzcVOz+cEe|$Nt_Wa-)yASX^G%GL7xF;;@weTyrixJWG`>A=i z;)*=*oHQeG$WwBDCSrD1plU0lNimJ3PRZWHD#b&&U|WHN&(WCNtM94@$-RyU^&Pr* zfT)0`+yyeMae^m>WbX!k%U)$#pN}D2X?det4;<4Bnlc;sg`%vcQ#sXv6*)6lI2F#8 zTf+!pA^UE7{?sG`euI<;+P&p%R70@^-{`csn!wrIvgO4!3RB#8KX4s0TWxPHKyVNL zQtYJDkKI19J?g=Emj2bYD-!7a4(%z^xAL4V2;x*7@AsT(sB_Tg|GI=*2=i<5Iu&wx zk7`pa>Y)JK`atVn`HiF6X(pyJVD2sL@Lj~)03T=$l89foxg!3`0g6{V3i(&(U6I@} zF$j`j+()>Jz(utUV)_i57<BY82g=k)zM(xgI{nDmh+%<gHqd3ldyU4dJcHZOXoW!Y zO5zTtv4=f!1=k`<wav~29rZ^KT+q_E*^T#5Q~)n;Jtv8?gM_XNZY-Et4>0}FLQ6Ar z%Z%ak2jNRgr}FACqj!~zD_!<%5>yVTks=jSNpJP;Ztd7A6TOyOY-(w@t^4MRw~dqj z1g{^5vNGk<V5lG?F&NdI&IJLbntX~a>v(RJf})h$yM_Fz8n<X0)(QgH*x)u$m|d^a zZ)0K`?fVe{#mLZH(%k14%6BU|vwk}4&<4lx=pzmP=k+;X!gC|YMxV_w;LtDN_yCNb z1KvOvXzVEQP<P}z4xd2LS(%<?u&<EsFlnWu#rXmsb^YlW-gRZiKRD_I$7OH}roX`m zAqGppv@pRY2A1o-{T|UP=H(%lq4;}LctU@6S24U0cQVyf##@R;8nkRI{9O<z=B|}X zb;AiBAaIQtn1a7%@te<_ZEial)d2RV$fR}WNJ>^34l$J-RY%3~7#~$AC~60#AC+5U zOyTw^rQkC12<Ebwt0O8#V7MuZ=?!_G_wP|fghC5|OkL&K4c*m)>=g4)!D@+@qgxBz zuvB%!SFdmIifjxgfm)ZY4!XKARL0DG$)%frbmL8%rj#3vV1TU{FGGo~<j^Nwkekr` z62ou2grCqDo3kL1f1uqAlkrp%jfs$sKi|MlOumReGP8wr`2C80V+LM2K->bugDm`d z%U{%3eg%0MWWcYt@QZ5Xb4i3>ng}--XyHIA{5-&)m<*;(dY-EbKfa9@m~@JF;P~DS zq|?_^`s#K*t>ELROc{}}jL3>=jn;zKXM}zDr3XPYNiuqwebnr}&Av{vyIB}5C$D9{ ze|zK7EOe{PbC}mKLSrj!92bx?n>|AUn6!rC<^EQ_S#!4$EA{Oacpz)$3M?&l0?ZgG zBt8EH8^%F8pt_6~q1=8yG!oRzRvR0#G4pp*r4^VQ_2W|EVR5|Ez8KIV;T^OSuCQs+ z$XD7ln_LyFnx4URwH|NB)l|g6YPoB*j6LsNy4o>AZNMahP~65^6I+<fMkMC_&zPl# z<)n)MAyY=k6fxq;IlMsjBS?n74l!<kuDF?X1vqQxaC*$JLFGqk=B-1ywbxc}<s%#6 zkQ{B&^Siyswc2lcI~o5UF6odJ{Ff{%2IgO~vU+zfEetB$W;p&|SaL9~_GK0@mj24s z)LXrr?3M=$C<98|{THnuSJJQLdR)1V1c)zM5*}{qJZ4q>ZuiSpPlfk3SFD}^M;EY% zLG2Y{pC<J+3Jikla$Hp=*b@$r3&5>hjymQ4+677D`?3XT!}fmG7U}0GNT$U#w?j4o zFmM<>7H+uDme31<K=MP`X;8gv6Z(k1j&aqQ1c45jIs{2J+SL84oe|h`y}eeFFXe$= znJ*a<3(SZQE6LAE3^>3oARM$ijN9g(eKSyni1s5+fUsjUJ#fu{W-we4hJiyak4J1O z*L3lCjk&RWA2(|AL^cl)Ylpqge>)^)9kvOHO<rd2*ID0m1w4^~hXy<*%I^2yyTadp zFZY5*EwI<f=;|B*vwkSIR&}q|R<M7Nxt5TK$omY)qCW2=ErPDjnDG<~jZVl}As)Fx z#5AGhe{4VE4U}5c{pj;H2@{C?xqKWAos1Y7v76kLv8Z?e<lZWjtT*1-XtxY#ToT() zrC`8K)hWYS1~gV^6fRP8AQ-toeI`7lS^ZIZD5`Zi+7wmetHSg~{R8t=fE<-x>)q^z zk7z-f(BH^K2^2qH0c*k^sJGW?{vEq*+08hi9E?8$0E%_tZUk{HL6D7t$Uw&7;_=z5 zEBe&4d#IBB!^n2RyL`IbEYTcgCffawZ`V5<zxIwdwR01V1UQq*4XNtGM7Xl{UV*=y zb3}yQ4}K@EVGVoN=0t)p?@NCZTzg=Ss3mWKEH{xhf+dM%y+x_0m7>rJ|IlY0xr905 z@_@9EL~bm+sC;=rH%VNAi>c`Ou1Iw^gD7?OR>#|eL9I&-ZPksf=AWeb-M$N+hZoqK zj?~kJ*ohe3`&^q8Nw-0ejq*U9IwYV^CQxoah|Vf&XUfb)!>&tnTAuPuP~glyE;9|h z=hhW_<I0V>jDy)@t2pZ#3endlG2N!vNYO2MpBm+?7h-0n!?)a)%(Uw(09l{Uq>rX+ zkdgSy6qo%|j5_k*;lmwxc1U35F`~oq2f7)Au9fkrJZ_E-gs>O)`ki1nbf1K}REma_ z8jUyBp5j)^*=tIQX9sixO=X?EvHM0XiUdOcjvhClD5#3LWaeFLqZk$BBFHVvxw&Jo z#t}UOr<~;*Z|V~U+M<WO$?E?4ZQgs-wYM~)eTHk|argR=UtB_G#P^^Od*<>P>RAz= z5GJUazX$iEHPdNrQ|BTBOx*3%9f@qWs|BQRPj>9x_H^{;=q4*v6Ebd^;b?`CaUE6U z)*Ap;!vJ#ysp*wk4pX7%G0q_j!=BI_jZFfGOO)!+Nde{ra_LnQ@;_!J#=(Fc$`pq{ zIH|Ddn|G-?AvfC%DsHvatRI6z!G74C9d|D<*9&{7MxGy<i%uaIiB}T0oC^KPN7YI= zHZ~e7iDy$*QfMl+V7B2iBR!iTCJ~f6HH1+U7q)M3Urj+qC{U%8rau7WDCZaYbkd@} z*wm)hx{+{yZ9@s@U4|rp$fyjzjvdwcZF^_>_TO-)slWMX*6j}d`pQY|0J?T+@iLo; zVltOt92^1LKJY}xzECW+FVvIli-WFNMGD7c-yEdL3$(!ytZ*g|-;75X?a~bJ-7z%f ziS+2p&+j(D2`M@B!(L+f?A{+Z(5MS`Ev|lh@;B|t4-l}`3|9M-_xYVekxT@mzx4o~ zczmDlbjo7(c{aK^eY{YWqsBpfK`Sl)@a-$O<DlA;-jaBCp3se?D+%f*PCdQ6PzRsB zoXQGorMCU?bv(~n3qe0VO+WI*5!A)iIa<I)6!-^+>imoVs{^(LsK}knZsBRn(MTh> z_V^MKiE4a;+PVA00|Cdo97Z4RWdYHlpkv%3kdS0s(+n7mcZy4#&mDcatDgMe5*+3a ziv*<zx<RLL)0^?t>1w`8{px8$CxkF)yOf7_t^%H54V<DNNcZd-w}rJvw@te7qOkiM zRQgl;GU?o&k(46FviLh>T8xp_fcX_(y5koC*niMzGWZ-Dy#?@-?H#Bd_Ghs8;&&sj z4o1^BY_I=f0HAb=I?5oTb6K7(;~kf2tkGdW`vjjWu8ZM1B|dIR_X?Xf1Tqusm~BQG zfX{z)6@&|nwpd#>>q2sY{R5XRC72pR0dM5;6v2$!am@|Wxs&!d@<&>6Xf$%bJOPMG zRv2(4HOUDZBvLBy7tw#?E{z^@v`?0hAiaGJ+iw7&z;8fyy@Rp(IY~W$`{x~Y^6|l~ z$Jf?d^W?!M%*nG-GL-DyWlvU!G};QsNS}?Vi9929tQ?T7n4i~AX_|av)!pVCY@|zQ zZ>lATe4@Ml-6{-}b%>x|e&3?9a5Z(I&;ZTqjObJZ7oM4sL{}yGP97HL>%z%LTzM%3 zJaV>Sb9*|SLzox|lStwBAfWCUdOUqI-rgC5-;-=q!&3gjhCifP#SiuN7_xvxK@^Af z;MKU(ByDpGsoz5~^gziKXbY<E2HI||g^i6c!M6hnnFaZ37UVp0{#mj3kgqr=pSu<) zdLOx7*S1|JYmO1w?Av(!RZ!Cw8aoVa${{l|j8kU!7N&+haTD%w9jJx|ZbC{MaLp<P zVzY<wSQS1~wrTx|(iioBm%6pA0lLvPj2x0Ts-5khY<CP=k22Ib#~_Ysn&^wn_QZ>n zHhf<ysmqmItG3HXDO6vZZxqoM^o>nV%|@-$NH#*sg9Yj;)7GP@4PI#+r4FW!F}TUs zAdT>GqL4;(zuR}4+uQu2RbY!<*(u%A#jVRDp0nn3kk~%CwTvubjn61=2?Yv=XM5)R z)G`txADgg{3;4Dnvph^Fj|F_+5SBRO5Qi~kvzFY01<2jS<xY*VSL{^WL+dhbdO2dc z=h8UpjqZzgB5pS?P)<-6L3J?{|3i|!oUh^{fo*NZZFr87m=N)IQcmLqB^>_w=<28( z-TdX4a!#l6zUH3q?sgG4y1}<Ie{oB=-j0s$ZFKc5%klkAbU%6`799|_<>`IbC_lo+ z!8PJ6J_CeHe4i24{1$FgsRu7yU!kDWFex*OejmZU4YlxmmsTLwdX7)yzL;G>?AvlP z(swT4_!lk`71!AC*lFbQR>TkDHjHgUWlpa0`g0v`xHDi&*Fi7jY1e*Np&aN777gd} zFHwR6Rka?0DVj|9y)V3qHm2)NK;sZAnxaLxaN7%@e!?7GA?abr{P{ITV(QDgRVl0_ z4fBeM4bBTk*8XOD=bMgQ6Vq$zSHL_0S5OJ6<Qcs_b&lbeK$|$3qw>Uj)xviK;Y;K} zvH?lKq-9nrD9>}YGwbCFR1TVUv3JxaBa-)4{*4m7bZCqe-AOgzvS+rU@>*KhC;y)j zX&1-1cb!f<!q%o-hH$8td@>u_)7GUFSF*DN#`8}eJoxDd6QBt;r@%{~NNw+D@f`e& zSHxW6HsM0mK{l|D-8#slTHjtZ09rD4!=ZR(w7PV?;)x=+3i$SkJ}Elmr_L-KqB998 zaA!-4sOY7c#gD$Ww*2l7vXna2Rk~Tq+U0lH0j`dnZR53()=Nyh=eWC`RydXGp4dgE zu_<6&UdT!mcJVLJt8glA=_JmOf;onP(?Q&zwTsn(v^37yo&$%u6(8`@PuZ-jgv^jl z{5n_BUR*iXw)^qJr`jzXuZKqUbJwvIsz3YHJXtD%r1e=Jj)^FjhtXn4YKl}c7MzwO zTO>0%LyIYTGm;VpNTPRg11E{=h4--idd;oItS~%&y}NAUzn?3E9HEioy62B{#N6Gv zQm{<Zl-(7hdVh;)4Of9`-EMQ^z8nI*cQ@gG-W9J{qi+L`{-E((vmw8aB9kex+@Xy+ z%t9$d9yT=>csjb6Yjq8k$b2VeFDj~_7ShpZ)E^<;_qrE3?B5itl7GR&ujmlp*V`&c zS@hRlo`*cowQrzaHYW67zWIWg|DSn)HTYM^r(`y3M)ywxzl=`V56bo?;Wj<t&H9rG zqY7XBT`J%8&N(<^WQLj_j}1_U6UK0`yJJ?+yB6q=cBCchrROP#V%y+on-@@P^d186 zO7nJX(FV=o@hv@=!&N6J;!Vu1DLIyJ?A))W9NlN|+I;9|0O6Jk7TZeV7A7*DFiRGN zFu62Su{LX*?U3zo;xl8G<Y1*svX%uI%wpNv9uv&FT(Pr(YtL@TD?t&2E3bQ|&y|}# z74`%LopGMx0o7k_8`~QQ`ZSidBy|M>ZBf-$7GJzGF{y=`^m2h{2omUwmv>BFB>t)$ zM8Ss9l#bR!z_uve^?^$4Z6|SuX2lhc_S1h_^La%EaM|nop^?!#@lk2**Ry)^G)J?C z_S*zXCW=pl)iv*>1sHZ~M!;<@v8LpN|7ql}TyqAVZc%{%SDTMbM?cP!R=&k+CV*HQ z{Z*1IV4nx82`pk(ri~ge6Ea8gQzW<slrDH@*0cX$v2qDpO#V9`%&9@mNl*DHZg21O zcTU+O^+f?T45$w!ci_D~@tmFxG@%3!yb|O|GLYuWj%?z-TOnNJ^#fM;ms@q`swf=k z(JCLN{>#+Ie^i~34II;XOt|O6%{jN30~H6n!F~^P3COBJ7(G%SkUmd|2tre8m-it& zm9JHvr`inx8cNrNX-`zv96H72+?8rKjhatGLCe4!^^QD5!=;yVq-`#(S8K>qqlsn7 zGaaigLE*nX2*1ln_khkF9p;6<VBN^5z84jozJpr=1{<9I6i+IUA~=6UHsS^_;)rb* zcqkcHm5;dk(&c3l-rVQ*oN=~>?SF-&`gih<cDaq)_*;646VqCxMM;*Geo<94j_ow= z#7(AhTW2J>rNpyyF~w7Pq!l%CpS}Bei#^~-%5gjGv@?w<9I#j{7QpUeu{)pqL|Jtu zSycGeL?SPrnx`zM%87-=-?E=dESZ^%G1LpU6-3gXCT}_jR4KpC{+Pdk_=??5_tov` z=}r&MKhc`Z8ESzz+RtjEqKc*f1#Fl*_Yv9=2TSR~@7tgCTzH9kqiBj!jyP6JNu-fZ z15hawjB+r{5=;U7^IO}RY6s)*&9B(at5t;<kAjf)gVS|;Yb22yp_G)ZY_xdE*yfl; zhdgY*vWSdgGUpc<r*eC{pY27`Ns>+<Bq$pVuS(n=RwLz7N+Kbh;6mF{Q_C<3(_*s7 zGazk@o1>M|0Dk&ZVOt!pcS>Aw4wU>}G?W<+A^9(98L`b**-+ewP&}W4DAXpd8Y$nP zFkM_UWc30qWfT!xizIB6F0*LnIe;UO*`agqUb><w&R#W{<-;i$Y9|P%S>{M%J5f>_ z@eyT6s`n9%n#QhP^UBjUbqh4>x2Gs?$RDvY7w%Vchg-m25{4VE7A0zyM9h+2loL(! zP1^$fDrzjf9WMYgsyduVSh7zkljB01wZ3898q>$_=PaC0947Z1^VZR&K^4TW7R6!E z%*Ch*D-Cz|e&3o)$^-QYHvz5`6D&=pe~rq!p+qc^4iLo}=%HB$Pxj9OAyaE85vZ-b zVx>QQDA6N1?v<_~j_dVClZY^UB+v%60fEOgreNXYgpJH~LDEjIFF<+*=J)d|u!k^7 zx-3Vs<5CR8xT7KXY@n4a4C`u?MWWb0Doymkqz2%uDx|6#&nwu|RTDHOHo<Y&&@16< z9MH`k12J=;396cvmo!cZIj(TJbxN37S%O>&>LE&&-{r$mFF+2OUwtzz!Dc-qUL-=8 zHHXpR&Gb6oWDD+8>|3f&(7{#AY%5%#4ZD-@<;$1Zi~63lx}*%UF!j>{y;FpTzpui? z;^%pt2u;Cg4i@BD4UuTMsEmW4q(%)tN7082o&`*YB}K_)HGUoKeHv<z;?EDOf(=8j zfoBW|>cm$iItCP|e2LE*8w9J_{Pk;&*m$5;M5t2Cs0)K}RRStxUH40eYOIjUM2}~! z6z1KDQ|{Pd?CamV=L=-3Z7UCFS`kRyY4~lg0V>$~W4S@kxzsu`vy8=@6lD`?-r0)r z;XdIjxWAxj74;3yq{h#hiWxs+k|TCaW$X$ROCP4wwj$Wb^O@e9802!2OL7hv6;MJ6 zjsC<p78x#n2%(YJv`!sePj^~Td=&xV;1>=Lz5M6-u-&*XLmXBWoIWGIl<n|*cj!aC zD&5s_I<}*=#EmN{M)*rIGY#7?7J4<;^9#~jKGl=}&EX9vlG<OkM)o9Be*|Nsu4M1@ zPIp+~Bg!ubC~peA+1O43YcD%&rHW%3B;`)ebMo~d{3Q0uC+xG{b?Z?GBUQkJsUe1^ z<ff05LhoMj$}cZ<c}k>MF0yl59lrN}vA<7#3gYs>)P9PP0Pp6dFo<@+p>_;s+*Lm6 zqAf0TO<!$e;sz$?nYV=RP^j?@4;;F4!f!bq@pf#hHCVjiCo|Dl43*I1N;32^15^+z z5W}&>?!OESDi6i`*PyfXMsA>;6>puityifvv8B|5mB}=~D$O#d`4IS!`RbR#8!{xi z3h#2ihW&ySV-;H045Dl+QqkvzevC46>E{X8`XG3CaZ!w5AauS@^X*x%*OikmzW!QH z7=Z*VkR3`lx-wm_KFI)750B6V?MylHN_*OqK%`Kuof^J>nfvct&%ufo1cN0Vkzxfx zKvmO%+i4(d*VNkNu!wXs3(&zA2Wn4fxkC8s6t#16g|QE4XtW3kfO_&JqN!%Q;iwLV z<rw&)xlX|mP7%Gm6+bclgzeMEw8qz5Uuvj@5!-f^G78gLZRk1(IJOBJwG3jy?rUGt z#^0Ex?QRBf{b{?kIP*|fGy<C_<h&9ZB``H9@G@$JP&MTodCbZmsiwQQ@A3!UlzS(k z-XAFSCb4@b052)p$M8;aI4Qs_vra*1eQR~2cQaht_ZptY>Y9y}L)4h5wc#fiv@vU| zI3tc{yvv3j7dITAW<4^P+Ptr5GsSHF0EuF0SW<AHNl2r*Yf1DMxT4pm#KmyJN}k#& zi&-c|B|I3l%t>3w24N*Ca5a)%MnW*X22FLN0wMC4CBCq;5!)p*uf|d$R%M*5X(U@N z6(L*A5({m|DuF!%-EC9=!Beu|DpqA5wkRB+-n`S>)By-p;~A*U<eLAO6npxKyQo-Z zs*J<#A`@KXV=^J&#pPqlP&F<9^h^2o+w5XCB`w_V&@}I(d^RlP`t%#PTIR6n;v=lg zhzTADFobr_r!V=RZz;C{fW^Iz9&2U%$oi%H`z?7YzNG(tOY5C$O><=05h_3Wn=wMI zCeJ4?<=<~J+K;h^YI>n4iO4o9wcuTmU!!FzA3w>*vmrZJbb=d9q$`|Y=|fkiIBh}X zDt^XvN47v?Lrhs+J2IB)A)h-lrP^#d<k;PT0gwv?Mj_s&w3U`wP9y;Z^pp>0>D^9i zZ>zNGdM^7&UK+v+yU|^;Pn{lQ#eohK|8_M`vh8h(7G!2tEN5BBdbDyOkGgg1e5t!9 z*#{;$I<pU_Hw~?d>qdUzpX~kS;V(EKOUMbA_`+X}cDjG$#SH2tj2HZ;HOIYM^B)V& z7ETY5q?T+-Ao~qJ`L5`Bbx#owJ82khbQm!n*22sH4M$nOFcuQcYKkhu#lbQ*Oyc^7 zadkr9VSOZj+M*lyW=$eK9*!^O*bQ$1yWhe9?1|ZABs&v+7`_`8w0(J!Qaim=v{6Yr zyUH^S7$!42tfzEGe=v5U0iTzno3Il8%?Fa}wb9vD)`b>;1UB4(&8ZxZzsg?|3n2vf zLjN{Cfdk2Q*izsnTl!BALNS%MPmj~LNt|B5`ipV0PwhCRTFNJD*<exeWP4rG@gO3g zpG2w=PGXnK^`O#eMELv#AcY_5Q`N!CTA&;?KMXw7<^c5knw8{2{(N|0k1e}kAf<DY z2Kde6&5HQ;IW(aXs9g0LD^cJXx5~MzgYdNueWiBlk|AY~?cutlw8jV7L;8JLjPTwu z+o!*#xE-!*G`oDD0z$!wi6-@9N6?T<u`qBtT^oi`*#^O2yqK1rmac1X4=_HWP<7p` z@!=tS*iU`<6h1tJ4-ZgYR)&j?U-L=?q2dBJvp$W)-pJJPxz^Y4FCgC2UoUKghusf1 z){6cdxR20Y?N}VOhBBPv&)ABSXY|pYaFF*fR-_*an4S>)5o^-+q?h=EFzYUSpz*Ga zLF<*?{8KxVyVE{rP+LTB{KkMD)4OA*tE4<@EPyDqUGk!!pZ!=rB)~4dRIePKfwWKV zdyd7eV-&a1I}DB+sEYAnL$gvvrY8D%4l6L{hc-Zbn?b{HsUP@{K?F^b^fcGIKIpbL z#1+;M1B<De(Q7|$)@y`pDkmYf{%Mlftc=peY&MdmV<2RbeI2^qmLX==#P^|r%raa! zr<CBpwqkQ~NB4l(%h)En`P?)GLlJKK-ZhBMhh7lR26seZlt(`HRvtOn8zAe_D5W$q z1VG3osC1NIG#1*|hImtq707N{&e?-u6O^}2JixEZ>1bWf0h%?hLHl>l(8y^Y+$V?o zT5r0M5LB*l?;ieR-oMHqUem!k2l7p=blQxhHSM4>AC~zQ4u=_q%}O`sT@Qav-*S|_ zE4@A;Fyu9BKK*FW&u~!?tQjbw2WX(djUtXJvZENrS2K7PBEq9aIm$U$&Q$!f4+9M! zkq_|un_SxnWFcJqq1(eukPPnyrKfbR>N*+b!=q22V)EMLVLqed+3@lzE9g<~n;SE} z+nx3o1(2rvq5H}HuRq=It+Q<k%~IDAO?G^vncV4do<@_DezlMAZt0rbL-;VAzNI)# z6@`}?ajR4kam{TQWHb#)z@8UAQ1pANX_V87K3`(P>4*rziM1ve2w`9Oa9CNuPhct< z_0z}CA05*@ZT1zIaONP#)9W96(qW-yuCK3muJ<X(%!@x_h?)J}zdYFn*xO$Lt;gH@ z+uX%AetNLKzqgxTTn@MS0(kqJ;q73YJhvgB%rYx^c5z^SH4mI;%0fmq3e~R`5oEk> z4@`_~e>4CUJSLiGb2_I8J>?`}L#emU^q#cVEVmSfB^m>+i^}qw21`$E5^a{7St$#% zi}9%Z>%rWwVV`#sWTl3EF-`CI68WQ2TnXO5<!%&jHdd0SEvWBX$SzjO&vCb2h3>fi zl<fIV*jN|5k-4_Yu0Zd)?oz^YlX#TUalBOA#!EG#KH@rt(2~luzv)xSihXSAn>46B z;VsEtV9_C8U<plz79)&5RTNhuc@@7y4@00po}}ZS&=d|*yRid?6zH|VC~aC*d;whs z)I|@$TM#{Z9QkopjK>0spKJ~<HQZp0uy>wGn6UW7(Bp_sDLh<oPsYTBRl~+S%wGQK zt1zSqYua+30@MoQ@R@xsWZHGU<5yePcT?z+Vv$kj95bgXF2Srd?YDuUw%8*GDAFUI z9CJKkNIu?K_puH)4owWE3(;oW!S+4i#dHXCuW}TURIt%UJ=_7qw61u!QGhk|qb}V$ zx^#24ljmN5vithzI@a!_)YVKlkH4^^sJ%Huhel#9S^yk9YXU#2`T4d^@}jT?qB;5- z@imcz*oh3LlYLXs_~K%1WE8{@J^}`S28WXoY>?FfmmlV1V>V61jnR=aP<Q&Yrk{yx zUhVvh{^h(CKyW9~88!97G)E<kkTA0K5sc~FxI8h=&G0Sq^b{e>*;mbW)&+XrvTECB z<Bmks9c!9nXRZ5+8V*A*TEN2U4>EhVhVDex6u;;@HXx=Ahfb6}N{&3Fq|*^qLJ1OU zq_ui#-D*yu4#dyx-aY!)tO`e2P3M8%E%^<TuvvfIH1U;sXXW%KArLB&?|U>$xLhua zkn`4)0rj{VpTxYr)5MjEMB5cCCNfg9FNA(rRuKDL;a(#lDBEpcL@Mz|Qv{C*zfQ<A zx_|mqFnQoXXD<dVaKF3G?pm4=CO{*RQE>@6Kqq*ztB-ZT)?QZVJHTV<#TgIOcd&-s zPj6gy<qUr=qzCBySD4KBKSmO`L~9ZRqhq1r;Vv{m!?alRCBEwZ$DmUv-8+5JSp=8a z%~n{mod&_f<;W_h`0|J6fJk{&#+RU|XR~<&6~LYJVr3|9vC=ehIeWQOI3}1&N*mXB ztRFa~HK({ACLPkm3Q_(w3ew-0an0phuU7-4q52~i*eH3AzJg8w@xhll{>;&O<BhJ* z7L**eae)UbW=nm)yWP=eL7h&7_W~#Da5zgx(YyzNdU^|j4oBi3V$+vdsjlJl0_KgF z;nljNg;;Ej@ybP-K)FTRN7!vn^?zj^q(WK%I(TM9@?uvd-i5-!1}xp2=N!ZvdYu;e zJ2tzpop}gUcn1fcX|a~Po&wmSz@WpBZ^o}WoaKm1+K8oD?m6Wa7Sh)=y{xs~XG%L$ zxizys<Ip+aQk45p`5F1=8|}{L!CrW>cP0-4Z4+uc(z#bT(qHrLAy*<w)Iq>`$entB zGODK}t|7OZ@uAbgvdPotj$6;|?VZ==nk_Yce=OTMqT9S&A+E)$9H)%~I%*U*rich! zb%dB3JW`0U<Ena4_v=8c*_>5)fwJ9H8xZVUhWU{w+l`J~dt=frm}zWQN}J16YyjGS zNNxe?Ns8vPXK<FE33r~c&)w#sCob(WG8GbvGk;fr+CjrtoA4O+CykIy(smG;E4wM@ z99!O^{mCKB74Ru;U5kCn1X3}<&A6UZzrC$IwJ_Qh_p@;O^>?8kCdS(=y)JZW((;w} z?A2H*URGIhy{++7Ov2*H@AN&G6RdWYh_{k8k3O$@K#PBa6eu_X@H=B7yS1m$VYXoR z-jRJ9o9UZI4v#M{`L5UiwL?34x3@WJfTs`Gi7$1G$u}n^jOf8*K?TGYSdE0=K!uxg zijPI<1<Q#&JTK9bMy_P|rFc!=(rC5Lci8NQMh<^}s1K7F&}P*%fa7x0C~*iwd(gKD zdP7lZ(iDw-3INSa$#!$@V`tqSPNPc0!z;-zJEyqM^&x$Lt!^?hn~2MIIN%)?(bdD# zyIWv9E`Fi`4l=~R@ndl<Yu>3sTm6)l7}EBg)T^okxzJtuFs(*4zMrAn{?I<u(VN^( z#w-Ti)3&PiA?i{Mpe>Q`oDGTL3`FEBCY?UP8-z08BBN2-YJ}g_XcTXWVdk+2N9jQg z={~Z9cK}L5lr3a+ptwoUwxZy)T5w?G$;Und!h}vJJqY%v7FMw{*0!h~Z3p4hoODoY z#r*8(34IpMLBZ#Vo6gr0izRPWiQ83!d94>ywyBja)Pp)EhVj2#kO^*YM-V$T789-+ z&VnM-g$mL?RXTycaV!%fzEA&-W$n4x2@+{n^ecYb0ApnRfxvT}maK~Q^25?ykkk2* z^Jwc*%(}E!{F+N}t|7#vPR(vK%XXYk7TeT8Rfak#O96WZb?O8i8;UVuV}3+=JnaO| zj5i;ay*idCG>J9OZ4|-&pf$_CnN@4{4YJ-b83zqE{wNHLcS2a&*lbs4Y@K8H9&oe_ z_2W~SH!~x&QKFr?YW7gmb}HF91FHPi;K9%d*lpJ92l>*qqxoc|uDBDKBIA1(_NgiS zh9u8Ah*2lvW?y+!7}97UXd-R?2Nne=xnaf>i4#w@84%nGq_(=c4}90e#;q6_xis5) z=*ypa;lj<iv-U?`?GL<Ge2%Z!aD((yEu(Vz=8b#K>lX4c7-;<iKid&u{m8X1u0=F; zTcmz|wriD1Ho#@JrzSBFl-^p3Lg~CB$8O6Pa!KkWa~KVaJ;`+|vm0Pss?=%Y+95hC zu#$#-RCa6d5p~gB{g|Pf`!_Il%*dfm?-qSmb0;WcjEB|i1rZ&6?7VSNH7lzF?vv2B zM##IprA7Gjte~k~y=_12c8lZJt*4&uGl5y*XysCC4D+Dla}#Nd#{>_%KWjN+d3@%E z)T@`{cX)B?S@dft>EpliSz;@&t5>ZH=fB;$cDW&Tr(Z3B&$}V(I?sn!EF(uk`1)E? z3h#f&ZSO%-q{LoPq#PALO{5GD1d^?fb${KxpFNWxLg+)o@vAg;S{%;*60iEbUpR0= z9oV<twhvt|Kvtdw{Z5rH$_d)instwOS?hZNu@XpS;?h`XsM1nHbr-QgRChzHmWi{5 zP+W;rtfQ&V_79Yf?<NatOxtb{vA1`(*tU&_W;Cf#X&OWWz$NSsC;KM318SofH}7SM z6a@SYP9BL&yHb=EBW6>grd4kSH~gS6$~(5&aFcT|ZMpeR)KxlADlxU$A7W%=sW&XT zunVN|)BQu^e8qTp^0@EKyIiZ<ZGcs5dcM6UsOe8CpxJ8<I##jN4%D{b1hPt6V-ut` z5M5i}pY^%>9hejM#6>oo=#|dek3j|x`#vziRdGgz%!29;2q6FcrB$dmu7Uo@-kS~G z2yV2QPtw$pA*tBA^01a`1)_85ULJZwIf(;ihK^_4pMM|^>%KY&>XvQKfz(<FKMI&h z-Pp)6!9{eRvNr_QuIlhBiocblBXDFs1PATgUbeW-*`i6$6wwK7n<Y6506MAtAJHHG zmwP=DE=C3A>g2RLmKZ1NLSDwby`I_eyirj6_bdv0_>(Ha-~J)9_M{)|P2WAO*a!^e z1P>A*96B{|sopA)xSI_v=*x=1wh@CSEi8(SN;Xgw5F!js5(Ux5`f<=_7xI~^zzWx+ zI(oIXc>fOoML@d0o@$#qZ=9z)YW(Ugp=kmp=|Iizi8OljsjT7V-@J89IR+F{ae<6d zq2+*px0?<Kczs3|M6Q*|-9~RAIKei;AVp(((JkdhP5zZ5W%o$H;x2Fz+Cph0-?J*b zukxN`kL93HGGZYmX4e{B(o&I*Mg{JC!!d_2;KU&jQ^^L7!*qfGjHtDi$pnhE_t}jb z@)&Fo#x$}2w((AyQEQPXjM%jyAP{Z&Nk&8Oz=MCu8u*bu4Vpp22jONv#^YchQ$c@Z zJ{G7ghKPZwt9Aw^#?@-fz%mj&hLBOHmh}9YePIw5R;E2Pra(|OGVk5`Q!~m>6yhhY zc_7Da0!APxs9tIqGz`G&slYvUUKG`$s5&(*4nraV(8b|^@T70VV*9Y5K1_Sh1S*1H zC+^B~u`pxL%vj~Xi8mjl`(UKEd+bgIS}&bc+P*#vB)2V`1ApuEtW*S&&b>~2?~-*% z>Xr*O(a1B^!!tC&qmMYI5$327l3`HnMx*mF|Dd!Nye*L13jLa2(Z3vsDo!*KI)K}T z!l1;VNyezY$l}0KyT9O%`4tBPbXr`CvL9Y?iv%dI<(8NMoZ(ow7XQ*X7VSDHS7_M9 zVsr3kV23)YZ#57pNe&(MJkSberzBK0v9QyWF*wv0if>pZ1GI;dmTGzT{syKBJ}&<8 z4<OLv<KwKhD?FXN0X-VOW{)AV(Ub!1JbbXX*N5{bhl}p-%j^q`LrbfL>irSg(!)q7 zmEdX5pS|d3pC3QzlPvnXZ@$XD0@-3xfucuEo|n@+^l%yIlgNrt`W`JAm%Eg!IIv8^ zys{JPeDapAxOTfB)SdEwPF_JQ&aKnlE&u4@&(jn9bOPy}PfpLy?w_9Bo@{o`PF}%( z?&Ggp{sO<S{uzpsP?UYP_0N76KAd9l?FsyO*6W^D_xtew-Vt`Ub9*|yJ)QLK_b6fX zsGQ_<9-vwHm=m}kO2m14jkzP=umxsvnxnuauQB9R7(OulGWf((hhL_j55c?$*1+#5 zrS&QGJN-jB`Aaz+QPE#^*`NQ*oYe-6W<(S6`{BExJV?!HhS`-2km0wz6zH&gjqTAl z_Okc~&5J}{DrWq~iJnM}uZK64Bt3^61t#ihI4vrujjeUIb|9N98%B#to&mxLQ7yR` zPDfM{(m>u-BZLeX4fm+wRN7A<?&Ao0|6N&v8I&JgLDdsDejl7s97cD05mV8Q0bQ35 z4$NjLtKcwo$)k#RKjRAk3Nfk@oD@Mz{dIfG*(9ZvssBFW)OsD`>v6N9u5S5T0!!%; zu?Gi6`pa*ePDNPYQKhf?bwEKHth#6;$b{vf=&%r!;CzYWpY@ryj`0^@G93bWsB}(Q z-L6n&UPtTDd=hZ5Qsw3Iub_~r4u>%OS&x>j7{E@mK$R}PfQ}Dqd;yzv&L*NS%dX0b z#9z7lsP~6y{stb4V|E4r$f0E=MZu_~VM;}@;;B&$MRNazPzdE1kuwdsOUiSx2ADDW zB6&jjp4^t09q{C##Q-MiS^K24k*SqZGBxXayWmhE#vq3J=IdiY+N2IS5#xp=HIWx4 z=+jdc%~409N^}!eV+yq9<VN3cHuA33+2Wrt(t5dg71IE;_alz_CpCmK@vUb*k?u4~ zYqKLY<oeMmkxjqzPy#2{CSuw|3E;qNHQ<<<fYY2LmTf5T&6~4~O049e<!6X#DW<cF zIcE+KM%O{>o<1$hnPFN~P!}?bGnnrAoZ{n2h8^}Tem$%}2Gi!nWRg$g_7>R+cRFMa z&ucB4&>?O@r19D^*TCCET$bIRJz<quXP%Yh)(Woc?QGA2ZQ~wg+X&{zXycK7W*7<S zZGQ$R7*PW5Q;gfxRkB-u?b9!sI>1>tQ;ML#-C$^Mh^XO7v^<ie%LsBH*ur*+xB{R- zW>K24dM|q~Jv9bt&7#%JlT%ZdmH2;>hVRR^Iz5|4_mcQ1RXAuPCNJ#|qNFDyflBUe z<~_lu4)tcF;uRGc|K<4c8sPH1;$lwQgwgnbVUaEgA6+h5ziHrS-7f@`=8tx$2|V9T zZ03MsQ#)KcodVY;g-h4YX$0ryF6G<fNo>ckSpsF?T8j{Kjc_L0YbsZeBG*MEku&Y2 z3Y)61%)W&RM_y>0h=&xhz?q0G(k0Eil(38@$FZ6zq|Brke_XjmoZjjzL0f1II;a7H zl}B$6y%!Y2wpz4WgTDbb%S%X?puEvJHWN}JcEe&)b!~xKvz}Qo93^1UaCgdg4PN+I zLu((wo$!jzNn8Eeg-Pg+i$%qL}ik-yX8{eki7d{RKN^JCO9nq5S4GAid$vrx0p zs)!L|NSfEz(~<fyH#NhiE`yjU$*`#ba1yG6(o6a6?UAWc5Yl}xo>Hx#%&C871)j&Y z-x*eVk5Je>f}6^vq$5EfuN>X@?5JcT(bn8Rz7kLJf2C#$sv0^RbmYxGL0J*}3ATW- z2d9*DW=D05za65a_Smf??V7q}V%4NJx1RRAq@BM+257fILle2-)MUo4;Yq>Ti@x}x zs#*gt9iL-?UZ0DC!Fak%G+4F1s@Y?WhW@CTVvktD4ts1uu?0W@l|M|{%j7ND>8ag5 zC~Ume*WcpZVV7lQEHPh+Pz9m+(cy^QI+`7)A3)nUhbU3tkO*OYn=Gpx7!Ic2#Y;k` zUwK^cRdroYp*OjPHLgCtc`<zRhuUYl_JNVCiHllv(b}vcn6j6$+m9rTlA<r7Dh>2~ z&EY24CD$lYa6;68<x<LMj04e4kt~S)bxB;qE$fX<RDY77zADQr7AvrTCguz6x#F1D zEQ7-@Z&Q$RnnscN7)5F0B)|CineYkq#dSVtaWK!=4Ns{2V{fmC5TK&vm*T*ogbfi; z;8G=8W>l<XRgssA{rcPM?-4y#Tz!X))n`sXvAn92Wru{ea`PHB<Z*(T{|h%%Yi#t6 z>)Gnn{*Ctp3*td2HP&e)qS)XLv_DTs`j<sAZDeAi^ld_$!7w^;n`qR&Q{z9Cx4Os@ z@Kc6`!dz1BQg~F|%GMNfW+47vd$|-fxny4wcH|dqhqP*6Wg8m=1jlV1DS45j>2qUS zw3-A=OO3KIMUALoT^o2KPn;3b+Qt1D+mU3c1Tq*AE;VfZH$8JY>NqC0ag@-=ift<s zuB`dugHDpLFCB+<W@3Z&(th@cTlup~4o^ln<Q19oxeF>m9=BXs^1(>xSiq}!(mvME zV_T;?5B!-V^phjV!21*EvXa!oltL`)9N&O)^g~7!F|qPAzbM~KFc5k$%mLm+Vp9eV z%YZ0v#-+fS3t^MQG{{b}&a)@zb^M1%&!6JIFCP7_15>2#G8`Y_*^@!G`w3ndot$2u z&L2Fuc(8ps{{sGZx=r^@y{+CZZtIV~dUSjYbx(IzsEl1=-4ndvJ3PVbti`RU%IO(3 ze)QtSAF1(awWJkPfbZSY<D*0UjevUHo%=_<)BW4-Cr1m~-|yY_ZlRs_3-p0*UnRS| z-=xNu&%Q#+4Z0Ws?RGNz?iL;4Z(kSFYS!Dnfa82bw|<BgUhv+QqtPuw-U3KRr=zX# z54g0OKt(NqpHQK9)Fb42y(8)pEa%iA_Lcwr_RZ{eEd6oU+DnhG91$wC1p*wNyh7}M z)?+ZoPyh7fYlO6rwhV>HdDPPj%u~I<Jnh2I`#1v+2|sb?Ct*W)iwf|b7yMe8)jE`< zsx!#=2a0(e#0X<3VJXIm{Q`ahFm1~><lOu_@F5(e;^FvcI4Dj&f~Ex+m{E+xW*v)Y zM!LlZfWc-8Mi5kEmW*zzV_<8O30pvWwE_a3B=9#Fj!baI3fW<B$EE2lK@^5s)&dRD zdZEfTXlkpTwOSFX%u-DWV4&F0-}R2jSP(!TEyK)kY3)u&s%d+Oda;IAOQ-Bp=8Qm6 zLrtGni)TWES{xVTP};Nb9{%dl5+|-Xi&fU3jD}bNI7>sVAU#-HQFl0f$&wAiQmyOF zRYqz<K#3mPpb3DP$LzVZi*(WXEabDyGn#v+Hdc}S4orvh%0ClxYs|9>SFXZZfm?c# zW!7SD355&qQnxslF_JN64gS8I0~GAQNqX-SZss3(NG+VqJgMN^O-S1Z9ZZCKG^gDC z-53-gc{Xj`4OQ2%O%bV2!FZYTM&*Pi1ICL#x3;*LfP68*(qc;0jUQXt`lqocey)+r zgnThFf6ywrS6T%)Icy3#I({8tKuaTnnRkqs|6H)<%~<#ULQsDmd<a$L1V<~Iior(U zR(qRi7VSo_&u^ZM8s;vhnZeMV3U`4tfZA}#B(q@E!E&CJ9I%%o<a|CJLTD<`BW|)! zcYZ0+xhrW*RH)cl2>`&K*|?lwtfyk)GgH9Zi(l@C55eh>y!6+vCzo);Ov;<Bc#-+r ziMSf|zyO%C7do;{b2Gr1RUe94!F6j(lxlftQAR+uTdCtK2QMaeCMeVLxuIP;wO4d~ z0|1{B`>|a<%=|O`BUWPv_$4GiYcC&x`e}o06dbF)t*3S)$Mjll9fMV;I;CNKCsSGT z)nkXWWbL}$)DD%Ps_k?F%@2^_w2QtX<)WOrnh~sVv}+L?vKY)xtrgLwE04#2VBGB< zVfW;8b~-too`JI^f6?^Rgnuvl3~<$rIc@!kEm4Z6Wu1-9iXK9{HO%<B`Lb5(F#D!A zV6T;}FtrCu7K7k;XSnVZ(_YjFkVac+t-$#V1=XFGlFfxTy2rLDeR-RC4-9FB#MYn2 z6|YXWZozVZOtHDyv-df$i^BxMn;deTttcjZwuyFwO{fW`1N`R~_@9SVvOn2+i2r^% z+1|r{w<lY_+^qLuJp0MTdHbk`)&{f~OuA;$0J8w!H9!l)SSW#=(z)1qI3e#J{~2)6 zuUmWgondV3o<7+Xp~DDA6(3BtaJ^`02r{6+h35X`)IamfbIPa4R-4IIcRYlD#i18O z3-Ls|;ZrkzL+XB${$0cer+ABhO7D9;OlSGvAgI2N)v*fv;%~Y#Y-KrqSjrB_4eXWo zHQIEZm+w$8kbH_T+6&J2a8rS88Eb0uS`tLk_>~~+Eq1t{xH*$B%95w8gcVjC4Ne!4 z%1-JADn=!;EgGE+exjBU%idi`qLTS!`|tB|mXFxOJG&lo2vZ~1r!>o%{$Z^33;a#^ zE*gmrqru|;JhZLA`jKNy3wXmf?2|L4Hod#f)q;%*zPk71&t7Aei7AHt9-_?6VMK@I zTR+Z!Fk>}6*oF^PfgdmwVqp65Udy^BdNmQvgA<Ej8@uMkZdGlU)S}u7URQFC5J~~v z158Wz;-pt}6;w<>(Rp7X{RC$FsmioYxOVla*Is!05gm;B#UH$ZBP!T~nL4&9ASuHt zbU?+GysSebvaP6{%b>&7!;br#PuRD$HVj0-OcY%Aahmf9Jw08;GON#2?M)qQ4b6Dj z-xZ?~95IGHwED0fa4ZT&)X>$SP}LX+kXU`S+u(4bU5da2i;W+=YjPg)EUhvHuzh~B zEulcAorI1@-R_tYf@jy|^sTfX-{^{O*vE`-8|87hcjJ>d2z`=f3~UL>HZ}+h9mS9F z`o!Ajmshi!WzEyA*<Y>MmM)l;e?1cFQe|5Jccx0Afz5}be7Xdy?(TP|qurvHj#h8L zP?=i53eTSYlKkv{MNzl`w<}|JJnuKL{U*lkqWA+}zIguCFC-XFx5|f8JPPvJMK5D` zlv_AdTs5~a!a_`m<LE(@jYV=~;Pj?0NH(#%&ETGeqGB&0PlqZIOdF6<MdNKRgQE3X z0bzjWWk9e_6M&9IQ-Lglq4io3;pd~vz;LZrAegCT>2Ro03kW)y@}+2CrFJYhhQ=}& zT&n?Or5N|p(mJF7&`Z}F)w<=)=vHIA-!icFg=ohT4Ec-jT%sK%v41o=F4#b0*p7$E zX0?aQ5WRy_K=@1G=43EYX<7x9pJxx7=zv0XmzF`N<Jro)C)&$uxokV^{>@#0eAWU4 zwC9zfgb-*%ML@>C|5Px{DzD9wWfHi9YyM0+;q7`+f4$AQu8!&(=o0*;A<0Q;8?$*2 zmqrLFb<=N}`ouPcD~Wv3C$oC>()+9z{CHFZXgn0Kq<g}vQ-ymoOesa#Hnj*N(?RN6 z4Rb2Q*NE*gttRDycvfb5!|+x0&J?*PC9PPo+-w6#DC{yGRo1=XD9tR2hq!viEP~sX zTyJvk)pddGx;|<yrS0pWcS>gv6wrPqC3f8|F!7)Gy1lpN?1x+{el3B*MNB>|eQ&x> zloCa;GAN$LnYE1xU_%=ZmyB!zocV7ZRfx1<#&*Afshl)gv)swN@|oc|+|Z*o_PB<t zTIk-m`w&0t+O7gsA*_2}aB;49xP+WtxjTo52xw?xy-VS9P%b@XNp<KoF6uAJId(@o zykco9n&(Zr3*~zH0{>0VEBCQ{TB(jQli>&ux3&ne*xfQypU&pEZPYDPr`!-qSnF$> zX0bWTt@BDy_?!3iZPx2@&7X(RV8Xa`mrH5)H4B8_o}RVuO|h06Km3ZdgHACDZ^fLQ zezmUDsa?X*XfM9=-YSBnVStRUmryHWLDsqGx<-5TW2Wz&UQaG<h|={jsNg9HoHx0y za4tlmgISwYbTIEZl^)b(q~&uhPY=vZMZf8tmV)pf2Uh55pr;?>$L3YNWksrV`W6JU zxf@=Hhk#l_oh?a+>aeoYWCKjAgGLz?9T^%_MqNY|@B5ndj8SctTB0`ptlJ2OP*a)s z1rRo<DC`b6TSvE1Tek-B_*|Qf*1^15I2fuEkLG8-kv_lRKU6Q_4&~3@0(#!IQ686# z>)=7(0mW$60br!&w$3Zj#aSjlT=agJ6unUo{MgcWa2Kwg+!_-@x;4`->KA!+F}!kt zUxsYhzU<lKJAD5_n-UbGnu280I7}^%hJyVhcH#FiEVH=6PF2pQ7ddvh+dbOA2u0|+ z-Q(X~_}%O6N+nLzWe<@SbhO)j6~-+(0vOs+I}d3xGKpJ}}FWV&(R?}^Ix8b2f^ zPfXuGc^yhEs%@c>IF=?q_11O|EZm8MvG7s1u|qnH&Dy$@a=kiL^*1@C-Lk6{UKF!3 z8|A=tm&GL4xEbfu^18|?U<S|u4cQVn>4L+)p_nwxP_)BDJqThby-C2O^Eq%bFbn33 zFGtl5wta+|=Ad=)x)4_)>WgvBN7DYgay+WCCtp8jmm_T0)x?0LziFT)^*l1aB}Kcp z&I#<-7R-R<T9O~?g|b7A_c*kQ=I7*rz3Ub_PRn-%h>k<tTgRB#ONI&53&Ti}(R^K# zqH9W`)%j@6d`0Boio-C$heRX+g0?V>KtvkPXEWn5dodsR|2R7n_r~|(buXq{qf)K) z+kK<VzlrOzchfQ#S*>~pScy=}Qx5B(3*O$G_p^#M19fmj614LV2Mf!eNbxrkxry<r zf%@6+XXh@%3KCO`qUZ9eoLQhR8Hv7@YD0lEs`G^i8q{_uN0@YYknKsg%Ug8M!NDT? z)Ee^9!gIM2RVZ!982%p9QW##D``&r*dpO5GhJohERjByf7i;hmXal%N@Y$R<9dgzv zMo_u9z;3T`$C<ztHLUJ@2sdCKJW=a<7d{L7QU<HCZaKA%d)o1+gq|P{?!{Z)vwa{B z90KDpZ#X77##MqE5`chc#})K6&H33MqBimPQAoRTGNIc!>s;8a*(<3d%~}y|!ast{ z*U;bex~Ot;mH{^b3fV`I`2-51G@Is{AAFMMBW^q^>AV?b^DEqxQJx>ev81umY}zp@ zs73QDCqa4yU<So+c%`?{QhZQz3;rFjk&Hk;o+B%zVV>U|=8$&GtKin~981ovMAGn3 z=(p?P7-J#>t6T?^8kZ%O(y)g#iy-X`Cl@#C@pD{GlY`H=>DPI<H7mPcacC640)O$h zG`C6RzScZwKF0hDOf0ApBb;cKz+n2qIVP@Gn8NqXdk#_DVm9Z#xA#;TO`}GE8e}(e zRib@}-7VU;Xgfn(raIYTLi19ZL+pXMhigkp2<X_x!S%bb?6Q)D@=vp3T+D9jK@meh z#c5u=gSJd|fF)XI`P$?;_-(?NH_=Ba^;vK+pBU87)yNw08@KSsw!Uo9Ps-!J%V&xs zM>(Wlj1*mKKYsG)#UuV(XDGJr?Bf9#7k?UtG204kY=1^#)Q7`#_%0{sNBHMvhF)>F zGf_;Hi~MSa+X^0ff`s4x;<skMZglD?D=kbEb)o8w*=pJTv5N9l9trVWy|OF`=QpH} zlG{Hv{yPTLh4J8r#xsO268B04UXo~sQ#>VlK4>kkXxz8ol*CXa?AR!Gl9c>ba_=e% z>idORM^PIX5kAZ~q@o;}cy&PuR0XGQXH>lFkTs|nA%9gA@0FBS)C8YE)o!mxWGujs zoN7`G!NXR8O?Xo-qtNjI0snSLI2~>x>|%tbgU#K~I+DBM8IP^N$gQ)|A{EN`#0ml5 zF<I7dHm^8HFy{n>Vm{1Kj=*NnGtASB6Lfcp0)2!R8m;NvRw2cvK@+f#$|yoUER5G^ zVi-2&l;?^xs%i`zk`XUgcyjQ*P~usv+yf#BaLGk390g|w)|T8FMpNHK7b&L3`Z^d5 z#68Ro|4X09ILCdpQ36Yh{6h>2E$hvcxJDEB#I?kbZQF~7uf|b&A0xkOh*}apn<31D zi(aDf3f5o5S6^~srPYR`72^>B371>-u|)q(QGm8MGGWNN;PpcM&-1yhd4on1nW z=?&+7S(la0H8oiI`(76t`Q2*89TTrU>unQT@k^-@ZE?wmD{!;WLku<Xvuu9~gts`@ z!<OxEKn3_06><=gm;lWNkIPGL(CH;|>P$*KkYFEB(Oy<9LT<%A4oYbY817oK!=*2T zaESGjsyn>%(R_)-$doVfs;p2d%j==E_!{5$xBRn9)(O)OwGM)(Q;T0_wO{%{4=X>z zQbItR*b7@e8|No@lZ7!|a>|_Ip-+K6FhGITsEBu(#~D>R-27zov)}Fx=^!&^uww?6 zr|t^=L%8fydjpPXL5nU2QRs2YPk6r8qno518p+`bp0TMA4SjGu>KQ59HwwhGxk32z zj6@=hqxVR|zPL?<c@3<Ub#Qh1!M24JmN?W?Ddw+#t*Gf=|4Q?cn7*rw?g9@tUpzg2 zfm3+JQwT#87hN<IY|bR#OE!m%V@g(1VE*}}xF|<x?;TEu7kD8-`xv(_CMb+dL0q`R zZ5axcEg~YoG$+fuogGB0-aG8}*=9||SNLxt7CiyfeZ&H;TNwJa<>BVpi~t)pxu!;_ zmlMh^hSGtys-#i(*%Qm^1Yd!S?C)G~8=M4d1fowfc=Uz~$|m@!_`_2~>lm#T6g6>J z_eYET3gOJJbpO(bTNp^@^m^-Oz1vq1F$cq}Y@g9zpV%M#K1wL4J5VD67kOHwBfKIJ z(_yX!eZ?P9+@4<z^rZwv0zy(WH{{sozyg^rJ_~dVGX3>-x&VnCx_DPS-e>U}C>*<; zUsN56(uh3P+xWYWp>AqD+d!J<f}f%^`Ik`tyd2%guvI6(A{8@4aQUIAW+=p5<bBO} zK@7<6(q=Y$OnT~>L5DQLf`t@0@m0^laW9*}Po6z#ojwaFxNmG_fl1osdTpgr#ZP|! z{-H16g}N3gCjDF@d{SoDTWtJ%_LMZouVFhM3QiQ}t+JM)&zlQ=`I=(ndkjpO@g!}X zRch3jP2*#mSG$vGhZRG4pYU^nTe}q&UUd3ULA2WR-tF(z@G1IHT4*1%cpN{XEgseL zDJEwc-{1)$Otd{M=`|k$F7iqn{e_J2d^E83O^+Oa{9?!;8_ICPh`<yeNHq-z5S&bc zfK}&LV#}hL?!JJt`z>knk0zrjS~KQXFlJO|#Q1gb9YtL32{2@iU(<D?9$DBU-}jl? z(p+2VlfYJdYbcuyORQ}2whBQ}mKXI2gl|^Z5Zh35w5+ZZWKe{Kr&2M}Vz6+0qke^P z*nX|0k+i-n@+rPnsX2tsQFzLH0vV3<;V*GaGsvJt{tHvNRuRJe3=qY}4d%BoU<G^5 zxw}bE>rYRAcCTa2f}UGZ$2qalH*rhTqlWL7lnt}BH=ug6w>vLIxNa^+Y%`mP(d;aP zzmjLW;c2V&s><i1QWvaz!!rx6wRI%v30pHJ6uUuV-qL%I-36PhYC?T?fn=(hMtGG% zPvo*9fS?%iUngAQjQQM`sR6%TYjJAJ8tX0Zo2CuK0>j|7TRdrLS^#payd!@GyddS} zKc2UIy3Wtv7PGdmmsR5ncFME+7ut9&g0C>CNHRr*iDBmB5qvMkVkw@mksSxA7XlY= zOY^kg=$CqCGh{suZLmu`Kl;GExIb(hZf>3pSR-SuS+Dss3mBB9)(^_E(5ZSYT}#~$ zh||92>^dTUC}*4ALNW=zLSJtQwz_+Ih!G+&H5_J&<FJ*qHyv*NY;W_d6TCF{It^o` z7G2#|vS1GjhyX0$vfc2z7T$SfT%<JZZXE8q(pbp!^JbKB+o)|GIRJ>Ggvd&63veGA zyv%lxuo~XMc9$~1K#A(`^gc32EglL#YkrY(y=!36kF|T#9$`ZoaU+uay0An1X6Kh6 z7>J)0*nB<9v}ihD4ww(ewX&cA+7bP93!L5duiZ}Gv;xF=u$|2U=a&Z(7_j;()QEh} z2{bDj=KjvZ9@BR`R7;cjQDa<?+O~BUME4>@aoJn?0E;e;FN8XxctX8~cDeEm$I>`T zHLlAqIvD9CVC=d>uM!XLXd=^rx%g^b{EMO-tQtNIa9$}6XiJWVWbnf{Jd#;b!lTCB zFrNVCXJK+R55PbM4>f`ZDpB}$!$})~^mvv^ir~RVqPWd(5b$xqYmuNk_*g`}EPc@s z_#yaY&S~V6WaMvAyh*#+p?%eJ(f=F=LFxYp6E(xN8|7Bvs1!?Cr+)LAC-ZAM<RT`s z@tT*M4X{0ISR={`GYwJdEQ_zM66_pz^Zw(o^<t+`eH+VoHS$`ey&lc4l0B}-j61YO zN16SB9+m^5q`EUH%|6^!^=?RRY;>3SfA0O#<F=%a5W1{Bb!ZAj)8u6l9czuj!rr0I z=OcClgzc}g<i9F$+~hMBh6qTvngjC;E6g4);k>4>N-91jv+eAYPk+6?-^)lijJiCO z=zd4MLd$Cq2$eW>2<ZXD*Gu@M$j~F0N6ivi_$DWyz}e9t!xrw}GIcJ@0vu(sS*Od+ z;~-!r#y;b$f971%G%8VyPboXI%!(p#)O=>z%jFzI;`5xgA@W;clNT>@mTD*HD##TF zp!0RF1Pb`cibp6p*I>?ORynFnTyyft$kO9jZkwix5+#*ojYLPhW$#@N*29deaq{{Y zwnp-zy+rFr$zt^bID!}&TXerY2$BQ09DX<z?FXNzK{n%5pZp+Yf_=uf=1xmQu)4M9 z+0&Qs)aa=s;+Ldg()K`0^K`BW_x+?Z=-|d06mj2HPZG`<BuhY7S0Ns5y3^@b-ZEeX zHj*>z_i!U>Y)vp&5rcU>P3MzYfmGl96aM%aCPtWwGc`Vc$1nIANs4Z<jB3&^u$A?& z1<>ygpt29h?ji4(#QcG)p}0iXyL^NZ(J0g+C~8+Ak>?{a91D)n@g+DB6aic9_7Qqf z9n(V}!e!^=)!-9Ih_TZ@yHD8CW0<yQO7I<~)lY}LEF;YIZBO=QKAa9=ediSX2LO%c z0C<?mY=H#97cA9mNH2#7clUjL&0zdV=9rk493X*!1D9YM32G(i18aXFb@?woYm_f1 zFa&5g>i(!Po8wK8SBkl>l6jx}Jix~q<WzEJ?O<#8R~w1_T2)DL@{bp&fNNi%24ZRg zES3jLD_Fh+4VN$B8k%kj6M$0IBia(xEd{t!=Aq##GXXpl)d`?VIO*Stvu`pL?;5DB zHK$h7tlhJdDf#Wt&&gTC)U1m3gi<T^+9X5%XX$I6J`^>gcL5i|wqSED1y#-LR>dCJ z5w&$M^fF3%vIR!_d@DT~J5QH->T7fMveyQ2cm^ALPlpR<V=Hqjgov}Ri^-(C?o!{z zV=P4U`W#8cKGc0NK|We{FfQti!Ma7JJr>pS-ZnNWyFpO`GtA}!a!P~taWO7IG)z*l z@`92NCr&SRIbfu$_LB#JYFVE_wBrUaZH7(mGCZ-|%=KX5<dQM?p(CH|*~*8Gal{5# z$L3$-8IxMg1#FrWb&xUr^_gI3GEA_pqi<~oi`av0S}jQh*AM5<9D$g><Zp{VV3^0M zo@(n#H2lX4=vb(_t%CNup5a;4w(5l9*&IC+&U?=6e9t#zNBk$hvhPCo9Nr-t2)(EX zSV*IDTW|K<@y8l36B_v$#(?!@Vx0m1lhMWzN1|zeoTR+BwdJ;;1+QSPN@U!4dMlpa zcy6nOlS@WPJ7w>1!v2f7YwvFBw&8!rpW;UC7AcYCN1L^?<M?z<y6(|6C&|{GIbM%q z-8eUubv<1<j#uZq5BLGNAjB)%Y4_T?)#4>V5ClmO#KRY+uy5pourCAYeg6Nhx$qNt z`7MX*4SgVk+#OZ>3L2dlS@v4`%ZiiK;`n!dwM6TTbG^qa4^WdqJecl&5k&AleI8g2 zfmPeQIuiGEJMAT8(fwSmgOAMn9FmD$>%<8uc#Kptu8&$m^$81)T+xjkc(S^qJsR0G z1ygGL9@CRVrMm6fGugFmTOTHIjjIKX^r)m8Tti~5fEfZ!-yk$1ba$g!O;ELs`-0M} zdn2G}v*3YNfQ~Xqe=st6xj!(6A$0f0n%+?|@`}|`*;Mm#;s)v~#=X`(TCJu=Co%w- z02{z`<Xq$%9slBB!aMj&j$`MGF-04^UQdDTCFBscig8N!*H#@N@yO6YyQ#ynm_MHK zHe=OFlF@`C_@>z(Xin~{mPFM&N_=TOgD-Jp_KiA|Z~NM{U>Q~-YEcy@+-yR7QJUs1 zm&Ay;iZ)-DzU8^I>pvd{2-Z-Xk~qq~v=<&OBC|^ONe(W;1VAr&ZWY(>xYnxn?NvF3 zng3wqj|0oJn3=&`E97wrQBD4^JyOd;Q5L;x3tB`IKu7^jm%^(e3}2rWOmOnZX8PAs zdbzDM37A=N46W;?tM6<*PAUrz6VgHzg9r<%hRzt3&|7>6Xl-IW;J$q$R4HVg!P_Q~ ziLa`o%l!9KfGsC*3fPf$<wh`lz*k`RQ-EEG-Ortx6jN;z5dOLF9r^A)^nAJ*yK3bu zRCwYiBBE&v-j1-J0N!CbG}_>AytYh{-jYI;{XN@((TPHgYJ4yMjs%eUyw&I1jvbGc z%)Qq(-=U)klV19*uQ9D2%VJ3dH9lr&xLT3bB5*4EKErM2b-3nM<kX}>xSu<ue`xL? zl|?mMh)!=pe`?*=i^XZPv$1hZV%Zr&ifqWiZvUbZ3P8Pae|x;S{mJLrYEcL4*)c^- zI3}26nLV#*Ok0~p|55pN03%sHF2tIT%w{z%g|uo&&UjZ&MhQZM&k^(1aa|uzOCWW+ z@%HnLs%g&3W@A#4hGn`>28vso_cys6kCCX8gax7!b@T9h`)$$n%H;*r*9&{R8lzGS z#geEYu9Qy<nod@?!on1N)`P1kT~HU>fn{Z?u}mh#1ES0EmSkfICbM|dFlX0vSahZ8 z?@nU*&4Ox_^EMOGH8%)d2|QV&H+41Z_l7+cc-S<>mAtOu&Gk|+|B|=@p1DK^Y(L#@ zu7?*UHe96wJi!clOQ;I0U_xY<+0~arZiCwc;12ketgx~|QsNamD}eNqA+*vSZQS`* zPlaK#cePSE5k-|>h9QM>3yn^fYek|E^J^~c>*Ghr4}W=?)fV2lErSu5P+k~vgXQ2C ztBe>F`RxAuK7_+)U+mxeENM%nR}26SNEUQU$QBL<F87#Q$jG#-)Z|EcQP;oAz;=s> z%r)a<THd<{SbJ?ZgVmYiJyE=l#}4CkOfwsVp8=Tkfa{F@q0(6%_}11$2dX4=FGsqb z>y*$b)rsodFBOu2UoH&1jeDG<7WpxPlrWC6fcYTc)#=v)RUEe${vp}CQma=LzfJy7 zmKtOz>RZ1u+IZz+&?x~N(+h6jVXumIZzt<t5Tobz?G~&YB33(*Y^)<~#WV%F{0Y<v zMlJ@=`Q>L}n}%WMo*n++YDDzV^7`@AG7hup;@#y&xLqFv*wK->w5Lp*D{&qptax}j zbF?T9i`zV2f*loZ4l+A|JD{ZTSbo~9*rY@~i`8;$ECZuY6bM88+Dmjbqt#mq9DeFm zL@1W!UXNa&>ED-p*&Ou9)|-%>mat@@2p~kuQ!-aj51D&-!hXlr`;z;8;{nCvl-w8d z%cFXFSyF7j$>r<$Wp#3VDOob8=N~RlNU*v*9h0m)=(B6;&f&em!QUUUiTTFEjS9Uk z#LE+4t<DBMu+t!l@z+Mhg^UEsE`RyaKKa1zqUx-MwVI-~Be7pDMfIe}N#>%<W^qC4 z1ct@3p=MFq>**i8qMlnJfz`hlto})s@dW?i?|X-rY%)L6;*mf+pN~%|Eu214OOJGN z7h6Lz^A?$?fVf2bx_8I^y7REd-#4Vf!(JiAH03dgENyF=@#%zALR!~;T5Z}j$6k5C zg1Xj}zpdJw>uh@+A+1)Gzn7Z;>?g}j=wEYfMt`hmORUk^pVy}v$0YKfDk%H842XHH z9o@;;s?%Rq<9p3hMYUjt%@ydAJoW3mjA%v}JWr4n$t3NzRgCG{->=w=$$uM$Y0(%k zk`l~D0`qnHZK5aMW3}9G%6Wxo4aEaqGY@gJJrEXtSkUUQfDRNCNNyc=#U)q%n$lqN zl6a;-^f<82j4H*R5|3=R*{eY5hrd|7d*5jek!6l@_3El~H1Tf_lDjC=T1ZtIl%pY~ zq(8B@+FpF;Z?N2v&gB&48aPD#>tJAFhF=_#a|(@vn<7gsR_LN?7v@M1)*ooZ6}bel zRL&6e&-{_aZutZC17TYuzR$NbbTq>mA)^TzZ<);{WfRYN_e{hpA2JsL1H&7Pv`+yO z$i9lwMivI=Y6Cm&_=e9gS-w*f2EFX7)FfYx4W!@U3IY#C<v;qHMB8aSEBk8PN^k-q zUH;VEM~tauwLRylRin)%+H*t~b2LP+(Y!l`Oj#~kX^SmDm#e!$ca(_)SK~>{Oy`9; z<)GiO)6svOhtTWIxM($afxddP-~+%7!00nJ2K(JlnZpXB0faY>j33h)X;lVpl($;B zu?@rNqV`P&8b_C*6#6-vE%g-o2#<i>o%xv(6rGqS3;JLz5K;5gwBM1kPs*a|(#bMn zYPCoU^{zyEQlES?o>ix=coQq2t{X#G`m2^0e+yx=q<KDfP?rCX@QZtsKYvCIc8>8& zw8#*)PW`;<-WsnT8ryqiV~e;u(3QhT7k#)+N>BN^^jBPEJgdmV5MWIivfy%crP-pE zo0IM}-I_#g&=U&whK`D^G^H?1&;RcUoN8@;2C*ZF+RXqo2qaoP1)USNYDyZj3o_FW zTxcm~=NRgI*ili}qy}P>0R*vGU!T;_&zh*Uc1xZEx{U)29>$s*X3D85iV!yh8dz?c zJmB%|#{Jq?>*Xy}iW?Kg1pS7UNeU~)1G5FCEBcHZ$egc?)hFcbZs<5=?qaLs&@6oj z@fXo52GCzEie&kAfBt+Bw>)KZOxR4L|MH6im6!)BQQ?PX?IzA~Kat=VwPQp$T<|Lu z8BEZE)BwP%1;&sjIj3<v1g;}A3&&wGOlTP7EA#lRY&a9)JulMUC!uUFHuJPdmOdzc zXRLC-d)iqypxD7qUN^IvVbR<pR`)ygd^~&;V{S0?C{(eam5@$?U%RYq1$(RSj$MaB zWHmKC(vKb!p!F3B>N{3vm@Sf7IePp!O9!xEd;T%Mkj@uJXA3NWH)qWPyJp)1waity zJ|tJ;@{^(J)>OZ0l+d`2{UudIra{CjPp(*uzzo`LRa+bsebWkx=ap4NZWB@M91h4| zeaT;0?w$-u$0F^Vpr*oP<;TZcq-6Sd`=LZ-@OU^s%|qj-?Lsa;tPCpJy@^|sYxg5# zuqt6Nqf2J`taf~wsHd$@opJQr5Nl;fm0&iwoatsQMBUI4bm>t92j4cGC%f;WR^Q0d zc?<mjr4qA(0?o8a`Z;KoLbjV5jA_-joZOi59p*!Y%1##^*SU=6ZX;pw#1OL|!mec0 zKqV0;%Zb25huBYEm(x?WrYHn!N$$jGSfqB`_CiFl8&2O%lnHSnU9m7MBy^ZhlrcL> z5(<Y2E_8;a`Jk0p(vv&e5W5}N@yW5W!Hvj}gook~Z*bX{S7SIQW+MD>&69%K_h4Yy zbtjh@SFMLV+Pdb}8*t%ZB)kxK*Ev1ZmySEQ-37n+c((e^r4VyI0ZcM~5a2|k9sWz4 zf0Bvq4W&5V(S-chy8$saMy4evBiFjxCC$O%=0qHXrwK9<)}7B^J3S8@BsKcie0(ec zq=a_E<ZuEovlkb2f1}UwmIp;&2q4N}*&95KHmR;*_F_f6J)>4H|9}Xdoo@xG`6a`n zjU~GXN-hlga<xog?_%jGeiJQWr;^afyn?toE8QyR73^~ZR5~9Z94+N(ogw;`pA(8{ zv7c^3#g5B^3WL91H^`f5)Z1Oal6lG>VL$Lg{G4-cFhh);3tbij`*>7P$&!Ta9eERp zKYTBb9OS*ZHM9S<Y)|c9Trn89jmH@7#vwBLk1g&y*46u{k&O)uSq$eZZE8f9iPM!9 z?rYYGXVDv3k*kgcmF|&5fz48IJ6LZUb^A69Z+B&7$3?1Ihr)?_!d6W3Oq;9wQExGa z$?=Wk+#ym(YwBwHxL#~^i@wIjvOc)Xa55)7i3ZU($7De#@y4?c@;eu6_<kem9th7S zNWbKmRO1Qfog{KiFW_o0o--pmBocCv2$gD1eM&TQ<Vkh>nnR=WReiySM>)Y|agZzy z2c?4XVwb*JRuvb8^Ip{X#p1Mro(_$J^(NiuoW3lN#<;C5B(vO%1AtR0_srsE1!LQz zdOjz}(+da3=Ri5fdC*i8yNz*civDlNB=)1vH$S82GOue(qiMxL#~HUhiKa20o{ujY z>RgVXiCA5+g{FD#c;7ghtqWU4fJKaedtiU6cBsrm&Rdx$r(N9*BRK->AaJI!@ABKk zkhoBExo2BU>f&K_Na;iy>NEVfM!&N5K14lZ<~A*?xeKncAXfu&ERUXyy?=#jX(0i< z=@=jqY8tHYiV@<+bcG%?5Cb6{6l)>c7Rdc&eR=_12$5rc#3~ZqU&Le%zgJsujyS&| zEgLj023?{3-i}>~`-k!(`1ulB)x7peE@vqIZQ?M8l1wlEF1QT~Yit=$o}E|hWxJ?t zeYy^ro0(&pq-ND9heKPc5SRg`Ax#A5J(EU9L?+%{)E?Rq*1rzI7!L<&Y%yq>yy{2_ zgl&Cf{8tXhhU})y@7oc(F`V{cTt1<>UX%uLBncqUpB1$@{iw%kp48bvt~@lfj-^k& zQca?xKnwOZ)7g`z_Xu=^MPwj=Wah2vr2V2d;*d8zzKh+vy7I8=b7vv=s6&HI|6~j0 ztLj}FKDg<(YsF$qeP;(1vQSzAu9>EVBkCb>ge~;di)+;qYC}5hd8;gRpDh7a7|k79 z)de)n;31}_oQ3D5rMMW=rV9Y{oeqJf4lU)N#AYGHOd;Hz)OP`3?H2G`LZL+s9+F<p zR~KAo=40XpJn%@BreMiJ<E5jeow8vBn*Lew(Y^s7PL_55yT`v;|6Jk-FKU_C!u*T) zOs*zn2$!x`E(p)&YK-X2^NQ}A^9uwjrB;rVO6mRin5xdXF^0fw2MAtsKq#om^Q#N1 z!&{CSD}althECWEWf<pzEb_Vxy(YM(?4x1(?_kH9L4xTf?s$D}<%#xj<9k`Z>+z-^ zKg~(ETlaLQi?nSJ_NSaTRfFlViz-szNis>3EUW_oLCXYSnE@B|Y*bME;HDe`^k?m~ z9anF$u`3MsR0et5&iJ$(bAGxuo0nR}eJK@mrYZ{Zrrh3?c7euN6_AWj2^>M#YIK9q zq+JreTL*Al;_m+HtPz<?r9AF;p-DG^R3MQ6Fgk6d^wBiy&_=44c`8`;>RC_6BWRjt z3ux*u8=QYnzS<D-*;OgWUE0eDGKv7Hl-TWOJ5?8wW)h<#gtb+36?;mRz~}~5vDMC= zY3Xhk&P?VMGvt~xY*nxZ`2|6S;7C#(IU5_Itmdv1W8538D_T3ToUQ%XwlxeXpk>4I zA`g{}Em-6dgejs-SLK{jGES1&XOV^O495B@ZE<@vvd@dUmR&Oskssx>LQKrNF51Oj zrYhs%`lZ`L2)b<FUJ>+9Q=u_65RR=67?vFn3Xy&LGq=3-N;__ZNo-&_p!9mvYuKQ+ zSM;|wwu?XfW>E0ns7ohF<wARUeN>H!lc4U_027tRUX-M4k%J3FwFpZ>_?_rb%MmMB zaFr8f(BfAXXA<Guib_MHUDRg<^VkE~<R9|Z_y88|5B+2cS{{$|t-3%DhA-#b9o?7i zBqt~zu%>3r@Wi2m8I1}LR}`8qGgB36xix!G+~3-!a;6{Z8Xe^YP;1l1$ua|3cnZ7+ zoiCBr<p9UkDm|yZK<bc}n-1*7(74c(vujzVT546W2Q8SxUE5u~i7|V}hg84|%BN6k zH;ADYe%&fdYi|om>c!7igDp#zxxyQwtxj&^I_jVr^Ddn-(&ZIoSQ<gG-@?}1{_YYJ zG<zMJ!A{cedx<C+JGNU(7Og?<#?NcIBgmgU@qTYh>2E7et*Ca)1k68tAtqmD_SC-J zu`PCdjp*{vHaYbsUfP}R*&bL`@i8XMf{%m;qPRx8-w)dx<Ih*%qK4p?X+s_L11HB} zw7HJDmH5iqecjaFy04khOq-dcFHsNog*I+7ZZUF@6WU%7jlPO?MK}i36{^;Dw`G#% z=*>HP2DjhDeOZU&Q|eLpqne3RB$*Ro;?3CW(j4^&Y)3qU)tV-bC5x`39MfCQ<Z~6^ z<+?3UgPF7-))q}#=A@mQE&=*Yta#eh0|;hMZwH&syJ(q7tTG}{fl9uyq)I&Bmmkt* zHBJ|Fj3cJ|yWS7f!o^g5d8);Z;w?#rvJ{^d0Q9n@HwqEq8q?IgL<EJm)i_+#S(s4$ zbxRJ5knkmmLi}M;dVRTYD;>|P=`_^?gsV1#a5b{6l@Vn^FOVODC2RNg&{vrA5?Z;Y zJ}Cu4xJ+yOSZXOMjHJI&;mOdxsq5!;JvAJT&n{pqD(~R0>&2{Wnh_RZuDLOu!j~k+ z@Si~<&Cnzfz)41)kN<groaihX8S-7rNTFDQp~z>&-qI4@wHsGnBSY-FvYJo$&0r4A zzP%IB{LA#{aRgGy&Ippy&T=6TAi;*vOs`nFgq&;Fn}w!}#HEz_*H~Z*z~oJ1j#JW% zBF+3*&NMdDl?$gJ(DNN!^D8?sB**f-d*<}oJx8&=Xxfs3sHF#vtjA8+C1*@x9Ovxz zR@||T+=_bf4u-MD-TTl@=Ke;Le{&Kpp?p*N1*2WDWYa^-bt_Hj5#XeZPAA$XAx|!E z)gGlW6EBrIH%Z$|c-+=+@ks+Wc@4DhT#dwA#5b1f%dRGO<mPlI%dFD{c`qi^S(#%v zyLZ|LHQDlCt9=7isS?G#-L>njq4{4|o2Ta?3}<I_XPmnQ6TaM|4?UMvk}!zDFRGfI zm0n9$*^D1u;gIACr$x=iWpV@W#3VN^WdM39lWrq|PVeYO>5FJBW&yc2cBABxe^>PW zigXC;@CRovTe(F~r<Ur!S<d=#Gc!{7J<h9>;=DC>9g5cIykZ>r#q(RT&hT8)<A#+o zP!o8bdbrs~D_9xxbw;rIgs#q%W>5=&hum`6Gg#|S%G1_M*=&+5tDsLop3%$){o9&% zR;CON54GK4spGUPr*ta3k`#&P;#BDyv!QAKG$wl55eAil?L+V9oBD05tefNY9=HcT zOq8sz%bfc_JT+K!t#spEK2Gn@d3Ls_%_Oo=mvuc!a3i%n4P)pwv_c~w;5m+Eot)#q zRDbwkarb0=aaSx5n$xp6$5*p1-3XEn+24p?`W&BR$uNo99I5KK&ND5Hj}By+X>)&Q z&r|!ylGKZDM@Nv4;U$X>58&)BdMP-|KeXyPmx7IsH^avfihbG#-4Vl8@C^+U!__OG zSf;!|IE-SqSYLm$6k0xegqP+A)P@d4eIVE5gZ`!C!s}pfdA*f>F<zx3!>F^Li}4)C zWWlK%ejtgiDb#G<w-VKu`+~6$s?LVj8sxM6URIiK!8R+=(`?mtoP(4-OIQ?F{b8}h zbc3#}VUZ7(j;44^QZzk$vL6b$eb^$4&B_<>&>)!JMLk;-!MG_zFF$mnu}PN&mNa5+ zlS;~N{o7KG_cY$0lb>;8_XmTGH{-Wsg_2B`b}pn4IKgCm-^#k#)tVscoBi1le%g~Y ztaMq3`5MG2Pzioe(Votk5)Vyfl0`sN$lc~JHf*!Z_Z4L`7K~$jAUDbf(K=XU0<EhS za90@8MMt%j&RF<4yxPb`@_{2bRIr55;-Q;uJeC$#(U)}i{BIH$Ll(fmzOY5PB1z!k zRgz*gu{d(ek4T4URucDnW7?V)`G7x&Fzr8sS&TvPI~-0jH*8V3opvpGHG^bxWF{j1 zIhwEN>d}j#RJIl4DU0bJcgVs+?c170(gBDB5BmQ(AEzDp^SyViu2($ooOW0@^I3J` zAh8hffVqPBqoLzQ&!romZG0}Kmi>=D+r0njz?XjL#YvNtj=*@rYnhXgK?!W^aHRMO zrg5@3=f)??CAZa^JZLI%jzG$Demvxse{L~Ie4K{YbL8j_9-mIeZ^rNXK=5on-DxXH z6!GR_cBCoVs6fcd8|+SdaG0Z_F^2;_p4KnN)5nC8cCFWH|A92<GcR*Vf=WCO*=lFt zn|cDjPs5Onr>C!ZS#RKv7nEmuaCrB{KmvNzBrH@5#QD-c_oRXZ0h^4Q*I!us_5Q(l z{hx;ejU0By_XsZUAAGU?H!4Oc-E>diA#&OJK1Dd=Ok3{;`yX#q`mz1Afi1sjp1rQm zVQX#?@cGH-Wm8XyS=i5{YO0qN#~-Bf*VTj!b*NPBaro6}S|9z;E8Y(Q?7M1$i_}5U z`(ycP!Pm5>d`qD)OH$$Ml7C8#=k+O9_)Sel94A`iZ2sl5XN(ygfM1eCNJvbc@g-G0 zGTreLNp_BCKc4bN9G~7fhc$8WqKtkoT1FfApNVp2Dz=;ri*N+A_?qQLBDe;qp~{_B zRdPo*x>>zmp9=qUdzaw#ceVFyw6o1a=#7t#%EnS5rKoiW-w0Jg7g7|XKZPi*Pz-cK z+3{*jt)votwJ3af@L747pG^4l0rXZuOUml{2k5SG0?aEGrBf3XF~%$DmRNC}SH-bR zfW$+#zn7p2yD{V)3|yC&{9yLVUs#Tm;euG3m8w2k12L<Wxajx`(KF%tFE?iGRoc0x zOZeRS?P;xE@~7>~E~lw_uE$oOTRjm|J0#TjCIy;|6ljNq=TL2F-W^TPChF2!Pf69! zBqahGIjge42}$#J`VOT16NW0}?EMqA>^)C6*Lzh{%x^6Av{VtXA~db*lk_(`eSe)c zR4ko)93{FC)=df4YoN_1Efd>3!)a6Av(eCagt+H;*~kooc|stCPpCQq&Ph1ASJQgD zNa=9FC~_%bw=9}cwXgUKPmui$Yh6r&{Pe;6wp<wh0-4CY{KzndghIy*;fSw0SFP`% zD45(3@ewQ87`%X%cMGb+y)sj~mv%@2)BPUzNq6z*cmPX4w7>jwPK&N*rsB;#TEssK z8bF#1Xt7<Tg;BX;SZoO(n)_wLc7EBQ)eb;V*h@HnD0_=Hv_0X#fr?x;3-FaCLNy+$ z{W1+b9yp6i{mpzYk||NTc5Sw+U6}tg{u9p-#7AifPiCFV5gk6n2OoX5we_n`kKLf} zhH*ke5JL<BtA{QO5udW?4R3oIlwPOfrh$3g5Ie!0(|31F8QB--c<kclh(lXkvRDT< z!`E~;?G_W}Ah;kygMa$2mm`g72g;mLrJ9tJp*#L@+n|<azd&1uxc(p+vefg30dNxd zz2BqCumnIEh}zfDND-Mc*yY5-Jmd^uhY9P1ElViwM05$Ux4Sv^VtL?cL<4rGni0@y zawp-BcA$xxpUubF|LOky&0kZoM|rTd;?_7G6CnmL(8D6yrL3lMaV%7XnZF&J0^7z@ z&Yh;96;FEaSP1GRtO#kTdF<5WyMgU>-9(LtX5@`;<D46|j-YSFY5>3H&;rTKN=2pU z6<f3K$^X4w@ISlbT{G{i=lrKnISB#R&UiZEYjLWF$jL<LUho3zMpPZ3e3OU)IaFSY zooQj5ZzGqPF}dubW*yid|8Z6w{lE#N&S~Mx>)}RywpiLQ6<ssRW`F6Uv*}pv#JO$8 zb!LRy>7HLtCuTKhZ$2e&uuKpBsJqD!$B!t!`IEUsH$m6N!=*~rp^=8b*b1?OI9oQi zyx8j+pt!!)f_tr-5BL!HAvO-c@$AO2yL(4GE^S+4390qTH(aQ+%rl+))qPm_MRh5e z*rUf!o<9Eai|3CY4U0e1*W^~!y5QP9O1Ld7*d_DNgWhYFn{n$t=ZkpnFuf60!lQzA zwmBFf=;JlFqp+!gvzYFLOZSB-C|T(plukxy33we_I%Yl5#RTNLuRFKUuB(m>gV%yJ zQkBMVDaP6j`w(?qM{GE5`XEQRV-t}7H-x>pNIILR?;z%+%8X(O!|*W&?RYNta68C! z_Gl^hROQnizwY)@4~b3L^)`8D@>b-XO_v%rN8`nJPHyE54s>jde#H8~*uTSmSuguK z-W~p6NOzN#`nUEz2q$#+Ub6Pn$9RJw{=^Z+c*QR3E@fWiB579KOQqObvhmz%y4Ij; za*TMQ@au|2qPBR)berWp{CK=zhcRpn*x_ZfFcI>jt^2?Jb%^dmTFyppts>hBLx(HP z!>}NNYDvdr6p1T0*7bqA)o<5xuBkCPcQE^SlN~JBk1}I4n!iGnPzos(E3`<++*ddr z;W{kl{k%+LV-}|FPRa(Nd$uqD{e<dI%VT;V7=28pup5*EY;(Xw?WuKu;b7VzHf8z% z-r-$4zb+HujV!QiT#(T!*)51<Y6PaKajzPU9znWbl3%p(SM~g;<T@`ef=?f7dL+3r zR}><k%#wAhZWWb9Yp!&2uQkI$$6!DGSd{B7#%eTeY1RYKzA4%%jg=DRE|XWXS&2c3 z^h;3FsgjuzOhfseD*1&yY+m;hNUdBT6^DkmXj3CN!s8D8_ny^B?BQiym<gTx%2nk# z@nUEBC@RwJu*pjI@(WCP&XTN44e4bh=>hA?AtiSUv~-b3UMxsBS^t<gc98jO+eN#d z04E?J#6vc|rD#WfGl;>2bj|u`uOg9BK#!rArY#PZn?6yM9o!T9enLynuDA`_4UJvZ z^gD+qf0zZpFj}S<B3+t#@4Wk=KXOrbccWZ1@se&%i3~EOm!F{%EZ-sXZPO2RY1r`V zk+nsd!IRS3hQhpU=dLFElHKpe=Ven<gV%KI^CtDEBn#Td6G#ASY1YJYUj0C_bxA?# z78_%7qvPbx8{3<kpKZ`T+n;T0eLlMX>1gZz#z(49UEkW=-v0F#dh|e45~;ZyPupw$ znC9d7Y|80#Nl!CXB^$M}umf6x%cxkH6R2tqXK8{09|DW9aHRIA6~C|xK-cL80fA;j zEN{5f%bd63wb1Rx{c3fKr?=f1`A55VKOw}cncW$+N$UWyeC5W0p;+pK8-s@#wtjM6 zas*7Sbfk3mk)`*lrs|~6m$#GhgboB~8+b?GG&d|C6etLUOp4(e@w$0LkNw9smL}^P zXnpYTq+VFQUGG08eC~ur-Chv0y`4sx(kwbvb>D^DS6O0PI5qWd$!OSvFCk)2yIA-{ zlg<YD9dIWt5&*mU055n5fR}Kk>19ut`be5yf(75~_9ts08Jb|Z9>iQ1DU*E9lL_SY zdm3MI0G_eKCByV&Jg4>2OZ&KYbsyFy>%x_;AAqk=%3v}7g3!H)xJGn!Li(xT)*+nd zGX1IIiK<aLK8(aXAUh!ZXwcioUd9NbxK!JKPM+|@a0-L92aKV#lHWYW+*xg2PLaF! zYoPZn;EKXAk;c`cfdO=oRlhPB^}&J^Vm-AU=q3gXCpwPH$i%l-(=oLt33=_dH`$2e z7u%a+@$qs_$5^@GvKI$04nKzB$d^z5_!Ua#`!8lvj}DR7T=dcCF6zM4in@bENPl#9 zf3R~<yjUFGB?FWf^A|HtQ#U8ekrO&><Vr9tN!CXs<QH?^0I6dnqg)h^zx^WtM4Sf! zx4%QF!s_`Y8Ss?&Ki=yuITZZ#QigYVQd82=OF8B)`DN*xc=vM7+v;Ug@@acX*1(ti zWO<3!WG{4iUY0)$KGp<w^bGc^`=1Ocz}wdLef;bG_D(UaNmIyb)J07=uv=dV@)Lsi z^hCcfqJ-z)iR$I$--)YeFT8xQ4ts@$>JN5=OtV_;hHPZNef<3L>&IU_8pwC+Nzw&w zyx2e~oIx=I`}i&9OI)DI&0f4b`1^xH&ZkG&1RuQE(3EF`2Phug^&(0p%@D*x_PNH) zFl10l1kz$PD}oJj^97k&aXrgnxM;*&X#baogYWka{{G9uyC^?9`r28c|92w7z)X#f z!*>oe8W{TfVe#=6{ck&PHI)_js4zFR0kpZ0inATQxc6f8V*T*m&VUKWjJL7>(GCrt zMz+%@`=!Bv$%o1Q17|Un7-X!{F`X~%gp)S<_V@gYpu0T}7XZNB;>o<!6}EPZuY7~z zxki9y9l)zIc8>F;-gIO(3lbR31g$ChO<5LfzP9nEsb{C7H&7QyVDK>;uMYrs8*rPF z0YeR6PImBt{<B{E=J8kGK7Cw_8-DVU_QisjzTvIPt9|j+^T$sM<c@4p<U#XKSRh`P z7#x}N5#`Sw5g)R3kfsgcR})3(lL6)bxS%r7%*KOHpANW8-unpCqPaMESx?z-8Q~XS zf-)0Sy+0_}ru|IQ&2nYpI0=O9BWS@x#q|8^$A2o!GPan|Er&?V&<SHmuL666LloHD z;E6(K?74xZhs+9cuTI_S5pCamL_`;?o(~?;alL97Z7Ugua;{zMur<k6#BB6O{k5tV zVW)mJR{hDCAmizPH@i<hAM&nD9yIby975E~OR*S?5#6}SSVHySQO<9F)*Fo_y%KVq z7u-8umgNlok9a(em=}9FoY8BV%H1`4L@wNH?#~*CkSlob6<W)T_!s71i>ie3kvsRE z)Dw;kRxJ?oYL@qzW7QoDk_2ZMR#|mNxPUKU1}CeBgBWV6<1km^|98ssvzAU4!Qc%~ z+(9C^=-;3(Lcifhq8=@ohSo2~5$Iu$NNi`@U5xoL{m?EJm+nb;eO~*v_wC#lRKJiO z&gL>fAiJ?TsU7FUHyBr=&u3$Jwwd0f(G_4qq@M{LKtvjsZlVcDUbi#iJeu!y)W%h* z1IQlZc3re=!^%~nzS-x!Wm5(R58|ohu(e!#a72(l)%erFnLVg{wo<KJH4FI*Dl>6A z+Ff(KYQcA$7L;AKb4=A~r!V0_q{Ha3V{KB*5DgL}wE*ljpN3O6aH3<YoTwq78rW%d zj`Aq4=rnP@mg7)FM7p=3ng{C`OVaMjNp(fG8(R|ZUlN=2i!E3+*@W|y8!3xDXYvE@ z?Qm5&d`q1GaNj&Hd8}&X<jr_ztr2Q@deQcG5Rl(zSL)_<^-7EY*)fTXoQ><kqlfM) zSo{?&P@GA=rmzM035j*+Cyg(6ZF=p3cQb)jzw@mXy!pppzkW(Q=p^5`>!D*wUbJ4y z$<h~D-(6EhbhREw3A1g2*&N)SgQgZ@sNkQ&L|K?BQBhnq*EAGcj=mVB#XkOJ=Gi+^ zMP!_kgQZbDCz_}-d=g}-xAFs_k}Wt~F^dEsjK^H$7^ExGiv>HZ#r|~@MKBUgBMBz# z|39hbpqRu(l$d=+5Y*<Xe46tYHgFLf#X^?QWd73Jax;F2nUnB;v9xg~=;r&iX<OpR zeI~uNTl572xDr2mIL!EHq>HRyq?FA-UcEN-P5T2@i1(JRh`6lRf)1ETn^JmS@Z6|B zvB!t>`H6z8Z~CwD$pOW$W;VP&_#E(lsnq{qLVXCCsGCS2qs!TBR<dwP@9&URm+8~@ zwKiy@@m7mF9HXGrXKgxzm`Zxh;t1QC8H6@clT3V~Rwnx9J7W4?N&?$Z?p~Q8RagX6 zFNiBlV%$LEo0OEPBPjH8OF1M{d+kY$w*gWgGz*#PkkCj%;ai1rvSg=rJ0z6I(tw1R z8}%!edRaKtunZ&~(|-pR&JPv*g<l$3m@aMEu!}2d4)NQ1-c|puSZ#C2HPtlEMlJFr z_Nsz3D>gJmav>*4kG}NW1W}_)l6W$ac`Aubf<dB=L1$4$ppBV{h?ebquTI<K&4aZr z0%Owbf!6>H_!y(0UduIm3PW}z`8(`znQ7`!(vcKnX{mSo?noaBJPU*zI<tY{w~c9- zULDk-iE_qrTwRg&Z4<Q_c=GMD=e_te;n`z^yUZw0W{}Dx|JI^x?_;an0I}rOw6`4| zT;~7Bu{C;a;f@W%Lb6Eo0G|bZ-=RHg*1%2QLIt$)%Jc%}=oWM!S^c_kA!g|rktu*l z*x=bhbBI|DW(&6-*PThACAP%30=zx>K1vIj#>T4687}aoo8nEBVF0K^KbY~FQD4>* zJ|;W}w1?)<4yxv9+0;`?h1Pdwh6?r5&$sXI6u&jI3)<JmQy)?_)6LYRe4ImHVP9sV z@`Z!?<9aD0Nqy;>530VCcW&M1w3tWxyEMb&*ms`ul+04ka}aqom|rM!KncLOpPigs zaFhiEYa#8S%^%-rL$<+w?*Ub#xHcaBBb@-tmoAD(=WnVrlqhj(^kP8~9E>{}^Ns1w zlX8Ai$))vCIinHX5mSE+@MP`OuRk!g8<j{WNRl~7<CQ?yP)4@~XAuMasv^Kfw}C`F zaTc7_nmH*QKQZJ~>DD!sx&34~Mt#!s&Cb(Z9fbAft5B9vM<@d-=*~1~TGMh>9`m>> z;^1uCc$#K~7QaN09qC#9bDoLIPV@aD3;wWFgXY4IZRSLMA-W3uOhOo_BrvHOe)*bM z07mIS;seVqD?TfT36s{ckO#P5qq#ouq?K?yFrf^`IDU5vPmP7M)RZGCgbh$I4fHIz zZQ@t8muin{p&Kg0;>tfV9{AvI!TPgOWW28*@mQ^o(TPtT%ro7939o9j%J_ARkJ<OO zU$tp@eh#4b9*Wg1#J@lgOO7@~V|dNmjSWT~9}seY_Zqf8sY#9c`!D`#u_?o|cn{k% z^xN`ReTqNq;KYx|yz|I+Ie6r6ju$N2E)@}%%*yLx5M%t-O96gK=38DRtj{OGks!4% zocu>b`arxy_#M7(*oi!Ltj|8_gY<!w83HcRYv>Z+YnXN2H3yf-L@uvHJK2`t+^J8h z1xwv4B}TMSdC`R@3vXk6gKu0!M59)f8KuK$1rmiPlb3YN!zfLeqy*^rsnW!b(;&)N z42(PMm=M1$!FEuBJ}ljt;$102nwm*9AD*}H$Uwg5QiI<=`}R*eUGsS3zLqDw$8UGu ziHirs>vF8UqWzLBdm5ExRCp74ixv>UUTXu2zN9OBkbF{~^hR?dj8qYzt&6H<Br@Zg zSJXFv2RPJ5f1V|7K1E+)484!kz-6hh4f{_bm|v7&J0|m)32iNaJ?#i=DSu{Jn4pB~ zyhx<z?Pkt{3OZca5~PF}6(ozU4z>BsI#$y^a+@LuIv+9D4<eXq*X2Z<hv4HRwOJ1P z(IS6QAa`7J>EFfspzX4{%kyHyJ3tNDm#j)#wi|AD4lIoDdbpu>XBSKnUn~N_RzlKD zUEwj%_)<xuZTJ^`h}IM;6Qpln2SlVp(UVGS7W4AgZA)(T{8Pngz3H){q>>Id-mRaX zpRd!5oU9WzC1w7jIYOJ{x!d4s02%+eahLld+Yz!ggnn1IL`W5>lG{tp8onQ%Bqe5= zq9v9Z!G9)~<|KBFSl2Km-=odECS>uf>MiNXn2|o>H(RCot#>EWB^pr45T5(|7sjp` z`g<t!i!uMS($gvRB*nbrErH}Bh3Vncq&6w+sPf$ne%k|M*z`mU8JCR&7of3`^oKq+ z6o%gqzG8NaW3^8d;ya8Zy$KjHa;;(Qy}llr@hg!UAI&y^S!Rr_w%62W<dE<^^Bh6| zS2GX+1-+tAS4)1zDGP}ZSk2a7mJ6~onhgN(h86{o#*&_>tz*W+jj>}rDcYjOJP7IW zC(-|$q@((LB=IJP)|Ls;h8g8(?y#}1<t<1C%yvrv#eh)JVrv+X$1ITYtq?U}Sj;n3 zl>T^V?eW3mT)^^>PvjQX6Dn~)G@IU(euS2o-o&voJZ0}(`BJ_7>JlEiuW6bXWDNAU z|ArQZN=yQ4S-=SXqNZ}>FR;0pwW$-E>V(~KOU7?~YjmFqj%Q=mi|2acP7R&*BT7<N zndai3d(~KzMNN$7$gHKn>@RymlWUjjL2!YGQMc7}^;DuRY{id0fk}wcs@znjYV2@K zh1xIMkkQR3iE!=uIw`}dk;5TI)c>7pRU^Ra6$>*#bP%<_(MBPN6SFCM+sMoX-*0q; zg!go6wt;p=A+DTbztp{C4fES{{OsvNc&zc8<eTO+Z1pSa-*dl8K?aXC03lYMk?#?Q zt)ur340fVFeCq5o0wTMX^HEmu`%qI9ZqT@_Pmm^tx@>V0`4C^fq+w!e{ikr70wKbG zQ%|67;?0-~y@Wy+S~W8}>@Um^56VR9kc~=fA{I6?eG+gZMepdTDJu22MRhIH`nHMY zUlfRM68yXUVP92#kgImdg<A5Q{xxqIn$P!jv72(6QxYQuCs+nq-RGtkmc&>_S0?FZ zTc<95nAPV*$+$k4O1k>lC|T6LYmz>@{4Hv>{rs`6PZ<MPKVuT?%U2wS;@xZb!U`sP z7ONQ#iq9AwmYAr_Ry%dXOVUWKFRY8F>E!HO6*<kr^kTGL7$;br(W9}A>rUJnbyzG} zrVe5x6BT&#ComNyl!M0S$rH;h$wBZmGD_6<1(+C$#&+8;I$5s}fiLU%H~h@g80Qvj zpN%llZdGU)89Et}d3B|Z(sOwT*mYtD1f{0W!xFmwJuVenbOP2QjnjLx^hV#zmR#-J zy2&swy-0T#2LdgN>CTg?pNeh0$oSm)zYUiREYWBgVkdhjfEW|65Urzp%%<>LiC0%P z)@%DTuuf-xSSqzv{iZs>5s}U!)xCC&kYX7vO`-GwEdC`QJMvDXD-B=9FCjlU8nT;* zhpt;m*<Mls7FPh!b7o7#tpxG5Y=ru;n>Yx%l;fE=R_Pj`wPE=tNFyv!h&=)OYKe@^ zavOtISq`@Xn_!s0ST>nA&6IQx5{jI?Ga*1|bxLtNw=|?<O}9In*aMI&Xfziv$0OiP z`lKfK)B3nNQUglfUul)&WV2Sl&Ipr^-k%?-_;s>M6B(?W;G|sZUhu1fdtr~q1&Mp_ z6?EF9C(-t9+X*KjvSTnL3~&2PPec!i%<Z1bm*pxEl}Dw=;dK_`nIs6LzB(SyUvjn` z7ud96e^&F#<i|)3V>+#8$JwhZY>4feHV8+2{t#~`T`|9@U_mgniui{IPj){{+mm+W zWwxUDE$CA=Kto%}72l`^Uek4@Kkz=te>z6Vw#UF&bpIOSik%#E6>^&#uS)WzQ$Rp+ ziU<?cv_DF!0L=17X%&iO1EcG4#d(yBD{OENiJ3OpSIY_>6ra#<qL%z-UZs*xm9aw{ z0P1huuvvcwt8nUZqn`7JKM~)qf5RKIPJyJepQYmGiDvpTlt%u|`!n;YbnNZhe0Ki! zDYz|FZ1L*Flg)INDX@bCCCz9bI<svsV8e935{t)FVMXWMwyRSv?+C==Z@tBdws4wt z%~F0g^r*45wKJjRVmH|I&dy83j(`>?g!Yk29<0v!UoG-gheDV+FUyvaW2G&DQ8!Ar zLd?4mI_En@aV%b!bF941Zj$e9SNO#=Um|!qRPP8*q_kV1mH23Q7r`Xi!;^XiUKRSY zO|y^Vw(%_^9N=bgO_GKe`kGuJ0Q7u>kvlkmkGAnfe4ptUd$K`d@)=<{MD<pp8@F$n z3eND~^)D;L6W@eovNs-M<_u?N0zujD(4#rbWRTZ1yN<JYg7Q;5q}@8fCpQPoV_F4Q zKt!mZwL@LI(FGlFl6!f-@V^z37i8z3kjJl*PM};nGFp(y=W#jLw`KA<4wNPHcl{IQ z@0fsI(I)Ki5f4KnTj@Lb@S~+yP;A_E_A)9n{GU5=!>E_`Ab1PPaukEb1(-b3AJu0B z4qR!GPdIyzh5AOgCg0j)@&(7hUh{k1X+GSBVB$I>=gL#sXDYfAxjDJ9kZ-we#^qmS za_k#tr1Nh!EA%;=Ac3-WJtHskad^%r(~j`?=D*cy^yHM#i30Hh7l-AEk86>zkTwpB z;{X*75vx8arNYA@H^N_jmF$R4$L;q}wMd84wvj^K(}Bzo9mZMAE<SSO@swRq8@Mwz zC#<;t$<~gX2O^;I9M}3XU}3b)Y1ypFO_xgT?|=TQU+s|T*=Mvan==jmWcAml#1pKp zZWP#eB~qhm;LMUg`Aah__udk7r~;}PiGsUN|E0h9xRD|aZI!BdcwEEfLPKMiKQuCg zjg6k$Q$Lmi)!m!mR{<=n$hF<PpvVf$KZ#2bfxCgzS8Kt|V?L>7YO#2fs07`ln=X}_ z8rEO!N6G7;@#1ObJ}9(`_$a#s2-N5{Z6yHUs_Ijx)a|{Td^BFGvK^~<p<01Cuur62 z0FH+a#LwY~AD?g1PX6hqpYTRTKy{J%J8^*H#Ww<nyIe3P7r{`bTshlZBwA-_p}I{q z(I>i2dscs~(dm$=pQ35C!5kL3A+>MD>;;g#Xi=$pM_m8<g~PJW9DwYJN_kA|Dj@vf zZKSCtv_=&S-;o+REi@=^x5~hG9eK_+{LL$HJi|e`teA#1tm>@IQE)9NrtxMVtqg4h z2sj$c?g7eUg{t9{{1M^^bgniVI`4+2fdd@+?a>=<dn^YrS5Wv)#P9eLAYS<#!U$34 z>K1ylmWv6@FX70(caI6F((rZ1Ht~5c^2ayz++X?3x(^r`60#xBY9FU=BVn}MyI<Kg zVt{YP!$J&-<;$Yx?U<^Er6B{bUHcwy+Y;77h-X_jOM1VAjJMz8ja-|%)TY@E;%!vD zNBQ;EOr^;dr&@<?g`XhYJht0Izu+G`&C-_DjE53b=r$;>04^7<#`s)hNX`P{VR;X; z=b;PDFU^>Kzvo&(TST&647KFE;*iq4kGH-@tU+`3u_v<N|D|mvh^!A~87;~aTBo(C z8htJ#>ptY|zQ%>}$++n(^$aO4>&2jPK?7sqr(MNj>?F=ec(d!;Rh=8<cVgvJ+_qV8 z-_TG&m@j`B>M6u^uGHi6Ap+K=^dC_nbt;g$7&QJiA;-gk-AF;CuyYDz!vPs?1XSkO z@o-(yhxPANv%XgYTFF;mh}o0U-IM?v?c^;_gIo*5CpCuoSjK52kO+@u_hR8YwXZq| zpEpT#m*@8@D)17^fQmqH7jf8z1sO{17XR4W9Bpb8R@SKou<B|VQikwoO>L~~zvgK+ zs~L5gX#4$Mzx>_`D`=}L{`*Vf2IumzP&Qg^gCCOk+=H>IsMtkba3+`CnJvGWhOq>Z z*z@bPU40qly<~Yu=|aaN$Z?<D{;W1)eKX=QWkN|Z%-@l11)<|NNMahl@J7=9ShRM~ zTdHKiUv^h@+fGA5eX%q8%DEQI2im`{^`!M?*UELX+AFi2EHX5&hZ(z_y}Zej(mD;S z_ovz;>GYyO?uuuLtzA7`dA@_3_w!UG3@)fiT)(3o>U&XgY{RBgR<gZ8J#_IZ7-NWS zZTsXD-DDz55klJ16(>XQ!nIC86Wus{;?rgW^W?ZM4Z+h4$ra3nYM9l2jsr^{Gf0oy zGj4<@({+*Q;$4{$W?DManX8DMS#UvYAkTKQI*LBJ?K_ape6b*5Vm$xM9HWXc;m+PT zBrwDJ(*2fMoK{hq+wg<@2COv9?!AD((q7OY{iP4nbfro!R31;TVeO2>ePyv}FIq-K z>l0l~T2`40u(|NRt$(0WQKaiwt3@NVLtOL@rw{99U;gUT5s;dp(8gg-**Gr6jQP(` zf5)1`dPXz?x+0cAD$8qVC&o>?ewYT*ENZ-JBte5XYr)p&lhJmYLC<8F&~UFSt4gSF zox`whi%Mo^hnP4j`cBh7&1%MJ5nXooqPvOe3r26iIucshYCYk{`)~1vAa(83i403C zBKAi$Vl2^d7Dp6()^}ICq5K)<hW_1|Fe#<?P^MUr=+)Cnj}z3u5RU)Q8LN@BrJO5> zNi`vo4U*JV3dP*ONlrhTH*^V|UNG%EU5niQ-|_M1_d2+lKS9gBR-oxQu)2p~(aF6e zza>1yQgJ_8W{ViHF3FKHdQ(@kK3znjR&RTg4yk**59cXnyO8Afp&U7ktCL^2J_2Cy zA0awIU<l>HYC*nxYmpPsWAr_HD-iOf#GGkCIdKOwyrb~*oQ-h{hMx2*_Sg-HG2{8j z*v-fNR#+?YmaR7jQZ;!06EH<z7neP&4UG4Ae^US)ZJNk%R3H=t?;`q=LPAswKR7;l zSskBISbEV8(;Bt3%Jo85^&IZ^PzMnolVm(#mC>Dr1tFeZBv8v11H`kCVOYAw>4hXC z8ZS6k$3o5JCw0-(2zv*s9Ro1dtAiY$qvA>3NCZ|QU1@fc8cPm1-m%f=gPb1MbJDV$ z5Y?!WX~zi{71Ox<)pUHU0JsjVwIgGp08Onm8+INboBmZxkN5rq-upd2UN9Obwp!-v zw|wGMdh6i!hn%qY>SYTCiXlV1wk{FNBjdVIl;$Sv{*vF6E&#x$YN(q#&l@5N5dq95 zYC)`zx#qoJY5<nM`>tNafeeqisciK6S@4R>M%5cjt6e+O<sOz)p5{t{|9I`>aebW$ zZX>3wH`q$O_lTsdVMQ_w3-CSLbdqqrS&+e#-kOzGI@r-@#C!@<FK9bw3t1CyOPpi$ zBR%B{M9H6wFLEbP++^kbQtq<#)bw~3xt_R2G@_91Dh`s4->@qd2*HfT6ai4v37XWO zTP&uU4fU#Gg#-V&rvB1*<*C)pF*R$g1g9`iJ8KmDbDag!2Bzj#_pg8bt2zjV=x(UY zF%lY2&gapX`X}Y2g8Qg?4Fv;GxnRH3;78VI0GKLeHl}0~G(bhei0W;$N8yK9b^R!j z(F_++yxWh|@vVtklVRqmh3~Nl?rboRw>T~ECV2!PRxocCRzNc&2`M{iy{3<`8qY9x z<<6~njV9jFms%ch^+Oi7y}<!sc!D>=%idAtP90*sB5Q$9riWY9*P=BugI-b(?TLCw zvGX`(5~a+;D;+Jmg>Eh{+}f8nywxUPDSp(YkE|m*ZA?G`_kzf+YlfJj!fVj!ZtN4} z9xF7`(vgvsK?nj^7l1m#x9LlaY_W7g{NNj89Fe30DrI11pk<S6dc<ti+34bIbud)q zW}1sEWMSN_pU*GM36aGOuO2CwcVw!Y2w(KY?mGx7;!G*{fQbr91(e~8HW?|s%dkEj zh?hDLp9HaZpCcFy-uqFX-LX1|=D(GP18_;);Nrup`i#XqpDQyhm`sB1SD!=hlJ9Rk zsO|Um)f=kvfFtL_@A`0iZ+Y^yZqB|L%-!f}?R(Ht#lz$P|B?-8m6sY;21>l+)Nr4N z856S@WIrcXnMmrnV2{uYCPZ_3<<Zkj_vW9`I5jv9U)|+nDCJIt_j(jvapEYmyKk3z zDzOS@?V1p}Y&WBdb=)pMA*4~R>a!*+M!kMyE1KJL1B0XVU-pUhdC4n+_Fipug{J63 zX;?upa*zXUxn=Z#`TgpkziMr*hiAnq$?jOcYiR^5Cp23n;gg&ObTPpzy!h+sJ2&9& z5oDcv^u^x^g|I~>i9YS}!qqxMgZgZ*aLoaGEY&FvyG`3HY?)7}PNnD2-1UjiLmj)e z%BoaN6a<FF*(v?acV$b@y(Z(d7V)_EzEF2J(cuFybEg5vrPM;M@uj$W1t*B5<ih}D zk4}8P+HXU_=Gh67%ruufn<-j$nmCcP7JW}i?+tM-rQZmd6oL>_2Wx?48y>YpqxGi4 zLXvwFz7D1rell@ArKK)}EFP@zAyx}>V#bGNc_&pu;G)!Und+FpCRE`OdSRSaLnaak z)wd3p$q9D#j?mBn=|b-y^_DdBmRfO7Ow}DkoULtZWL)FDUfXsny3<90!AsxA<+prr z&+2r3%`X*~`(Sr{ThKCAvgg3;4FXSA&U~<j2Z6n;RUZ=Nhdo52H)A-*P|$PSge4b1 zjB;?3*0yxdDaGw}q?m8ymKkD;l|S1KG~O1YSB`+($G`gNLA)ab&?)ZQmq8Xmcu9Up z69K(xj&hroH;sf@@4wg^yx8ym^77-sWuN|{zbQ8iUy?oMD$<y=(P-8(zkeD(s*r-o z9#(rpEi-?+YohDX2}(O&4SN$Pw;1bt_m=Zu!(V#no(=XIYN^QM<1Wkig1lR1b!ABC zOSC7c+DrAfNx))#%CLJhrrjl$-?^7pKiUPx(~Sq>LQ{Sp6cogQa=GVGAm~+fOfe^Q zw9sv7<f)!HAlm+z;bs^R)eSW*aG4SS6fmy)S9{mq+(r?@|E8bfFpr+8<2dD=5HdW< zYj_Qm*M!h<<4b$s`Z7L;rVze6(ofQ9<vl0iIl~Oh0P)_gR;%6BYPEX2BiSm|+dZI* z<9e+Go#oGDSw&J`u9xBIY^@BPb`ssb21hw8BCsP1e+G=w2xy(ai4x@-R7i$dyd)!- zTU30TR=N5wF216JBrb7xQ1cjM_|K|wxznEwH(*Opt@56M<gYM4QWMUuUu=WyuItaj z`9xuQvl(#wjPY(pum`AKfim}7ppdOb^bo>8E9qs4jtc!L01XIg@1uUqA0HNPNDQHJ z-DdEPFF>UmI2byrIiXMMqv-;onS3=XNKWac+a@!uBQ?BH!X9%YVfzGGjM}5XD0&ta zu;0Sv#^#mf>(%Gb#+WaZeUG_ns<Et3*$95i39bwFd1QYGGqj99F-Vg<Ezu-aw35M` zrzc#j>Cq7WUAqXkfPqv%lR+3_P^DzU>z6O`Jx?1BqJbvt0z;1u82#HJ5)5xZ0G?W_ z<tKthA#_XTc?BzwRilLPbJW5j%6Z9X@jpH}+Q9qkImKgyF=;@nbuIkYs0b0lHk4P# zk9y0`xBSaMGQF7|Fm{_jzVIg7(j<n=vRG0IHMIyqd9<)L<D==^KJWSLp#*c~a)&u) z$&15HjVe9mJ=UrQ7$7&v7J^okD}YmGaGWW5yKkL={cqkX`huW#2!oFjK`j9ItxF<B zjKS6g`w%0~v0JJ2<&5ebPAj5-J}o%}q-uaVS&h+wauGdU+WrB#aG|S+ej!#~nzakR zFD|^`L1o#g+qa+Goj%~O#Dp@{<E_f7P^+CMv<}%r<)X~iTDvigq48D2&=%}v$;3Qj zY1%>z)_At?2X?uiJW_`=eap7873@uqwS0fQrXCxipLTg1t>N9-PyO<jnxT;6ACM7P zO9d%_W})d4yWcPZgpr%%H(pQnShuj*bRsF=RRC^7$n&wy(5u;n8CKe%nN@b7GdfIC z9_oga>vOt~cG1xPDEf%JW1#)D$3wHHH+8H#lAILa>6CBtpEk2_edbEzCBVEx4?r^= zkn$U!rYy8Y-l_b^y>MfIHM0aXgHI>BPlxLkOpxZ73nTY`ckJSo9;J3x*9%%AE6HDl zYZud_IZ<B`jJ80+@p?&H;%8`Ed0t*2Go1%xKr&`AUDj>YY8FD0kK0P(uUR67@|oMO zPF@F>edeVXUwv(e=0e;Q4WsU;z$d&S01+J!>=5%<HbHb$GNUY8KZrN8liNJT16L#H zJ@fMI*CxAonAXQ__^a153}mixDg8@(Gj(dEf)8iem7R-is#|>+C*cZYg1JlQ=cEaZ z%{pd<H+9}qRGrXt{60jM3*sY`5pGUITuKa-pE%I%al?ss^maXGJnIt=hzmNh?Z6p` z<Btl2<Y$YoP>3}L3R~Pdy^@hpmozKGJh-hlIFXt4`#ItE7N%WJNn-Psl$lo8=FYQP z>r0B=c<}rWwk^})<B`HIS2S;w_MZp{RAK7tS`7GrX)I0(U-<#KA*%U3-f?4&OT6N& z!G8-Y;Tq7jqS>+xKB@WCY))3__wL=#2gQaSLtIBAs@i+-$1<9QOmRM7WyQGFJO@nM z$3za;!cXZrvnJIkWlHI@{N#1N--~{6faI;+5DIn=mmbZm3;9>sKp96VFpu;Ve*bDw z!g9=prMaEikFgz&0Hker@tXH>!~@KyUIoWDG<s`hwm9=AYaLrmSIeBBh-`m&=QZjJ ztshr-cjWuIuE(*af9+L;X(|T9O@@h8@7lY#$d?QzeAk|Vuz6tl*&XJiZs4r~TOW;C zRApTXzqreFu>Ub`)MC*$jl!V}#`spg3>eXvavfFRh8(!lyG_-?&d3H}9IZ%2MDEMg zdJ*n%gEvBjD*CPgi=eaxID|k=BI$sp%xaiK{AnXoX2t<zPDSuI^%&vLv3NO5mya}@ z$G*W_0Iu=IVZ#9J+(wXLYBK$tDk|yp%HY{O0#ZOKTSM@M9btv&rV6>5Ap`K)gNJML z-|u41i>-&Sike90o~pnvQ9vn^p3SYuJ!lM&KS{xxRs&9I2f{ye0a;WK5nJt7z2{Iq zqhmu>dc%gbUHRuz<Tn<zs0HsHk?js$&?TxrqOZ~XG^b~$L_mT>Us(Ql?Uk2@fMc?` zHczEJ!fxD9*XAlbQr)8YrHs58zFDwvaBF{(xi&m+hoQU6xcYFZ(NuV>_aT6qZaIZ7 z!S^YzU|5N7(|%e5MJ_cuS~2!v!InzUjk`sL<K&i1P)}q0F%n`Vcm6qm=pm0Tb@GPf zurFQ6MK?=^>j@Jf*#eursjVThy+3~VgoFJd{=oJ&$CIGT<&Vv(Y34uGBtb48Y_Dow zkK3=m^x7-KuJJbzrsNW$7!h&Iy{&KRo?g2t6R|RnZZ0xczrnX#ao~fagpO9L$g7F| zDYA({PSsCw!Yw2$6}v!hADeG{|8<|2*L(Gng!c2|MUUW>FG8iq`U33tZH%6caWT3y zbdO;f@;GP;W>Q(iOS_%Gczijn+bZTvm)MQ;-QMJ_mENb<b288(X=v>@d0_gCWq>iM zTUePnL#v7x$38fhsSqr@J+rSH;X-%yRUB+pV@MidlXy}aBD-egUUL2@T%B!p;ZW8( z+1j;S^Wl18jhhoa8BrMr!ipH>PwMQ}9Mju*HS_wq<sMe^QwlUVCS%3>6ibEAcaAT# z4L^nP>BH0Q&O_>+98%Tn9?P2q?H)Th?B1K4zc!h?G}+nNxmSMr<-I#!eDT>A_dfmX z?!C9Ze(S@J-+KGwJ3L{&UhzY>F)M{Rj;N}I<vG%WYw%u3!ck?(&LE)JOwnBP_+9TI zs==3{_QP|w9LLz6VKL+?17G^k72v8jZS5**63$Zzmb#{W8``4H^(g6`wK?7M>az;x zeYlz_Ts=CXLL{c(TnHf}R+&yCIt#D5N11rqID~Z~KMf))I3H&8EOxe%o!T*?9iV#{ zy52oy)p}z|Ymc#=$5-~Pr$CbI7&g;xl^~gT3#$VS#5y$|;m$$-Ti1(H{%+E}y#DfQ zmc09^9Ir7D;ntB(c}1w)Bg!6$ZvzjB+&6NO(9GEw4j`B>Jn0RvBrGQ$Kam$Yo?hUC z3s>yW92Ti=q5#2xO74>&z;>F1a_7yG;Jc~+!65B35=kvCV>m~@;+Y?3>#f}GDh)J+ z+j4k2M)n(X!JL{Sd;n8Qp$kShsUAb1p#{y{MPkFk*-NuD+(+1<Dg}f~(X0^@R<n%q zJO30X$1pBdi$%!`Hr$x|LS*Gzb8RsmkO~y>q9!lxMM~Wv?~7-4UV3@53l|qeTj|^} zc5dH((NqWSv_!C80+48E6~m*VX+Lt@zMs`323T<cp2%K#3)6AOwu!^vtOfSSi0}*F z2&pHQdQ?B#@fJjT?>ZW^$F8rAXT8QWbMek)B6nh-*~dNUktFlLNy3GAPqXS+^CWT6 zyj6?ty?Lg#h;($6th0We6+14on_6ep_z}Z|%aS`A-Sx`0@mvQ@qEddttuW~DQuVQG zk290^WT>jtLt|0E+WSv<Er?20pRiCK&Y?`{8>h%ECRR;QerMQ+>pk@WP57-_fOeVG z(Jxped0C8}9`b&}V?ZvP_07*@v@`69SnK*_H@}0|IGZ}or%%jmeR*=eQWN*>AIgK> zRr7!nOI;8Xd3^DZE_}mhx1|=j$Vr{UTi<UT?GF#i!|!Le#`O2CVR<;+`sKN!7pQVg zwV62)vFNXpb9&r^aB+A;WaJ9IXwyagXlki%=*ov;WX*guU6ShKZgc8C-fmW;MnFnU z3BAQ%{g-}*HI-P0&sGn!9#HBqKdw%a?!G|p4iaDeCq8=z4aHF;9dp)&mQ%$WPaW;` z=j~^@hWrJm6`xDhl;wvkL!`~wsL)w++a)yQeT+Xs{I-y^RFJGnRxiDGUJe)m8rqA) z(Wbs>#ccE~tg_>umXr0o|o{vXAH-<Bxjt<?@|6|8;j@mCUNp3JLpIy6g=qbA|? zV$P39)~q=JI17G&EnH1$q!!&wA!v{<TE4T2G~;|PX^;6`mm*WLrzND5RT9M3QVX%% zP=eqHaG?DTpvI6N>LIW|`T-2}s&OTP({CYEyoGSkD?Ef9Fn?&1fI9>l>v^}}UJU}m zBA}!8VO23L2o6m&wH5aQHJCMhFRD6;B=_4HES?n;CrBLYATi84Zrid@0%;{8LoZFP zpy|jkd{+ukrOV$ujBlGa(g6EmJv?f_!clAlRoYa?4L@+w?e9j+Vs73BES>U2<b-t7 zzRa=2|IQWNN70LmOV?BHD!Ou!B9}v;TNaDgli4wEzdj@SODu=G`d3&ER}b{EC2MmQ zR&C$(JZ+PKMIZTs0f}T!%~G#XebjYz-4*_CtZYR!TXI5*y(<?JV?I?A6&h?ILPTPG zc~44q3qKR3gj?&kH2L;oME~CIJrD0U4PEcmu$^kj2IA6c3j4&3iLOr;VB~!tZg;bY zHKyo}*;-H&zK@bT+hMt)GoWF1?m#iXLqHan?R>dfpgC!Bz;KL4CAS<Bn&n_uPO^b6 zne_XiK%k~_vQu-}Z)9np)+YJp3cFM{DMqZ@G^f7@kc%q-vwuQI>)ob@nXH-(3?=dl zwNCV5V$Yg5MJP>%V;&rZvSuktuRq-Ye$|S*)ZcHLS&U(;%@TB>{2g6G6eAB0Ds<L@ z7Ukv+eJSR_KcrUz9vP@F7wyeM)A!E7p;aRd%9%%s#e!fkSP=XTD<UpIunvxDaFZe3 zB+W<FYW!)6=hT|%zMaXUU|60l78*4}AmH7aM2UJ;5pG7PJo7f)HWXJ{V5cMDy{+o? zl(~B{N~k8JlB^1<;kB`gH*FGW)mHNphKhCSJP_gYmGZs|@q+3n2K}1Dx09-eV?ta7 z;(IFtvzRFaLw=q@mF()~toXDLICcnlAE<c>9~|AvJX|Hh#YOy%J&&VGE3D=EV~Tex z2thD~Vp+F=xQqqh+r13^qD1ad;nYKZ+Mn3eYpKzcEJ$#>sHPm(@@$p7e6rse>_T3I zpvy-TD+8AG{WDrgme-8*9JU_4G49wnW%8!FJgxj&Rx((_uJk)i*ts&N{FbN99bcYe za#>}*v||0}v1sL^P-y*yQtuBwrY`i`!EWzOPY4mc<!s%bHx^|TRNn@vt+n4a5hxUG zTrdFLF*w?^OnS847C>tt(l^{pNa~U6(G^yq=~#Li(P*cu{;PoBvZDQlz<rxX%`dm@ z$I~aYQmmDUCAmzJk_+d3rk=`W!Fboe9`L&cU>J=Q`n)0^Unj44BZQgSOB$hIy^U$+ z?%O?9{njx|Yn)#WP}ivUCkUaGxMpi=*Hi76rs12;POfat@^JMBzA`Rld?IQL%T6aa z6kQ<Hapuc#XX<Y$C2z=3PH5$2NaQ;NSG1lFcZ}7dAbgqx-+WJ{6L!D(EgJqk+ndQK zd^eSm!E(=*Z_#G!I|P9R)?A3!r&35?GTLxd!9cuv+zHa>Wx+=s&ejpy#3Re}dt%5= z(2^Oc4gns^PUXMiz>b<+qTEI8Bf%8C#N}ovS{e{h8X^%0Iv#nx8U!1zm`o+$7`oEd zFtj1l64{q@X74eZvD_WEj|#vPPq#%)F!jre>|7DJ+ouTdW#=>x4g)(qw~L@Zm)XAM zW0TJnpi8UF&Iw1B`-DUQIEJ*(D^`onk4|SvgJIlu$m<U6aTEu#lu4a!Bhs*VK@i!y zx)0Qg;B9Ss=tXi1+}<Mjh(gFNLTd7ng<fiC%<$ZtPgy<g2ap2t`J%m+j-JrRFzlNw zu&sSwTw6Ot_8lG#)nXa|*$l~QEVg5%d>?V`5e8(_6&GIK1UpCL=;hjR0b*9FAAN~9 zzQ>wIwdUNjE|Y7{J+#t01g9fOFAzu@O7n5XW_-=6xkD82YXj8bY2F_E_UnPS4wptq z?d9Q-%l-X#Nf`+BEAg5**gz%OdWx2VcW6S{>5L}V<Q~8-W@k$k<)KVKqMrwgMvYpc z3PzB&NTgd5yX8$$C~R#-zgN_SLP1n!`yz+Obiqm|D|2T=-~)Gsc2%9~2?`viouxq6 zL&=j9E$r+oqG*tBZB6#}nX82Pd&*+*F6%`?A41dm1unc#_)QsT&N@R?9Z8tHStZlA z@#1_V28~r+Ss@0N#5Ms9%Lj2R@x*l_9vJet0-sZQepO`!g_iC<v>5+nMBs+QEG{r& zJz`#tJa86}GF+*Kc_+ND#;N?eyj+pPt32|{mP=nkQVgjVLSa_DOHtc)!vh3Q$w<F` zMO!Iq3jNz%RSiWY1!{=i;X?xaYhfAyJF<S$ub-W*!e?|~pB=i_@N<wH6|%z^2cItE zPLbtzziVq#dzGbty;%zZ-m`~AlZCc?3XLw&=APKa&@bnx;n7m%cZ`>MkP9zTZCDV^ z(qx9zHSVTQpTG#TGO27+R0TkRb*N&>6^R>R4ecgn0*Sy!xcV0^zBzdLIP@0g?+nq* zx+(Tuh8i~~Cp28LyfAWvnxKk=2qmh-Z%CXGO6o-d7(;16%2;%mwmB+xvkK#TdTB9E zg%bj!L4T}g-B0iLIHS_v8(hxO2HYtIKFD;7fr*7AEcuKYMlM}yi6|X}&lnt=4%boW z!D{mj5PUtEE`y$qIO9m7@{v3@LiDMqKkGggx8&;!1#JHipsjsOu>T;uvgD*O4~eF2 zdHMqW{QSe=_H7njCgYb`kU^_k9hgKft_RUB;{EeuxOc9vXr4mDbW(QA>xW|Bs_f|( zJyX%XD?@9!;J94zw6+{`WELA&C^O56-~2%GWr)Ou;>FEPEkA>+^>G4dC?0!^G$C0+ zkVS(A!z&%%80V_umVL0rW5XV)me7<iiB7b1#JS~RM;2TK;>T`l4Siu^!a_JQHUDZ6 z@SA@14#sgydQ5{+m*Pt0FM5p5T2a!}o)L1ruys@Tgdf@H?b_8U+gyg{ubhB-fzzau zYW}xGNFnq-a#LMg&<7j`ZUFs~g*$*KIZ=xU;W+0q`K`Vyx5a=~5T9*36i9j~&CTGM zKi91`Z?Uej);p8abF{+Hq(@u;$Id(I_S5O7rB#Tx#3i`V0fpE=e0#8Q9SL|n742%v zWd4!ijz(=ljm7e678WL2;xogojTQzZpk!^JHr_tuzTyY3tE4e-;s@y&wAV@aERrH4 z%$ncrUZ_y)qo=MAw=U|oE07y8kl^uqS^w48S4MU}Hi!$TJRAjQKTVr_z{xYgcsf?G zD(zwv7dD83O=%Z`<hrA*&X=$AwpE$F<*C4bde%NHSK@S{Hb~Z+{Y17M_!@K24dMsv z3&RrgxYoj<Gw_t@-DJt~W;e~5B@g;hZ~Y3Z<S`-&K2`++i(_pAJ*~MeK4`iiOf)O= zDfMpzO}TX74n?^3Z{FAu4C9*Sv*&;t)dSph;=MlC<s1H_XlEY(h!}EEF8kXv-840% z%$)Q4HYe_%1Z?bnZit2l1+38c0q`M)vd&;4BUEh&Mq!(kEqr){c9(T?7W4J?bJJcD z_wotmyFog^{QJK$!Hny*COA%n(UYE7Q;OVS%S;^1aDhnyaA`u6K5fSu*Fs7uM@~1e zHN?EL9w8l$%hI=s$PuNVoE=pQX5pK;(T;x=$;8x-p<C73Mpo#EN0kVOn>UV{kY4ch zkw<I{8L=!hPQP{<HBdjA$@yd0hJNjHB9>&2G3`S-{(t&rIX%ULjO%JJr|W#!w5~3s zrX7M->)LIyk7SF=Z}~spu`Q*GktIB%H1n188;zi-t&M?$lc64FW_^T*fYjwTcN?27 ztv&A(=Mm-=t%?DHS7G6aMl_}|%l6y4-A~z(XNd2m_nys|yPJ&+1*E|-18`HqH%oA~ z#bz`hPiD+saf|tsu3WM<lAQVQRVn9Nr$?D`)rNWpQPDtaH^_J1n(aKTvM%s@PP;sn zV$=ZR8J`zov9-oC03mRLMX}w_Z#u2;=hYHvwg`RGH5l@p;UWTc;7)1%uRT=7KEg-Z zf}6jl2g07hwodzDyJAGIL0U2fdMwT14~TSftsV^5`DJK$n7yxs{*OwhC*PqF(`3|7 zQ|l;~ACV5YH2xjtjqlZl+c2Azs32}mvQsW_`dkIOJk#i7nJ&%6@ezWb)FE2zwN(1P z;oROXYR`l1o!r!2pRE_aT#LQ6MKq2Xc)YO#x8~`Mw>d3?RBNIxy~Mm|&l%Y;@hZ_t z%7qEg0Hi-GRu#ai7SclJ%~?8rWr7>x$+RUs>}~mx1oK4$DzfW1`#nt*7*DN$Qr&F0 zVx9XiondjgvMV<pqcW^J;0?&$T?Wx6!~h9g+N`nQkbbIokUbM`s>m;5_>s%KD9)u` zD4QNl&&!Dog7vQU*Dd-B*SS4Ut`<=UoohR(9AXM$ydL^k!m#>JwazoGcmBaN*fEtQ zn0H@v<p)c;>V;i13WlF+*F$?iqAwVfyu;~QSCzQGqO99_xa}IC%63VdU=F>)QFOWR zr~7j71`8disF||fBojr6FLt*n$@Fyg1XgF6H8{)|wQL}44CNAut#k{)+!#DJ5yt~_ z>|~&(AI1(gjcniDM^Mpd+h09(7+S74q7eLkR^%MSKQ3k$57p0y+~Av)ISw%yE*`EP z&H1CPs{y%RzTKQ5de%Ghnk23-@U&1bHikZ2dtPDHJV{Mqap@5gX3S0VCnQ_mZ_b^# zv3hQ4>457sJ-BwxaUMRyUm}_$YTMc*6hCErmElPQGfpC0wR~3x8W92e2#tNw=WWMK z<~0BTS5z=$0mv{*yri8|tY|^7rnha|wr$(CZQHhO+qP}{Y}@A9a|U<xc4t<yl76br zTIotvs=xXxI+CYN%$qzSz0BLSNybh~EU&Eyp0URN(*wN2xwS7NO>q!F7+51`j7Ppl zhx8P?In|y23#7W4nAQ+}Dho<FXgeuOxf}nYV|`*|7Vf+jJ{<Q4qkd!0Os-DvG5ME@ z!Xs5Rb7NfcL0h542#P@j0h^foAu1{&;}1cXh9rI{DNb<3aidxRBm#~%AuP!KS`?Y2 zwwqYAZSBIAS7N*E<c9~}x}UU=y^Ljc^__|7vxqVgl#h_e*vUc{5(c0wJr>z6MAY7F zyMIwO0}*|aof<~?td^h*$DnQXc|`b>v%!&b)D#q4YOK~Iaf+;06PXF`1g5hv+(!RQ z=3jFuOyww4>m-W=aisC$g$0^MGyNu+P|CEeeBzDD#^RQm=>A_#J;XnMd9a0J`OpfQ z#@Ah6HnhAX!xy+OG%EDAE(v}{b2wGj$c2&F-9f#5%Y<OJsRD@%wL|Fpz!OjtPXF}? zq9rRd)hLQ%KCAKUD-;|<0lDO;Mgx7~mA2+8CTWW>nP6awz7MH?6@Njp2OKAph5-kE zKaIF(y(TK9g6-1@!JYYd<1!wR7oUFmL0Yeh5$Vv(Aq!w%{}WPrOHPM9p|rs8Z0(2b zrl)wH>XB0qjM=+wqIp9Tov1y1O2ewC0B2rw)t4FET8x{wF+>`BTLg?f!R|1W?x}zT zBO~sXbH=M{c{^o0`)G?JDeGD{K<JD3T)*;#%W1RXcJeL55+izAXLVv>o+Y}iGe0T) zYF0@e{aUwtOP2@_d~M8!AY%BYek;QYJFIdtHC01h9hZVB2Zj6U_-0i2J+8*@_({GN zO?-@Yr-O)PqMUGqqjlaC%k~P)3tUeVtT4l9%P@Tp#AM~jthpp-)lAjoi-;{e{Mh?s z-nF_Y8!I>dVP-uPDSL;`3Hr;P%;;-Gh&}Y>eNTH}Mc4uSfRe8Iu{N>3$zCDPNW9r^ zi7e_q*Os{qa?5B-<}HKxnJ-YpZ?byV=i{ZP(3>UXEKioq3%eumr_gM3my`Do@+{Qf zo)0qjms9NRNq@!)|MIuPjEp+9t$xnLKeU!L&+LTFCI03iSbvB6+XDY&AD$tmrt#$# zxneB}U4kjV*gym;cC7EiV?z8*DcqMgkfnvxv?|HimcM5O(cHV~!H@d0LbJ^{*!8i0 zOOC%h^7#Fzb*73yT*`gfl+t8y(e@1yHT){21A3)YrE$}WRjv6M%Q~))WKCv7{vw3z zOEC+l)_0`w@0$kh^k2m{rQ@~08nZ}a-&!4+k{q!;RmUq|AEk(HVeOi0Wz3g({$+?) zMckuMh$k*ljJ-&&i^bwgP-@R#ot7A$B7a{)+#kc@xeKOAiLdbC;77@SncA`IQ-@!P ztFo7_aBs4~yF)9ZrjLe4AHHqWAhEw49^Bm54LLMc4J$?RDEB)k$SfStWLd9=5HZ}l zSbd-~hU`wZK4#r(Fh~}k-~BYDS&s(>;L&7IpuXxbKOTHztM&Yv^kokmTz(&p%DH>% zw=>3<TK^KCu_L#2H|iUKYmu|OmhPbYkM_awc%lZriWyk=1lSXDA{e&9y3ByK9TK>! z$cr!wv`TiUxE)2M-?6TzHlm*77RZY8SMe0Zw<*>X$@y%mdYnzuTMm6v3J7DNSjy(* z{;lG9th;sb^BG&?pmc^7er0Bc#b`wMGnQ>5<l(G><F*kCb@$goqeoItZVB1u)6g`U zYAruq!`QAeIpZ_dh<-UAcZ`pjMIMz>ntC&GRw+$u*K10zI!XvPUe-YjD0?TOR5mK` zv0bIEVrmp;O^{2Y!G*cyJ0Tf?)P>rOY*J52NC%h<EPFU4=Z4`cDDb$73){=g5!M() zTkxgg{simAN(&cw^-LgO<s+S$R&CqK;5$42DWm`Z=fJ3;Hz0I%EQ-<sh2r`fj+MjO z5Ltmf2W?Rd2Nei)fj$gB563mvU_6xTb7~JCdR9%f-|%I*ifOkZ<J$jIvdN}j06psi zT9DI$co}A&Kz@445DJ*{BVHY<<Yo)~eSDjH8A-GH$l8M#xmIcmy6_Sz?Xci(wr~Ts zLYv&~t0F08lc|#74;8xQ#y1`#BF_-|b+pWBeqJSWLH^P{w%-CI$>pvw>4MRRQpxlY zWt#ZnyHc_Nm{ijT@~J^`oRRTjnJteQ=4h<B%hIH)U`_4{JI#GD@~Y^eo9*6M`ZV$t zv!t)sYV6xpfG>zY5Cc4!(3~2eQwWcpPiYtohK8<aMkG-j2jU;M;gYc^isC4;m5`s5 z>*Jl}*rm7he`D45tJz3k*)QoU%+)o+v+mnB8jgIr6<cLl<VULv6a0|I%VxXA1KiVM zoqvw(^Ax#cHxIFhY{b`D6<7X*&(`!J-cW&~)g-;mC|b!VMhka%CqV(At$|QnV<Ci) zy)#R-?k__8{>0YbJYTn?<7d|S$P#&sE^DSuVt~jds5I&Rl^~0KGS^s%1w^cnk|5ck ze3EJn^y#95!{Cn}5p4~NJe+gxx2cQ7Y*tYHDMZ3(6|f0P(fVsvZo|f*ur+(s2jEFZ ziW^9fGA;Nh0Sy@NPzL|pKO6+kDuEYm$cllL&`osTb8MRq**!Tl3@)p^eMWfgSYPb> zpwYV!65V?)iW^}(tuTJew67Hl+?sO`cP}0z^uk58FZ@{`UQs@80;KGq3aqMiZKxkD z1~bK?S{+mz&%u}EI}kT+?{l^LXaXBMwejpkfr9<kYvc29C``%t8J|7Aiu6$1;D+#Q zhREP>tu)3U(8vgD4$s*Ru8+`V%W<CL$zX?Pg`QX%5@V)C!SSk0IgU8m%TZ;Z{B5d( zIu|I3wL#z{XD{&Q0XSkp>%b7AM&@z_#kH#93P|Wh8%1Z#9dHu}8E@j(jn~Wg&kF_7 zOZW`(&bTZf*H>$V4V&M9d~L7eAQWrGogZ^pEcT{+0yn>MDA+@zmdVz(jqMsuv4i3a z)%5EI&BR%kUJ~=jyse?<xmJkdx}ToN-e9Q7X)=j9ZK?fdWu8`6Ga?SI`YUoJ__d>i zj~}HQrcA;4XV(*)6GoMR$ts`zXY^mQG%kc@H0_TWBHukD?a7ph8Z8o>JIu?t678dT z3;c<dWkOZC?OW1z3hS)ea}3eu@Q<=&DA#a2+whH#?IHNMsIid=4L&4L_8_8VAs+y- z9+#o_U|kHeg6l1gcriWH5RK&0ig`bVMlCq8`+lSuE!Hq58A;gm>zIX>v|wwUg6_sh z9jsv{75RsM^^jO7O^D~1djBOEg=sm1_iH7>{5~bebpN6z=m2$?B8nFdv9!6*oH5~H z#k+#8(4(s!tL?&gwj)yv*p4nRKL;(C5#lV`M#VPj-|kYmM!LWXfO<<&)0jN7=gl}5 zn(7oKuAMJj1!-Uq6kq@V2mm5SL4ji)5U4dE002iY000R9000p~7ef_8BO6m^T1Glf zItF@E4;LpxXL@0K8zobFClgaAdRtQyOGA1Sdt>MSv9xlgceW66a&@+lQZ{z7ba0`w za!ys5wA*Gt;MLY=6opIDQFltlgTfX=FP~UKvAEh<!m+TVVN8?^jYbFgc!Q(lbTk0B zg~=ocx8Li*gv)g626QoOLJO;v^HfxOX0OO;WGTZdp{#aLm0&d`qjpR*amu?5yekK+ zBTNs%q#I45l-aidv$hO8HDE;tbyyDW5-Mx_*IP2RVR@yN<+*zK-Xl;-S(1%U`g44Q zD00@OCH#v3_jUKxxP3n$vu1tbv18SvDZmm3x$%2HS9kzj8IVklnN5K@uVCTwWIRn} zvCgTHsC-){^6uycDRb=b_+->vo9mASQ=EyKNiBl{{w7E+OZnG_ZuEoXJi|5C35~L+ zS;r8@UJQY22@^dd{N7T&RD7YRSRviGk|8EpcLgA%w#pE}g>CVmx~Yo<78hwzlL557 zLr*Hz8pCy{QpgQDlRJ0D6h0Fr3_2QNNPDPTU!p6c7Uo!^&~Y3>BXKyU(-E5^84B;{ z5z|31pH0Rj<%UgRe+jxYCq@;hrB<>>&nc-PmYH;2#hf(VAVm~wZD9pYhip1Y9pYFu ztahBiBDo~!28~fsWB)QpK0Ksoe$n1$D`7mfxD(tSD?sWrg{{9pm@~~y>wumb_7u6e zqS2dAuj~at=!TY%Ct(rS<#y5G>|o*gGQEPl<>PndR_-UdYmno%(V7!QjQfs!siu{0 zQ7UkypQT0Hd$liW(Yr?`^Y7wra7i|r^ALY=73!LlSw*W#++4FQ_F#ih@|Jc8uu-wz zllnb?=pIczs8j7LcC>vp*W<Wu!N;CnfQ2*iAzsKRPmFhM$eP?@w$4`T{Js|kPaE9J z7iF(hvdqJlh>8clWm-B36WMjJwWL2d^3;IDdS7m0dh2$+_ESWTHoux<S3y=!-4Hfz z(ndB}QhpPtwfZ{U3f;v@;zF~_ZD=RkTMNkE7sWwU+SEC3yi#|v#~bYIQSuW4_oP4I z|LHp>PfqwTga82a`~Uy~|3AJXZ0}_H&u4PAFO0Iq5dQutA81J>6p{!CL1s|H-HyEZ zl)x!>C90-P2Y|+1JRsKU_3qyUm6W{eqP%A0=3bwhxsCd4Hvc0rU*ax5ocZgKLuwiK zYyJ>|wY+I_y>jJ;$4^!)xj#R|(ziamSn!v8-#<=ls!WLm>$BO0#pj;9kuLYSq<m3F zNHa^m*^tPTSr+T8kv|sHq~>?L^J=ugg>3?w%daDzTv<laRNDT0o>r1G_e@@CIAtbm zQK2#zIIQ?#Ipkj9rl3Y*DiCTwtXXVfiLW9-uYQuke6pDVPtKSMf9^+z>N1f9Uu@qu zZEWddvh^6A_~IqIxyf7V=<3hNn_u1Y>2QKcaSW?IbZZ})bz)aUuc~(i9od5opP=Qs zy}dnmBhxGS^1BI#@=#ZOm6fWZ5dHU_`df|K*RBmv=4J1sg+sz;a<C!_wc)ByAy*+E zcBI~Dld9{58Lz3ew|4%>(GI+E>0fDG<e#c84~b?RU~5)aL{|lcZoPhFH_YP4raM=) z=TTDMf8s~eb=`vAo2|ayUkbZ=U4`Z}yRa(-0S#5rjqG}hj4}8n)f}8&IMf*EHtLpB zRP<KclWkQGgwv*sS00r%zZALM<WrqiJ;^g~Q8u6L+su`l>2sy0@kyByYILmn(zC{z zuBg~5n@b`WmIdD;n_TO$)TQN18rB69Ybs1yN>5M){8D}E{{YVRvs`Klm=;WcYN?qF znrbSuXVuF$w6TGQ%0C{0cj*5vEyC(qRL+bp@T7Z7X%{y}84oyZrz5WcL{VE$TWHO% zwmN9x*IK{YzB{TkhugkKtOs6`&cjDRE)T^ipHDwC(JU*|I^OnDw?7>nD?1Vzs_BsI z;T#cbQ$^azQlpwu&rdTLy)OBw1EFk-za`ma=)rQ5yn4KZg(_8)eqzr&5mb+9Yx;ug z0>ljI^jBkm$#uKNMv?q$y-AhP6O7tye6@DG!y0+gh!VKaN|G9C1%4~AGod2)OBJfU zE8p|xHHKf@y+1Rr)T=Kem#*G*v(OUyymgq<&hltk#H21<S_gvn^sEZk3Hk)x3dOQW z_a1qOk)UW}3t1Dj$d#^ASG*`&;Uq?Di7Q#d(&8u4R!$<FeoH^TWz?MMTJ<Dq16QO< z){0lA0PwwaehaXX80m3_30i|mp2Wx1kj^!t263dk3$&Yw7O~WOO(IbTGC{&C#i?Lg z1)>F7>igA|b}y^#G+vZ;InG(SJ~55Q9)m?1gnz)4es>_dwBli?Ri*_2P=enhPQpbm z2UQ@3N(1xA-Az(UO!GPhNVB?%COs~ka6$^Yo_UK)2b}y>42-rE{G&0AZv>CpZqwcN zi0z1Xdo08moDBE=F7d9{ddsstr|l)^X3a3`WDPJk#=!M_-rTrLZ7bT@6MtJb&$*}m zv1{+9(x%A0+sElrb*)@Oz8S1`_p>bBrBdc<Z(rWtcGp$4^fvw2yr~s5_|p49FSu&S zSM9a|j8R=->B+CWDfRN+wp(Xy60ntPV|qqok6R47*tHnzqrm(!=@|=&0^ibB^s2^m zTtuU99T&QE6$Rx(5*|PIGSS*1tVxt<1n0Vp<Obmac!e0_-3tnvDJ`;+x2_NufQ&Q} zwAKg4^UNW$?ig+Ke?^mia}F=rK#kcujDNRXsiDK;-W3&QPOn)ONnGE)Mr2~rUy<ov zyP{iQ|5L-BPIG;|UZZ&9oL&o3z4k#fHcfAC`TZk9)ndM)=OVfFYpxb1Sx^{vWLucZ z60wD!BEbdXTR``6-CCbLtb=|^9=^k#W1-4P<y%yh8HjAXHWJ8u&^L&~4QPxm?J5bz zx#L36TcwjOEe;1<_BSs6ybOi(E(iFjP)$PEQWw4XaZOFH?e)1`s#h5}co($gqh@Q3 z73qZjPow>y3;HXS@=v!EBh%h7#VeT<jRz!EDl5003|yx}EH6Eozf1|(jb7=}k=&;J zTMl&jxaIeVZS2S>w7y4^nlzJA<!VZed_llKY<1Fmn&{f!$Qt#NxgneZPB+symmbOU z(jWn4q-v`~b>@8!WqOp9L0nYFLakVX1Hv3A4gfik1gX%edq#)32!E=x+QHC9;!^@G zn@RAX1Qird#-cR4oR*6lni%A8C}~<yP{b`zL`d2@m^zLpEW0-BfmX8!e333BmnOQ3 z##Fx1_BRaE-PSK$FIUMsxqO|oBoi#9ip6;=Fk^@~^P7=}R1xUvur3v@-nzAby^wW` z`bu8VKa2_~zWn~Hs%?K1xF1lG`2nF$RG71>PKWuUVU8P>2Cu!vN}0$mrcgLmK;6g7 zC#ay*d6eZ;54GNn7sreRYx)7%7_=@Y1X38Y_Qzd>@nmDo$Wij7NhuFwMID7E@TpL} zhLWpU*akKX&__A|@z1?Q?a3=Jbz#P)A`nA%YK8gkTa-4VJpU;YJHxj`DAl%!;OKN2 z+$qrV)FFf{QGZ`nhB@>KEpLk~YZnJ*?*v7n=V=vC81bfA$A_#G>%@?&g=PSDBsFgz zwVfidwy4<?i~;R#%cd*ruNVaIXjWmkM;z6jLFuEZ$=9iPXr%XRPpqf}cjYDI2_RN? zS`b*KBng3R<R#z=dDLG{GI>Fg7dD%+J~Jpu09F+%Y8Wf10AF56j)@$YO2s!|3HXoH zavxejaw)2x{NPf#@un14E$TWAbrM8aTcNov)D}rRk}@K6q7$Us{0<X6%T*WDl91C( z43=QP-7~>+2rxfN(-JEox1#PhGGsrxH#x_IM;n2PQV#K`e8{R0X{qVvL0eZi8mV0N z@BYOqxULh+QCYS9kP~x~?y(XIOA*+i1UV%02C*DGGs$CsdE|`@GgY1iu<Kc+B{6UX zhJMqK+)^Y*l*S7IGWr12WCR!-uN!9sWE?cGSO_}<NS2!gc!E?TiVd?#Jf|aUghi}} zp{AKdj{AY%hLS+QwMGuCb&RwI{HSyNi}my}slmEuThX}A6=HW7lx$Ul^g9v8y?a6$ zlNW@<xjR7|EQX}3k=qG=hdHqM!6UiyPgPg|@+@eoPF_03{NOH<gd`ut0)XNrWWx|L z1mX!4BMb&-(^sCui2&fLl$g96(j{ke79^rkg%n94<fJ}QadH`Ht^*gsJ3^IQ;}M~L zMO5kD_6$8WiKn#=^`Ua0C%$FfM|^l6tBTi<z$#lMszfj~{SqsFX%C1hPDnS$2rwuF zT854q$cA_Kmg-~Y2)S;+8y8s3D~e{l`_qcx?<YpM;h#uH>N`F)i<YtRB`)IagTQ>I zSSlIi#yXU_uorck3b<BVnJ`a3OLz690zJIa?j`};g`<DP+XQlr6r<Y8AJO|t7p*S> zG$-9gOVJ=nhjy?t&i$6DzSaE7)!!PR*d{s{B*ca9L?vC<VDw%(uKuEz_~9~)uwRtb z(0-O9+G}c}4*k)X7w5a2v;@by)NPNv?13RCr@6qc6GasD3P3*fr0T$_w>`eXw@%=8 zBd7h?wmXH!%ctEI{p)SM^Haa@f$kP(P`A7U1(IjFhBSH|r<j8@_fX!xm#vHUu8*$h z8WTc)Xh96Zp=P;I9X&ULQ{s%y!lb80CCt6#9_4@A)XsLp)&Tahs#^q7`;njcNu7L& z&q3P;SVqer7AQTq6Knm0!4I%cV8qY~DUef5oG~N#6x7OrqD#>h`BLKqd{{*)?tOTs z$^=*xAqeTi8sUQsX^A$=2ms@l2I-z-_q-1AG}!eDVdZlWTV&A5q0sX*%xb~69_WQN zq(q2YM0ABjB(w3Nc6{JfEh?j)5>Jukkzs>bn)}PtB!1<h2XNf!(JzBM_6ZqCg8(1$ z43Oic5Yn&%<4%bOifIFoP5BA`*zi%Ha3Dj_5=M4Pwo3K5A&p4AKNykG>xcm<Ltp}7 zmer^P(K0Ai2ACg(HK|Io<0;nEO|2=ehBG6FW4}#_Il+8Iq1H?jDk&p23nMl|3sOG^ zIY@48n4=dAFp<-gW-@}cLjjL&KXE{?1KEID6gNt5M@BsyPg!k}(8}0Gnq|*HiS`A& zCj|whKnRdX3ks>cfPnKOU#Ql^l49x#1U>QI6OIW#`naLS1!8l{!wF@bp_dxT>5@VI zNmxo$(0Y$wr6@Q(w{Lfk#hsKG7;s}1P~8(IteNU|H8z(&wPdgDDctuFcA`rsEu$6L zu!4YGa{8Ohj~OBLs7%B^dPu0kT;tRjpcI!>14!1mIE$W9U1o6v&8k>kNCDb<{3THP z=mz3XTj~N5kycVOK9uQ@=-@9Ie<wk&lNnBJO0*9aF)*HS5<GI{-9wl9!Yp;k_BsFR zp<A?545%Uxlu8>am4AAz?1F&Rx1c0NkkEL3YM6~DcTR;^H3oSCGO`;gT}}Fg^iOd+ z(cg?HJM`)tgSUp_NoJBlej#8;shchxj7{Yd={qQd_%O{4%oS8oP?2iPIz92HvSLk_ zFkGYk)%8k8L&4JD2eX{u9IUn_WjQWTG%S5n7jIa=XHurqH$;CUyq{d1nC@bJG!0C< zka)KVb@P1slFHFZSjzkzZM=N8h!xb@3^*|;3C`*e6a4-;0z5zMj5=L|u%GS<V70Cx zBC5)Dvbupct5!15i0r9Hdh@Z7aYPdc@KLSdNhz@8z=hnwtcfvUS|)cWNMSbpmK;>} zIN<rzd`!eppVSgP&VXn+Y}2c7;W(VZR6$I&FP;q^#f$agC7?&nZq5{sY4JtN9uE;^ zVv^TO0AB>5UCidKbFEh06h-u8=g9PBr&*8kk#lIaQyOw+sK*_xDRE^6H-v$Jp*f2& z6&JX4o?>+-b0(g99`_pG%ws~fdCg{W4pmBRmc_KZ64O})HhZfk-)ao*C5v+maIAtA zyJzpr6<Fgd#HkV!jqQV<o5>SHlX)I+r3JELv!s00<@i)#Ek@kj5Q`$7#AwmyXu`H- zkKk}`*n2;}MpOJe{~kLa(*#E<J&weB79<w9@*@d90%NIkggiZ~zG8jL(I8%X*1AP% z);&q5dOe$e^=hqg<y({KIc()SA`RXlYfM~6DpS78wM?6TEt}o-3dF!;EzAD-w6dpN znnJFp9&rA$mf1zC+`D@gdh%VvI?vnb%C**&PWm;TVQ0GQVKenwd7iJ5H@%b#VfOW! z`IxKQHO1|U<zLE=X%1kwdhI;!SG{S^@}<;FZ}m#O?pKw`d#3%hcv26Ju26Qd@mA-l z*$jt!H2?~@jx$&_>Q$jxW_<p7=4#Gp*KdYjn0VU%w@JGFL*T2_SpUJ$dyTi>bi0w% zbUek4X3|S#w1Ky82HH`>dDo```>n~OCkWe%&bdUS?j<CXO>hDp1;Y&s$tdziZ;SD{ zXtFQuIy>uyViTX_E1^A&mwA$nq?<5TN=!dl3%@i7z?<&bFq<XNcGafau6@gG*?M<H zi(g&KzGv+u9i+7`0;=*Qxy4#<^-b%pbggy8tGzX=&aQW4_#Ng?YY41=fa9K_X2#cC z(B<935{=4rVK4~BZ(glj({@EcrCnGSFNN3DXY-wh@a;-J?X+(>9d)k0-Gew_({x2i z^}I>cJ8{eootJ$(d$)airT_K7WIlEKHYrq`7(l9rU3;Sv|8V1$G9Yce0#u8B0I(|L z-^og96v&ObF4gK<&gxZ>lnv!bz^j}N?+UIU(JjtZ7nH3(>O5!Q?O!qH&yAn?^^1n{ zhpmftAS`XYLg_TDU!&;-f9e7He}QN|v5uZI7uWM^9W&Q`R<H`_49+_NMZ8)9uQ1j* z_(Bf>9-8#8(QI~c6jiC6hUM_b1Bv_t`8!WP;tiE8gqeu<@ey$xe4Ug-!dqtKs_}+| zr7)}PaG235B3LV;rg1ZCWKSi#%;IpmchVJ5SpDhJH`<x<7ve~{Pc+g0{Q973yI)}t z&|kFd&<SzF$7oFigZFPiIk1Ng2dcgU_q%QwcQrpWCsRoT2Xbd&5FolzC}WE=6& zg`#ZAAuKo)#p+5AayaSlifkMQ-UulQ0((ATmlJ1$iDt7i(JjU(tq}!(LWXa2)))<s zA}bZ8v16fRuXEkA#t~b9%Vm~jgU#M66&zxQ_?8=(i_ZjrM5Xy5(q?lLY0*&@(7a<f zQc!Hq^X`~`ECi5Y&huh=dkD8Xa2gG=Ravym6fJ&hF!QIx!p=9bOn#qd;vX|f|B4>D zOH>$H8~Upt7)%0N@nwkw(5pCxDA@h>?AcvctlTFn4beW7YtoME+2&Hj{`;YDW)}kT zB+^Dbt29qZa_+sv2w#9dysyNRm>KA_iHF@FASyluo^?f$OoAkarhfV)?*s3oRiP90 zklAUTeQRf;5bE7eHTk7sY0GLZ`;d1-ywc*9cUk;5lp2XuQn0&s`$}b?5U#h^t{sl6 z?~|alQsO-emOAOVfBd7nh2ju0IPg|X^wKtO*ihS|5A3j!$g5RudnjjG`{feF_j2uY zoM~Mfbh={rMWy6t;@d3DIR*qHn1pWGAHhChrEVv%FHYqpwy|xg7RbW95o7UOR|g$+ z_d1tnbL-f($U69aPX^RsbAdTxamE)m>JME`5{$`xNvQgn%VDf*b>YidY4w&xw&bCZ zur`TeQ?j!|u80YJLG&cXGgH36TiU*!v4pUFXUa}6e8M>`LtnT>(bhzjJV=?ta0h?H zwoz{$-^B_usokr*&n9Q3Gyh15@9}A=?BRAs43FF0ns&JgTk>Nr5WP7qFx=y%=3K1_ z%m>`{yR~z@TI<Ll|3m|hY|5mfS8>18r7eJ6no}>(-GaYCIH@$NHNe8M0_J-!zYa_$ zo>67m%}fLe)_XiFK2=PT*7b6u+r81Yz`cbnQ7;_-)7<caIeEro?Zh-)<CgWqkb$1# zLCQN8WZWZ2zKQ<EuHq1<KG~!raX(%hE>(-iTX8$B-FcymnR(h(-q{27$XooN+$#$m zb(a!HN0;Uc(x3D^l!zHqux5T!13Z_T9?ilQxC!3nHoz3PanBV*7kAd{BdOj5XUV07 zzQMeESpy%*QKnJY^dZF@Px??h?Y5IVy}|}lJm)&5D~8|s*@fx&8mNUx_c$|+aI{<M zyh3{}rC3sQnzBbZUx_>Z#yP{d>E{!&By$Nl9FUSTd~xX(H+C@=XND&{<sQ_%-Bnx; z@L5lBajP;c3=(GHABWe|Q`~mGNq)sD>D$W<T3I*w$?qX2T`$XB*FD$zC^0M?vYANt zEqeM=$Cy>$$)$(@R9UQ$ju~X}$3RUf4w_XA6w@_AA&-+2)3*0a?}|K9>IBYp?>5<S zFK`|peM?3^3{+s#KvP@kIVwUG{V8sLzmPUJSO8_solN*w$vRH-B-DSf%`m+GL1F86 zfe}V1L?+bnA;2l2?`tPbUd=iH(>wU|HL~$NIz}&7_korq4{sU7n=mygaOSZBO*bi@ z#h{ynOA$^@7&j7ftlk)?E$Z)66)D(ye3xNiRz27hnt+3Y0mD{tG$O5|l2Sl4o0wn3 zq}<(c0P#4IAsxa6{f4ji2q{;R+)oaaDSg<ha<0GjX~r(37DfNAg|{kZ!lZ&jpXqdp zVkzDL3>I`82st6SRbR5AsEY%hc>VEWz&FX6)+*P|X$R3JVRobtBmw7<`HJI+e;*n4 zn<yqx!v&F6=X3klRm$1|X2jh83O(A2-#_}&={+7_C*TnPTyw&BTF`DLr<O_BFdQk5 zcz+!Or+326aV};m#LxV`S8`-O%&00Sur3<l84m+=SmurG9nQoafZ}=-q*SZQ7p;=y zM>6s=#?_93Nfq+Y#!~f&VE?3&vhoGKIYh1K>pNDE<VX2Tf(L@T3L{4j=FF?54v}2c zK8Tyz@fE)#lL29*n|=E?w<XKcU0}7Gz`334`@5mz2}%7uy>CGvF1UkReU`VAP~CZ? z1BXAXt9S%^&T|OahXy0hmt8;Q`vbzdZ(;BB;zYe>;qbed^&=sMV~vjH6k&2+oe?MI zfg)~SH?N1NdSH`UDPBgDrhmc72$eu?gkIvS#cL2Z7YS;NDaw=>6flVB4fmvr<A#Ey zkdC<_A+d$o(IdMy<QTn%T&wOur|@Sq&<<);x)!?btNTz!{acPvIU0498aM7wntQfO z*%>l{6bJ;sHUC<9Hm5Ch0$qzUhwwMsqU4HO+z)g(ElyHe5-(}#h{sf2t>1g28b4(| zwI6iV+1bSpkvr+Zf+ST>Bzt-800ebceSf8B6&PFA{NR92prTIkmbgwCw%T*CkDBP0 z9CS63oEI++u(0Tf@F-xT8BTo<U?TLmlzEba!>yzth;L^09p(IwjeO5p3a+8F&_F2c z2~M0J*HfOoqDL2yz~C>A+p%H7RQHYhc^Q%`nz+ZM*)(BQb*_Z?<&xkCLM5|5Z*dsW zHYq@kSkVwN@WE2lGH>g?AkG&gn~yxsK{tL!JvlCF8cu|>ydSK(T&%OZf!r$T<uM3w zJXEFnI3V=Nj0;`EczpW0>sGWevEHpr7Mm=#2jG2amWFF}-zmCp&R>IG4$C5a534xq zj#KSEAa$^ij)wL3rKo^c#M2<2?4^~y^he!b2TJsB5zP+6ztO>`<e~IE%(MsPbpvI7 zKf@$KQ;bj1ph^-Aj_@u(H$=H&B(W3CASzI)%2VD`Rsv0QQ}pMbeJYZUZB;=Z#H0x9 z<>M!r^`14_cTwnm*u^W_%UxO+YSK0(!G{Ax$5-BB>YIe_cPB~k{jVRPh6m*|wtdj- zaSzj2x4;3DpA@Zp$=s=0<A<(M==k7M-lG~^lHtk?b&d@mV0b{^$@z@Ljt)%p`?c)| z;GFQxR6R3b3vjvok43JN2f&EY5Lod0qeoeI_-|1drhQtu^d2P=x3PowaL<%M9WR23 z^^;x=*@d89GM^d`+Lb&g<HRb<$7puGqk<v?1tWuR=mFd~3uE^D(KUlU)DZ-N#($}3 zDo`n(aSqu-YWt{oJUmHtElRF(kxGT{1PWub!lENbm43|En^v^kPb4Su^>q}9RV&9P zNJj3U9a`sk+o!CV?w_H$C@0H_*{1e<rSfE_3!$+(1`2Fo*s$DlR`>Qi;7pe>zPn&6 zDoxGdwO#d~MDz(hO(bkdmf>Q4gRbWNkPY_J``)U$Yd6X4pkZvYANn7OL0;|uj<kc& zTs3ND$!_-Y8+!7{m{E2k<`Xp>@XTx4vlwFbU3-{}jzih7WsY~uPu^~N@X2Z-&F{S< z`ws}=?>`vhG;!pQ+3;Y_iZz!r8hG=u9{+W58)6JCHl&x%;FmlN_Tb2FG8)>nNCE!~ z@`E^Vv<Jg6Ucl6M5B`uMd!daq)~{-)Idblutj88Z%!Yfm8FN4kg=UmQ`BZ%FwGtm5 zbU%$p%p}Ik21~x_K^6c(njLqFT!4f8Gr$jD)(rVHe)JugiXYc-m}*SMHf`oPlk@?j zzu&;`lRWI_n=>K_BUa`!lXAi=hJW6m$&=eS{kDE52N&<h%dzeM76*IYjD;p65wb{e z9Av=k59HWnBBsP!mWV?r{iwKqc5Rme8~6puQgYHFfcWK$WO+Wn0nCBN+u)3EHB(lq zu?)F&e=^I1hCHVHfX0N8tn@IuXd))Y06NO-Fpw$Do&l`?UUrt7u)*?$(~M9A_W+4( z1Jcs}xQX!2F?<(NQ0)5*uNmdY$v^_k77a0P!8AOfC|4GGE4gFbYr`}eV1pHRkEx8) zOLKnQjBIlo&$vv{5iQIF?UN+(uh^*?6Q-kt;F)BQ)+oP)sdR_wGWHcVm@?yuFtT6& zof0wV^X)k&iP>O-HVlG?hqr)VI~onRQ+CE|#GE7lK@{BKl(o;$P41$w3o3*5{l`3# zA6T0l-C7kIH_vpR{-wO$iQn){=i|we2E_G-T=|mNR|I_M*pN9M1L4egf`XX!h&OMT ziOG#6(*Uk+f%3wB!fD8^4GUuc^ff`WIpvx+E}Y?n(V7*jp)SO_2b`F5%DC@2BD(4O z@uDl>K6nvl=Hr9Hupg|G|9ZJ9B76~$&m>ACqQ2(U+{T~jA^+d_oi=`7S{fIu`G`T; zj~}fXFtA<$Tk$uObKwZ-g{1fasr_)@CZHK9nz@1<YZ}ct@-TD5-$>tQNpa+S6u>sV zai7Rwe*}bOD0HG=HlNoMbeEcUhB(-U9s`GGPi$)zt$F<on#{CINDYRl0XZHL>o>t4 z1QRE2kco0nu-uRlzDlntxO(_a;>|9=%wZ$3<PcsB8@|bd4<n;Tg@0N4Y$m*P&VYz? zbq_+@L@aag9{mIc*%zcckO;UIq}`1!5g5`CUpKxfA`ReqT>bn!28#?*=7%6&a{T4+ z*Q_})8)!YV)#(y`e~wILkZXRtMQToPxRWX%D~|V=`V8QfrJfw-Ti<4cyF)bU?2ca) z*A!&Ti&Nhqs-#PRst;f}dU`;}QC1JRAw|!;g<H=f>akB~E(#5**d*JJHD6Ex`<TN? zLI?EO2v~yq81D<fH;#d!Ky<OB&%S)<X7Dd(XA`Ckrq8^Xd2zUh&~AxikH`H!n-nx# zSVm|=J!9DRI$(>W3-9|f;S6s$Hx&gLLQ`yzZ=;HsP>{0S6|xr}oRfwv%kVWk%6tqu zy&gkTy*FEgIp15pXhD|j_W=trh=$f!qNt4#AHv_$pXuggU^fp>ho6I4#9<hIZSd=` z?2#8#?k<D%Y~x9=&N2!Oxgn*t^r7reUZh(SJ`=@+aLyVTk@8>^HNu@4(|82|!KZ{B zZIz7IXF_6evN0L4h>0D|+j$Dx4TY5$@gov!o?0gqJ4F65dH7;U7Eoul=<>pNQJ56U zGSCmiokx`0IsCYNM6wcr_g(S~sQ87mJGnRwG~kb~hYkfJ2^aLrS$UrQ2OPp9sr~9C z(2Rr@t_;39Poi$@K^wU+94r$#h7Vz=D(TR0$Gmt$9FVQ)gGNtiQF*IO*}M>Lf^k)l zRZ3=kjaai`lZ%M7p?bi0wSKcjF7zOS(e$1faMZT~bd}R$#&voAI7&*Rc%gxQxlLHI z{XekFMt9>d`l!SJys?Ex2uV=jh~5#v8Su~)O?DpeEry-oDEmJb9>ljX%d=Z3jhI{h zG)|?i@|ih5Qh`Z7QjE?3sHu1Q(f3`5@_Kx^A_jJF^UrR4K(L}@tfRzddZ)5Hlkg0A z;6<)af}3P(&YLY@Uq}a7m-q3>yl`vG?;kd>U$^lda$Y=dfviEpU_fT|>qmu@h-JG% zPe;Ts5L!45xK(|6;F&p2>|pe9F`xSmzh3#=e{CSJbLPEx%!s%i#g=aPLN!drf@5g5 z#=SV=p1v>|=fn+W3l`Sz`QG@N8D<?+j&rKxTcbf>rR`ZpvoZy!WBPXgAy8~Ra4>Hx z{cq7P?V00?<Oel|Xcs;gWnR2Qx1FuEPbONMX786Bg@)y&eox&0L3#lEH%jUs-0?pj zo`0+V7fQ;;(%96_*_8f2EdO`@3NHI)!~P$CMG67{Aou@iS=rOh#n6L5!qVKr=HKgL z>SUTIAD_*DFnaeFr8vipv_-d-_vJJ|a|bCVrr9zMM8-kXAw;(L=M^`3_OD_o#l&mR zTec_i_S3XUTyJ>yDPA8RpI`LQulu{DT*I;%ldQZ%WqGpW+y-Jyu%7(qJ<xb1UauYT zIa%$X+rsmU%L<|g^vgStIWH&5MsWSC#TapAp`cd9Gw&A1_J=gDC5>I7+Z<b&7{7%r zbN=(WHNHnKW=k;lAM2(nJ=E$i(4|W+0A`@R!5c`ru{XC@2FtU?k9|Z#MdlgX^MhBO zjATs+^$(;#=(6VJ#U*nP^6e}-pBJVzPd=Ej7eq_h2EG|Qdfg72=ZGqXadhs$<zWPz z7`N$~yIo!D1R)0O<9@Lg2l`%K-zr#1_a_!2C2-i&phVgc{;r2X(iC?$jB8MF;p2@g zhQu$yh@tXNgI}wjK3k6#JZ)H79drl3?aQ0V7uHw5g<~uXC&s<cVGiX1?)Yf-jGs-p zz_&jc@DuYGDnzQ>RG9ZrQj~d~Lr5BnQ1jIgZaSt$)d18av@3WbP%Rt7^m-(ShW*l$ zRZt-yeU#2~Ne~{0XWJp@@(p6Tgeb>8!>CzQfDk>Jj$vIXHW@L@JWH(eom=7wPO2dD zD6*6(DpYv(&QygvQ%Wi@50I21gV8EPp|%=@cnMJy2J;>PRK=cs1?Onp>C*m<6mLoV zrcg|Y<S_K>F~>P|&S(nL3XXCgWI-Wz=g8VBK)NJw_iMX!#s^gQ6n~9IMFmBoUPF^S zVjQF@_e!|+8X+o<RUt@Hfo_CzDi8)q&Y|2~Ar*(mV+|&q_SCL>(?b?<dZ|$Ssr(3j z0siA?0|4OuLks_>$NXC`{AZ4~rLCd4sq_ElDF4-(ywP<z%|A#{7aRb9>;J);<v-tZ za-nmuGxt@7R*^Qu=|2dGnWA>)shho$=zg;!i+#yaJ*z2!MRe-!Zmqnj>y}2&>UrXE zNigS#kjr533`<OcbnGFDRA_p{(#qz3<d~cM&GEi{`_2Dz_x98G`}WIJOeEah_2LQ) zP+;wmL6P;>y_`Q@t`1;7>6+=DE0>}2fiWdT;-BUz5_r(D2oGFX^@0cwmiWn&lGKAE zz(QVW%BTV(A`+lj1xE$)@M0xP0P`5=ISWNvh_V4sUWE#@W?Hi-jRGZlQ`tT7K7=ep zokCb?Vh0PYQdlXep`Vjl06&Kuc>$;jM`#e2YLgcA0;DFt3+VHfW|+o4JVYvq$qx%E zG9qXg0twtBX9GM~eAwV31o%Ph<I4*!q>~{?m;qgggD-+UU_5nzVFRnivt0>~AObB? z`>m+CP+CwC3lM~qtn5k2BL_$(1fidwpByaRdbrrT#aSh#%31MRlRssI1FaYpYf6$r z@ElGo`Kf{s+EsbY@{PS_Yg?<V%P;|MRUiT!%nxWx#5=!A>1XVk(xS)E@1oWw4=kMM zk(Lo$<N-_04T&`fAxWGP2qkgEvA%AM5&}x0DgqXR$P_rSf=s2`Da)Rv6hhsaQU%uV zu&5B4?g2%r6Clwc*aIS>KFT$@7(yaP202>jdziyG@jb-`JmlvnD&htXYF(M1<B5Mq z@%AB?_V(16<cW?B9T_C*`_TlD>9(GS?PaUeiLE#0Dj9mwtiZ2MOY;gB@7&2<V`=iA z;P~nbOY)1xSJ|$uI6vC<VNpS*-QxF(lxyks7}wEH$@L7F$i2NFe@6ZOJ&Ruabz4M) zc?NY_4dPtQ&c-gLXa|#%vCSP`p!I<7?A=EpaR1B9`IhZQ3_7?*YA2v)8RKEj6%{2V zpnNHwZKV=-hCnxJ-DB6WC@1k-kp9z-rA|+Q_&8(FvK=DG;y)d@F-0!oPo>o9_2?{c zEEl@G`|uGrr{iT=%K9pe;%Ga$kN>XgYtEX00ZHaXLno0BVL=yzF5AN!o<GC&rgxp6 zBW6z)Ij@xx&Ti*MR$R8(FD!m+M8^&Hc&)V7t}-{ZzZlS6g<%y}Bmc>g{1f6KEyu7{ z!z`T{n3NKIue(<Qz8m@yYqRY324LR(J8QF`Ry?!UYwgTC1`bs6OAB7yymWrg1TNF( zQ4F$|kh$q;B7S!90*x!%*qrr<U3=?zp<x)VXfLCEi19|Q65HzU$MI*|^{qFN_=yxo zQZc_aE(pjZaJP}fcsMB+vznb|dLy%yZTaa1RJ_35ZKg=eyLt5x7WPWXb35@s@$h|r z)g0gB!PB<y$FI>u_urgRy4~xx`t>}@II`?PYBgy`F(rD*&Ep((NXSSJt@ijl7+?b{ z4}JYniQIb^vZGNQlG6PS+8Up*d2sqrReZMubBg`PvM)=lJv`DVtDr-3(1en~KR9UF z3VLRAeHK)`b&VTZYuawPXQnp2i-5%kKTic68)8?<3n$g#nmY#fE#w&Q$D!V#6=$tv z)0-d4aXz>0@%$Zd*E|*N>Tghrf0TvsJ6#dY%Vvg@*x>J+Ufs$zm#3#&o&&J*iUW`2 zaj;i@<|4&=q2*Qb@C|%hE2D5-&j?&Tud|^=(XPVH{C{<yw&gEb%)MN1y{~cuIdM4a z2S?g4?^X*qL!X39L&H$1tzQ;Meko1Kv&T`jiI+{Yy}jrUD4ozv=u4>r>+B>oqpi|% zDQ=HB8J+FRQ~nmMmTGR|vrn<XPps@^;_tLSnM%i3(Gk{Rx4XFK?(zgL+GBe|<oLZX zk>u{H>GHWY9lx{zDm@QQj_)mBLh&W)*YioH<Z(5<S;~(}8ul~NO_ngWs1Hj4fL1s6 zjH2q6W4dcQJ+85d^z%S&>h+>NN99!c0+lz1f{r0?nl|box|j3LL(UnChVfOS=ld0~ z!1>%*VKNq#x~U_03&e*TH-5eVBaPk~eg*B3{?S*Q>c8ybJrf$%_V(*MEz4u{C<x#0 z!Bz)jv0OUsQ@>ff|90nz*0k8gw`RU4FX`i^rxVu4{i}5RFq_lrWL@iSsa5{eOeV!E z?WM|M*BR=<;lsrt&GZc;ApZU?v6#588Ql;3zakpJ{}s__{xdP?A0huAmLUFHY-|sQ z%&Wly0Pr&b0O0&jTKZoo{y%287uV8xTjbgKk-9AprmeD=gkeTNC?LrJ<y;UsPOfZO zQ`=fQmKIYo4qNJ%`)*6OmV_I!l(sascDMa*tNl*P_3p^_rSX$5GgFwfU#@ABIr*e< zvRECI?`QW|G^vzlpI|GVZ`fYmkKb8&Wp3C5yq|}4ltLbj6b@X#GSj?SD7INAwrSHT zud2F4BCNTjM@_Oy&b4y>#lg%X6MWh!>jda&(56iJC3)_Mgte+&tG37}QGZ@G=iDMi zbb6YPFcDifD}(&U(8$#c?Q);l_5S04JRi^RG4%8GTF1A^zac&t-_(&w&g6NHQf5bS z*t&HX8u@Skxl7XuvJqH~Uuh<eS4xbG7DTq6$7gicr-&&hjYAcmYBY_cv}(#abFgv# z=_WNZm8FdYDWmANIIYP|tOr2c$wTxNPo|7CkumyT4v0)<1ur&bmJ)?dN*O=XLx{4& z>nBU43L@=O;^Hv^6Hxr|PR9G)4xI}eGkWEO7A8r~(EfdR>Ft;cQ7qN~A)!nGPax$$ z{z({0<u0BOMuEi^8uV~)Z^i{3q*+C)Dc;Nnr=|>Fr)<YzA~T@Zw)S@KBU3J+*vlK3 z6)MRi8&(BJHmx~Xt$%967)@`Cir#HfQ;R7P9W3jYQuAqIv@S{H7b2#{pfbT1r>#q# zb@i&5m4$_hJbmdRWJQ~sG-Y>@`j%}&^oD>qtMMyunD<w$dGrAe32KQ1!1OERz^(iW z;Fq8=VV2c4kO~HYJ1NsVpt~!eF<cl60xv{FVm{351wM^RN6&^{rjL*2&Oh9BI`>DR zb1yoSgBtuYtH9CTf-6JGFd`Gho|Qr3$X_&fS@+%`wf#S4-d9q=G5MK~?}wv{uV}Yx zc|&(e#sm}}qb1`EELoW@N^+}-Qhg(L_u*e}fCFd(8$%c95D!G2fH)j#kOE%ay`vb2 z&&4<GG*s>AfdwiQ*m}^s1XM_aMAS$kI45d#Or~aFC%P-0V%G+P?M^Xy+-01eg=Dj4 z6nUK*pdy6q#>v?(CL-udG9~NqhDT=dee=zoL;N0Z?J*qlE5j`SWnYMTV(OYm;6zZ7 z7m%00dKLi-JuRo^rfJx&G{FNA`)e1Qjo?-Ojqyz|_{1<OO5DBp5h3fa8Ttfo%QS4D zS=O}yTnT`_#a@<bSZc2Cx->Ho8yrB|F0}?eOoFlEszM7bqpEqeP#b*lyFAjJ$x?xB zGf`RSW?vy1lb3IoSPogU+sFDTEjQ85yo&e!s_$1JAGq`}!e^VQmT=xuW_>PO5*C>J z)$A++Ov>X-ckn9`<rU@^PHe<s=c7X<53^JI=a-ewl!<$F&|IL8Pz#~0-RfoH4c%rB z#>bbZvpF$<BF;!QHxQ;ye!T#z+-l$)d1N+>aEnHoGV3!UrrSc%_i2rCwO~&x(1?IZ z4YCjjiEjp&COM-sL2?$_zS29lkTrpzpvaD#T2nJn$a1Ey`2==uWiWo-ve|;Y<G%`* zd-w{`n@&y8+*gCk;daa@tHs)99)91gGEQs?d+fuolKcgGv@&ox8OdB}T^%$#BqmZY z-BlC&_e{`BG9i3ZMmwjRH#31aq0>UIHedlc(`m~=EtzQ7>jMX1w?d%^3(O73V<X3& zI}@SqANKRuHRUtBBOOyKt1OtZlReriiS!-*vU!)838AlsoI$(h3H7CYDZ%1+#NUim zCTVJOMR=5!`5seL6-h{h<_0+Alc|!U$k%~zuh!(>ax8Mi8;2jeS4>lQG)V7CAzKVG zn+Tb;P0Y$^0lJE$O$m3`1-hl_rfln_83wrHHH?09ysdM$xmVK4g}N<->}hrZAw2{q zn=Tuyn?lNLd4BEtQCzR&qVvtgyI5p4Phgj*-(~nn0V+7%mWgw65i-^w;8eWxfLMOA zYv%BCLb*mUOj%irqzFV%EgES7OxfgyyAO<X^rw(!kBERfbTyBQFb}~SWS{_jAo}<D z{>Q`W<1w|N;XB5DJvin4CdpJU=aOzzGM7aWU5EQX%gv^d<!=bR!-op4w@*kv#cDPQ zP=lcUKI}46HpqAYeX!6GBJB)&i_MEpWzuRBD>WLFqw*#Vz@Vo#rYkD?m>V9>3>N_q z=Qf>8WUY8SRm4C74c<;FWbqz09$KHtNfvs}R9%zklB0vQoVIof6}jSWzHURjXtM1) z!3CD8YbGoxz9i<e8H6U?O<dy=SUdwLBcN+HG~%6u<6u9lx<#ftX6l7}ft${a@Hkb< z-i2%Meg`c8$%yrX`zYT#H|=ecEKRq>J7Hv58*&+MmTR-!$iAzX^b^2NAxV~Knw(DF zdoa_2VEPNnJg3)`M`p5=6Eur{^k!ZlUiq(qrtZrBT2=()qC-JO;&H_F2^-WQVDQDU z7Raf1@%4Qp;~&DQ@P`-C>$No1@mG%5?4vidLh)rJv#}9g?T{bF&lgoPo_?DHR~kUh z*s+=WoJY`|c%gZ~x-OjfSUlBVQi-?YHKd#I0j)PIk5D8=z)^i_K1$8y?^ntZ|CIM~ z75JepY=Q}xw*!(8-J6{&x{Vrf_&!dApJ>~aw>c%m97J2ZbD#Xia5G$i`M1naj`SQl z+Vm=H-~dW}lj?!_jSo_c>mqW@isb=1yfpgA*I5ESS(HcgvtbQJh7hm}1}ZvBH4AD$ zFB?coXY0!kz+$)=xt~j*1GJE&FN=8{yAvl!br5c^dTjxOdW_jcGn^7Gde;O!rDaOQ z&oN_exP%Dkplt}_<7q~Opu!1=hQ+(=O^?)HEEE2C>f`QH6u@-+u?980xe>>&1Tk31 zd))5jI_gg%rh>^<W^ssiJrOU?6%UouE?B+b<clLK`<6?2+_sJY$G_^laGmafX813p zokMtKal7SX+fFLBZQHh4v2EM7ZQC|Zl8S9Rsi5n-eFxpM`*aV^U_WQFCwuRAt@ZwY zD?1!ixbvI{O4u<Y;KdM0+Gb&_!Y|_URZAV_!7blo<-U+-@@gq<Vr*hobSG0<_fqei zRG6=E*ZiI>q3fM<Zehvhq_3fhA6f-Dpzv@Vhj~@Lhec}+jM@S;xFTtLc>!<9fhpjw zai50$+LW%$aWP_%Ya??r&?^f!4~TIMsH8LKp|1SbSg^43hAkLH<zVTKPyl^;3o03S z?H~Gt^sKmwKD^x4mYXsz*9T4g_N=_`48fS3RU!}n!%SFzsRb2gKKTJ^=)Syj>j>wJ zVh-lm+I5IFHYrPaNMdaz`y0$Q9(TuNGijG%Jvav&5X*!0CyE@CQ&e<4v%0&j+#zIc zmd<TidXGR5Ri&(zBX_rZH!nKxIJuz~Lb~N&9k{(WP)Wz>Hd4XPuxoybX$?$%$Y4P# z)_j)yix(~el7sp^^v<=+6T4QYBSrd-5OXJxp`d}FFf;++pp{kh<`d)4rdC~P@_tY| zyDTia#zoB+pMj+`Y%83!(!g77fs4~{Dz;M6gK*WmS)uk^xQr&1ucVJ&Ewh~(b)Fx( zApas?lm>~}kNb$~>DDVk`5$xEWih2dVS^zL`FFFoKjig04&PU{Z0%zPt?&;-LgwsR z-R;|1RUmn&yoxat(J1&O9PF*C<Vo7bx6Wn*4g)`E-4sLY40qloAr$?*oIJx<F+X6; z6(@S!^h&_lWmlDRgxm^37~yIyr_&(Ynwk)@*<rD!#<C|}MdvVKmGneQ*DV*}NX}c- zzMf?}J<n6$d5`BEiFx$l4JPO^_@BEWBT(^nIp6d@kz&SZeNuzKG#FTc`JtIwk;oNQ zh)tnD<pI35%9e3<jJ66o`A_SxQ|Ey;zDeBoZr;%vp|>2QA@5w24sm1PZ8BGV!a~%a z&!kw;Lo3r-m1hYKjZzf!JmGkY1LYSRh_w*NA5Aq3zlet7BDmQr{N#L^+<gAs()s}J zKzM3H+=59||F1R5wjhu`#|Ipm)D+ffb@t|2UUtX+z;&!xReTn~_Q=(~@hEa&?Z2)m z@`ivy0zK~H0RZ|Q)ZO?#Fr*%^<)9I|NL?=#*P9V(z(oev0EZ;9k*2Bkk(SDSxISGq z$f!1#4_L_4NO0LL5P2sUeuBIHH#DI;BE)y}X(~h0J(kP!{0GM%Rt6}t{2}baG|jH@ z*rtDYpIB@KHCYpK@=&rVJ}=dmWJ<ga8iDbrA9OF_n?vY3uxegLQVp1nxWs|1g~{UX z(54Eqk#UqrV!W4ch5qfun$$i<It36uh{G=3!qy-+4+TA%E16+?b0IJ$Lr=oi*4!`O zcnGi9FYd{cM_RFmM5V)H+KER^HACyo-=zmOI}IuYOsIw>;KNq(if;94L|AY8Fc56) zWK_DjmcXvX??IK;Xx}~5_jscE2I<F!4?i6(GiiWoUJZ&JOr>U<q!`}U0RK{Mj9uVQ zQtzCA@)42+RM$suesM6(5qSz!6m;@cCp6MpMXT%OIiY4VZ?HIvz7?~x$HWfv)X0Hc zW)by*1c9UXIoB0L=Q{TVSNaLC_azc<F5QVn@RC(OSPDr@=&cNsC3UFTO0+sJ;2zmL z!Dd3Ax|8%AbKb#UyvQ<ASHtl9IW%b$8U>E(>Mis2i`~a2*lpOFVki_43j(?DD-K#i zT$~`qpjOIuNji)P-;jwdngb_kCHB70eO;G(O2uh(Wg=&o-s_b!+T}8Mpm@`6n^hQ% zTzWdQ#G_I|R@Rjh8s02!=zN2O7UnTp)^;#tqE+-g0H&wXqL3nH2!nX?UbiW@2j`W0 zFCe3#M>K0Fl1mUWHh;%Je_L_8oTxdSwPSLyYP&e@9XOhiXCb_BElBsJ#dDGIU&8fI z%QLQila1VWT$L_q3(ToUr`=i*b#vAAs%lW(ko<?|96uzyl6rO^trN9t6H;$a<V^t{ zca|hV-<<chNwP<)dNCNP1j2LqsU1czzGl_E1Ub_^nwfko$x)Gb6?Jo#AK0uQyrYV} zX9(2Uw4i^5u?46m_vJ+#?Bqi>{uJX=l8jbBz{4|G@s17a>nX2V%oi^tw|^y&lP8tD zDUAI|GiE>QjnS>XMo`|YsVLB&_rp!M$c(Gx_!TT{8s~|g;w~73mhshBBYB9KVP_2S zyeJX$o&}tES1$!AD@JjC;@QN)_@}{Wm$lQ0<tTvzal9{cgacr7YzJ}f`1BrKGlZly zPA^OJ-2fOa{1px96rXOI#*~DWz7%|N_;2Ys1_)Y5ZzK_^)&YRBUmcH}n;M2fg7cQy zDot~jNo6|n!lN%nKF)~evH?;!F-idG71|i|tZW+vEzUBokHFL*Fxk-E%ephwfPkoA z#3kz#2+le%x^W@^UUH?69v*gDB!Zsj|G8%lCOChyUljynGTcwg?9jzbk1@SvI4o-I z9-E$*9VoM=SN`v0w*&L=hAcEY)yU|D&M6}!wqnTn!eKkQ$n<uF=#anQvz^CA7k~)v zi73a?#?y&Rm&R}QwvsMFAzSXn60sFNnCT)jV~gE*Y!b@dz(h@WBYniGJFvGW*<Njw zR*|7J_#?SmX}dd@>fS^*Mb+AmhtFX1yN#x1;@CMSGpGxO`_*b!Xi8LMFeC}KQu<P> zS~6FUeB~F)WFiT0CY!c(P#i97C1cJ8O$m9t7#ICsLb)JCzB|Va{@=zqsD|2RmmrSY zTN_nrgW0JB0uRH!u6{G%JZ0t5RXbX6_C9Vwhs|RYm#CMEOIFxrf7yE%0-<BWFiUUP zNF~Wu^wDQcGXF!SOh<@C&(Kj;?DXsLBW$7gsDBmmtLKWVeeZ9bygM~+15<D4M=@Gz z^GW@{*6tlTMGNUhH4fFk)U#c&#+NfS2XQ+9teCqX3IpY$?6Ct(c?;BSr42<bfh`Lt zz?i5bk)qj05m;;;j`E>~-m5y9-Y7mW8uHAT5)boi9$Sb}9CS#`2!ebdsV$Vjp4paH z8IYdb3TOJmE1vTSglsyE(+#Rr3&O=_^?9EzFGr2cRBapMf{JdLSe~jh+O=#B1o;D9 z&;-T@Lv0qZm=OD*@0%l{(A2(W^%uYJZHHBM(X^wrC(`bWW5X7@Jok-e*%wy3DzsU; z_$&==!v$D5*oh)d2MT<C7Z}SB3;>}pgF<pV(jnPE90i8cW9P`F-tmB0<!!4)*~f)L z0Tb>YlF6-+wg7}@#MGKx7VCykHAe=EU(O4$rWJeEML@HhG_5IeDmFPjnfaq{Hd zK!Q`(-Fz2n&_+km`b?ha&yR?HhM|FMVeuRo|B{1tZ8Zuyvt-d35$66_q7JbARf-?j zcRWlBX^4}v<Q&-b=E+ybP+EyIG;Yvye~1N96@E;Fvy6S_s>mf^6IJ91xj<1#pg<pl zaBQm_TXQ>C$w2BT4^xNN#UYgFvE}n4@N_hkDjG_?2sG(-z&W^!2+2v4jW>GxJa=m< z`1nP&a1>WpB|?T4S{WVmc2+9%FXNA^0{9-sT15jHsc9h=GE8b{=>jH8$s9bZ;P<1* zsm~?4PQsO9g%OWG$KyUW_=5QtbMw9y;@_0b7ccXE)=Oo|K`^4dz>;0gb;Tdsulk|L zLNrEPMTCujUvGbG2=BJwJ@g3&3aW`#>WGky_*;B^(2EES%%e9PBtDrQtY<||HAN^+ zT4aLIU-rl*{6xL`#vkkg2C!y8){nX(nfT|a^;(4F;ehJJ;?`<k^{nk)qW^@uAIrGa zPE0@EG^ox*1zt~<ZSpg-I`HaEE^hOOJ+{8g<W(coe?0z1DGWB#H>^9A|A&5Gqef{# zi(#o5=NWD?+b(&GxxFK({&EFm>kxjdEN5$EHdCZQ)h-(#4Ij$m7FcvGSvF18G5l@X z<XJNwhuN}$cFt;Mu_HD2WCRJoh9k~A{7bCpB*`GUob#u#y{O403?73d;D(;c*)|}# z1CGDrP)kyn5)KIW<4*(x9nbCVD;EM}F(C4;nFDq+x;w9<E>dUPp0FA0_mAX()5c}7 zIA?AHW%y)fgIyvT+NIVB(el7ma5f16qQO`#I)t5)UnS`s)yrmkmrJ$W@Z$%^DjnxZ zll=q|n48y&vq#M#-zyLP<@!4w!DSH2PpeVo@qs+-S6c-`^Ns>1o0quTbf<%4I%8Np z^GF-G&~j{ISp8mQcWb>vcrfAqD#ADXO}ZM^rabbmhnpQS!+^X!bHYU(2i?Z0zmg{Y z4<=S1ok8Y1y|ute&OSYgFbj~Yt00M$TV%YPUxUveKoWNMx&}ibT)g+Xr|igA8II{2 zZ^Y*6(ox&l94$~Q6I}WjjP#;?8BVvePD&i|@h;Gi)@>Jy1aA4Cjk^b013DTXhSVG8 zy!N^GcouMIJy(*?`$^LlYQv*J?rFpAW(jx=f4~tw#i38EN^`fAI-@aoI4Bd8H)4_u z!M<mH1x$%2{5xD!D#$_X#e}#yY=Z7kbpGoXA$RmzZm}EX*_Q{={AM7pyWnRmqMl-c za_^X$GdJXv*?NZhuIn-LVDe0NnFy4mZDXOIHsOSo9!m}f!A6NtnvelIUQ)E_>z>#X zPQ~SO*8JY&O&0c7ufm7E1a(d-dx4<nWjcBuyH7{V+>R^DK9>SY+<VjnlIlZ~<Ct1@ zeoj%XOQM_1F~e6hd6dq2vCK6Y9?MdF-m&kc6K&erwxM0zM!u%MiudsBss|Dm^2j!J zi})Py=FLDW+g?ceb!+l%p}B@ElVk;(h`NE#Uaye4qbJ>1*5gV0=wD7-Kb@`fno5H8 zX_sVopzzzV`)M&wuP-CF`fEmSaaa^s3YiM|?mCgiZ?`{|Q0>!2IpWK+Q#dY~Z*9Y3 z@228FqnH=jQ`)}d69NJ0k$0Q%6F*gb-}~yR(QfwM1=?&~3^e`qNn=0C%YvOdomEP( z#M(IC+6-T<F{rP|`609Pm(t`vjpj?{)Qq??3%)lI9Qr|DzgE`<H6FRbVenZ$fTHU6 z!wb%gTww!cvT3n&JzsHWhd}A7v@*kFoG4UK<a^CtH{486)kxeri*ZfG#9274y*!MK zJ}S;r6pNXTi*AC=E0-UWEf}oiWf%R+y>z%TI!}_WBvnqe+U@y5>wWOlb-I7E+(6+; zA|H2<c#+{$zXsz4`eCk&IaJ^B6^0d9R}9)ul>`n2h&Wq*UtGU-2P5eU3~}&3UBr?x zKOzOi5y)TdNU+&XM{M7|&@J>8Y(EB)4^L)S%fpYo@JT;=u6Q8VpW5jX2Cz|OrO=^q z(PpufwI2%+%MKVFsMj*08#^a+G?k>Lp<Ae|uRY*tql$H0q1$Nl(GJX|pM)h8H^(P% zjIdjefBK6$?No?UecL?)=Y$U;cTlo>h&Vcl-6%MxwOdHSYq5APS>gJja&WW};yr48 zE=tr&wDR^Xl2Gj1%yb_hnXh^=Hlc6)njEfjvUP4>p>q@o``aFY&hQ5p1bQv~gJc}j z>F5XlwYz>reA8`~C$$}=?p5BND=<#izx?H^e<5L4Ey54kG?_AjDZt@A&j199Kgt)j zpxZBW&Sn#Qs;Jh{lc(ow`Jb!PeVwNE6^HJxgao=}wnt8T!TxrK(r7Uhjs~ThW5tf$ zRfnl}?(N77qo1Og8m2pJ<<CG2Yz2zhbJ@Co&rZ6k%iwWXKr4#bp#v*!i_#CEQP-g` z&Z@)+4k*PS?P=8KSz98qn+azJr@-D<_LGb)URLE^d^aYZ_8{$`?4mc=oU>SoM87$` z%LVqXUE4Xj@%4EAp6E?&`5jdEHu}zHx^lbA$K(BW<OrVs3{?pU-do)o7dIftdKUZn z?{PQ%>Nq(<tU%v4yGJa>v56*M2Tq=zMjsPD#5K6AuO~ZEr#A_y|9wmjWsSIyyCLp4 zxqf1;x8M934NdVD7yj~xL;lhgv52AQ%P#*~-h{KyG_>;GRpocHgt|u1bAd*tK?4aq zj<C*iCkNLNyqf0F@YghN4?AE7d{Abc?aUVmq^M631jFu&EU_M4!<IvV`^a5xpdS7$ z@$3t;*DVS%qIMdM%7q_*i}-;6zt=@O>!aiZGuLkks&9gbuGewSB*o&#)(M=A<bE+p z#b3?YUt#FXKUZO_<q5w%?)_5dZ80J(xQ3YLdR9H;i=IKr3H26wD~VmPQnnVdz9s=# zk4Nr1Viybz!LxoQ|Klfio$oMUPG?hheK&o)`{G^ir<e8F^{&7%5b%G}bN&;iZNR<= zd&2<%AyNPV@%_I?V769v|B1nHY*jYd-@N@o?;z)KsxaF&!$&)M(Kb@`bg-n>oOI)o zZONE8-OOpgAl`4iN&lqnq8M)4y8jE!H27|l9*1A~p7^{7#ccu}e&UkO{_%4Ll)aJ1 zUR=o;zYVQ0$Qy;Z8~(n`8@qNKJd(~*g)51gJmJa(Gn!9m*RQ#?$=+hpLRDT<yj(!Q z;=B=x(%vpRu%Dide+&Jfe>y8tP(+9$CsATcYmF`GV5|#LSByV0ifA=S`-YVja0RVd zO<~o@y=RpP_C^W$jtKLI3)~@oJYSJ?eIbh#&L6}Sl8UJ|c=2$HuPRt(hA@p&9=;C9 z?L(mpPW|qT5ymKBYXA`^szfq|{jj|NGa6f7&~YS!H>n)t)nfK2zzfA&AAI2rQ^(G( zBMt&mdHC>R{&x5<iwVnTSXkSCf4_Tt8%i8P9WZQ{y@$b+rdc2<W$KrhMDz7>_j>}q z3%6I`&x>II<7u3Ir8u0w6(@Q6e!_!a{B!5y<MecVc!!tk%O${r-`l(x0o@zrTg?|B z6v%Fv6Q)G&_8~H#RcD+p0;j2xlz=3Fc57**<RPPcnN~L8&Okxx@OQ+y62H-7>{Q<2 zjBD_l|Apb)j4`t#Fqyee+T_SyntTm|j34?g7}4dAGNsA;5s<+Pg?uMc0{?v@c@%nL z+70wMT!}(pv;bo9o-;~AjbaGCJU&DeUI*J9S@t>;Z_I7_3@e{^=hTThC@@dorQQcB zg}&Hg-X(;61%6Pc@^@OGOJNOU_Au!0<>RE$!Nh{LkhT}rHqfc_3@>DF_wj4f4mcwv zimdG0immu9SR+$$Vy8opX|M#1=#F*hOrHIfhu1Bj;oWcRpZi7s>m5Vn!l*9*>vzUX zz%DRT3(?ays~pB|A=1O4JQ#IIDii@jV9X@M#QJOFFmVLPB)f;t75Mz&bh4f<=;*T% z#J6KeGjBVhUzcN#$ce{Z;-69uN50dIEGbaVA)vzU26N3~Se^x?qzA^lV>ilkHc5w| z0>|O$)eTWBx>p16H~t<IVEWM(K{+is52^;-h2H&ePe5$|Rik+TdZ%+XfeO7AdXq(X zA`55}%$XCp=_)39HoaEEWf`mSNOkDA@~|tHC?BV_9RpZ#Gpp9YRP!b%_J^zR2~ubO zKb0F$9tGX$bfL#$P}d({OU)t0{5vtmEdfeG4gH0p?NuTpG(qs~my`8=g@e54Rctbz z)Dg1VNu7h6-S^&tKPp_%7ii{S-R0ab0HQq}uRjJ4A}V7kOECP%Az}=~OU%7HvQ9&W zh5hZg%S$GGhS}XpMVJkZqKOO`Ny#(brDcljE(P>BV)MiMF6_b}Q7=Qy=7{=(45MPu z(+aD1BS2FHufEz&sj@0<PMO`9_4yQN8dyOlf5V791jEe$)s2h<C;P;8yvbB9E8$H9 z3yk(AiN<Gism#<+aVQ{^v_>Ob^ev#Yi#{b<Zwn^lWHs}-wL(2C*Tfs$TalY?IGo(w z#85d}BJq#NT&2Jdln8jV7R=)M2?+27mhn~Q&>I?-x0p6423Vt2RewUn>5NX~99X0W zibc*CzqR6v(-KUWZ)%QMwHDTNSJ{ktmI6^g1A~mE&&*JEY;)=6KBTq6&Fk5r1FM%$ z4J*2$m<VG;bit<fm`2u^q7h`pk{?EOOtdF;j0nLJ<;>H>*aCdF0VvJ~z4_&B%!Rq@ z^P}AI!*)2lTgk+XFVveL7$`C=B!6a<FZ>5-z=I3eaHYf-ZfJv~VH7TJ0KW3K?cGJd zL^<qziflP{@aTb3EeMvfj=-cgiN2UUy*_&gxe4?fM0#?pGL0lgfu^*DbQ7MA7PWyB z+`vA)+Ozso;fykmaw>dIYMl>)b?UGDH2Im8Ba*wu<!KAn`?kshhUE~7A)A}vh%&e~ zWo}gkV^vw>K3E86nNe+%m_tH{I0o(CR9Yq%Oa7&$2BGB+)B*0jwJMEyCc~s%zfx;g zRaJgNGba`hZ+4@QuL*T*Bbc$C_BbLWChpmZc_Zvv<=B@;lmxl6b#3LMHTCdr_I+Pg zJ=7z}HaF~0AorS?-AmOkLsls!{-d2fy9%bY)+m1G%(m1=3MC_lGcy&nU&WNUBx0Ai zWK&3kp^uQoU4!Ck@vsB1pQMSge!D%XUiwcVqphTt!cn`9cjZo+K&I6eHs!`cue1wJ zvCP^sZ*;UNt4sNyki8am5BIM-=bMtKzA}D_pl_tQgYfW5??Fv+4)=8fF`h4)Q>UuW zNw^!So!sDas=3CgbkXNjDP#Q>W;+$U(Jwb#-U?Piz<Md|Pr;c(pkv2PiiEaQbmfx8 z9}^G2G1UgAcBLeb@6{Wl73!)5%<)d%cT`lxF3;15j-mxGeey}}f#Fl&(NVsho{`J1 zGAV;{pv;n|M~idpJ5kBAgfTm5@u?Xvo8t&nEaV9%R5eagpz%2TGoFG*p|wq6&(|fc zTd162>}f#{0M}{_5`I~tiMhVsJ}C_d3*b-tcHjRXDp?K8=aiqYZs4}&=~80U(}sY| zQr=3I-V<>vOq2nF%+(soV8f!g<-%P~?2m_nF={|H_;sB*0$teVF<(ahwooTrO)r0E z&V-h1d>?TbTkt_g_2*<8rsceu!rDq0rK4%x8MrElP);%o<t4vxVpSBiEnh`xuQ?Bv zDkR%65WqHvO4nxnw`J;~0uZqNzEwiiVNlaN9%$CoSpZbpJKw_2AjF79Vw*I%z6OMd zDApljSjHwmlC0iYwADkU2Chu~KH{28ZnSa=Mf4yH`m7vdxD98?WoxSU&+jH@s)X6~ zc7$~?gzkz#G!D79sKDj&9#9DuAiO+UYs${0x?N2`G0B<TU8m5ekAZ_3xOZYY(_R_3 z7MF2Xw=zq7vZFE=oCc1YeKvV%gOeMb-OWb{FcouwT+(Y|w@~Zx*u#UYw`5k*o#{e& zVsAwji-zu(UUyy}TW4B3c{5-8CQKRhTA+g?$MU3677rSTEEfzL+MjwMb;e|Wcu@ZK zhJ}Q{FkdaXXRv>-4IJr%!JV3hG^^;NG(M7LeqilPE05)qW^Ml9>2$Nu@G7J%-{$d? zHR@5JQH)bG=(qQ0imB5VW-Xm#kwjGdNO8ZBzwkZL2tBX^BzO2ACTgNjOcZ7d{Bc6u zq(PkCtE^4OWc^RtnHhRo-S)J%aOHB;s4cQ<b-L;)UCFojg69I1u<34|k6yev80K6y zMfyWC{EfFSwd_D?2DU=u0-q6tQ*=k=qgB9d3+KI;qzbBlGuI@b_4`rE)4*$ccH^_h z`)Dxx##r@mm&!+Ce%?Pw`0IdQYA0jVJBeoNla6iX34MIO%LFaGr5x<blPW)`6(xvt zm|E@`D;GN+K6gcvsukk>w@VwA2QoepRfwr(R{23evtNp8q%P8edOQY5Yhf0B#r9UN z_0GlKzwB%Od?=x?WI&EG{!-}|hd0cc9G>p8E;zhjd`~5XGF4&8`8I<0ogS@MNEem? z#dHN-tN6YDNbFb8d{H>B8WL^!HNTRu<wWMiuxJdkR{N8S5u{TWidQ}`98nJXQVtl0 zsHCWw-D6*^3W+Vj8VH<60UP7L#)*4@&v71-=3C58X=x!dnj2}ihYiq%)`ss#0bfJU zyKfsR?V-N-%=AXx>v5?cRV*%>&HZb0*`<D%P;-R4^+!Ej3Iit5ZoWVt0z9bs`fKg% z@@C8KN^j4<H}pcY9LKc!Gpvn)Muxy34LPJ8!fyZEX%D9f>*&%pPHtJ1)&$GW;{3}z zYf})@UfZ_Rcu8-$O>jZ4W0oj>l%9Z#vK^b?O1Y3Dm3*0Sy182R0>KH_r@!og#`{A- z)u%Dy0|5_EYi;nJP25g=&bw*Twlz4MDukY7(Ab@7)a@v<GFj$2xDZKZ2adCiI=4{P ziQcI=KD3<=w$hH%{()Q`^*Y}DxHx%kv6j$J#LTUgBH7DcXo6<GU|@G4P|r9^p|ppI zb(i;3aBev_l5&q029EP%{0jeB7D~ncDYR6-ry+d|U(s=9v#ZycdTX{#SU6R0>2+z} zg`xMB6#8WStV3|#6_<90)T6t<*~lJnYXIthddo|BYSV}&V0|EUY>j(xiA2ue!W^B9 z7RH^zBoGN&+_5k8fQo+aECV0o9Beu&!=^15xD$8lL-p4gJ*afiF|%LNOZ;=iiae^m zCpL69Pm0hn(r7&9hsdsixPyqJ;8c69zh2WzVbut3npE;LwPKCY{}cW{i+wQvc)CD9 z|4}v0{GJ-a|5VL?euDqMs)pXei!d4r%2$F)0R;5_So{0mng^&CXVY$z^JUwh@N5vB zqUOS7F}$@1!)ime*)rSaN*)(XNKmS!RuqE`MUNu;WA_zL8FMOa+r_N`RF)+1bj(>G z#o%+b*{@mtAOx}Yq2DA?*CA1Y*ZtJ-Vh0229&$cfvjpdC0KcQ&;o0(+1u+9td{Rj1 zYQHAIC{=sTvC}z*);Hs+(#)1(M>J0m=i5)?1i^y`ck=4=;NTwDr}Kh%Ife|1Ody*2 z9BiKdX(DVz1Yh20s9J;=fs-{zlFl9XBv*KAq;3;l11433{k`Vg9^$9Tm*4l|$M=%- zK|(oryQm!#>9gC@oYS|F8L>QBBg{L{iZm7ya0hJ@ZKS6uT_75gats@4JGX2)r;_dj zF9HUN;-RV(BPw<{BzdhS2p6aRK&{vyMRbTZP^G0WAHF~5U*@(regkcTczXIc{&)ty zQC%RgpE<T#4}Iy;hn&)fK@`-><-gH~h(P{NFHeW(Z_0_mCV4q=0{w)sHObAemlNCq zU0C@9{_h?xM!Ei-oC3JL?zPCLQI@5+yr7h54kYwiIcOeBn0yvZk|NOjd$JV;OrAA6 zwVlIzaz}ISX*z}eu5u*)f}r`G&<f>FCt~4&nAf+-cTsv`YioW-$GY?nD=->ti8|qn z3F1dgU_HblMmY%t3DtwG8VsT?f+9;qrRd6|e1bQ49SQ-`oYBc=%@H0-&_jq61du`q zpQ|tE{cb8ASOTU!yNFvhN;5fZKnJ0I4(R&c=fqMkJ_26DTUaZp)9rX2#SOrCad4T_ zO)=$*OvXHvwLDVW5mM~tLPNW|G8%YhOtkEQCu?1F^Tl(*T)9gjJApN_KzGJ@>J)`6 z40)XUd4$MsJRbPpZ^(Tww@_Xc<o+yD0#Q^8JOysU6JG3-qo3GsrX#nDN{h7vo*=-; zDsXh(0;B{A1F&d+&c@^QpIEz;uZnQ2s^V1|;={-Ofn&G&AA>}0zzq}6)f}!NcWPPG zVD1!w8wK3UMt~ss8WJbWa^z{E)!)W26hX@G536HatyQ(H1WX=D`%aP1O^e&y?v(%P z!NtbjfC|jXHiMJ|Wr3(3%<H}&e1c1<^^}K4a)7g%T>g&Y-Gp7Mrq_44aJ5^J$9xPp zZM&7Z^I}|`$t5X#)HNOPc=4Vn_UkQUx!c<9904!TdIzh?0dMD3y`-o#QC6WWhEG{U zKx0jza`3o@@E;L_0~RGf?LUsgIYINar<Ep(AvyTh4C+?-ea7g63SayMiaywPJ5RKN zc+1P|jnWyQs94Go3R-fAm?L(RGW`mj|EP*#PdH}tkvZFGGQGvF=QgaQ0-1|E<Rz}X zlM$y7l5pgxE%0*-r%soTQLznw#*MSWZV2+)vwK@Qw~<xmVVxxwUZu}H{~poIn=`22 zdGCCK%0VAj5W?4zu}v9I{`GA;-b5_7=DvjJh<4u+&9DKZoyj(r6|f`XN;RVHhGYqv z*ZwHnxh^Mn3s~tQZoCFaH?kbiF99i+n}jPK-Pj20d`Beul9It%5EfSMQOytHa#RKc zd$G6ip<3n>d)LEQ2Y^uAygnO1jldGnHZThj<&}k+T1~7mdXrTF@9#uBnli<zq^`AW ze0=2t0W~vVqw(J)0H!vTuP2I|%jdj5?=4wB?uRL<JtDjyw*tu&ZSnuoOsh;Zh!iWe zo<s{93!s-b#%Q5n%1w{e@_aXdF<xp-rO#ij8eLvtzWkLx6R3+Q*TncXAq_u+Lz6-f z;U08`hhz<Ua)Fz*8W`e%XT)3>g(nn3?EGZ+@e>3rlkrDRmh5>c2~?@Ahb`FUsn!i@ z)XV~=qnMf0H%IR-yh=x-M)1I<|EM~v+tSPfWT1f=QSj8vG-^abRq`aw*csLPpvY>l z<@l>(HP7ZC_aoP6yjgu%YER8O6F>kb0!18ym0_(y+43<)6c|B&CH&~t#c>Zq!xJ&9 zlC+)mgGW~UmmT^e=MAX?UQaYFI`oA_D7uPHl;jp$G$X=*qZW728B5_T-8j^DbeG7F z;~v2LY1UQFigs2UsTHa$vv-bfM-<PGCqLi~vWEl&&R%J*eT8ppS!5)=b!-A6qrQWD zKN}n;%G%O~4DPH<tbemGB_)uHU-1Z7aAjk%*Un-XMj28gt25d`nX2CW+XXm_1!-`- z#X4L1VG(K2^h5;n-*d0&4#nY#poSlF<cFECPdr$=z1?esxMUwngIEVw-dNZ*GC+9~ zAPX*n6n$2KxgzHbMJ0g6`qg<v8bXfil}(_7SSmi<<tkC@<bONBGU}P$Y-Xm4Ka_wv zlL6Z2og4G_i_h{nU~gdAgd}SJI>ETL2;5CjWcg^pb)9BQTf|z_P&%yYaecE?RwUI` zi^YQA-cHvH(0YE_85;Z+oSJ@{7y!+UzLdp+Jy+AMN^7L42G21kW;D5mvpuR6wj85J z-I-a$)bPg(>#}npyp0NAt0IXFSLW>pL=c0@Dh_+i9nNK2l|f814&nbC>w#I!h$(e| zv0DIls6W0+X60EY^h4PdN?fDH9rXiRUL`$`k!nmyV_{2N-C~M=PRBysy8tyefje2n z3PpX9fiT=U$*3BP!_l-hX6MfSs0r9IM=bF3Lp*18dVxTT!h126yNu?yY2iNZsJ@<T zr#LGh1El42jloEmi_i}U1LY)F>Fw|dE2)U$w*en5?Rarvwc)a{2Gp_dj6g?LXR8Cg zMfdg~{(VA%_lvsbdPEq}7m?L6#a^+zA!+p5tP5&$tQOD*_mE%Sf@6KV?J8GX5zM1G z08>cG0e+-*V@^3$c%nnN<OBJfIUQY6)}QLRvw&Rug}L<<|I77m+E@BbZ?jj8U;L+r zPmxzamC!&jXj-_Uu-hvt&T6jFMBQ{2?C{gh`>E)T05iCZ%2@UGjPJSy+AmYu7^8K{ z^<LYgm6?m3)~-(6h1gu?OS_^oZYKd&8M`X_c^p_OHD#)>;MBa91+g-I{jcp0A!lo+ zYCE|y*Bygp;r{v8S1SiL+o0k(dp!^;Nw(%zus`<Kv;`DDI1)}LNGS=yA;IL?RR}e~ zlU+q<csa9?I*II<yYHyP*U1$hq!Fx58zs#Xd4k6>=1YvsU`Yn`jmNFhY!w}x<rT3S z^#V*>&Mb{C7va?8+#s=iq<^g)((xVAfg~VrXoOu*tj2P3MBW4DOrrvUnk{6AHS`{6 zs^4>kQ<S>xEneH!LScX}+@sXSn#OFX-*<pZzJtjfYb6AI`RYE<$QJjx&(NQ))^5J~ znmd7~=i394F&QRJd_$bHS<xF}<(yx*Cqn0NdhO7tdXRKFfn5CChsqd8`$s&Y?Qk3| z%Q^dnC8Em4d?vM7XvV}{p_j4E%syKTH;_$t2wFvm+(41}Iy#A~`e9mt&*&qRJ<T*U z_AAcA>OirpyEpo8RM#sFg?|wBh}i(Ed4aghV?}fS(L>)(!BQN|qOa&eJWpS4bjq*& z=8f>EiB4ybfKzI?FSi3IRP~B|v)%Su_rt?z+)$*-B6IKHVRnz#QTqwzlqGVt9U|MB zT7(xCFQVqULIpI@qV{iF<CK*Yq+WwWW8#p{za<MREz}LUAh0^jgbxC_z>S-O61sCk znak2d0Zbu*^Fm<W`L1jdf7z+15|w!+FwJ|G3{Dvj->x^6vQv>}T>5cBTEO$B=>Gvm zA<nKMEtdW2m0wY^akg!5_)o)XWVR71W%aik>rw%-XiQB{-t4gd0JKT=_5Ck~I<D%+ zW`AD{1cLso*0MpWeZ+1nnx!rE<MBlGZ<>PENkR72CJA-+Njd7Vg_+xI-pcmwetg;L zq}%7v!6}yVblU<kR^5>UUq|P%Qgf)inRdv8?1)y@yld)jp-H=C*DZf#9csLM)<?We z({51QP5rj@JKn8W<q1^HY3+;1aKG~~GrUUCxa#|3({3Nxrh8nk$LJ!mUn|({H3V17 zk74`Ij}4pwyh{oCSKrUZbCPcn-ZF@nTjcxdd<9M1kShT{vm^6$D~miHmwi3L+<oT< z?lCYLjsOHKx$_*anEfF314e#aAlW^ep(jV6!M=#=`SW?@m3z*%db%HC|4SKN)LYIj z?z+%@P#NIl_s`gSwp?;+UymD_1>22p+&PMc?a%FcGE%+s4(GE;8Tr^YAEAV4ta0a- z5r>z}QF~A>P1M<W&^|{-g_V|ty@bj|e~jK?AQiM9@)*qh=#CUvUFzZYr!~QSuUJ(j zG3<;T*v~JBD+_f{r8C@xQ6s~NY9pV%?84>=EReB28cUHN(=!@~{M;M-C*b){xbuIX zd`gv`u3d!!0*Yb+0%HE32_y$6GgC8jD?2k&dP^5uo7wD3yJbeKF#ln-i~vJa)^np! zgbkSWsm$62_%Nibo)O#GCC+ub_Mo@n(!1>HJ>?D*ejcg$5~&Rk6m1kjegRM4i0mHK z`m38;ygqC8h2-IM2F1s-{pfO@i3zRM&80ZAYl0gHY#sAHL#<doP;7jvukJKgKR>&? zblI`Z)qU$~lJ1){GSc!kR{V3U=V`T6^?skqjbH15ho!&MC1X^d@!nU8zp{*26i^gS zjs_?oVCsK|kzy)K^n_m_oCHm1E3`SGi%2+Dx`%N(T8Eu6(qHF^qE+EYidAB_L~o7+ zp@F(`S^>s9L+2s&4is%RX0CFzKDL(FLID3lxbYByu3vz(k|nZd{F6TN7@iOkr@-z$ znJV>!;wdODhe$hK()Lisgt>5@D@TM^mx8IYiu9Z1I>hw}MmgATD=@WDC&~2Ow*ccR zpjV9a)VGyf4G&ctFn(I~)&LITcCP1R&JT&LaiJ=vlpUxRiJ;9^=!E#8kGD#Rw}DT} z7;dmtbPe1;gD8Ymf6-{HOtJh*W|ACT^Yu3!GPW;;CG4~C#Qz$CwtD5!Q9Uk<k$)6T z>0X$`W%OaHimb8Q>B5gM#m+A3*@c)fU>m2q#&(~LS+|dpJ=<@=EdPnXYbta}h&lJm zcp|Xf7B1DP@PI|PE9Ct^LVNep`Vq^1rH_v*-V9rI$Wm9xWD#7c#E#>IMh=cVUEnW) zY{pPQ)DAvk+;(e3Vk-tXZznrnOdxQVUK9N+T|Eh%qDjByaF&1v;$?i;)nES7i}13= zUk&Qu4(Pi;yO2w0^R6N%)IAgRxA`s1xmu2ZEa?U{RK8N`6hJC6M8R$gkCbNzp6gz* zEu=~mFI5prW=yB1qjG6xFM_Eg61cJM3TZju1$5hWh9_bnVl?M<9cQ;RjyDVgNowM2 z8isFDG>m}0kQNuq7s53T3Lpp-tC#Cg%sLZX&Zv^x&e3Z9gcj0Y;EyE5k6beDsh$(Z zFH?tYC8`Do9YS4uZafq`%Sz;UYQ1a3*UP^M16Zw8BcS(1Lxv%+vy)aib+pLTAyAio zXL<bMyx&++u{N{Fcu#0{7J3uaULI8zvX7XJd<v_J`yfJ)Es3nj4F+8~S;vM5Cqb$Z zVU77kn*4*U6987af(QGDI5G1u=j`{mIM!4pp%d0ZUP#s)<8>vZ$P5Vz8@*4u;}D?P zvuH%;qVW1bu4VC#bSAL-jQeT5clMrHshC|<<I#hL{!!CRoP$|R?qdYD!F|a%{nTVU zG3Aii-JHo{)HfloDJN?w=GZ4ea&D!d-GYgxF{8a%*c|h54(`wq6`wV_F~_~hi5%l` z@Eg_zN7k>UkbaNKi9EBP3-Yy|>LX*_0?rl>pMOg2rpQ{L|L5by1mz4l^oy=r5S&Gz z{x&i61u<^c!x8r6_c36_zkrrONNZ9WdZ{dcmY&Sad?H0T?L-k{o_J~rWa_#mWwK;z zQ17BKQ|Mjb46|T1W`wlJOk9S1gCKEej9<uo=3vXBGgRLgw+mBkX0y|_`OW_H3F+0S z<G1?BOjht%mwH}G*3BT|U-q<^;_Dv|r+(A?eRuG@{;YJ8DPdkS^)b_^I3(CV$g?vE zm7%osLRvG@nd(zZC<&!C36-T=+Cfe<G-ldV(=vi}Zqo!3p5D+?fLq2NAWw@q=}a`{ z$F4l>sVS6{%(X{TWrBfj>XY2WKyA98!*TiHaz99K(De@t3PRp^zEv{opzQK}9VajG z<C2JuP%br^_p30vw3?2K-91N#QWu9(;d^^%jhtra-6(tqozQD^0kv;g4QV+IdW>d! zLKNxtf3;ks)tCZQ=WS8%H8xVI#d0SFBCE|j4L%Fz;hv`C{=f$t;Jh8V`F(MOj@9_~ zcd3Gs?0;PO_p!FMj7@T<qoA@%f913XOTCm#$Y#ioL}mW`ji?l@`TQZan@4B*^EZ3u z-{n@`<7TC@7K@QK^0Yr8Q)&dA$KhSt5|wlpMnlQQbt6mEqCS}b7l_)Bb_WVfTX|oQ z7lKGP<YM-l!0~vZ>Vdm2&uVbh+4}`sBsXc2^HuYz^Rtu($R*b!|MT83go}&S@AMy^ z_QItD2O{s(-DZrvRP%d`D;13%WZeOcykU*F<LSQ9{J*v6(ey7Ee!p`^V)Um@+F0iE zo(wdS1JY)Pco%pst{qP}A|l02y_ODqq~h0xxZExKN`~_M+&?3NXU)vDIl9V693w#U zp$6&1MNjM$O3Z{uYM+V7v-iiDV!H40!U}t|v=H|kQQ!~X^aD~AWlQjqU>$%xZw%=a zCsn<f?&!aXS1eD)82M}q(&2d3Ougoh2Zp(4gxgsj$+8<A17?HGTbwiG4PXI^t;NVI z{2B2cqD)+M1Oa9-LNBUL^emf;q_}v(D#$sM*&4nxBIWYrx<*QjW`C6j#r3-#y|qXj zydo1@Yfh_*U-nk3IiJ>su!u0rnl5pk!!;FgX>C=NuapBz*(HoDfqu`ZkJj-P5=4*< ze@s!p-q6|x!!jdrT7n-k2@TM@FBQ>Opg?$D3~noyhi^|vW15QWy)pVy7a>ihjI;Ue zO>g3VDB2S_y!HY!<lnw*aN)Rn(|HNy0R2+hlc@TPqtEB;Y3fGK<NQF?;}yC~<YI~O zB~=~Y6X;||_AoXXas+udDk)?C4YBC8Fuw6Nn^`@R)wLA^%S_(TP*{e;Vst0SAHmY1 z5G3=-n_{Ag1+kXF&a@AV$m>S|A}g|p1fb$dEut;I`&=3tK!iE&i-RR=B&7g(4Np`B z2?A5gZymecun3~h;8E<t75jLT&MaMAR4GvbRiMhx^;N4ros)emM{P!j%5e;*qj(;@ zIXPNA@$5U%Qh79%cwCzf4A=Uq)Q(bC%W~+YZYEoin7Spv>2!9;w!O7$2-{&1Rx?6> zDpIDyidtyTpWGJS>HjBiXlK@)$HEZ0>{$FA5C=aHgz}7TD0M8E3??8O>Ck<A=m_!# zn6w+7{Zrol%SQg+wQT>Poj3<c)Qv*}0j0140nz=>rX(jbXET@o9+3VxEi<Bp)$daw zgau+m<dy~kNkLc+_kn4*8D+#7)5KPoU~5U?VA*+~)p^1Ygi`EFwl%X3wr+!E1g<YS zeV(rw1HM%R+8=$qZ}qyt5nuB717E7U6$tEtl^SX|Qf;R<{%k_Cw9Ob#HfhhpF?uO~ zaL`$^;$#*_O^yb(zAjx%_H~<qD>Le3#ks_s{OOXm&f`<LRXW(am+e&`16J!56o6lE zFk0VAUP%V$dZ`3nY!CZ&p16W+AGl3IT<{OFzAZevprm_(A5>sB4CSRO=}i=9qz0;* z5;pj86ri19EU2(xXOhNoH`<|qFD{#%9V{Y~uhS)N=sKx5%5*PcAgL$Ae7<zT?rxw= zk4GIqkl1&-)P;Uh!5oO!t!lta+#Wmtlp9Zn2Nh_$p=Rc?!qTp_D`CSZyFBENBc#@d zw{iNHzbJ!xpf-70ddczM-X%tMkU|uI?kINBcF>0_`a2O$D&x0o35W3YFC;e;gd-C} z-%r*8V;euX7;=dJ8jyY^T~)e4&~#3aeyV1wi~)STjE47L3gYp5tzhu358=-ccy*X> z2FJ*Kl+5PfB7y2QLEt+Y9M64N)97vGbvlt#`AoogdhEACWEi&V5@z~c*rZQYoMy(B zjF^q)i%VV`T+yjD3VqO}H432!hlma4FBH~$N)?{MgOJd0gQ41{uZGRmEzC<UycpE( zV=M3-8(4y-0`CfBwgPst^es;+zID<86uMzNbtOY2N$^yR3d{#h0cX_+ASd_(WbtwI zl}*(Ex5w3znpr*MHt6X?fZ@hOhoc6Q3%BiK1UGO-RF<4<#7N5>BYv+3PHo#Wg8SG& zPT2m$mt?HNm&-cR^6+RnV?0bMUg;)1bWqqLe#gys1XmLzz8lg>zLqYy(MUtcl@byD z2{RYOq)@va#YNM4K6h8>zAN5Wt;X-RMwY+$ttkhXxn~^t-e}=Kqtln!fqV2022|xB zf2o@=!^-l4!4pkaitj5j_e}<AQ_J$nRJH}qyio;X;wD9nS<PP!MM2IUfc1kst2+8X zvl`Zh8`$p)L<aXIH=s#2M_idA=&_&4wyXqlp1Ppzy=F>Td^B?*_8cQ^4@6FgsNl31 ziRcy6s|w@RFn_gmQ6>Ysb~g+Xn;zw^TqTpN5<V4PE|FlgxueohLQ_J!#6NKgs7i>I zi@?=^zDAsOsOo~-(C$b`=&x(mV7S(4wSRUZcn2-B&E>e^1ib+Mxad}TCwG0hLnu2b zP*@$umaRfaHK1Pwc#Z(3!fdN_jNZ+ANuGY1EiRQ6EVH}n6!0L~?6AZ{{1JVO$9H+U z`nY4m>xV&h$xK8Hyv?uHj!kKZL%A!^N*;=g1o=voUte}eAM5r=@GP9IY||wHSFwi9 z^u49k!wFG9-M;kJ-tL$PV2<R2_Yq(hNb?$SlgIvJ7{o?Ytr?;=jT2jrFRrca;%HM= zH_#`0K*L#cq}PSz7~WT}tBJQxLZKTnbEzJ|B)8(vFg7i`k;AX#x+4VLtz0_feHF2b zfS}gYly`NrF?cTVT5`dN-dyzVE<B#dlB|@@-iS`ho7}4uz)Xrc@oBEAlQ~3hTZER( zNKYCjbAQGfCf077QM;b}QBPhvOKXOEo<N{H=ev=JucM^{WoLgU*uN3bD}N&#k6r(I zn`XssC^Uc9-}f&QqD%b#uE{5qw7H|!ZZP<~`)=0cLD~#ps=D$=P>T=TjE;d!Ivcpj zhnmV+#5|>`DWu5<OGRD2peHe%IX7jqWS+N=k@5%fOSmO8F+;p%%ko^*TinbLHGjyp zx#vmWZcxS8<W+dKN4>)+?dLitZ*M17eRd;Bt9es<Z7Nx5+2W1pB0!RUZ_J;!Gyh?J z#&z-m(1W9r_Kz^iT&Cg@r8yOEc@j25Yx<6sa@>=mRa%n+(v*bB+?=9QUa&PKlc_d! zK}Dp|ZKhDv;|BBJGobIJbS4J#YgeAu)CLu$bN%Ug$<}DO;}%beNvrnvczbTzypN9? z+gPo==l7WN?xAlNd50NJUtz8Y`KcJG9&v{DBqoPVr0KER4}2b&#w3IWRq9Wg!!cR* zUF`^PyINP{LHAVtId$fF)v?p}wTSe2-YZ|&<i((Zcvr0x6N8TSv1T?;!#JcHVmjjL z&A!QF=qD=D8vWi)>%sl)B#B+?VQnnpI9dKJcRmcrnnGhE{gIgHY!edw=3q&;$`Sbt zx$!LRx9^B7@#?ofvOO(2)Ar-P{^U&2p2j2la&6n$5G}Eq|N7tUK5`g$EKaGZHJ}u5 zgDqeRmIsJ>BvB-*38g7DoX=>Y=E8GxJEXYxpHd*MB)k1+tL1q%+^ZfZy-1Lr%Usir z2W$ekYR0$zvJPP4t}mvVbbpTX(50q@1ple_$#(_OH$%P+@x6%R2%@-COTSY?eSfgO zPw%rP6Uz6X==+^J9z!^VVRw|r_h+}R47fI{)U03)uza|sfTR*TaaD4BoYbcWd%9Hk zo&x@IZ!!J~#%+#K=32d57$<`7BNlNZj&pSLqN-gcx}}Y1+=czk9_R>}zwAJn)%pz7 zCs%BQvWwc%2jNWRZK(iu(|On`SgLY8xz6(ut+<?-J@C{3uHXr2t1<qni?CBuOxux` z&9EIK2V!&Ec9=VS|J14|r|QiX>h-VO23ch$zM6+#`<C&qrqeHu&1z3}UePjQUM2SW zlNcGr+?n^O1H-A8(jd9*kY<Qh^|L3KvXhp;>bMP-otoqc#5j`xg3Kv>JJ#EzfInwG zCM@JDU1E12nkJ3Zj>r6uinQ1O34_;>znJDg+<l<*C_x494*k<9;OsCD3&X37kk|f= zOiVLl1CvGzES%84&I1?T3aOke4zl}7V#4be*G{{GgF$3|>!;%@QHV;SzvWT)*G`us z)L+@Dmc)GvVk#ixZ5JY37md$G8uu@iDS|A=aBWf)px?*u6OS9CRo2#~ac8mT%J)?I zKc$d^A=uPZj>)3&rXU`Un5$lo#T;dzjSaFD%L#joh{W&u1(X$fL|mi<Nh_5p_4r#E z-66s}TL+dXCP{V?ChU_YNdw6$K6|>i0r(Nup`9URUJoS+4Je%jdc2^x(KR^{Fo;)b z1G^b#3Fl_jNgd4jMuONC++xa`qD=;m`9H-_zbEPM>n%uLU;eN{+?!5+F-3czY5A_u z0sKN)PAAmZ<w-%Gr{m8k;K9-E2D-89=GtQ_`W<|q50v%rjyQkwFK3q)`IkiFIR_R8 zdzdQ@iDmyi)Cq7$fP095lED7Q-dARdv8~)|uKqj%i@*O@l4yFy@qhbf7&dPi4*z_! z!G9>df7aRm1VQO+;$&}QV`XRY-&5hH(~=<8c>Ocg>X{{v^iUzCnxSgcxVBQoYV}+a zZ3DaM;f-)~90z~Y8h>c~LGqg|0-i}0n4(1v`JdtR-S5`~vUi<cx4W*z_l4g@7P%VX z6|SFecb=eDT*Dp)zp=)IP6y`Kmmk50EeWh7aV5`pIAR_joxgfYSavwL?PCM+HoU_U za<Y`$OG*Lt>T23w7pWHkhOluORU*Vp$^hr1<%l@ztVuj6yv$_ObW6&PDyt-2NrnSZ zQv^m#(N*!L^lD3ev}|sR2-NPfNZ`XIJSow_sxZ}*Eb;IT1vtsYg@9yz+dPd9A7)aF z(XPp-#mxO&Tzz<>r#sEj#r=495?2PPQn?Fw^M0}zo&UII;dOFVVfp`Y%^D-!9|N|~ zghllETO3BXS}JR&Je2BrOGGdm63Z?jJ|B@((T9me+%7<(>OgoqdTK`Wc&hGd*5Q1# zYkmXSOWHYIOnE-Vd&GRH+EVwPSjU5LSi=$#hTh*VN8CkzD_OciU8!x^n8M0zDP5!C zc22T>%4V`1dii>pj2oX=LgDvTJ7ZlZ<FDXym6gm0@pPX>Q#+f*a2f0CD8g^Ace?Un z$+Wv!)NVmf=`W4|<NkhKtZjFTm$}&KLM>~To3r@~dSo@~v(vjUlw$|`S{Y0hSVPbT ze!tXT^uH*3r|?SNZ(TdK%}&y>ZQD+V9ox2@bZp!1xMSP4opfw;^3Bd~{g?Lj?Y-9F zJeXAnRd3Z@&$!2UHz3tahctwDSW;6L=<3PBG+8I&OMnyk7ihRboP4tlPLZnP1D)mu zh2|SJhnwW5%19wgrC)vClNO)@Cn*z=zHmFg=%9i2x*c>>2<B~qoQG($wr%%HJDp_# zqeH#xla#`+z*ArcJo`o;UN}!aVS_zhIy2yN)~}s@>(l<VM}#j=JbAHd=v6vt0#f>1 zoXm3KoFi$qHjoUCY^kYpTOAxRan*XZQ#z+W8UeF3h&lnwMsEL24pV$&L9l3k3kCAD zA{hy?Ri%n8(EQMFauR$8)|?hs8oYzp1#>n-$C-ufd$+>(VT*>f(y3Zjcm#1mg-|<n z0SU4XW;Oz7sWL{~pTS?5$GGmxv&;l3DmHiK1I(dWtISs&-Nx-gCFa}htOudh<eP(0 zF3SQR#+qm3=KP(#90)dozIguR)+K8%gPvJvUyc~#QB2bpPA(lu<=}H6rgh=O;f^lE zOIcAL_>TUl=rQVGA;p_~tN4{uIdD^Zpt9d!a{?w!d)$*clALzl2HlYJ()d7z=CEKX zwDe5gr=ft3=IbPhqbsr9M|!?|xclJrr2Ua(HQ>BY&wrMh2_gjKDSjiZfKwemmv)Ln zcx>>^><!Q!XCy5Zyn`CM!;ea-O2x8)8`;xRG7A?c)}aY%@W4_^rzl*Q7RitqgCdso zsX`ol<mSXQF`*=cC1ca3nTd<QptgZ+%tgdaIe>Qbk~z_rAG<ofdR%W!o={%w=`B=> zjHkOeYEjEe$;ND#*b_((&b$L)Mz?lqzRCX1LI;5o;0$YECs1+;(-?`*15S)l_Y1<9 z@o#)3Z7GmkCsds5U<*ImQJH97L{kIYvO?>Lcd)@q!QR#P2D;x7mc&G9bm+|6n3%*$ z!CZ4RQfSpTMtGPR7yeJ4HCJ>2#ElBbvoHyG<nh@^v;rb#uXs<g6<a92Ug*m$NOiXA zN03t6ys*3BeW%3#UZ(J-)r(Hdw&Pg~YE$#GYo`Q&GE!wHqXPyH=fXlKI*9l%Bc}uM zQmq{ZeAHS>2WAl(rF~+DK*@-!I1Hhc`?>+YoPpO|Z^xFdiEZll;C1?7M=;tZN%0Ci zEv+gYHIN1CS%MU~Q;p<*j0c^FR31Nf#iUC0kABea`V@wZY;GBe$&l{)^xKw58IJ{- zi_&~}_p5w;*pBM+luDsEQSFYmaP6O@5ED;&+l5kr*4mMxSVsPK2py3Z=<-DNF8^## zlJuml+vlc&POR2JrWh*XFzLPMQPxfZt4^PGYYs-hmRle#-S(CODVu~53c8Z<mhB9! zV~&0q?|mA=9*}aCMEo>b>$TGS6t|^Wi)C;$D_<3nx+A@^?sK@3@P1~2GF_(=2GUWo z`Nh;HFx5<?n4DHj+M^DAayak#2aMzM#x*KJQ(Thy2A)f}F)}P4a=_M)u<?y-iLszC z&ox0Awmx|SEW~YIcwzUBI{fYg5}d(n`~YlunnI^;hTv2~`6iGgnZ~|w$7{?y6K3|1 z6L-`O18s|h1Kt#H#4|$JjfwFTtHD9wrqwFDqo0|b=;dV=L(HX1dVIS?1G~RGjMl;g zAC&%vS=V22@j(79%$h7Lmc#h2um2flnV2-Wduq(NdW5GnS{YRo92r!p*>5WZGYZf- z8M`f<#?<DL<s&4at*Pjpq!lo%16fq64m9x;A%u|zzKoieuWRI@-7q7$Df|tyWK41% zO5w}F1hcuPaV(;KMiJVwIK}3``|tHdmZgTo7EbZL8S`(_9;|pmX7eq5xp!o#cIWjF zq#*!AS>)wjeboORWii*d1#HuiW1RR8O~4osz%DRiO)v>Ld%u4DCG{C;2^M0QPV@RS zAm7!RW<kUhFo}8`s65hx#X$2oi$nByKNCi)A<y#W6xHu<2lcR)$jZ2NgT`!?0nI6J zh;$@oN&(Yi@pSR%Z$k#(&<_R2Z`<&qyYWO7q9Bo!zErYrS)@RFjI8_5_A$&3v5(qB zM&}UIqbvI2Rf?425PKS@^XsNo3Fu8|sdJX;ULeZZAVk|ieDq-8oj^ZCb)U*F05$xi zWv-y+pjo&HOO)lg;y=o@_CD(Dvg4Zuq0~Qd>{a5$@}17h8TkXUzD8ZQ4>}mlYCF<l z&g6On)RT`OsH0~?N&h#{daZ>=_woVG1_WB)i#k4ZuW<h>zWDZZ_JRRM_a34G0Wtp% z@x|D|#n?gD(cH-RAAnJJw*|ynAD(~E$Osq1X;(P<7gW31=<MOR=!jHW!q?m!clEe= zQy(_mr(EKb>zJV5_0rSt@cFyOE?3UKbGo(pz8xIL^6>lo`GM!{c5^zw2knx7JXiIH zf{TOCE^=+>LI(}M6Ivn`N0}!q|HKJL&Nf&ns$lO?(SpgIdsggvIVfB*K&K+GLC3Nn zfhoP)u^@p_7`puO=Ot;5Q=s}`$brewI4lOzM-?s>8#Bf=QMhtB3-iWoq{{_3hUnE> zA_ZBizg!WMy*U)*f*+w2`!+UyJro77Bs#7$=J`T!x+%>LOQf-Sw%7x29S#@H4D@c$ zl|E)~BOH6c{X>!4RH0PrS1Yl4p`UX5925l;-x=C|HS;WT5hf#kNtW`L_fD)W#f@=O z^;;o<>VtZ(f-XfNrAY_`k%30u-pMhB$N#Yf&2A92)2L1k;z>PbH~?F3_5z)yAP#>z z4N3PPQt_+JXgEAtt}{huq7N1S4rrO`U28uG$0O3`)VEFoeoN$#-ricSrV$l81)Ic! zT1DafmJK_}-Rjr4q-R8C-uPe;)z>QeLh0&8_L>*X)pd(@E6<fE0fJ!~HvzV-h&ZP9 z<@JZVow#_$x%4ALJ=||~>2szQy(&56zcHhIyo5}>0sHWB^3D1<<C|BoP3ImJ<Pvl8 z=-1BZ$6*Kt3z33VjXS_&>Ec`O!Ihr_MM4(91erXi9{o(3YNkiRqT&n&Uy?uzNRLxl z!9iwF6E<6th(wp2h8ub}AviKR(+7McQHH8*<#P$AjYG?~3K~H02~?kuc!4-A)l&Q_ zjs1O6o2%&>s7TqbH;S4NPej1|K4@`9sEmL@cg&6Dq%@D+7>lf@Y5YpNafUA_X)J8T zbv1wzq4UxFLQ>3$&7@9c0<KDcZXhQ$(aqND=%8>(#w4pDhav`E%9&8vfeoGuO{^ZL zS2(j4bO^0sXGpbB=7K|Zkgo9bRXXmMGb{yea?n19@sGI5d5B{S4bTW>f9)?-s`D2J z!z|qlxd!IQZD5*UG=%iQBev34%qGd^`dRr8*#!w#N{30L2#h51`uLU?-;-67{Xw^7 zGo{La<qQ&W<`FJW*jWN&Z@*BM2B?9~n$Z^6pH4L9G2SI=n5pCHnc<Bwg~m1P`hh>l zHN-7#+gNlpvO$ZXZP&x~#h@GqvC&Zw_k(d)Sx0ql!f-1pF2Qy3V+c%@`G5c6ey&AE zL`mFZg4d=HN+&Nd-eTXuW=clIil9WWRWb2!x=@o9)=HJqwCn?qs0!Rl9F)1*t)}m@ z;`<u%3nMUiSg@dM+&aH#3`de=?z#9n*qlKrAV(-ZikcJY3c5sU#$Dn|3}siTofYFd zpOy`H0+mLzG63MBQUaNMqMf&C!N0*r`4nNS>bcZ2aZdD@m((egl){f82+B}tWxFS| zMGeS)z%Z#bMw;vy8um9A6YWR>A!@PNlb8shu}J1>w)WWQb)5waE<EPJ({!q8Q}5t# zUGV(WgQcx8JT=Tvd=ikl<Q@A1(U|pRO3-}5YuDoy<$T!nwrNu{pFq=jm-`vTvTKXH z$yZIqEdczfbd^Ow>NaQPPzHoDlPGzAYa85gPRs1#DS*0W9BCYV5`+FxS{CmmZew1U z^2!`>pu>aPF|3cK|JHHZQ;0PtZ?R=(`n1uy^{2Hy@U;53qFy*R1b-$S0>o-0C9Rcc z!EFiHfi?&*DQ|||Wj~(b2)y<kNlDR04Ln@Gr9PQo)kJW(ZD~6u@^cJq_FUdUQQyKG z+WVGT*ms$eIZ)}q-_Q=UEjw9w7Acfd#C&ZA=z(=8l7Awjne5i`FNe!Z_Nk}mb95|q zQ>GGsi_aSq^uW`E=4@hTBn5AxqHbo&UjjPAVyQLZ`2|a`JztMsZLLfYt?BmcREN;X zS=9<o#|3jz*L^n4MFHC9oO@CzCIkX3#A=0G16%e?@PHs;iatBS-QE$4NFP>&a&f8$ zo`;%bV4TsVzFMUxSjPZNxYoh1%TDLJ^fV#57oar=t`_O*(DiiSa6ObU&}unAdVzLE zhjwO*x}|yX?njUXl`vz0{JO+q=G(0}o(Q9v6~EHk(`{0xB>1OZH5YLQ3kLSwx*5cW z20pmY1#V4rZ`bt#g7vu@{tTV2$c!#z@@q~{$)AeekoYNeFDk)h$J11zOUh7~Wac`| z3pNzlWrclItLfKAo7k}Sb6*78O|$*etGs0$x8|LvVWL0wdf`WFzLwirU2IpIq;PP3 zNZDJOM{Gk22-b4i9KUPVubR<5h<gxzFWbKpnsC~Ef#?+M7MP+gLw5RRrp&(_*s)<? zBAQ$i=9Z)0UZ5Rg%;+oe1s0f)zD(*$-NDh-c1d3xs?)8qRCik=i}!bo9Y64YeW^B2 zrvt71?_3&3Cw(VlT}OSFe|x89XnmH7a`e%A8Kx2XCyV^i;^C%4UP)syMwP`Ilf>q0 zBMVvJ;pl0CO;vl8)S<=evihU!t;vB+Qdbubp5|&I&|gd3jUVqPH$!b8c~?B2L7X26 zI^9|WBjb%bYR=UcFE(vrYmJkslNa2L2@MI0e3$A5_i8z-(;^A9JZ-D|@mjT#V>4H0 zoeB*b=-Iz%zTOla`sqPNr=)+z0@8q3AiD`J!#&=uj)a_#QNeA2iG(wOYnRsu5fBSB ziPZtJ2d*E|9e{~IYfSxq_U17p`3egHR8nKP!d@~o5{!UYz{fIM?FkSIAPf{wjL(D@ zP0?x#t9yHu@1|afZ%J%OE1kqYAUJNJ4C419bM^^uk;+mJD;fu7{u0^xmrR2Z%@N9W zuY!$#KkLnP2aJndY~I5km0PZkfL$j{pdf?3y*Xe^%IA;(GxcMlyJR38<4SCwt)w$k z{3A@>KGs5}h#llSZrg<#;zm)OfIkW<CzT+0CZxM{*MgW^eV2DZt~NeHrf(`ygQ@yr z&Jq`)UR?P2ST>>0EXOMMeYl>~_{-|Dh^|VSbV(|4@mhf9@#<hy#g2MwEvMyynEFFJ zk;}^TuLzrV=hyE_AA?m4e@e+~NqD`a2-R+oXHIly4m-x`_bNH<aOAoUksZmx08OoN zp*vN9&<E4X5{M?m#b0))IAxl(X+*}3W4=Gy$>4Jeh~IGxcQtU(PNxb%=Rw8!o$TYE z31EoKe!E-9oxKQ<=p$y0+7=>zIfpbOfm(-DR0rok=)bKEf<=@pb|8X1mxBb$|LRhq zCBeY*1&M-}Fw8BwyqA@-5(ADKgb@LDh!R}|CMYi5QX=bxDlV$m4hd7roD>grg4JRC z2|5wj=~tT_IoF*~#9nMO;e0Gy43wJ2vg5X<L~%7s@x=NJ(&`A<H~5en^;|}KZG61R z5lR_QPKAST>TNP&&)iX{)KkS_KIfuN|CNTf)M@%-%5W}IGMAj|JgyAq4o&&_c-s4` zhMjjl7rd}#rqPg248Ep<GvcaHuBgFK;o!^N@VvkY`0C<Jy7%~sKq>RC;K`ZxY3ZSP z<%$!%bbwsLc&9~Eb!JeO%ieE7(@{`C94q1HR$G|``08~0Efd&>3^h-bj)W9H@)1cZ z5TIny6k-)OJZ_KR+z3hxchK<2;jFjfpFYWQURH7l7gy?d*cOReoxNF$a;YC_vt*ke z6%9F6Hlpo>@9}%{&@1h@7~s}W_o`|h`j1B9I7H(>{KV9|+#jeWH!O*ppJQ^xV8jHt zH92+J8M86~w?=YuJ+~Q?5w|S0IYI~n;MRcb31Z&2E~rd$i*hnYJa6B_I-z~KHF#g; zNN(9t|0WSJ;oiN|gYTOKN_%vz54W#1w*0#SF%-Z3R<O%c4+=ZQF+4W78RiD6QY(_w zlt29II>C$!C`ctTK<io)6N8Byr8J~-E3-us8(}G$Ba}=M93T<PhA{pn5xRa&3@G(s zs#vrcW;J1GY!A?_hN`GJ2N)jV*2g;Y47Mpv6Q^BSbIR+XJLM}9sjMB70JSDFy)z)| zl`;A1R_~QRd!2s8^t6@3owY_hG0AB(KXL^vi%9hcaXR44uo~I{b()DxHHnR+gqEU2 zj?yiSU<ay-qwPwIDSqG2lX;_V9#9f1w)EeDZ{&KV($MR!TC=rA2T>A(mu{_;9=1hM zZsmqWs**ph4NLZvef>J1t-LD$tx$$B@FVHl@ho2Q(Q>7c5n->X%8l{#Hp@yQ<rVMn z*$`@DkZKhwfU3$uknEG{soz?;Rn1e`jcKc<O{+(vrq^q%V(XG{j8L7&bwYwog(lr- z@;A;^V}w=1Q`*{KGuLjOy4X*%=Jy6&PM6%LS)=_2hHulE&&xr;HF;S*<;T|m6L+Wt z7lxH=v|#Al@MVU-=1fXh)Q4{Wxd?K7M;B#es&xN((3V`(U^?{e4|RZe(<1V_4>$BN zF}tA95_qh9gW5%i(PM#PNIX|c9ac@ON2hG6H@k1zhTa49qvVYxUhJjXcF1EIjac_@ z6e05&MO3#lF;*Upzp?}%;!e*rI<~zXwc#fvhk&kB0HO$B9c$#vfX|W&=G6k~(`lL4 zK=V`hXB2VSD_><leq3Z_-gfnS<inX2)@-Aa#D7!KHU_p!aGd4qZGvh7DX%)L>F%_b zWU%-9#x*fQNLsM@25^1o9ug!VipYr!>)ptf9E%LoIujgc>qAt+a@_$$5ythkU%CTn zaEh-xfa>$YihlbO!7)x{Rf1DxSkRMguIL7(PpqRAm*C&U<140QZaH#Z{Y0prKJWEf zF|oqYYhH?SK{%RQ5@P*k?F(^_GcL}P9~M&qSsj68lp{@tZn73r-$TTL-V<Ku-gwmR zeoAr(6A?hUmIA|edo{5(#^paJJzi-{tcKqx-MrDC2Z}ie#L1kLw`9iOAF#R|2ik_~ zQr4}M@tH-?{1s~o{}F2>anp_h;K06U+4U8H0VizeZ^yv~^4#aL&SUGdvusb$IGyNs zb92BGjW8}f`JdSzKDXt`1YS}+!EDUfhZnQf$WMi#5*oq0NhEE}959Efxv=*#i~HtB zm_i{`ONQPhNi#)u&^HhvPcVIT2K^xUWup9#T0;lOApjK>dkaer)9M@lQ-|_b!yaW2 zSX_&8MpOvI{XmY^{8s3v;h{V{!5wg1Q>o7&A`cKmu!uNINf!BGz-8-dVm%4wy{%B@ zHALMZSryJn+;%E0$~#0B2L;adQT&Y{<f0yOzGnR}V*r#?SgPUxC6$~(6KW)m+evM? zRm|6%`ivaZ%&G9EqwcfHcNSW`uw2t@)t^e`&PbG9o@V=Wg2d4sZ9OpVQ&6mdtdkK^ z_xiblQ{H5*)W#n&nBiJkNjol^L0%gs@B3c@7H|W2`qmYTrz~2O5Dc`ap5COmdHoF= z@XkIcuK!#9z`mI>i~ta7E&#QY|DjOhWM*vr|4T`UWZ1dz3f2C_3fWvgsz~yqjY(Rp z_1yF+dFo-3d!;zy&q-_oEZg82`udybhH`wgD_8j^EV*l%JqcRz?;0L&z)vsuJ!;#c zJ}JpsYf;XYd>pW((Z^2PnPM5^XS-}Q$jQkMB`1u$%<eZei8)=^X^1!*i%ukl%yg~G z8y*&@Cy;v(@M>6wL<|bcQ-(|YzBK<QN^<&3Nl9G07<J;QuwS+O@e*-DqIZ=pq3m~? z;1~_QuloOE9Ghc1MTY)0j-xoR8x8@+F}dNVaSRtt<85<-(~Glh2r!NbygzFv(yMFZ z-qKjEP~!V&G2SUGRSe=u$PT+G-nU`v7`*~q1e#cO2-d600HKB&@pu{1$|$uM{DUQ+ z+<?<)9Kl<F@ta@O?U>ZM>&VWK-+Qf)2z4=e=+~=nz|zsfShEAEjGQ-6L2pl#gkDN8 zW@QF!<M49`K}LI|d8TO0+Qk5*8b*dSbUYn%H|E<l#4E;`%VzDZ77bXd65-|_lsOdF zZy@?v?bZ^9Ph&4XLP2*xHh0BrOoye0n1*YKP#?$`S>T+|XOv!<C%C;5&xBZ2RX|@p zo@6+VJZCLP>tuMocwahYTQ#NGf|1l=5Qfjjc2S^Zn=z=|hkw;%g%bmR+HAWKE_IjF zp@?#RDa1Geic%6m_eBY@BI7X^I@S^nWQq4Kz&^)L|JXox=4EkV#eUI;BPu!2B!?4K zBrADmxG#(~a~pv-<j&5yd!G0^srX4#M6g+~D^FfDULGHQ$g>(o2_;va!ft^L)asU~ z#k{g@X@Lfk+|ry{fm9ppZ1k&zO<%Cw-C74S`kda+^-L%*eyYju^V#XrwrOX*QE4@v z!5(I&Tn({Nyz}G~Nd1E8DuxqL$mk%!x3Hcly`UuVaPH$oW+EI$A?&If#gqC$x!r2b zGr+l4Sg9UOxB~d#!wX->c9J!jySuXk!=&dqP)z1-P^)|eV<gvS(?CE6hfb{)DJ>2Z zBiiPPC&;SL42OU>lNH%My=2`-)@-gQ&&j-A*X#c2p2OA-%90r9zh#_;EfmC4YSu8w z0=cTT0`o&+gg=6AUq9Jtso&!(fSn2qvGS(*!z<4_cv<$B)BX{Yc~t%plfwXFGS81? z1Av%}cWMFoS4siEQ|?h-F|+JiFeKfh9*wh{_g^vDkxy}#7p`{V#kyhfdOMu0CB{Z5 z#=2@MCEV6R*ojq*eU=GP#biB}d450Djp)He=l6@lZ<cru&BKSUhxxw{Z<QAvmD9^I z5t&EQaPKa@nh>Mk+9(e18f<Fm@f_!O*svzu>L^Z*8}NDk0lDuRiCLTv7VeKTdVfJ# z?<zh<H6UPYXxj4pZm}-T?&I@ue=d%4%*aCt@f+>i_)Xnkdg^f1D~`}&q*v3C{R27r z0#1P|N-4OC7rOu}se#2*0$`WKg@V*N7lZ>7#ZfCI8^h)5+Tc$!IiEJNpC%t&Y>aFb zAo@gk2VA5r6iqq6cJ#A3(OaatN@tkde-?5I%oeO@(pWvSzE$yXvU-ElLx-p{MYDbE zjr@uCF0PJ9sX4q)t&5k_NMy{&XYQA>7pZ43vLUL#%&o*I8mBfs2Z?RWk8LSh{{?g) z_K8pQK<+JC4=kf?n7Qq5_=g09m$Vv`^+FgrOODbjzkrN)?s+m2J+BOYxQiR*tB!p< z)y`d)@%L_mHFYlR2OfnF4H}8sjRE-SMO=kUv>$Z5?9)mqGg=sX$K`>qPDZR&EqkZk zDVJv3!7T%|DX4QFkx$~ETX2|Ls94xt3yqxZ_~MBczYvj=>4dxBpx9J7Iz#8E5Ci@I z1t{g<Gse*D=Kyw@1%A9pp3*6a`85VmlO=)p0!Z5?$pN(-%zr1Slykj0UP>6$L)2P; z#KUJmhm8Bt6_z0_I{xrp%mDbwp7M4+Z&sPgP!o0!sP#zq1Gn3|$)8|LwE{*=t#%lQ zqZOz{IXHlo2PN4Vqy0wz#)cA_m(}qk`<8PvCxLU))@gmFk2;R_*G)Excf0_&$p__< zdc3BaB|v;u0^&=Pzi)Cbom4b&5R7yWA1fWNEF#>Fek;?v6T2bkdPD2-Ce=J)_?|SY z(hM$hKPp?IF#Awyt<vy#-uP-yfM~K)j|p6sH4g=E5t`t{Jxf-M0T2rMuapuG^ZL7O zZwRlF26nC$Gz5Ey2*K+s*bz2za2szzGBz^1YGA5$2tgskMYktT$f$`Ss~@BWi_D%U zaFa-!#EE}1>|cZe`v;*;{tclv5Ija+=1ENfP6`jeNpWgs&~3ubfLPu*8{`hHKcUV` zFK^-x^q}o|L{}ymS`c0mg{zw)Nr9<9Ctuk{O8c=bveLfl7{cisZx=k!lXxx-o`HRK zcy63E?8jA~3|`G;!Ef6ZPFzD53G84&byhRu69nGavnxhAK!>hw;fNN3D-bnMzMK>~ z4_a%aqU&zclU3AVrw;+bUaiMN8aA=s2kb1EL@`_qS(PW}rw!)bvn;I71}2B-C^Ntk zL?T>$EzG|=j_oF$2DIg$Gvykn55Oo}0r_y$uK<ivPug1i4~!}YVAMq*Y#dzo-l0hC zWAG_fqzQIjYh0G%3hpOIDHi_aDE$VY7xj!`PRAr-r4;3j9H?v*^<@R+s5A;U3WEL_ zbRumn0b<VL-~^MY#4A6@FI~dG|M)5K|I~9D7~&+kX%qY7@nF3ERm`zs*s{oh_Ly8( z>|Ewhnx%zRCdY$>MNU`Urjxnd=(hp~G2N6KlYI4}c61@Q9q;#=OVY}Vc|KIIk#sKG z7(WGrn~>fZPpceX?W*)i$Cw_P$ZFB=2`W=nD3rO3%V-0eAn<tXYjhq9n-5u-iI9fZ z3lqxmC3^&bl?tZhYD$u_>n6X~oXNWpY)>oVr>Wd#*7%(=^slMx6ZN;SqceQ(JNO@_ zG7u2Vf7=s_;QwCOQ8oY1+hG0u^CBOSEINS7!~j(G|ELQ6{j;%~p_Q|dv96)5m9w>t z<A0Z(gY<LZ`X^@vV9X&T`a02Yn)I>6YLi6zn<7b?;o;bMV3v5mV|o+pNY*6R!IoTb z^@^3(G^6=GG%Htq*N$AWonLKTJ&%1pMhqKXZzlI3wT)D0&YTM@HMsv|Q5eouF49yy z&I=5xk8Xz;<Ky9_Lc%9p$1V8kM-?5}XbL%4NYBMZ&v34(nrGFUt{Mj5b7Y%){$(?@ z;gZ-3TU@qV(raT;IZ%V#CyTY%eTCC7_Bh_b??^59qxwb0#}st;<YB0;Ye<HJMfg$x zvBh5{(K^t>P2_Kam71{g@U;f&X`c8q!Ll<rag<&{T12|6;2?XOg)eI&NuoP(N_+hQ zBZ5$i`K!=cw2Vr3xJ=rqkFk+9$lr-?U3-{weJY!(fH=EFv;!zMPCp&v?fCE;`WVrd zS0td2GLUti&dPpJ*Ka%SwNM_ah1S59Le`Er!=k@q+z7-0@|6SeEFQFtZ3!VC%-LQ^ z>{Z#bA{IVWC3Uuq5v26G+9QQrQ5=U?<*20LX=nS-9R}{Z+(7yaJh3MyP<Y|3<iuyQ zJ*F2BW0gGVqdk4clbg3<w%y;%A<O#N_MqCQP4H`^skr#A!=&(Z+EK7S!>~pLk|?0( zHuKIy5d8aHOMh&NV*?E5t>c@C`rExXvK^M}uybI?;xMkY5Mus*r<r+&W4=Q1TNLFS zyCl4lH98D~HLQ^8*Bw7Dhe!w~w1XT;c_bBoW_T#&Rd`<ATq4si4rQ@inc&w>qTa04 z&Mtxiwz<U^-;euqZw0>MzCsC?D8xXq5K^FlrHjW`MIw@x@(az2JIG9vs^cNV1`o~? zr8v!*84mv%l;t=<lGO+sbjvAqK)B9hL%U(P%ZCAts!;EDRawIm9G`Z6lUAB3jaH%g zl8uD#k^@t2LV6lgrf^lB*yj}hp^Q&{A?>*6KaH1!2C6-8;KvyvilWJd1sVxoC-I9M zUmJXR2Gnd5;tdL>nMqWNa`GCjmIy4#NaWWq7*m8sXDBF%bNhTXFJi6>KN1TruG4nh zqyV8nL`qDiYP=Dinz^O`6<xmKR}yH(OZlR5u8bJQ#>ldgpn0y<erM3%97rB(r8qB| zV9RpVkbrK&ia8@fE)_7kY#grTUJ9GBm0K|fX9dbE%>K|9oOJ?4UE19}jYE6{b}2V1 z>!r`mvazze?CR(TLEYn86;)ST#3;b1&7K`7u+!La9;lIhfK^N+NZCl!Zxs$mzxa+V zY$G`m=T019m_>zTO_LwGLj})J!#zU%$2fK@`eLcBaSjhuZ(&xCpRe39Hw7^BhHP|n zXcAZe0M~eDWn$c^m^KoHmq+&6AM>+Kv^Jxnwq7D#BW=TY+}Pe0v&0Icn1z|s_9(ud z;keOwT$Svwu`c#tpuMyI$prKKe36;6Cgot9_VC;^W`;2R%}iLELqvuImaeAzkL8a| z;)kHTsFXi#NsI7KJ4cVYTRw&U7fQ=c^};I56%{XEvWKT0Hd9x27su!R$-mq|MpZSW zVw-@B{)i|ghtN;}c4{;Bj#prd&ReIFPLm&{dnlbs{>;CEnpjY7!&Gr-bIjz!(by26 zT5T59_{M1Oz}BWaN{w|YtkUj%xl2rcx$b_eZ!}o^eZSavgEoIh*=~)cKf<y45<~uo z`jFO2r_+(njykHzW~?#j^<xs*@&I{aHa0l8GRLn@C%LXPF$z_HZBz&&+2Ix}F~gWL zLTZHvc>ly^rJkZD%kSpSHPzRzz0;s*99F|ao1Vt_3@ou|>DEi>qQ{c$P<~kDp8yPV zS}*bsrIq*D3FH)Sj=PbpT?LDmECedm+}B;ALzSxiG2AAZx)*bRRt&yG0kKrN00_YD z(KD_l#(|qP*0>J-x;Qw&C+YVd&*#E&C)w_N!AAGHC4?I$9h%9sH4aWGoTXEMA+TeR z8~A;=mql-ef3@Px#?zUz-^i}5d+>aAP$RS2m`Kqx_o!Bt)W!fA=W9@f3&V3ZS`l<a z_%c(4FF|c=SQQ`wt4jKM=;^DB1Nf;${qADXxG1Bp(to%mPD8Sbw8_z4d<R9U4Xdtm zo?Qn$aBN<Y{>7h4pY}T^xMw+E;R}K=x97;;<}%Z`hB{Yo?K2mxAb$_pe1w+$?@yKY z5-W~M>M^MwltF(ZuqfiTH*s#>q~u`Gm6B)PGpzPOrcK7zdF4&0FMUhjdzQxcsk;Vr zpR3Se5nqRVEMyJI=#8nh0J}(C*HpL*WSCf^A3NVa{JO*K|4v-TVeZ{nXuH_k;$X&? z*UR^E@k9q{Iyu{L;SRd%hY1SEz=ET~W;e2>$1=k*02vs2-<Huo09S5e$?Io(W0pGb zi1ilrHE9--AIG4RTN_q|Z{dslpS~_A)|?h>8AOj`Xk3L9yp6vZSakh#<E+=Si512+ zpe|GA$dTTOQJ!W&f21(g?bVO^<L+1Mc`LxjiQAVlZ%Q#|<LEE`$^npyCj<V-XBB?e zm;Cf`4%vD{JvHbZJi=QVX`B`maRa%n@iKh$;bMiA-NT|L@o7rE`z@B57+8Q<lPf&n z+I`?;RP689wolfF;&VY^ip3*Mp2G~Qs)E##faK3d2nxiqXF2rPgR+W4Rit)R@q(00 zganCV`tNmNu6~HJ5adud(|9}s-GB4P9CwDEf<kS3;Opn>=FpQb5t>fSQ3|B}MbQ|} z1ba=`L`tsz3JE6)?Rc&4pJXM{V1q6ZLRTyorfvOxIF8<e^OSqeq-X8q$WGeb3rlIw zj9q1x;WT?+y^5t*MiWJ)Eg94U2jfePRMwsosr++&r_yZ|?j2ZR1GtI2j3{=QZ^cd@ zi4YSpECa5oP^a9#3B6Ssbx+X3t1pTx!bMY#YX~=)d1KVE;zm?$Gjd}TupPzW_)o9? zsyFhAo2B|VPK`enT0dmaW!;5);!77%tK5GNRd-iKz2VMCInIRzhcx!eOTp(^QU~~u zv0E%`D`2L1CO9{rkINh!=T8Kj$bwN5g1LpY6htQ6TR2xJ)hw1P+DVJ*ey=kjx06|9 z{UeXi^`FXwe<>^655c<#P$rZFsKb>1Z$vY<F*0`hhpp1r;u9D?mEo^kU<}tr{yf zqBYN+6|8x+IVlUR*9BsO&Q*tS2?i{4dd06L-%xUC*G56wzL~mU4DXD^_#zZu+2*u8 z=5u>(UFL=MnaV4E+;5b`v<{c5FRqC#)m^|}ieht{G@59196>M@fA*2FWu(=Ij0A?W zdKt?Wjk(Yef&N#rQvM{Xwttb;m*3cIk0jSdqLbc#$!hA8teRta2mA>g=o9y(#-<gq z?jIBdma~b9d175Ckb}!1loTJ}PIsYe2?qq`{30J!-Gd3nKO61W;T~!KiM{qf0kN0w zXQO?5oLovhy9%L0n08KF6M9j(7tvAVafqRX78K}-*RM7PsBIsJ^2lhnLpEn`0kIHs z&8w0OwQn?`zup27v5H~r&YtQ}VwQ`0#|)6~@+H<l7K2t1O6k>V`FBC_if~{@q9hzi zKs@Qeum2VXgGo{|0EIz+Kw<Di%;jgluyf3=3Ql<6P<bXx@x>Ty3cgJ!ozoRMvmY{F zSL9%xsq`qX(=*I}LaWi6V!ELfQ#kvWwn15^vNbj<F*`k{WscbSuEN`{eCp;&x)^B# zjwsV_p8Z*z`IFf@!-)3EGd%Xkz=h%oaLO@YRGf0n*cb*=SfP>LsfyxqGhuT1Z_Fn% z)fMUr;-;q+=2df{+%Do4blrd~DnSFp7wefOQ>8R?kVoJVLp$6=*+M>!013FR%pnpc z{0U2cQ17LF`W`GEk4Z=nB#2l1;0l{WF1*44Ous+bp6~)Wi&>nRs+h`CWEvP<WdeTQ zcz#oD<#<+a)O1)#`82jLP1+1iYNVr7wO0fWinK(!4jld7iGugC+MJ0yoIo5U9Z^%M zrL`&y2bSe1PmE<PIcN5ol9w=iR+?6jRV|D5Rbj%tv9SDb2Ls9wQ0zOEeTXd2s|k)d z-}mST4Fx-8IWY@`$=PYi3#^KaZ~9I%$)o_8H0v(PQ;Il)bWJv|Ougw8=gz*(e4MGG znWJBpOCLe~i984rgnF8Vb*+KG>0rwmV4uzOOm##gDS&4BAV6l-5V3+1*Rtm|y|9UG zPf@}QR|>iZW5E^CAkHue5+gCseTR)Gk(*szhGMJVaL!hfKgNrgO?sPg{Pk|Rin_u$ zUd%eIy7)m(^^iL$ZG9No!a<-Ns!a>6tp%GqqA)FKMSJKw=A)ebsENK5bHc409Vcv{ zj_#0^v4IXftcK1wu4Uxqi`jIIslz74Sen*2H+^=#BFpoPvGWd6Eq#lxG3bS^@*QyP zBWLTIhg;WdYdGE8+xyvC49m1P47Z9;n1zY6@>U=5*}!&I8m-L)kG4DOJpn}qd9GDb z5tuowz@j{fvH5U-5*wSs;v?$lAY)>iG3Bk~$^hN{(`xP;!Cl1kqL{L5H;)N{_y zc6#>lmq9=~eYQTJoxXAWEJ?fm9nek>@@Ug;(Zn{ME@%s|j|F9O`s8n+ldlX79sxDK zsVCD>tj+fS#5{EW7v?zvOXU8q%#-sk=Bd^HKbQw$8y)lUVdVQi%yXpd`=f*NALap# zX)}_x%V6=67JF4G7VS60Q)rB@v0Y{wIW75v%L7}j2v@CG@j<(Dip#dcodycn0n&5y zZ)n8|Gsk*%f3p^vIon~!`{^GGwq|)W(rD=%nB{Pr4GVk1j6t5u@8CaZzB7htVcOYs zc-(OTR^x@+Sznvm$ei|30#E@i`Lep&D4^^o3dMe|cf(65g^Gb%Ype<gt%#7d0HIYI zuITvVJ79V@5wa`$8-RJ5{+)U9U%Z}^XNeP?sP)_%JtrS2#iq0t?mh+NQOae<@^M@Q z@kfaNf;@6sL7o4GJkOQ)BJLVW>hixH{{wl*A3dmOVIk|}Z#@?o-J+b^4Ij!%+L3ue zYFhkj(ni#LBD$`%s4?gsqW{dN56b9_s=7!|W$)^$-TJXjtddRR0{ZDs*uz@HjO=G$ zOeD9ggB|y#y~KjO?>4Ug0A<o!&b1yzhy7Fb+lu%X@^G(xB9Ae{X5b?W-nWTG7oe?! z8HR{U%2Z%cDr2ZaT04l^XVu)BvInON{CCmPgYgMHk9py#r!Xc5r_X-+Nued_+k=c+ z4ZlBv{41PzvRg0<LXAt(rI>nrFerbK2NZ)9VMRQix@bkG1Q1$fe1=wB)QjBC@eaYH zpP`kO=AG)famVlpY4T!SY*~TJjLRyA%P^pyKD3x=9Ve>|&`-Z^qoM@&g@dM%6Gj+R z!LXxztfy?KM+9B13lw4)lt$8^Kx@AM$kLj$y*#qg(KiwYn_<sy1IZ<wPKi>W(V%&( zwA#v*r20eCPmL!3`AJDbdge^rtQ4kwH!_Zp7>=_+<2V+v7MuZLd9IAgEHio#*p)R^ zeHE_JmjTuu!_zI{XCJn>Vy}{yx*ll`Qk52Xd|pHuszGtqEU@WUHBf>E?U2>f0~;y7 zEp(+_6DG}>?A^k%w0{F1e3Dr?iG#|-QQQ$wm}Krubb0O)ejqAbeNTQ?u-)2Hp0qJR zKddjv$^YV>y2kKp3f9gYv8->@mI7QuZJx|k9n!j&qGYxMi<=Rs?$q{=V#zx9HP(Wj ztviW(%GmJw29~6T(hlH$<eL*_e|{PF-}Jz2lNJq5>!S<uCuB61`<6z~;CGZWt4{pF zw7!_KB~o7^>^8*X7)8*iQFW!hx2VDaZ&tZm2sX0^88T{|<@?zBml6d81pnXSDANBo z>sT8bnd|@i-t7NpqV+$(rGE}#==k5Wtsh`s+6llwKtW*tqipLx4g(nU3JAOC07tA+ z9<vE#K;lWMvHNz95*|V_O0=K+E?g5=3twr_KFsD`{;|or|0ljYIVqNBEZWpHxpd3$ z0}Z)@Ptn)kaMHHH0qm|IhPNR?$02IHWL!w`#r#gmUdu0>`R+?aBD@M~RA+&3kJloS zjgWQ}0#9z9Qc+82QTmsWhS8~CAgulc9<u5aMPSMe;%qi~O6U9%tA>LE`9GJjuwm!T zlpm6h+$D08enf+oJCzF7v8M&)W|~#P<}5-DQcFu*0wt{vH-%O%_^e2#52D-b;fd}U zFo<b18J1MQ;SA{HmCtzCytTaV8_?-g{b}zvF72vtVoKvVrp-GZCZR#}N?ec%dY+6X z^?yz#oC8C?Pu`bqES82G5pE@4tP*&MFCU80#tQy*bJa;N6h<xCM;?EH?bx;Q4f<V% z#`(o(xplH~4gSmGSw=+*W>H;A!8W$JZP*{B$J~02fW0);D#)zl#o5@xBSlbsYJ=)L zh7JDfG3-KLZ3?wp;-Ui-20KOS#>0$6{~0}%Omnn|IhjyN_MZg*y4#>W!_QxpmLkz0 zKtMhaKtOE&)4T2Ot@6(`7PNBuyv!=nwrdP<eC%BT!i-MT+dP_gNS6&ZSWSHpzun=D zB5E5)^NB{R*9|_r6T!G;=g@GcIUsq5V+i<_GPC5i(Kd0ARts2rD=fi|Jga2DE$gnL z@8}N#W-xD{c%AJE8X&5w6&@8}n;yZ8X=Mf~aPrVQ5vuK#!*0s!=CPs6k*#Jp6BX{R zUM)kLLUVEgH2P+4kU;ggvZ8#~!-^M<2M0!-t)&;I0uXcBLWY+hv<W#fWQxOS*JYzM z9Y(2{IKz75E_gcA@HD<H@P%^H^ER5>7Zlbws()|5-CRhOnLN^eH4XaijS&sr`n#RH z@2OzNfX|mRH?l3DQY6Ft`zy_6p@Oj~{tBL^Qb^C!z7vPRGs$JM!@;!1pVOdkP_6dW zqHw&{vd%X+aK;#bT~9d>q3pk|7%?lz8Qt<&9<ymFue8Wu2Vz|4<)$*n3%cc{6IL+5 zInKjSwtSIs7YB;L?J7Uvda~WXJcm%%A>DCn`F>#(n^Y)lF?7c13oTQA1{`C{nw%$+ zvi7CL6E1h!tADy#Mt3(PknT{v`&@M^KU&tiYxesZs7%UETTPEU)5cU2%@}0jWOi<Y zZfdt<^TtDKDRPq%S%fTZn$;AHK@eFeGvB%~?E28hyhUDi+H^USyH)OoQ4YT;HI(im zwAIH7pMpDbmNvB*pQ?mtj~dmI#mrGITnzm<jO@XJ>O%dF<Yn<Kd=_~G977ncc;D`> z<e9*>-ng~oE|eYvg15vCrEr*#q1Ah#G8)788+!QT%g&=~NC?F`eXQ!sU`+ny7<p~; z7F9f2xSrAqJbJa08)6vuEA1emYSs-qOA5-Fpy8Ol@A1E}P40#{uALm0k3eIN_v;A` z{?o(ozdui@{-<}ik*(o>ej5Hg4u~P+pAf(*!NUUrV*Oto=ieTOe<#14Yy3wC2oxBK zwJHL16blF&5+Pj=(6!n@zs=rGe~-N;)%A{hXZ&42lOGvLh&o<Z-{sBJl(f^q?}?M= zqh|T(`dc;nnKi^1T|RzML4G*?4NmyJ`den{U)&sDLUt0CfMJ-5MiUq^r;Y-jv;1S{ zuHLj$%QCm%sYx};Aw=Q`FGM})F7QRM2f(t$73I*yG~4C77OmJ|<V5q#@?I<yXMu_y ztkEc5WU-?V71H%J6j{p`3Vrz*G|`kZ2TSnO769W)--s&|2$16zIVB7SM394%%R*z5 zOXmZW3o-3m=gMIe<e>Wsa-~R%f)%~*Vh@U9VZcL*SA?dyr+*_hO;`L@k$8bkzKuM* zgQNC}MwP1w;f9Ga|JmdNEUjMF>Y}ra-Bb@;Zp7svMW1d=Urq=?8bZ3MJ7lP#wi59e z^5WS_*SV-d=OYgp<nc`qt#vmXMG!-bSf4rZbU!9w#H-R0qCP+>L*NOK1`C~I=`38y zvM;@XtPEX?QFuHgTXmQ6JmUpAxdJW{+v8!@F+)5@!LY8H7s+A0$ixQICaK=w>szmQ zG&vYqszs>D`kIluziHJ<^WKu%U~%>Dodslz3-QbWq&S(`5sF_HLN_L22az)^2(oA( z-l(SEjyRJe2z_iJ(=~AGCYk7pD9ThKg>E+43~Bv33!Gj2{AG}~y^SG4W;m>)G}r<a zhUp;>nYph_D(in+gcyDlVe3z{L9=i>qxnH9tKJbslbgAH_wk%2VKNZacvYIhBJ!iE zMyik*@8MzVgR!#-afeSBsxtbv3&O|*gEy7B7j#4DGYCaptXO)&=pZ7(xgeni+_aK| zi>wo`YQPnI>Wlzc>%H{8;q+C`xcNa-&D9yog_#zLG)lY={);==<*aAy@2CBdwX7Sw zuAL-&n|0}nar=<wX`*$E>!(^O7<E<~H^0t7pbV!>yEva2EJHZ677mr4Op_X=Q0++h z%-(36)I2N8Ke;%YjDLr(+SiDZSH>g-1TP&?v(f%6CtV0gKP5P;^x(9X`9AFq>c4z# ztJ+a#U|NfNe(gGEu{_4{K?q|YuDZLBe+_{bVohuU2Q{sG#YI0I`Hf~rhE}GJ2wWVM zNYOAG_=2JhbQk=N*||I@Qphc|{n<Eu`7yfb9aO8uCg5Vgwl+wDimC!t!3hzDQOTp| zP-fbx3a&@K@GZQgFw4H)Y%*+AtmoViA1}$81i@C<@&_fdRJd0r6!Z~Z-G~=_SJl;w zqS|k_2z8_!`cYm|z%H@1g{lp!@)wbEb`#&khnahAgH>DBWVoT-ByO*e=Nad%1L2F+ z4yDB6OiC63Bg5mZ(kW{;zc32>;!(_^|ID+3EiP&<ij?8a7>B5ppff91U9m$g(X)m& zFs${TZjI7|;K=1x1u8{9t(*<&eMSVeHn;lWfK6~dX5we52_$VZGlR^-@d7Asq3c<( z)=+0jDW>2@YT15`)a(Gq#VSkqQM_upmO@K#xq`0_%T}_+FT#4Px3j}w*FL!rD78g4 zi**i@*xA=T1&c(hbS}lbiOH=7FGL<w*dI~lx7=!#7qb>d#3-2R=&NW@#TxX><7d)O z%WSK)2I+V!-TQhtZPfs>0q*qq$UfFa?2EMQiy0HwO~Ikn!P{|-AQcExkpxLc8GRPx z?!a-M&fq(^qX+nSZoy!IB7Pg13P~sS!+=;&;ZEDsp@d!JmQw2b;=%!L#?X9?tW{Sv zr@nV`5SxJOFyRKThA5^mHaZM5B{Sx@d6%Zwq9yC2*1gTC>3MdmGqY2u3bWNsH@$Y^ zRIYDbkj4Bxvo54DmOjDGy*XxzzNQJfd@#1B(ym}fH{C9dx+<>ah@$t!D#`RLfe_!C zb*ym^+V)@GNWV=P6F@<(JHB7p+nb&I={osM^%%3^WX1Y%lYE<U!QT75ZuPZATvGk} zF|OBu)9kAR7SXt`2k@-uOLXrf_4nW=Eva<#pUz}hjK1yKgAMQ-<4Tw_Ld#SI!9UOM z`0W)g;A~Si{jAUXnzq-f&sY3^E?7><urW*2uP)xFH{VYoq7tdxo(q0(o%w_aDZ}WJ z{S4r@C5t$upFRZD1lOG|mN9l_k`VoJNHbA8+KYK9D2S8+*;=3s+G)`t+#OuPBG?=g z+MKr>>M9?7dG^eCJe{Yph%gEbf%|)@IH3IJ>my8o>P-8--fFHhVzy6ns=O=zf0}3d z_r*4}(@??+*#1Eg5U_IouU>5WY@7xROa_J~OrK$E(YGx?dn1z1=KGJn_HN-bj0e9a z5}^h{fo>#fA)aqG4zfHb-2HM=AD)xZb5@n8xn&k_d!4UuS>C4NG07<r3y)JZJLji+ zkWX*-3!$#CdZ?3Kyt;Os-)TMjR-D+5-tNgEDt|Wd9eFjc$+}LJw2nNV!qQuP%eFVf zO<OfLVNT8zv!UbU4TnL)ZX{O>R`qkt*`88$Vbn4+R$K|+SQ;ig7iX-08uJ*0m4KbW zYOuF#PQV<mS2vfI;R}b6rB&hy4X&oD5-5e!3|wmpIyeyTMxi!f{<#3Z3_?U3%t)A2 zD^vu9I_$K{74}o9BJ8of1jq*2@R2lN4t>9HkfD?z;j0OmHByqA<BgJPqYVv%ts{e6 zyE0_guOXWs!8TX)vEKx5QhI+REhm~G9EW+DH#FhKqG+sTZ~-2XFB%ZVl6wLk-s%sl zKZ7KANC4vq)MPDxJgRNJFjSxA(6YUT+E1%~NFrUw+RliXdQPQ|RP+BywRW{kF%hD& zdI2ru7X+hFY`J$jUk+m4xOVFA$Y2M|pHz*&Bj@v74n$43o9ctP!xxQ&m26z-2t)3J z7Ev}_dX$e5%@bh{xr)4VVL~Jo=+iSB%TpT-aw##h!>u3k@ucIn;tJ<(mPICiWh^wW zkYe#n{(g^-=rY>gxp~<n9^ynpiho#liFd!PvrI(Hsl?odWnc!76V|FSfo@A<Xt z)J39L$OL=An!`f*c%#+Eh@3{7FN;DeJu@oXDGbI4qux&=#UPMWdUI5!oM(43TYw?D z1ZQ17TVyx6dBI)o89CorlHWy;51!8d<}f@u@7+>Bg}#(&907SEMuf#LB({3^R!k=F z`8^k+A2k28O`Ms92TbruJ(G)MQz6f{b=LYPpWd(!q(E8MW+K<0o$_T^EX4yLoSRsg z$M@lsn=4hBJfl#T%r4YTRZGub-s`6Bw?qMWCpIX_O}_P^c|30wmd7g-MYO9EEDPv0 zMw-xCSC48U-6&fCc4o~@+RMU)wY3ACGPyOq+nku1G^JmEi{@CLaLmXWW){SGc@)b# zpur{}l((!cmyTz{?<;8PG9|v)dj0p0f2hxo{|?wY5mCTe^!{J3MMFaaR(%#u4mQ@$ zwb=MgHU_X3dF#7+Q(^Hmn}0$!WQc@efQ8Y|fb6OOhIiOY?jp&fyj)^)%hiv$fSZX{ zEE3!vx@YqmLO!MtV4T?!=>AkYbG2O=nwr|`)M4O5-aShQMjE@XW6zW~btKYhKZ-OB zTL?zdUXpDiSJo~u_#<hgzJJuKS7ne%mU?we^V4x=rGpSOO~I3%0*JK!0`+O8lx-hY z`)eXck1%-Vz#oczDE=8nojQ($MqoJHb=ho(p#T`iu+1?L8B)Vvdej0c#ullY7er!< z##EDd87f8k_J#_Wqr=t+GD+Opm?%kr$!E(#N4kl5=7DvQ{<7-%d&Rj7cw|U_EKDO; zir~M5^@*JYMn>&a`iYFhX8eMn(2jh}F3X=~WxBA!APaM~*hy(#mTj75eFLtW%=If0 zX=$<;N5+T3#Hq4|L<=v!vdHvY8TCnKRvyYD-ylfY!2N<89w_oLdEIU!^I&pN>AJW2 zVV29c9u?U1;u;|EL<85v#mO-!(nvE|#7MN|jGIHJ@CYfvA0VMR+FM;hJw{e_5>i5X zv60D`f!HKf%wYfA_o3VxU*4jd@;)>@ct9&iuo{L8mS0wT_F`JnkW_~s%u9w|CFQL@ zJ&l|0b$mdT&pT$Z9Q@|L)__PmUllNEqeD3C17n_^AA9dFUeUSN&BlbOd+EAC47^&I z8SS>>D(3-(xvZE}5gR)PQbt9NwgH|oRi2YFbPlbe!7BX2m`buV-5VrT#x<i{wMqoA z|9cuc3nwn`iJ5e9e5~g<S&G)M`<)c2)4c!BhcI{IK)m1ZhR1Rz{D`3L6S&UlN{eod zJf}md`^1;Klr`DM6!*5^is*uA0uCxH{CQ?T@bRkq?xJ&go!aw$zXHoUJ(-066zqT! zNUOf~<DNdas<jfciNmef0#V$vuYDidvbJsm5>w&x3*jM|tJ1wG;%P4)N%=h;eapUo z-Y~eAW%QA(mP4KlvZ0P*{@M)5mKf@p2hTfG)?2wEXQ&+}G~g6vv^((w%55L#q2C66 zuIL~O*N9$!?90?)%n5pCj_!E&>T@&)mWf?f)-b9h<6VscG=&=rpL8@vUa13&HP<L$ zX?lY`wu*QCxA)`+X`Kx$I1msS+W+<g(A3J-K;P<fT@I*g{~ZC~UEI}+1>GZ@k>n3B zDnK;(zzsEF!%9YF*9VEig?~4w?EZh8ePfKRVUum!cK2!9wr%UQZQHhO+qP}nwt3n( zx4)Upd~;`#n>*i|>}3C{>|{Sry;W<iS~cqU70+(jQLX7;t?}c%innW->zT08%lFQm z<;CY6y(7cxEnKRr<L$*K+;-`{3m2NhmJt=TZ+@G1>s~8IKTx0a7Jpi;TDfykHyRnt z#_?#7PAbPk0F5@GLrjG2<h6|Mbo0hQf~a--Mv)9szOVh>Xfz3k`yjm_?Q+aniV=Kb z<45vE!g9a>WvB>230|D#nrj$Mm@aL0$GXpykVhNgrdC29B|gHm%d`R~IH5A;EEq4? znwO7&QOs;$<R_vgpJ6`bNvD?aC`edkJuwZumE*wIGemnpKzGJMo0wMOButzhr!FXR zeeKD~oTj<WPfVRU%|1JxkfswQj0i`4=FW57-UsMsmb!O>Q5&H+gg3I$fw%HDn}Bxt zMXy)R2Iw{0Fp_(3R*gv1BCIbMgt7N#Q86Z{CJNo?e+N$sVoa>^c(0X@XlxO!+-H); zI`TD<k_dWj@vSFC7gk{VwYMq2;hHkt?(e{h%Px>=dEsKJNsX!A!Jh*{W;BkLGG=E9 zYpmFegvK9ZFK`O{$xrs?E)hvm__I(F3G9PaPN9T?Vuc+eGsHpFze&5qz28woTvVS+ z_Ob=b&!@13OWA3P=<ciN*M<U_bwE3YsIdMhk{xckD5~hD@hW}QN3*`01>`o^#l|na zF}?l<+Nwju3%sM=n9Jxt>M5zH?uKY0dB`amgeO!Gu{7Zz;~EJ?K{LQ?ibupk)L43# zOfq9pr0i~^gef#$a_hiG(P5;@=BWV9jJ~m64*E?;k)U_;q*1_*wGW<Fp=x8KFIp9y zq##ccjbWnBqF*$aDzYk)h8XK(<&3&H%E$F$swM5sDOZPsU^hd4n@Hs-`i|sfvrW%{ zo|AwPPMlJ1uR`S^aDDD1$x0$N^xE(K^?ie)vdh!Yc^3^VCaLi(%8)7#`xC!5z}jIu z$lc0^=JlJQbyMZM%t9zq(|?dzlEN5tDMsF)cCTcN06xBiW%{5qMIK!i{|edRKHB(( zwH3NGLZSw0y^zpw?hshi1S3ZN6xinl+%m;}SWHYGFAm&8eqCio8$HhvOCSL;Lv{9) z)l~5S7m>{N9De+;+4!h*de*zB0O-nr!ZTU4<IBs&`;S>N_PXf5P4t}G1adtC5&X%J zdGR{P+OREIE+pmiZ`v3ZxFEmh9r0XtoX$_zF|(7Y{gcZw*|fe#u3~XB?b#ycZze^b zS<&{WL?DqB?OjzRA&G??bue(5rrY8Q#Hz$R!={rx1rXC9x|+z0GYB3PgD1EHN>>g? zz+5u|)~#G?mUyX3t*;wHWUd`=QRa3O-l>;-7F>fL+S8j5%<rOm%$c$`?d|y#+L(&} zIKCV)+kQpq66U$vRi0kC96SG#za%)?zUY38ZkKA_>0rww?Ah(v68@t3W4+v~p8w9W zRBj(!r%*dHIJJE97y8dyGJ@;N(3)gC)x?V~ubj<f^DE{M$hq+W#M)gIqHBI9pwYN` z5$PGbNkg&8)Cp6i(r)uC(Mi_iJH4QHbjGQonZSM-kYf0pmG)o1WifN0nFTcIk>e`# zhb1ZXG$c$<yb%CDU~hrY_f)!B6dOF%C)n(KGVm`lyU%4`52rh=r&<6Znj;Y>fKb$+ zSYDrrvOjivGlk4mMdmsDW<065TGREBx937#eE$TZ|IvjQ<eGeN{s7UZKV-v?W$^#Y z9qu1O+J7e-{tc%4r`n@9>E9ZV(cIPEgFDYd=k39!VnhutkVU_6R0O%P@Y={q;+ZQc zsh<W!b_EVh&`j>z-W6|GyC?O}^1-3k+x0Wl4(;x4-}UKarmG`@Aw{q3sUmGk<c?hi zwp>xyJ3fDs@O69A<~8fOEb`^e@k1hYd5vr_nJJVcvw3{<f?aBK%mPyK$rE{XJW9|V z1Fw?_6SCtb0xNTgb|g^5H#2e&A2||T9(nSkcw>y}Arm5nQQ3f1`2$pcjh>zxMqrD` z??;{ZdKpU3QAGZ*hbF_ncXNGoUFh<KtQMqR`v{p~d>+;pE1W=x*8MV!Y>+qTzV#mt zHaOpd#_9&q&?1y3H!nNoQRVlW`+ezYDLE(Ys=t<Zq3&wZVCSB`*PGEXg$kse|3*oz zzCFCtYUqw=@Hw5i&>7lQ`hpiZAjoHEc1H?Zv&t(^e59*c_kwSeFXmnH=~d(@IJ-@> z02aMIt4s6W026OE%;R-|i9Fj-ADtIYyS9%Kj#*)=kmg**FXq76b4CgD7Dg>n;nW1Y zR?>}-37isM!e>#FVP`er*5o<67&3d{##U7RTEnn?n3$uTiEKozstOFOW9MbAtgVE4 z2o;L{n0}<KsVW|g8PcK7kwxAjVpBu37;~+wC4gx>&F$~bZ<tIRSZQDtsV+-eb%jAt z*V4nH1l|O>8A9&r$CiyDBjavLTzouiwCgnnlMnA*z^p+%or9MNBo=WYXElJlY&lp; z5OVK&Hjps>g#H5gkF)qcDYzfS(f{Hs{&zO+A1C`Kz<)mfyOaG-M(sa--@kVWw^5u^ z89$Xs6g&U`*H3I=eJ6coeFH0FM;ZoN4qEyjnYojL{(o>Z|Mjl?Gvd$H`3G~8{CmCT zr%&)M(beY<6S3*A)4Y)(A$Ey#6B0atY`-sJV7Ir+qE-InGUO^xEYZsIHZ#n{oXuL# z8c&?3Qo(InGYa9B#7%s2>L@ybo=obH;zf}V))AN3@)2QH&TH)>LOI|s63;91OYGRo z3m^CE`uvmO^=I;)oT(&=3>i){t^x!Hr)r}NfQe(tU?EJ*#8y;uE?Hhgx@6u8S4K>Z zw6OUAd}27oL83iBYf(dyq#T7gbKXj}v6Q*9U_HP@O2Z<re1Ss-R9weDzku9Q2=)qg zvCm9mRgq-ZcWDBE1(W47jj0<^gj+i~%2C1UZnrjG-x6}PdEsoHT|uz{N!$EyRYr7$ zkpvZ@>=avco~Bsw*l!VJRV=4yQXo0mIJSw!06|%*LY4aZ5vz3Gk_!6632fpaP|ks) ziR!C9#a-%rRg!oxhol0iGa$P{4zT6;!Y7ZZqBWHIprySVzxosId*p+4r}w=FeZB*h zBB=5&#Kt8*Ued6DfgyN24e(V<8T9~JY=?y>ub}u@5)#&cBleC(1eub``RowOzjer4 zMhx{}dx<Q7cr_DWMrhhJ_+&4<E8%-lU5hYGSGXj(0*<Qmk~(JncR?@st$M-%RH#%H z3?-%F3aBGe=V@EH(<YUOSV86}#htY)UZhY{%ZKN8nV076@FCIBl!lC<Ud#2FbsJ?h z1uz&d8j>oIhm5}ijYO^TBQ0MW`trX4q>=?)z{{viMIcbzTk5!-3#94-<QFam<c#1* zqNGaHZJhTF8i%6nH<ZfL!o68s)jHbS)j{q09qRUMMD@r?;4zp@1LN`o^!Qyrt~WDz z1p~{S=R>vRYD;m(G#WvsF+vyvcqXMF4K*bRI!DsZ%ubcir*uup2Mf`z7ndHns9uT` z7401UUQ9nMN0uJdj7b&4Qb~`ZsM<P6G2M=4Rx7ly`U$@`)@tK&Oz$9HX#{bV$2}o} zB~Q&wfX&0cYhV^SfMjp(C&MUJ=eBtF*R3ipo@9mB5umRyzl_!oB;5Y0u8WQR)#HlU zQi)c}-fH*Z8NxekYtvhrbwc@8(ZWszautS(OWl$K4jt-qI0|XsSCNcb@8yC%GoI~S z9<7z)`*h!O>T2P$L*?#8`+|Xa#r~YDvRK)m)c?t;gtahEs~ItiJTd-S2N(SL9?blw zhbhQ|ik(=J3D0BmTCR8#S<l{Ny_@(Lya`38X(c(CCi$-Wa3;}(VvyCd+<SS!0+z{? z+Mxwdx$?L$RDsz(b~(tr+GW1g;qlHsbUS3d{4Y;4Z<o7~qw?mp?b<U}G+WaI(}ahx z?yRj^1Gdpefkfcd`Cio98z${RYw+>#^5pR4Fy2g^D{5Blm!Sq5-CNsGwa-47<tZW+ zQd!i3irmcX@Qw6)qN^O8IebF3=l<BR-VOD(YS~f6jKb@js(o4SVX-_362=KqPU2J3 zT8si%Ji()lvG|AiZv8i%eYy-6oE`;$3E$ttvb*0sV=~njjFehvIXriS8_xrpoTh;t z#r-?Jp4Pp%X(BEc3y5%(d_Lf`JWnH>!r8R~yDn~L@R7ftFNrh1y%q0XWOYP+<l)uT zx!LbE4bEdl;w$*1N9hr7+i2HIZpbN{*BB48jteMBxL%)6TIFQQ^fr4gl&}0-JyJ1p zMW66B9zl6?7ETpUwnX(YsB|Xf{v-_UX#X~?^jV(98EDb%GPtgbhnmUf7xU0Ddc3iA zvwAYnY~p*RZ{l9tt5^o4Q{VDnYC8Yh(alnyGF$8x1O25L`7y(psygK3Os7oWrlukN z7@kn^Zt(#aFoQLi4I{g5H!53V@2XElS&yceCKNg;n(O<UM<;C#@UV9H6u%csep+)Y zk8GV|Szx~tVW#&n(rwp@t<%F`Q_5j-^T-GI|4#W{cu21wKc$fv1^@u>znJnJ&4g?n zjQ@?VS5yB7I^=Wu8wQ`4-#R0u@i<uO00EyE;a2v56)gs5T^3&T({+R+gH`O%X??k* z+_dK&J9qSX2A8h~ICg(j0HfjW7%RglpHMPRRJ6qJM$CPu-gruU(x~$lXk*4p`CC?C zX(3`z2I&YKg{43_OZG9CI~>O8A+WS`{t1ftrn#b>v364uYF0?PFSqVu$-|`Qukce( zy4=3OSxi2^UcX?z7d&-=8jOiQc~v+c*V<2@xILah5#NjD%OPxMpk8I$WhVR7MS@Bn z-@HWF6Ss&)gad0b()*XCx%|Q)cs;)5LmLOCuH4z+NV&w3(jB5iE!Wua#==~nAt0Xt zAkt0}Wwek#o3Y-HSq&V<-NY3qgKS_s*v6oM*jxch!atc{iw2lwQNz_re($CBx~eBg z8i&!>R-MFv^`_e^!HK_m780kJf(k-yAfU4%Y+<p9l2YNP$HUHNNEvWO4=;hOKpr@4 z6X^xWQtfSJE*9m-AvEh3T<1?k4ZA?tk>tg8qFSY!s0D^_lPCmL*1<{_o2XG`N&V95 z(HE+E5171UCs9)g+ThPLNOu{SlgkRegTm4isv}@oa-n9l*UwWa`ciJ>bEnTo34xM| z@NU#W3SA}E|Evq}ye*nbK=!tExTRu^mp_=)G-(pRCB2KJ1mX*u^AkkL_b9<oeEPM$ zotdOd3OV5<DY(J1_)}}eQ4(}X31tG8qN7+zli%h6A&XVeBPtC`_lk1q``$Xy3}kW+ zJMQ|<jrR;-?()*ri7Lc2tuNs6qT#lWezXp1${9k^-?Evy{IspgFaiD0#IXpQWl1>B z08D}0uu^W?BL-`Lw&mJJTqYs1H2w%Vl$=r1n&yp)HFXWZgVT4CJS||i>N@7TKAfm0 zZL@A|V%pahprd4z^!n!<()IRWmolaE0u$FDp&ppBKvy{F`PtLkwyoVKdR!FO(}gsY zJX9@N-`CZ9Dy|}>?UB=xaMT5w@~DqJ<5Tg^GB?Mb5_E59=RJBk-kl-d%UR7brcya^ z!H213On_v1`y!PPJ(0gSQ#!GKF=RV9@OwC5e&d3LBseA<gg1?imq%yu50Y>*>|;{6 z^Dnv6dV5OtpGtjH?QDI#?+F|l4Z8B^wU78qqn%Rd52Tbku4bN4J8z}ElMeDOdY-(~ z6;qhppW*Tq;=MhyW9X+|CmMAA>7ryi@7aF7*mpUkBEBv_D}bhc&|KhC3Q4W$PL2+n zIhkady4x%XhpCzsog9qBALv9O#F9+jO?AZj8C9pOH`L-T9#-l0Be>{7*hwJW#zotC zdvk0fTyc_VKan{r7Rm|^?!cPXdZT4k91ao?pReH=n8xmUU}UfdrWOT^A?yqjNdZxg z4vKbd0Ib0Y$!uf_qN19a{;hvBQYR$AU9koKkb7Se6SLd`B&+4pGqDhlyn5HoXz+H_ z#0##~-=3b<R|glT865SOREpl(14!25v~m08D;0WIe|#n6t|uxN*-qX<G$mSc&(>pY z|Gstq=J9m$xIDSC#;KG<o>_&lNMn)-%NB(rs=kpVB6+lCLt9X%3nO)#rk|QcQ0GSi zu4YQul(lT?vU2&hc$~=KBFL<d>Rbu3e^>pI1e0%2-v03HZ9w*-$2;a&339~RJf#nv z8ji+qlWio-YoC5O{-zZXBdO!pn!1aOv4UwM_V>SGdNK5<RU<!LXUosBbBTXBtt$V+ zXXBqm_&+jiv8uK020g;}j;=kj?nXrrf|_OnUFF(_^G1=xCY~LVP!$$e1C9>sb?+@U ze;h(U;<%t>Tjyzxr!!b<>u)<~KDL3lCv;Xhj&B&1=h>w+YHS#Y(#v*bL<W1wR2^#c zK&&SZ3_UC)iZFe}s;~mwt{FWd$3D|B7Gy`g6F5fM@Dfd#i{?K(Yw5)%{jS`+wB-wD z3%s%1yPnwnPpetBeen2qq2JM{C=vBjtP=-ot>@pMHKlB2XR#luzjES0yRgl!y6w=E z^2@!ylaS#$UqBq<^{z;Z@4lYU5#swMV{JX_Tb=`{<k0<##KzwpK@s9#t!s!0{}_%J zL+K|o3hm=)8YyBDPJu6FNa(+3e3cNujIMVOCS!a@O{zfrRE<NEE54Uno>`C=h&CZJ z)EV{xOzhpKVxC&@aDRzGJGtysc%=N^pPdNsA4Hm{7U8H5!hA6&5Hy3*j9lP2*E}D$ zP+%9RW!D}sx?X%N<cc{|sTs_}wzI3ZanRe@b^Qcq%Rif~i4#GzvI}qiGMw>%KQ~2r zLzAM;IQOa{5=7DaYdECv+kU?Jyfa%sx^HQmw&eg7>QsjRVH^(X7wL=~jI?)_*M|cn zNQxT(g#2<yFrRE$OyB^zi%Q}qOje(e!YGbf3ijONv(k>>q%9gK(G(_@wzi0=N0Ffw zR8e#ww-=JVD6rOCR(!S2tVD7y-99tUqPGV(72)s5J189h+SDSl3v7zoe*7Bkb8W|J zQeamEzfw{UwE?<~woz5<f-3#^7$53qS7KITEYX-$#5swu!k$VMX7H3r&O&~;+e?Zg z>4%`|B10xyRHrrYq`OFXvtq@Tqn)*{pKVIMOspEN4{VP?owWOP!&jl|)VWPGE+w?7 z7Qc9W&Fd4)x?^=}%+HzBI0uKN2aK<c90OJec7#aCX44zlty?XOy7!-2!T;G7v;7N~ z#oSuo)cC*4s*I`A(P@7~rZqnw{(n8FzJr6UE3Ji{X>u%&xS#^c=--#^O{Mog?>Ukv zVJFzISZeZS1j>5|O&~PS7Ld_lK&c^R`F;6Fgkj`n<oU7v0U93ihBWhY;Qs!G%u5Kg z+q416n%}gpZ(p<fSwuG?a4p~Bx*)=UFmL!e{hp?xWC{3s{0iOqyhhR^BYJ5I2=_st zaeoUx1%1hlht+&EC<Z`U2Y{$Zu%XD3knMx*+g&)89VFY!8`h4xDM@^j4vMfARiInB zw6KF12h1pvhFvCjuq+|n2LpLJC~+02I#FdgIuIv&yl&vwnQn8QW|prPzs|ij9q<uu z&fYoAcqFvg-dM3>FSRP(x8mejN}*ka*n+eA+FghE__&%KS9nWtNCK$ljegoJ8j--8 z{i|c}O-AqgY3S)}^(u*N+#8P1gZ=+vG4v0l0_v33L+giqEdD7ph5q&b;s<>&{+Yls zqP4Rz^;Xi1f>yx5jbP5~5I$%?!d^rW<T5qks*bV#?OIYyE~CkeWWecYMK+biz|^!Y zUPWRbxd&<6C9Xv%OgQwFQ08`rk3@hqz$6GEZ~?PT62O-}_4n^v&#l+vtgnk{DlNu3 zYk71*S^RmhVoaA<d#o#n2rLC%W|tqzwQR%L(LHA=p=Ow5Sz8dlMyjVg+_;7HA<vS8 z0<H!XO16PXc%B{)d1soQ3L6C*XJ<u8Rh1YVc|PuR*t{*RZmECC$XT)%n29uEa&vGu z+QbVj4SDxva+##-uz;xwJ`ksak^C|nMvHv(Jf9P2LZ@{I7$5%3JI2?dGD9LLVGF`u zAbnmRJ%~Q*m`f00{1|qh02*VQp&D(UXb_yNA3{?AX{q`JCjnWphG{&dXe!Pq3Py=y zIS3VwfYlSd6*HDI3p*`80$`^Jy90~f+BYC5<a$JLdQ1rH-iiaHt%Cvcm(q$e7rEtH zHAB2VgUY(m8orSaunFVe(2IBc4HpNq?Z5Lb`6h&<p;leviU|H6+6@$8XbCu0sPsGZ z^utz|Tx+z3$YJidMn)n`TN!)WN`f18IP3EA8WHnF$V<#B5XFiH?AR%8W8u`9LEBwJ zqC%fqYcwRoH+DvTRQkq=F)*fnmEQ-Xe}|pLHVufRHlvo3f}QUUe`ppu9X&P45<!Xh z(72CEoyf}X&B#|dIv9q*&-=pdACi5`$<A7Wq3v}Hf72$uc}55=F>^U51u6I<abeY@ zaq=*D(}e{qnv~@z#&saRruu$xaCGX$Kd_R{_WOCSKk(#i;aTi{qZ20_m1-ongn##O z=PJR6tFngVE&8x^%IkYymF3&*+uzm}>o-qh?efm7o7et$qDpzBN4NFtPWN^AoY%$L z)_$U`G%l0PR%kgFoNO-zu}&-=SBq2qgNfw*Rk76duM=*suPX<~=PGr!)LcH-nCs5O z?t%T0WYXD3rq!|HUpcLjA#j;(V_ZLz6*{&$UQeHEvbwv?a#6d!nHF3;9u}WxWVySY zE*s^@WH;SkpFN{VHlgo)0_3|`DG%3yO9$?DyL0(MyE8?H%HGONjkd2A7t7h5AEho< zZx8mnksqNLcxx4IWvih%yfwK~FG|D<<HZZ<H_czW|2ZT1KeO}yhZDtr0nq>btHpoM z%w9cAmXSZ%zyRuhs|)(ifd2p)Eq-dDP1#L;1n-z$gG|C}Ebv4ANg*XZWxohYfn~5{ za1@cq?(kOj%O#yt!X)3@tKk_~aY+)f2-DN4tn@~va3QebFydJd`}xE}X|tFJ;!FpI zu6$$^!t~UtLw0cDnF5EQAg8aac{f>kP+_cf`LSJJm@~h<G`Y|ICb~0_PMp$wxz93k zh?zI~__p9NK!0X?R_8B@SYsgl7}YohQsU!)<2GK``FltZruHF5c;a)uBK1FIS+{|> zN60<|rxcIKB@O1kW%{2Q6&pS!Gs7=gMjKBSwuv_$dX!Wzs}@{O`K?_*2^3%b0&|sj z!%x7wc48fQ^AnzoS+PrCBEl4Ld2E`i`@zG?1lurDA9Usrp_2i;BX0p61eNUIgi!DU z&99!ttc%`v)D9CCz*7Q*2*oJ+wF{YQzPv8MaW%@*&<~Sl1gNSuExFOdia|Fs#p)7A zQDa|<2^jmSp<iK!v}Z`TW*fw2!dOqGQ`-4~p-}d{{VjObq!|$#U#A0<0iRWifVin7 zoZFO;HQ<)l>R)@6*AI}cPJlYD<c^~!&b)=lsCzcBmAN{wx?1Gq9UeN|Dxs&;R)GOB zpm+m*iB6dpnme%Y<-5!=rdUZ6(Vpr-eJUAitc6tDh$&4seEm(cD!!|(x?axG{Ph;h zTl>PYpgOGh8I)|Djc^n5_{I{+aqWAlV}z&*vE2rBPb*v?t+dFE6CsG=couk|h2&K< z%t{aSBSaM1B-GjTJ&B->zt-Uq&0Mud|066^zXHHl>EtXYGincg)Qq-iM(^KM3w7CN zm~pX`YF&6elh{4hYX+ren%jNmF(){?ZmDLuOCpkY;`e^a5tv3txw(*p@-|HQC8K2z zTpn#ZF0T#OoA(HG!NK#f#*l)+uZLh2LAzI}D!l#~Fs{iPApdS{w&TY(&j2UKi=6{{ zVGb^^2ZXm-JGq{ADt&C`g1|(lzqlx1^!)VRLgiTY`_y0h881v%+e&E55@^Wor6LS> z=$BG@(CGBj#-+NNYERW#m(F(?ArZX5RYX;P*5EGEULO0Z*9uu-Andk43Ubj023T3( z>uEHE&%}^C>BZQistHZN+^?D+iP;Sy_hL{fO#E0ZQig9lvE3j7kriEUfT)iGFG`8+ zwW?9$Qe)w$80enepvf-y(2AAMv{RPF@7j=xEvvTawhMb|>07w%r(o!bFVO!RR5C*# zEWSGf005T*2H^e|-uFK#!@}O#*unkhl5gR->uyfm+kR36W#X;%gCBJ_)shCCSeZX2 zw76Su0C}Uf0Fa0}kYEbpz1?Ixn*L58IKRJ~CsOmA`NuOgGZS-L>ss(J|FKJ*c)<B? z?1kBzjdorTp;JsI0wa;iRTx@`L+z-e5;^Yn`CY5##5_$m5*L9v`!MVrpOgK2KJYp_ zTj0;+CwHVzX3{z439s(Rqgjq@VwJSXJYyz_h;laBd@J~_h&$rf=W1=iE}2OBiTWS@ z$>hSHt-$uIDOTq%_?a`QjYUyACB7e<+?d^T-5Mmt-E^RHq)EGgFtd*@?td7;^A4Z@ z{0snIxWj+N!4;I+=E4`SXCn61a?_hf*(XaExXND|J0S7AQf|CiJlyRc^~;slnzen| zdH$M+=IUNFW*x5am{-Y|ey9X|a?CK1Z^iqXJC7Qjznutr&pr`}m##ERkxNCFP!+jH zNiZ>YVeJjMSZ;4Z93I9*KT8JKm-w#VZI6PkY$XE~%V>yvV?2+ul&650g)AbEIeGgz z5KwKA4@%{Tsx64g<Jf)Ek$_3F6-S05L>iib&j9NhM11bCfs#@fvY<_XhVH%8R9N;I z#i**Zl?LH7BAF5{xTcFnEs)nJ63x^N<We<7)$``81C%t{@CAgkROb!7o9Z9TXHEzS zwud4=_z@?-8DqwP*WelXTZMRKQR6euDb~qr=L%TAm#qr&OVu+^`73b-&@*(OS$r0$ z2oO<Z1$HKZ9cW38tWs~INuixg()qAKj_~h$mX+)rvPJlLioFZ;UGEP{peaD_q_zgQ zoJ(|-tL&p?jsZ9499e%SfE|%!og!bUI##ErRb$StyMx05fVNTJn`=3^zn^EXKDYDx z^UL#{ht;EBgM56vJ-)XmVm#8AxVBHXPoqG~OaX*E(FW&CoUu}`V-HpkUn&yqVWp4& zztHI~CH&c?s4#R=eka9x<908f_<%#ljeuBdYw0<zh?~M9>ynhB_PZ<F2+&A=&{Ww- z1~qvC8ZE6*^GH=9y$|7O*|54WX~@h%x~cKsbI<DO959h<9#}~AM9!8qiv1V_R(~tF z|26CSi$VYA%*?Clv90&k<KuXft=2y{3lJ;+!I)dll>H>Z0uL7lo|MmvlQQ;J2y|L* z!n|wm9*<z5Q%p?kFmbV}EXFn^baOCwWN?veFm;sA>#LlP*KxVxQz${9b9<1_F#D>E zy=S-EKRIzLYvhr!eLUsyZQAaySqtbjZgh;v%g4u>(8Iy29W*I|<NJqBCK>2n>PC=( zZ%_Ib%=;a1sOQ>lfP;-g#4F6$BA7>VmX}`A^Q-A!dQL1nqWma7S+lw~pb7=V_h6dX z8(qfJ+gr9t-6V6t;d?PYsK<xi;zy3wk>29&ud=o*GX;!Hzt2iybzug9Zx8}>LXrlx z6i5c8V+t}6AJAh?ODP)IZKHc*4>aIF%ywn-cM@iM|0Uq-c|q9*CcW$?m9aCud4(8D zbsvOz38vmKDHC7`?#`G5sWX6;*(^S}1mZ|pyUdN-Duo55Pk=VFf_%v1dL|<(&>Nk$ zfV|67+n!_A;)BX2<uPCFBXkOwZ^H7KM@;G{P%^K{-8qj|&d?asI;^}xCphk3E>B)Q zkTQpIM~8Px70zPE1~FZ2(0{L~r1#?r9Qh})6#(pbfMsFLYaiTFriwl{Uy<a|9Yz^@ z^Sb8(n<jP_K!Bob&A2cD5ma=v=@R0P2vmUKJsgvpQ4g|okrh-|<(=xOXY=<G3&Lu< z9nxUhNuY3P){|(rz#G~P>F^c_xPocE4>K22z=*{}ecfKIa8r-(?U}u>^?jPc7J){% zhL6D0fUH07%v%@jf8i6)*_x|N^5blZk|_r9OH_t$Hr{TroB!>J3LXMSOzQDNf<y_F zu|V%5Jt$U>zIp1{{s#EQKlI0Q2kgyuTMTWe6Zli$e4Uu-`r+Z6lhS$jRlY+xHvxTy zZZ_PUFB8?^mEr|%xYAM=A0L6|xpcDs%<#E@)mgKIt!fdR*wg3<jk3ExFdgrQ38JR# z`1%TQSr)WQ|Fy#lwHU6PuIkKQ*v+FRyC%!Fu@<%hD)?EQ`32#)8M;4#kY^*UuktJH zQn~YUfr04+*k2G#SUEj+Wn|d61BhFKqE4eW4rkbLjNto%Ewl*H6hHsU(7lKzXdDv1 z@W_yn<tYDi<hr0FE=NbKet`%8YHk!20!#L+3rJOiHo@E@BLd~V&<X6x96$^4ey313 zlxuW;Iyy6sHyRL%2{)(9=lfz9MEtI+Bke_BWndN~l^&shwQTzC?4FO+_MIxYILx35 zIls_*dN4ifY?PJ_;4wn6omgXC!6%ty*fHHXNHbCzn+Bl<<Qq6?R4o8;sBo<tKqmm3 zo9L=|*`&N!{A_-MI9aGMjsp};hok|lT=k7Wd(20LupXIaKTJl?B3n3=g?t*qQDS0b z;bHZWeLBtfMLPK|qShV7$E*?`;D;(V=h#{HC}AB^QHd(a^KNS3M=5~WYnH2foiuWO zaeaZIs$5CfpMu1lbmH}dEI?&*FiUdg-t#Fi1gQWNg3s`;_ajBf?ZdvY3{*-oq<B=; zxCYJ#*)2ThaC*l|Bc}%lT&f4Nz96KSNx)@@5TGxfE?x*;Ub%M7C=>y^V5)8`LW<() z=1n^n^su|iV7d23M3;x@Cr%DcxkH^Gl{>xvGbo|h7xC`#=P=BlR{I(Td;|tagP#<T zoP+2IxO|oQ2=D8)l<#|jNG`zHFz`F3%C%6yFmVmx+!q4T$>A<Qb?g_CD`;e1r&f~c z{Sg+(L}bt!5QG>x9xnGw3Xp5&Ou<t(Pbk`It4z%G6492&=dekT>2^;!Kwo835X~hN z7a0%s!qy6_)cg*;STRQPLdQ%DP4$}ir*(M7WBK{>S5=SY^7F+zElKrCIjz67A%L$~ zp+fI2!-iqFkSA*lhsWRFiFQ@7Imv(OHf;-BQ9(Ll#a&{PubYf)GWyWKGtdq?Ch8MV zPT|TR;a?G$Me`w@N3b^g45^p-mFsI~F>Plb3o>Y_wurWq!dmw9Ak-fxL-x#~+9i^f zlp#|6f~zeWGTjMX$><C!TjxTgHm%2`RK*jEcENr}@(~lqe`Er%qN+vhsM;&ULj*EP zIn<ZcXy3;i4knguJ|*RxH}IG2EAwx@$sw%~Nbp@&F(3-6FgCadiO}lIREDi$s>Wu5 zHC@kOoyrwh*V?pn0i-}UJL#tiQ!*H+u;V$Rz9u2j<E!oHF@Z9f=)u5@$9gJlDRU6m zs=zA7n8hwf8*=qs&LW@i)>b-#9-^HUu=T=PXlI{3J_i`NWy~O_Q70^OTGlPP@e}$G z;wef3EC@A|Y^)}KX-))|u$EWL*i0d2!r+E*Lt3V>EVhxpyg?w;%~FQP&X`3y2*4b1 ze?!SX;UHKP9p00rv|uf0E6qtKS*D_1MOghgM2xTok}0(&zij;eK&x~QD<C}fd#2oc znlAf50Zk!)hH0>ljs%h@kWCC{AcIYZAyD;jy$Z(19*!KwZjc8|_Oik^O6wU@q_fbv zAGaDwWX`=8UcN_vI#^&6`ID~0KP^kUYZuJ3p2%KW;&M^?3x7WzmGo#;JJ$9chStbU zQ-Mx;jqC%;A(PjLlhlmePTSk$V_O0Jdl>3<eh{9obyuYdGn|TMx;C`VSu5z#dJ^i} zjrsGy5Xci&!!?d1Yses3hE~5pwaVAZX2|Jt)C=;7QCz}oXDeNdB5NHD+yrnrhnni- zm}0$G-B!2Z1Q_iMMh;h$z8n%_26vw83~ULGu)f|_4|U%>`he45<Kxpsj!Bb4t^z6} z&wffN4p5*{=w2QbFfV4;z*!wfw7P~(-1(#n5$mkXn;e(X3Y7G%5?%rej*=t;`$qU9 zrXBI}Bp^}r0DnW$pV7sts#LG2!e*O2q4(MAhA)<{@N@3c|GlR<#88iC$1P3ej2g4~ z4>)@sZSpzXr_4n1dF;-q`N}0+hj-u}p-z*6gwro#Qd4RV5V7c1I48;`z*TC2BPa%7 z<nLuye3JDmmn4kRj&}0~ovoWPnnt6}Vt?phRT#S7(s2$96DfSvozO5L+Z2PiU>w3) zV!04%4x$}3()bO9N1&6hJGUUdJ5T?!Qk3s?flbnzhaX*{EXX#7ck+-rS9s)<p`Ydy zwaP?j`#z?=9<H;xi3F%D?CYOLEyXayjp+wapUoXLX>cd;iNCmWXkd6n{zUyM{90{* zSOmB>iTmfFa%tHGgu#5mgmn&-#Cj(%vJ6Wn@P1sVDDyGyOKfTm6(mIXb!!YD7NJuL zMfo^m%~T{VoB7*_X0G9Q>0e?QNJ3hK(PMGA_|EQr897<@0=!_)Q31v=L4kPPB04GO zKbu|qL|1KbmN?-e*z8$rS)Wj8#|MI75x|V_ADlWJ_n}<+mDXg;G5h#hj?)lj^5)fn z=@&HMWi4^wl+K~fP%o|o=fxC}eQd4QZ|=Z2i5DrXt(`(5ES;@#fbxWBkxdh?Az8qX z!KU$E3Z3IErWrp1M8_S`Q*+`b?8@~8DYhua_zz-4;mVUVTEi}$n*xsYNpqR**X2Sq zzv%Um-?(SdXF@KJ$y(4d6c?@1({^eLSjp9>ue3-qotTxg^gE%Oa3=EZP_l{x7MzER zn(76<`gT=Z#0Xi5-*RZoFpOoyj}5$06}8EHaF{mT%55+$(Qr6!35WpmF1q<G_%=$V zkCHoO3=JBiSM)(?81AWbK<jJm6AGa33;~Y%IXJFBBV_bV#W~Tnc#FW!IQNR9ER6#g z>qXIKAFUcAWX+BTlUTwxMbGT8G$2r#W%$eL7NR~M$7!694fOMvI7#P>@jpr*1UF&^ z1O#H$;lxr)>$Ke&Vc=Eq6>H%Ejy^m||7t@14%!@X_^jNP-?v@>capXm?J$Gqkr1!h zj@=<e^-6roh$#`L$U2bpkH(O-k|2hiiOK~iNohNE<Uui;aa=-dv}DyVcvs0vh=$+{ z@I|grTZVHH00D6&_rnL&ypZczM+AJuQO@35G06mY^ks`^I&#TCVtTP;WNKJ2VAUG3 zGk{(eF9A3x_ZN)Q86K8iBVrM%5~+IkPdM|#hVy1Q)m&<wG>)&kUegni7{!^KJwMvO zv0TX{z7fc-l{)?2AzmcNB05Wk!#<8eH2&QL<lo1QAV$Q<0PK7)0||b!%uUc**xMfx zPbW2pzK;S6u`dSS`~6<YE8R7)>N00Gl2P<d+b#Y;lEwWBj9Hg;`%Bvwx&jL;4XZ65 zN{t-bU?_0ZS+7(P^DO#4%i_C5RJ0NBXPc=26hZdgJ<I?;qw=>b5?c|NL+IcLF?URh zrD5_s1~cmVwc%^;g3kC38gS8f(32{)4dw5CAB0;y-y4oaikyY90N!Wmp<O_{VJ2`j zr7f$yqkS+#2h(9x?6oYzFJW&Qpc%9!RrG`u%!_E+;c2W--L=p~Doc$(0KFKJe8mH_ z5Y#$~V<9Z%)o^Ah4v=<JUMmC88{ptL4`3yXT-7UXvE^mDk@hh5QFId>eng^R1<hko zfys)Y0><fiiW*7flBYG92-5ybD-WF`OzJp}duafWS1pO2nkmJ{VW6Z0k}@b|y_Bg# zOM-JcHPV>Cy59?av;JWb!xEH2bj|J=Nftz4eiJ0lvIB&L`3!q*te*auwL?02hs?eT zPBjV*53rz?R2%pY<v*UQl3H?DcQN}4e~`uZPY{(FlKs<QhQX&$YxM5?4DS>`BE}-& zTaKFn0a5c0u>`As2B5&{-0a#c$<CsMH+7~Ti~~u2K|3GsQ;vuA=ai7Uj)kB>o+%y? z_V7xG7ZU$c#LOi{>`PcgOB<L!2bChT=6ULH7rjdr&rnK>Z!7{W{!6Lsfg?8O2#t&B zA0kjByfZ|I6@C<+70t@<OinUd31W|hn}n4~)<}z@Ii;_7LOPewUDk%SWBkU+ex({a zv3xO86#?(!2|0yETlfw&hbRBLr(cB!{K(3RogRC3Nt%=IhQ*B_D%~g<Y72d&?PPRM zF9i3<3oWHje>_W8rUX)RRwfzS{urfU>wISBj4H$ENnVJW3%AlFk)tg`L7Q84r^;y_ z*mY1T(~^S<ts_)azrlmg<8BepH!!p9>6XDZNkbDhsSNi8zj1a-fyzlG4rSPY@Z0PG z5@<5DRpuR)#fs3lKC9l>!6%|kIwCSD-VG}39;Yvu6d}*`&t*%$!oWz#+4rC3-%6jI zeYx;@+4)?SYz888BcGf;-liXdaYx8QF#|+Jh!oM|OEF%Sn-B}8Y%(UQE~rHb7Dg;& zy@TS}7~^nbYofqWzp7lY&0J{^#!Q096v@ommE^=Z`XoviFyG^t{FMCeIGUa~Rvk3H zq2pZdV1&8VfziK$*%e|ogiW<jj)DcG1WPu{Pnnbf$CH49BfZ>1aJ5PL7;?GFu_gxk zehs0odDQ`YGMn;O<^_>pD17hLviNTLz-A$4RcU}@XwzeXh5`{dU!m`=^}(&I4=zpb z;$L_KcYL)NG^b1%Kql)KJY7zkzs%V4XF{=wV-atX+EqamKzLjwbo;=0TBRfB>gH*6 zYr(Y9MnPRa8a+r#36BDh@d%}tuaKL>a5@aU5CDp(Oo_h|T*3=HDQiruKQ6mv(cr<V znez|7i=NQkt$CBAciI5LHS6i`STLJojn{9$z9Jq6?|zE7lgi+G>+H9tfU-16&u#D0 z!LNoH)a+$aaJX+jCJ{deloR-MptC;7F9FQku+~7Wr4K+Oc99j1o1i_x>FhDAm$+#N z;kFm({hr|#(iw-kw5cX*?)cICbjuTTRtT;BYWuAGq|OfDR07b5E9e8?+Fqr6gt4`p zj|DG$kwtvD5u#TbUJ;O1pVCL+>4X&k`OEZ7;JE%>4L-(eW3&kx0*L#gs%JorGI}qD zm{8a1e*@B8$#bW6lUS23s}mGqW&NB*T-N(Bgb;USrqBPx&57nBa{7%G%A`uUa{Ho+ zt4l;vVC5AzKL)V|xv~@v9h`0onl>3)A>rMXw%Df!_4bN_tasX_wj{^@Avo^)`m7Qd z2fj1|P>IOsjB7mCx8W-@HaG=gOxVG#6jw{LvQ9J$@LRfw-pUbv(<rDLWMaR2=4oTt z@R1=&h-5`S^n=}vz*_uLu7o|=SKfC1ru7_!K0a5K2m{e6T1Gq?(cJ$GMaC=dazVi= zWZ`G|4-O7+Qdwk<$$}=?(bm=-{Dz+n@P|LjhfC?Vv;}iLz)E!^>>e}erW^S{krz3z zkVn~UC$KAXQ2`e4<Zou}G`Cl8)>*lO_KsNRmDgX9wI{}((Ng`|>kTYdzv|%{9Q;MG zogA_T?(T0Bt-vIKu`h<v(d_|gOSM!n!N^DUj2YzAx_Hx1O^*p{&kjxkudj2XT6-~> z!Ui3nI%nwt#oxj#Awbx&j?sz!%&I0IVXGD2no91nv02BI9xqznDUV<RZ5eW;q4TC` zmb<{1X+v|qsB+@Dwu8j$ZVwR!{0)o5-|>tRu*8(B?cex>>2~ydlI@Y=O<=2-L44ki zI@V{piWNK-Y+SvSbl?lF{-n6*^QWs=WefK=2i#7?#VJ&MFqDs+6`fF@wRa^~WcUJb zzpqD9?6Ej28~HT)D7A_drjGs0@f6Gq3~LBORN7^vmOTE7PH6TT19C22-cEfDVnrCC z*iJba5smXh5Ay+sAkXQi_ozBDiZ)tw9lHh=^T5K*9X0jx+p(iZJa?VDF)IL?0@!Ap ztF)bl3ob5kC4>n;wBsGyFDlVm=7u<Cow}a5)Iutgku}ePa=5;0nuHbBqHT-gik{y` zv>S5oCaOoqKZCzPiTJKgbl7x1Hw6MHt@x|=_rhfmUE+Wvqfj!VF##Ly=&o#Na{~Qm zX+<Pfu;aB$l`o|1y%=z@G-2}+9kv1TFu$kQ>xnq5TmBOB(O^Kiz-aQEoJd8Y3+aMO z_i%M}lGZwAn4NAS<Icgm_IVMDLfHN;bZgq!hBR5q0S$g@AQ|Gf6k|p;S7&_9mx5wh zYOQl8b%z2MGjB!t6&NE|J`<1JR|CKH*bS9sYhC8=)xRhhai=%T&+oE((SOjGB|GC& zYuNHB0`pwfKxlBiB5Y4pXUH}T)xE-a=iXtu-JLBs8M6irkEs<a&jb8cXrq1hZYp1Z zBGq@9gsm9Ytv!+fNkph8k}HW%B9daL(Sy_aBip#;Bx@ogudThHI#Go)&bnpv8eivs zZ|Z(E)ynAhO9J+AkZqS_5h0y7@h6qvwT#Ohy)*q$8*pdQA$YUUG>)5_h3I|VNuz_6 z51@CPy&-nC+$bQqaI+j2aR6Hd@1QAxKbMHcJCKwrn!c$|*i9nLsA*DNNwKXQG|fOn zWN9%3pM(cYJ`-89(+_gr3V<9OX*Q~L>eTbwK#gJbxjmu|G%Lcr5GyplR14+eR33<7 zlV2g3*Z0WiY-ILNcnHAx<O#T0i9%>zN_ODxKU%hp2!zE|CZM<#{lpc6@wKWuDlFG5 zsI-G1i8Xd>wuTn=%6rX0^YX=h*V$U9^$87o422_6+Eq_}K*=}lo4g1@cH1afHx2~H z!G*tDy)|Ua<A)U2)D7*m*nf4e5f$C)3NEg9{Eev_LFB))WPl!;7M++R;DIR$VCT0j z>JRg%jWTwJl*h@ANuxmA9(qGreo$r(*OnqzeB^Mk+U4opu;(!<Yj;U4|8+tg24lyy z;_q!rQdZ*UjFdi9bEPGFM?_Nwy7V9ta&}CZ>lgadHF_mWsp{#Bn0{t-wp>rm`Gy6i z-q<19jq8Dp^`e2ni20p?0|WwDTbj(6vkI62hB(qA8Yfo;ZsN-+2mXD#h0Cb~hMy_K zTG5B3SxkT3_8WdSoJRCUP$1lOHdvJCi=Td3dYuKPMXaN+DS3i>%~<_|>ojga986W0 zC1lPYB>jDtHf2-lk{CPL+UaIt(u)c*qctBZlZ@%oME11V>fw9}X=sps>vY3in@M}N zm1}$EP1TxVw`0f97f-AOyJ&|Qzas_6f#;BInsbs!z*l`1FeFhhqK7Hz4M21icvAEX zE#OQd?Rhj?T@A36C1nxY2m)6NMQp}>YA@s*G+q2fE<H)ff~X!NW1nUku0<c(+qJ^L z0!En|=`UW}ZvWhdf-&?rNw!X|X4%p-#3(VLGO7OB4NCN&p?~viN?>i(4-4Z?BV0=E zNW0(I3OByI9vEkbK~4@JLgNp}6&ZVn)y+AcAIT%4IC(h385n)P*X#b;UNYbs96}lo z^;95WBsdS4CE1b7G*50bUZ_>)BK~8r(ph1y&!DIf8I2lFul+1hmyMM?@3(c0nMItM zUEpSGgY!Pa#Q36Nj^d4e?mkibYO<cJZtZ}y(Ew^105-3!(Ag|#zWvF*QY6*>mFKo~ z=M8CyN#m7Hb;pkXC=`lQ&FXFJ%orI3vm_6ZkUol39epJ9QsB6YrjA5wEdSTrcl!|= zr*M#vr#|eEztq0A?pZ;V!`1QJwhY?kB*RIfV{THBig$V`ll?HkVgBPs#&MeRi6S&_ z)5bYB?_dWW0M}KPLExa0a7;4uu->mTi;(7{L1&yLL_XgsdkK2NNI=5WN*6y#To}SG z9a)aFE&de8W+!dV3SwzOS|B>_ps>nz-4d*}Jjfg1_0W&koVoVPP*^{d%Y_O4Sb=pG zne7r3V`Q6nmge$Cu40Pd<j6*p<9ADo!5mt#zYNc3p2=#5JAdY!*|yDC>=BxNBV%QB zIL<Z1GfvJ&m%vDXUA%-`VtMu0mZfk-wFs0s;c>|dwwmx&M>x~l6_LX}R>w7>z+g8_ znN1RRDJj4M#0oc8RgI~jNDZL&QS=%)Z?JRpgZe;Zbt_w6VfN<5*Y>ft+2*Qt^UfN> z_MpC^OLs|SB}#G!#!HDKuyY=07OOt&fsWyt%MvcJA%4o7I6!!1EPNkFI9NNh9#&HJ zi;@nv<?0-O73Ba*cvDC`YRsT*>$A&il7?(t`zEl~frJ_GI@5Qv&m1C4X2)&|PEXTl z*kDPLbF^t95$|2UqTRpT?DMm8PuM|cy>`SnjIb&~i>+e#v-I}tEYh5uh;kSe_L>TR z{~4yruNG+)O?v;exi=9X-goO_$42}2o1`MSbnX-LkKQjA=VUgvtCX({pY*H?4f>Hw zmp5G9fZ;Ts*;{H7rFKj7`13jqsq)FfcL-xze0*hy+8K;ilPCjFTY#oz-o<!0@}s<u zB7c?^e+?Y^K*M64Zpwk3tYkSjNaTvUE!*@5C@A}|qFR!S$N{P~oiHf1wjm9ILVfB| zKw5)g0>(x=f-?p#E`C9<q%P_H(lpY(<;clkPW2glB^L3{>rqh6ZZzlLcim`~AHhp0 z%7Zl~Zl^LebQ~ZFnyD$(jNS-73n)~!za>J2E)g?0VJ`DtW1i7ND_6WOH~3r_kpbeQ zrb#BY0h}-6QV6V3J>DvmN~i2H(w*7gvx3iSCU=eX24?}4vSgzVszW?LDPo9cqOwim zzbtFBcWgiPV0{};3?t{hkP_dkr^abs9*uhX0CLD{+2op||Hi@Z18Us--ZIf)0y|Fj z2B|^?fj6(wrb&|aUCm!l;zZWfw=p%rjW(n5Aw~i|wQn+f7HpS>O71QLw6Vh84H<T9 z7=JrFI8t_3L}2AA&awDNnfxuYrHX~8F5Y~Ic7?R`LFLc9%qowomx~RDdH22TP^~93 z<Cw8P?e&P)>fzl57rGHDvze1MtVW?#3AKZc6core1*nhQhOcbLH1F6g(5GlyCOy?j zqkjb=(SNNNDl}2B(~IDoYq6@<M5&<{(7bG=5~`~^vY~Lz&cjzN!dW5&@R}ZvT&H9A ziiYCe4Z)xwM`I^UDYgR)&|BGuiJI*{8of8pAj0;{F{HRXzBh{N)nEQx`8mOD@hRRY z&mSPEgdtJx<p^v{oZv*1O(eRSSkLC_C*C@A0QCjZ;SDnybX3$|l*s}g>m7a#-d)NX z-Zhqw@g!C2Z#DuvvvwnztM!?1EFn~|B$po3I*Hr?SjQOSLj=&Xtd0YrTV6mA70+QK zZ#f$2)1rEruLZPnUW&ey2MBr;Y<@CCyX^6`647($Ss2f1cN7Y3rcAXl6g}!#h}s4f z!%i)HdqH1QMEH`i&hi?KCow+)(HvcpT>re}k0*ECvNyfbgwSU(1fsM=-as|kux{sw zpaY`;+N&zO8c0j>2lze6a@Q*5CZRgKi?&=wDt@DP2L0@6qN5v~?w2eBm(N<sjZ(PU zL&nU{{@JlNv&U%ihUyAmaJ(Zkw@2Ebp&wed=qfV!@t4-#IWCmabD$-Tt9@_DEY_nT z@vHs5b=iQVXFO<8=zwsc59sI&WJ(+!UP~(Xif7l;15x){3%c@>5x{R9NI<?!3LOf} zICSM|M3cP>bxDL)baP;L<%H50{xBW~;DO0N$^$DP<KG^c>;X$)ZUpv#vmUP!qb_$q zPLoAJl_*2Y95B#t3k2<R!_bgCF3Lzo&ZB2#o`3GgT~dSNHwsZh#YjwWZKGW+<$kwi zc^U>EjeFsS_ypapoW420MY!YuG2~$oz2lH?x5(mvwmX+Y!=C%L)BiZ&npJ@UqAvG5 za-hdwvT0?G7S#aq=6s&g5{3d|doVg?&vrt1u~q#Y(Sy--i{9RvL%yxKJ>6zB5oTd% zejYD;ybUlTe9o8xY!3oB>jOG<2V~6N<QeR2h9Hlng!n+H;e_)hE-~nguEIS4c4Yxa z0|u}I!e*D5c{p2@0MtZTwp)$di>AD{nXTEYCPEU1*8w5I6N=`#g?;I8REyQ_6SsT9 zsPJh09PEE!`TH}O%F66nUXGz+7a_gh>7SCl!A$<HTh}w2-Via|EfmetFB%~{(;C9r z{5x}HU=#FR9%K_}@&5ovK)Aol)pr%TklQ8s8-9$+>KdNXnx(MY5l8I;--Ej{oS9~@ zSTT-2W<*i+2(F@i7(aegVc_w{kH+#hj?Upi$KK{R-i)Zdz0GM3L^MI0!YN$0sV0c} z-5j_mxW`UL4<GJsK8_!a<HwKEY_Y8H$ObDR&S8o-$B(-@6f}A4;egt&adhu@Ne7Q_ zEfjb0ng^C+5$YD?Z~<;KU%24Hx8BgO+U%47$_CY^vE2$7l_21D<sg?X^Fd*}R*_Ee z!n(UTF3WB`CcjboD;5C$Y_7m2k+|jff?RPICEYX(FBtOKtWCZbc|i)lb7dzqIJ?B5 zcXFA(eKlASV8?%9qtpxX@v_Qc?@e*1zLwi6(5t{p<~K>Dm{b(CT;ekmA>ttiwLFQ| zSEHOtbo+w26#ycgJNRfipj)^X00EO{`c4}=o;WOZ?0!svalea%F1!~=H-#7Ql&`em z1*W&!B*1$Mzz9nSuZ2bC<p!-{Tvoaw#aA<-r6=l<Ko#hw=n`-3jHYGzovJVVOba#w zK#XCzjzyS>M_v;E1QkKLUV*UR{q~j4BRa#RES%3=-xL6d23x`rJRnXZUSt2rJzi`6 zY|`i)^Scs%U>tYbL2xK$E~8s`ZS<$<9QHYtQK54+lf)5uR0B(<s2eaA3Vaj8+2hHt z(u%#lCE(S=ov$B4O=V{w;B5m-yXSBxOjYt3XZD(j%o*`T1`@B@hj4P4msrHVsRdI< zX$ZIeM&i*PHLVpx98xJ4`(j#qGzCVg?3e0FjY{W<{Ia^h+eQK@;-#M5^$|<Wy#Xr; zF}V?SD{fHPsyU2>+a|N&$@Ng$7FREh6hyNFEXWmf_w`o;CUT@9Qj8%7FCa4?u+P|L z$xozUZ)Y(1i$3oFZ>66JW{k8~h5wzL35YKb2PSoPeAw+lQphLVAGh~BEs<HxG%%ZD z>KTU3^AfWhQ&?`61}v4N6KKPw!?b;iQF119dc&K~93Xm%hup8>zJK{Dz6Jru>!3U@ zfU~><21SKRFRMuADFXS66b_TJH>am1NW9z`3*Kuyr&9*Q)XLh8M}^iElWLeqHyR~I zn>GY3w})fXXp=aH=?u^<NE9mYSWoeR+!9@hj?n~Xm$Z3s5h?-mEL%L+xn(>!eO6{2 zK3yG^SH8Dfo)I6VHJkB^w1wsh8wpP2%s3P6{gZcA^~$Q8VUTO6rbSyS-Dhy2r0=5q z{3DlEyK;XV8%<~MPj_!;m-OTnVSsRSE3S-UR(NF;YqZmh2<ZG81Kmv~-cj<d4Wc&t z?n&F~D;CS^Ro>Xf;fSPU&nyOhJTE!OhCi_KWyd8GpmE0FTKys7#5`uanKvq2Q+^WE z39s)oD_g)(L+h%Gwc=F5Z{bE4P^h?evdWr}n-UcEF0@_0sO~`^Dmn>8uq{e}Ddn~9 z0w1RH;OMmtW|$<z&^Oa6`%55N5vZoB>PVAYLYb8IV(7o7>(!THz^4sqFesI_p{=G3 zWMc#S@J$VxgdQh;5Hd)s2Mn9eLFesyj<l4}GjCgDnoOH0O^fvh=uF<_z2xA6T$n=) zhR-dQjyQ=Tk>uJrvp{OYW_V{wE4=iV4GQot7d2LnwA#1fTgASh^RtxFrrH^3hy|!0 z`6gOa^#iAQGm`ydZ&QBw8l*mc)$IJae7Z-t5CAD&<8A;}gYS&TA{;tCK-f@VBC^(a z+CrK+SjxtpU@}0o=Ze+Q+xVWx0#R)TeVLviD})VSoo3&C^$bYmBgfJcMi`g4;7Fdq zTEY8*6#hu$Q;nN<MUDzk49Ut3p%?C8pKE}iU57fdf-5v2EajAB8Xg7ZODb2f)X>>v zz2g<baqo&Hy8zJ!;BI?hsTEN#%_wq}&d49uQWo(H)nBpec6SyZfy#Ik4RQ(0mMWe> zt#IC5j`Wk0to06hmTNfXrO^Fbo?oDZZ2-v-{1=(!`t<yo{TqiICeKvusYLE)@o-3m zxCvK?_5YHc+xco%BnBen)|*^)Q{4=q5I4Yr)tux^Z<Bl!eG~GccDoa|+T9Hc;Fz8J zT@7{Z67Fh5)-XlmHQJeTZI+6MsJF||>B&40FTElC_;UutLuv9eNKq>pQP||`#mC)E zu%<!A<8IqP>ymoQ5Z7^tO2f@g)nZo_@c)^1FXTMg-i5$U@cKRc5cnr(1w@#t8CG~) z(J%O?a8|#ro)lK}cJM6*ml;_bL)=pv5xQ5Rt_w;OJNSA-8vi1}LlPG~`Wj_?dT>VX z6Zo(qF<M|>X)?!z=rUzN!@6WmkJ^z`ID^_nu*!VU0s}Tl%tZAfeMp*sqjs8c50$*^ zmclt{Q|{G0XaEXR?QkePGB@xTC>*K8vJ%KjYG2++G{X{GI;4|bbd;pJV1GEv&(7u? zkq<>M4CfO4=<A0&4`>)5>IDX*zUtBB1qa0b4GXl)MRB|BH^rz{g%JhV8D4r3N)=@8 z?dc6@&TU&clDTud!aiN6CpH6qK2>#$JIVO|q2Ya2v5k#e&`@8jGJM%ooVaeA$_j)? zLyU40&Oh~?2tGZhJBBP;|8iNR*U_KiYq$+_+3`+W@G*`La7z1tj#<F8LI;pz=Q1z` zI%mykNFwJ@#y&(I3j9+;k`2o&Jw1hDV-~`w@LMh$p1^SyvI@_c5VowlMa4C%$wsAU z%NkP(c_;3iQ(VLG34mC8z>^MoOAckGa&&oJ+P!e7$cI)WcFsjF8u4?ALyDHfhd<aF z`Aed?9M&vV=UY$24^S;b+cqq4Seu@Ovmep3ktAGkgwAJgf9=@Z8OEcyzDf%=KeBUH ziQZYbwWIB8BrZ)9g)hm*Z}GJZusn{T87J~2^XAED5EW5&4{^{f{mJSXrc-2W{ax3r zS5Vu8p8V0d${6NPge{)GwV)TdEeXvZx*Er|dpryycHwB;luxfUQ9c_R>GI?vt)4DV zPLLn&)u^)9<$M6HQIii{SJ&ix+UQnl(y~B-0`OlQfIHvokY$HL8j{mMZ+~+1!|49e zr<<cg_;cL9H*R~Kf*t~%SQxlpbI(XcxF(UH_!{hz?uc)zYoKrgydncFuxe?JPV)HD z0>T4O@z=0OC_Jvko~&~5lqgsbqna51N{yafPJw0Vhr1VlLP!K3lk-u5WiNVtKcvn0 z==u1J!`ZlJE)i6W;SLMU1UJ5m1H^%F5bsYuP7^g1o<<<iQFS1E+#vM+kU;1KH<gpv zixFPK1ZSXlLZsZqhYx05F|$e#-5BpJx>r)9M?&OFP{+>Y4Or2|wJ(wr_5LrQW;!on zHl9ED$+PEAfBa(j<i(Gl4|jH^r^BEA_~|#pufP8K;lr;Ue!UI<=?<`Fyg)wzfkd3D zK(Ihi>ld448Pd-^N^ysB_Et1e%^~F;N|Hc|F7*@6h{7Cx<i{@B=%dN&60Q}2(ZGz9 z=WeLZTENtxR+tBOZZE57d|ymE@f?q2_+6y?V?R{Ey1N&RNXHJftB|3Eyi6MX6<))x zjcI^KWlyh>*EkM@fQ1ox*iZ5q;tYmUzmq0YU5kDE%eNNy7`DPhLjRv|3}%e0H~a}V zB@tYI{!A*^8<eGxDAbEF&ZT<{W(cj5;U_MxnUSJVpf=qOR>Gu#$M0&G<AJVuqKRDt zT%*BCBfNV+O%-6nOC}&Y!w_&R{ES0*oQrK>`v@ZeTc<^#xd3E7RgoLk2hVAZ8CvzK zKUJ5j#Cqz-?>z|Qyy44Z;-x-<oM#qeVF8?oVi`CjsXc*PClt>-&|BBXEei*hNiEI2 z^hn~tEay>PlQ_;NkQI;>m|SGGa#4heYbeQ)6L^AfATcW;f*GtyY6rm2Mc^~G7~8#d z4)@T5MTdZ;eD#w?%BJPRV9gx&`%u6Z3VcwrVfewe1!z(NWv`@0c~w@!U>rPm`;xsh ziUIgpBd5;Y`wlaZwiW=dPtY_JFBo6&mV5gQky#u5+1ipE+%B6Yb}Un?+l(d>;8Oeb zlANy&y9~T}{$@gs0~{m&T%SsXN1~%QuV4Lf#6&{Ix*T;z0YK_sfVEZ#L7qdiHR7~q zi^A`DGOz|J%}`8Z=67&NZC4z8?1jSspH{472*KF2jW9S*B+Q?NE1~cTMA2Fefe+%5 zVvK|_o)=@`wAdx?OI~;K8sRxDZ<JZ!^qLIf?lE6x0Ei@lRA!{f*)5cOEw6cPT$+H@ z;;^uCtu$XnTU}IKiJL^`s@&F`s~=+AZB$UxD=X~AZLrd+vUmyP0PxWfJlGcEN@+&V zT#br0OR7gLawk}kOh_)y1I{5uaY;*lU@57tzzE_nKrQGQSuqqQLQQhxA=Zr^-2iLY zbaT^QKvtbQ4+}B1s!qVh2(I=JDXzY~Nk^rn{^zdq19!<#rECBP@_#%+fv8YNU}}#H zQYP5qEG?M%CvFV#=9EkuFL!^{4I;UBO)Z9VV;lp9tEzZ1V=K}U^Qc=^d`8VTueob} zpVQET`N!c_u@d=Eb!Fa&o3Ecg+8(tZHRohvX)2jAnxC(fPydsW>Fq)t+5-H!Y&GV6 zvDo#wjee#y)R1|?H`r45^p_L0U`GcT$K8Y0=*d<g6T8Y{S-@_Hfaz;SK-{Y~;3oc! zTz$t1k0;>7!_aQw^piS+<wjj2+_IhC*C|pe)lgzm8~V(OV8cDplPy<qMhj1$N|hF9 zT|zHbT2LnuZ&+STV1v)Ek<SXSZOWSivtPfZ+IV8K^Cd(R@N<Wil^7=U*xR8FdK{rx zzh$7yY@V=g)XKs%`h3h$C7_(x1nK2rhvpOtu11OnWxw@-!M1fRq;%^L#j3z&(~@L& zHc0C_LNp-;DMl{phU7ah>1JSnA&JS*3%7fM2f)0kuu6nq*pxdRF<Eg}QceUE*^3eN zWIfdxyw!u^=0@gZT^|5jJ=^xyLyLsmcpK$iV&uz$9?(CVW((B;D|!Z1b!>7pp+MgJ zc%|Scg-;4asgWv4(Li~H@MS8Otug$)0F;1a>88&_6;?!9@N{ALLK;}91pGhi0G&Go z<q$=?^+4MLe<t8$1rFEvzMrFc)!}h#bb=?f!VWF?>hy=@q70ZQtCkrIGU3$*)uA8= zF$GVdQDuwvXg9@B{*pDdENwlu7#Hctg_T_i`T-vWH<DItMT$k>b5?Wn4ub!wqY5{o zM01spkA|3^cumtbQu6r*tl-aCvf(DR%JNr>%*irI4QAI=TV}7`W{cv}+P5)-=9_*m z!(g_|*FhNl{w|AS>r;1_(PEq=n`;=6Rj$e*E!9tc&4z>uuS^ck3im6c>a3}t*o4y) zE5oNMB*U)F`^yenI`qmnE}i-^3Rka3zFzN9vOS)Bb3+Z*-0|t&YdY(4*ng@LD53RJ zCAsozCjfSMQJW@<$mt&jVj)KZt3qo!l}wd(lg0SzgpHQl^Cz9l9d64rzFgTQ26tL4 zKnMXxfghnUEow19nS=;0ZLy2t50(w%?A1f;VGB|aV%dziLC!Pz)#9ahaV$eX03R;9 zhO8z0gQsA?<9pFVS%QiaoMJa<e+96(x-y8}r}`ass^mX(^*O;%J!Oz@ZZ`sQH73kn zjboQYlfY0u#1ncfpclDEeCS9yhdans+|T_8a-%IvnCL0I#YSznb|Nq`{rX7rFW3pQ z*F8&UdHW5+&+a-LCmeFZ_VIClxAth+X#(qsOu_bQmzrm=H}`az*(7S9ZESog*&8CQ zT$3Vrby9XSZovvb48_hiBV8*7+}mk2qWN5^z}dcs`EG0svBu_ElOUXju1DrDrheUP zn>{%DSv7qwV&N@RX<>P9=|WD8Kcg3+?%RwOE`0E3AWdMFcAD!6J2b|vwH-;w9%=MI z{fZi!<*Zg+#dyygh{2;{*h*_e-ccc%ge2M~(GBJyr48?UadmGYcLJxKOLO_=E@sSf zO9$QZh+}K0a~MLnqO2rtcwOKo_*bafGEpR@T>R0@#_bJr@vmg6O^KhNRZQ>GQ-6Fp ztoHoi8oLkhJv1vX&A2Bl>$UJJxQh|d_WP-Mx8jOC@SHRwamZ70ekNjeSD<Puqe(H1 zrB2D-#45!@xnNs?gwN5K+^g@Z2g$vT2=yJhcYvsXrrZTGtZ{-Tg=Fsre#>5ETAz<0 zTxofuTMr!544N_<_=TdZrc*i9ffYG3SU45VmRrLJVIli&d;ZiU1Ac>)2im>mZB#?C z1>fkjxSGJ(+_L4xH40PQct3C*Gh1zME<kV(|5EIv(~sRgvOVg-d6xdwwks0o{SNIZ z)3@@REePUN9q;#?X{dA1=l{BdTL|-O@;ViAd5>ySEb5^E-1<Q4U-^xr+G!@HGGOj4 z?eJa1+W;SE4w8spx49zz$^nX3JPP?&=UtK9GBF5}VcbW!i@-&-4PyEXn;3NTF$c=j zNWP&xH#+^u*@$6*X*SSh!h4OztUQC;(P)K0^Gf0lrm=@Tas}5SO0~_-1s(NA4_wgF zxY>>OP*eafZ#^f8vx9`L3vMi!Sr0J%(Lzfzbjyt4^9SKeOQ-VcF{5{tj4NICY!Xxs zsF5NSQ%P_2?r!baDighyTWo4+x2^l;inooE{sgZdhq5x|(_p9|BQY4&oz4XTrJ8(- zE$eu0m4c#_+q;GQsT#Lv8`cT}*x2AUP?%k>({E#98}0iM0maDBT+-a<7s_`lI<tN{ z?9c|s@#rHB|L65NU&3=E$VQ*dG2qZI;P?QHp99`N7ijD#@lbc<I}V>f(OH?EWw5W1 z?=Welqs93GA9eld7~XYd$3Hmg1;=G@3#Pxp2q6Ybz_c*ICI*)4zWpB2E9T`PmZA82 zRCq#vc2_aH5O*@wRK{D1MjEtiEc{&%DCVw}OLfBu9w2ay8JL2<X7QWPoNaD97}Wsw zr^uvr=SWIc8V)g)9aTrg@faUfC@5+Nr5}}BV@%=pDW%{t@(AX#n5!cyMqs!pi|Gw{ zpZD)kMT9~NfJ|NG*$v&*gX|RZPr+)5m!n$?-LO=3!&k3w@QQ2<CxKd*t`54oF;vFP zeaWSpe{|zbo2HZ-jbMPS7%xMKt>n-rU67m5{Sw1(yo8_77@M;ok$<4w43qIx5{-$F zjz8bPPfWguKQgn0bol*>eq#n+IzZe4!-FjRddpwbSbhb08Dzk(xA2Q<<a0@cUz!Lv z7--=@D*QaapO_4$O?sZI3qQV%7npR4ci{Nm4y4o9Q~K(5KCR&6s7x7=v5d%yYK_){ z*Jp%%_@xIyG)XdgnSIpkzRkW)v%6UsEhn#Kzkhq<(kyhV%yXF6FhXN1Z5$VnGn+j_ z0+_Uh;^qEUzFBj(5i9lW6?h<P<_at=b^^>8DI`7r1sldeI-t6Y7opsKKQt25%vKv4 zvN7{_Q>7J{9QET;;bC#S)4mwcBH<mh6Rxmn(#TiZG@D!%teT#|b+sOE$JJEC!D_i{ zwTwOQUAo#aLv6q$gHYVYS`%BC%tj>U{m+=ChUKJ-03lOG$P_W+$~nA1_9IA!zYZ~O zfUdZibp<$U=Wu$=utDWVYUZs&xwY3;Z{;H!;gB3{((}8$$hF#UdpjBbA1>*T75tYh zD+cCYva))2FD(oz+-5lbUs!T5uJ&aXFqZzx)zn+Poa~kd3n&9h-2E4=AXn0_<$7GX zjs%D=S`r>^>O5vu{ciWmR!@cZHdm~k0Y?|Ghe7QXVxK1UH3|%Z>vCLGCfE}WkPE=A zT#h>B|Jnsf<NLA&X~Xt@))wjKC`hKoHMc`H0WfeFJr-`b&z8^&fk5&@*=bO{Y!mv3 zzm9R$nFN6jnK}eXHrmwvtDO<pbG^M*k}u_fUYRc$5(~_T4=c&fNeno^Eg&4UJB-`r zo_#Y=g^2bePJpmuG(B+5fMzgU5r%<7E{{iSD%W)Jc#XNSd>=Pz^F%fe5Nn6M&VM^3 zWgWH&iA`Q+@7G!1bOk(-frkb>Cd%&j-@C%!e=qlfMlG<{$mr@E0JDB5w^ntp)>g28 zkhzwSh{*d4$f7>)BrSrj&Y1BO3yn_5Ss@;|Lc}zo<$r8H;tiBq)cxr5HVG4m{JDG_ z4V{b_8nK()m9eOJ0OZ~(l&m-2*=V;6Xj~H8Po-eMP1PyGSq3y#XcR6|b08SGKz$}W zq*?t@dMK)OIocFe<Ez5-M*RcxRe&6oUhCcLhL31Ln$X|KMF|u?Ujb{vAE>w2Y5pC% zZQ0E@p&X1q0|1J3;cf(REkTftg2+I|;o|Yxt1J4{vwNtL{=>+2!n=IB+$_-?WhUDF zkZ;#J9KZICH??yUjRZK8$_=UN!$i2U_FjR%oO48k-4A{zu3-&(*XBfmFz-u$6I^>> zj;JMXfh;$XHi9LIWxYkIsFkA73jfe&9l3-#;_`sBkVI}Qyr_J6K{rWUf{Ur>`L0NH zH-jj3_EyK+gF&rJ4Q<tpt>&Mk`Q5$?o`)CMoQ~AfhS-T1-TPdd6iK&1kd5*{ojN3- zPbN@qKZwpMYiG*LMZ>O3b6TGAOi<v=J}xs2yyw;xd*jNDxr~F^W2-pp8Vb?ZCNbTn z*htYWd7m2PtQTTtro*?~mdv#4D*#!a&!ms0Ymkxn%M_RWQ;a(D;Nim^cy>r&<uRhe z@dvsYgszqGsXT6u4ur55_xhb+ICP(cx>SmWlp2jU)}G>4%h_v6if0FO15IU}y|Md7 zEs6v}|BfCvpeU${xn$;DY@-+z<RZu|%elE@u*MNR1E-wj8*l0p2HK*By~*nS`fc8O z)U~%XqJ4&I;&J!-kY8LvXT<lQ5PRnG8R}UPpAaUfn!gA4q&3rNZByqW15DiQ)E$Xz zx2pxDa8GvZ-S%|!=jbLYR1-38n&D`Lk#QYW<klMiR>J^u1*z$kS`Jg8=rPVA48xw# z9F0u^h)a~}&`AO21aj$B6Y@W1CC0&k9m*7kKsc$e>6>?{Iw3dP4JvN6)vO<bL&1L7 zogH^CFxLxvs79V2nu|^$7l~IAx10+7$w$>nI5svKD~V@QR#IpxwqUm5Gb25lAtn)& zIyHn*6Bo8`a9>S9Mkr9Fl%_ub<S6GC`gGEwzSz{J*1C~!e{Dkv=v{^+fXJu}zm6T% z`E7e=`u5*&r>VdBXx8lx{`$&E?Et!VYVk6gh+;CAU>qC)+dl9_$G%W3wJ+3@?2Ci0 zSw#xRWZxX5$qTf>5Ug+}58sSO812#w@ZB*q<%#s@%g^sN!3ilj^uu0a`Rv{wIMApI zb}g=cd-6B!$qx{))eKhqllS?ZLy=4bqrde4o_Ktp?{vyy_IWnCIeolPm7~T%eL*WN z|M2ZAxZ|MOlireecb?FVq$>&PCQd!Qyif<9zMRSmYo)gR@pU}US_?rxK21OJ#SzrS z)j3+gMHKi4hwA){0ILJG1*piK%x>Xn%+W|Axc2xG5{YVjg4((J!~+4xyBtOz?qvbd zp`c^jB9M?|Thj~}jdzMmoX;J7xvQT1;1V3>4~qn)2)aS1anqae)#+-!O8x3-LnnkV zXuFh$cdi1SU=5t2AV~M@8n=bDMz>A6@uIN%98~&K`ZDR<o{^Ly#<KW3WLk`o)`0mH zUb^EK0oZ@gX)^d68@&balkFX-9`<Lj_~LgXuMS4jIBc)~VgR6YiaN?5qH|fEE#n=R zX{^y<K>GxrE3S*-Iwd}CN%snyHUu&g?3isv8Gz4!bQOdPjJ8-?HtRxif&BxQEhU&5 zLjiB(@)W_0+i}ee)47xOIPynYacDGhz&rtnN>&(fB{j(j8zfRH@E6g4<1URJbF@#E zkRZK%4cl)3p}=oIcD;kK`Z-BGfcxhicJlGTt;g5aTl3_>Cd|pRQZkh6-DOW!h&0*? z$4H-zsfj!zb*vnat(c$JPidNbW7XZ}9BiaZXm6?|h<u{E{@p4Jly!)pUVh)AvT!wZ zq0j)$>Wt`A1Q(u}kwjM|`A!}d=j+1BM_hR+1Uz!KVRL&rokN%y36n_S_aLC|8G1Z@ zGv3}AgWr>ERKrsK!iGPjS;Y_a_878&ML`sY_TbgH(<E(k3#s2jGW0;n6=(~p?*`g# zt%Z$^Fu}J23Yi7@Y8K=?bN*Se_>iwSC!f0(D0&~cUe~r=Cu@!o+3eeR{8doX78*MY zZOS1tGmKMa_ZFsxJ#iE6aUH0J25v%18*t4k24b^^@mLi;Q?_aSiP9JKfS0<ptO2^w zHjEsSH>#cOpKNywT8}c+ImaN5YMSVa%=W~Kls0@{DyhqrT&uRrNGVibn{O1+7W9ox zPt8WH(?~W#%7X>!D$~}ZsSRFf9HkDXjxo5&*C37XaiWk$bidnoo7>y`qE%pvUD+w! z)5WdJBc8M7bdcCSxwVWeVU5oyZwUnohi7}{`_wWLA|IQukPG;>A+tP8D31kv-w>8K z;}C~2WwVytg9XUl#pO<ovRCX>+(YX!ZhARly64h3>W%J;cOq^#FHlZU7eRF~6#qk# zy_~P&B7tpf#%*|xl9&+jcT!H{1tlE*`RMAX9Nqlom~u|1^1kMt@9uUHIJ&{NGk<YQ zxZaMA?rn7SEz9x!PINzdA{HGGw&m%4*C;>2#=$k>EItE-OMIUZ*8CQ3Q>h0pTwkG} z(=aJBi+&%$z74hTe3w=r)_RUl<Gz?(LG0UdGtzf1;P@9V5*63j@YreO@>awT;x>$J zLuF2`^7?ZfZ@4pHOV>d!<Z0J_SD_r}3l<IM@-I<>168#ifhn3y_`NT@iZ-U}PC(-j zE1IH3xNzGGpnk#}T_NdV$o%;=Mq=vAyHzQyBn|V5iVe;SN7nvkd*_>uT@%x5>Q}%# z0as87s^l5HK6Q@amq431nWOT=eAU8t1mR2ML9zi!!K7tYDk#r$wlnMH3RDi7cCmNV zCL@yfR{o6=y>w`d6x~TR;Ie17qVif=*eCy=5os64xObgSJHpncT!wI{mwYlC+SAsh z6j!pd1jh4E9z6Kz2os<QHmAT#ph#`+XYm~Tj90{5;x^$z)j>9}kKH=RqgvlyH2_*N zcf+B0Wwg3<z2b=?w+i_7i9RVh<EPFn9HKJ`DR5^?i>T<OnZ=L3wzmB453-ax)m6G# z%G%|3*a5DNoo(Z_k=9F0yyv*Po>n-O>z>#}rm-ntTwcgZ6n611(5rANZs{b>kb*ge zfzv_UptXzDfwVNv*`5Q3xfLJq(ofl}tc1*vP5e4n(Oz6R*S7od!>8IU9IuB)^>f#; z6{<h`)jU}$fu!|WAC8GAmxs|}NNS2yG8UYcBwHjiIYWyndNYy|21ufJaswxc>xK8Q z{d&!<#;h<re!aVF;=i9OgB+oe;=1RLbi~}<xl*u9)0Ev6qk4afX$@C_YTa&g<GvgM zy>~a^f8G_ZSfg(PkN%+XT(cp+k0O&PvD~4JI?O^TL>@LZ7kE0lm}_+nmB@T2W-ltL zpcc~6Xw)Ae-S@f|IqcsQtCD}g!>{NN-`CqJNLlpPUY>_M&$Vx$UN$E5V7~c+ng5@8 zfHnA6$fsmBYex4^1HX(;*$>M0CgC<c;m!J!38M;M{aq^G_0BmsV`PS!ACC=Ch7-nc zu)AYc(7P7sk9MRb>ZRu?h+^B|Xqy*MYxEuh@JjP`Y|#eI;qfg!n8Q^kDB?}bt|>W| zZ|vN!rX1a8@Y;OnX8_@r3l`f-;ua<{o-j)mg)q4^Q?WK{ob8b9aN;v#mgHciOR|;) z8O&nY+8z_kyIirefosoh$SXk+ge$Lmrq7j|J{9%^1)Xu8;sMoPZX4Sh2>LXZwj^~0 z0&P*%Ru*5pGcl=!n)GskXb2MMjF)#zUL^ji9Yn!~(UgwXM8LKv-SvS=>}@A;hi1hU zkM`4lTJw2D25{Ny`=OE1I`L6y?bow<@-#=YhxXe9N+ya=gw-|gr3DyvYev9rF0rQM zg#T&euUvBmo^DZr09TujO-Db@lUBaPYbJnL8~s(1EMT7ps|hS(R;G;_FB39H@>3+Z z29z#%XV$a-V6k!uTTK2tAIzyi%}G!BDQ<7?^mk6#BlSfAHVmi_C3oPxKJlEM4m6<z z54;lONivY;%Z_Z~zFQ$&<n;qq_?KIC=c*_i>Cq}5rvA&+$A46vkqsQvc}%$H!_7Ij znFAFEyup4CbP33+K^Q$!ACNvzi3mbdYM1vRJe99io~POk0UAozg=tSz)*L#;<=mBO zH;tN4LqW^H8}*JnM8l<*bEIu9tygQvQ=^Gx$uk|RE<xeHJ_x_dNcVuw9UbO{zhK?S zsJ<5!oW6rw0tOqL{uECtkRmvLL^k3EFye@97kDTcSCx;r`qJfP5#HSA_MCCHhV6fa zr22RAj&`|?+xT00iWAdXq(w=Vm3~oGG>+{w?!--|a$9F4xuwLjb1}tJd88FJa-Y5X zd5b;ZNXl_L?X)wEDIBm^EEd4-VzE1){6txGC0SJX)<hyNpPHvEr^<<i#ow}@N-UX~ zj4{*;w-rRvpC)fQ2vjM*&i<Icf%uBuPWRRA>FG`n&Ogzb%o%EdINHx@qoRtY00nHA zJNFUV5eG}@!tdLk^;~#~dZTEHQjR!QOG%`WP6JRW6O3{&%o0oi{PSDenra8*@6E5+ z&8t;~7>|OG_Jh-Pdut?-8=;hxt!%V-$=K$YMTb0Wzp{voVlw9!7^iZ3yPxev(n*p| zA0#Ln4X;Yv9#$jeQc5Bro!~;-Qd7$?3DaV-$TJ{qjGLpC(g1$?RAE~juXjpZaSoLH zUNn>$4<Y$4X&JH2SJ_b9h)_JAf+*A`t{N%dpfFurG-UMxEoBrDTZ<%YlrFPq<~e{P zklCSg?_Rp1Db8LsndQSN7-}a7r&;DmV>?k&8}SikNUHY{jhe=;Uh~S+HgyX$>$j&U zZ^$39GZ*exbB9~NUJ`~IuNEb0mPE{wUX&9}^G(|V{VHlKy&W$AGpahANLaE@DU;(u zoVC7T-5S%!?&mC=PaG!q9P`%Er9l<MuNK8&(9FfC3M&nF_kQ1+OUeWF2{!?*6ca2> zrhkpfyP-rZkq!{W8t9=}2T%6T0wGgtC=sZwy<(+5eJIf*IqsFNA&%?yMw5szd?e5Y zwE=<0HKt(U<AjaObwScjuP;D)2IlwkDzJwzNxCdYvg1+=#kiv(_-vq+EDY;vltrT0 zKPpZ1!K4P@tSY3c8_z4)(^V5RCN{xw*w8ECYaGzc9s@CRpb4s)m6tS52|2ECx^+sJ zSy_Ty3hE(Bmfz*WQ7=FanqPf0Ex~3zBwi#!m^Fvd;m!0q-((B!RP0--Ptd_t%xo)M zpbfi|@a4;w*^By~w7R4WvM}}20=-j&hrh4F#Ny|9od`|AXbu+SSq+hBxu}eTprl3( zKS$Ar44wr{hb2YHWi@^s?R^?*kmAn|tAY(fuYqR_2<pUFB{~KasC<df8XE+w+5Giu zj@WphRz#>$%%}^4aa95;WL@`5hia^l%S4Z7trX_niBs;_VeISQyXOmJt8FU}XIc?R z-D&u3uK_C9`eV64&$-k(GP8`uoD^jfYTnt3@!>w<E4aU)X%+Pi&ZNfAnu-}eW0E6w zO=au~6iXkb)3zem$n%-roEYSCl1p+97!^=L361{5Hx?N#eh8tF*R)O@T~BvfQG68v z;ouhz554^7`LNx%FGCzw6`VdJzLf3oe0S(Wy(-<+aXPl6wZx4pDMt89GBXX^Fcx|> z*YgX~TRzp40L|eICz9G<wnp|ORDT3xq^@M|^iFqJ;3LW}2q<p~z1i4K0&6cjY^920 z8YJaT&vWwiAp9iu$|vlz-gWCy2qRU%gsCBhr{t!OltS-b@yahRb$LppST3@2TOGdl zf3d$$ehT99z|?+<kO1%Ir7(zg!J&2xXWUgj>Y^<!bWLAvW8wxT=b5*J?@*}m4G$c; zbHZ;q9`SZ;t2J1>;U_cESPYfW<4Q90G6Pf)D-gr6#qPfh3@Q)B``4he^hR!=ofU7L zw5?aEHL<1CgO$lNz$(o$r}+^0kooGD!W%Lqx(e@dzlQyS6=M}z*9@X;D^k(thJK7P zbLr;^*ZLrMcyUpTU?6n9PxI|ru-BE7FTVa-P8fj%ERY>aH@Y%iuRh5DR1c5P1?@~Z z@=AN!lR%_Ut(_Xaf0_I5T+hLZ76gMO9g$)MLO@m1g4<~zY}eG<<gkczGYinc7YAxj zXt_f8>lC$fbA_=FXlS$u34nU?C8DWjyy2)0hUFOeqPb4N5l#`ky%j$({)Fw*$F#=R zTwiLag%R6!l`;y`T5ae$2spM08?_8#!tQHd(#GGIrtNM9as6q#wK(%oS2O~fDCE2n z8YM6_Dey9Cg-|u+9C^&jAE~ChxbN}@-jsVMq23=T^(L`<Cjc)g+Q;xtayTi#EwfHR zXnkvSqjxi0+V>is#_F1ll|$5+skPxJ7_>2Kt2iT$XS~aX9v3$ppJqKWnA*IrXfwrZ z{s4($X;@Nlph-xhx@$@F7r3I=r^Ll@!b+anDT`SsMI}5KwaiId$Od60DsVNDUPeMN zy#`HnqXHrFm?gfjvk}`RGq1){B35ObtZ5`$E)^kL%@PZ3$0~t61Kn*@0KrqT-zrvR zAGRnQpx(UG+tdLFRpS|`&E%T@m=t^ZiMyy+W~z+C?jjRh<YO`+;Kk)*%1|{f0Q5`w z_uK4ZHYF|G@6a^wqkJ|j<ofg*xLW40>Ea`-%!mmd2rz_p&ZjT=pKmF*0f5E5jvi}e z{K)#H{QE6=D!!!ueoO0}YfW=x+7T*0`kOIAttQVWFXi8FGun@_hiZDED2d26E4AQV zkzb=_Djz?|$Fm_jSagCLOr$HEVCh3wr#Njv<SKr~bVs&8V?#_?T{|+C>LH&yGo{*W zI^@{hfdP;U1x6v>rnHroSxzJY1@x2;XX)KeYj3Nx>Uu8wNM0Jk3%k)>vQM2JWW|9F z6#sTLPqOW8iWX#MRxD>($a=JLA&<Is>wKxZC)o!kIXbfsr#B6)it9#x;h*gN=HV|m zAWO&zm-xb8jdr?!<i!l?C5#vRr!~jDTk{_a&K6D&k))PvN+A0UKl!fcd38?_4?AfX zZgdzi9@fIl01Zc3zc3aO&1#A&!^OceHcaCBhjDd6-(h_uf7+rO_-0KaJ|2!Q=GYBy z0lVMA0PKm`WF$Kiei*(R7PNhNl2SXpRJ2h^JG;s=4HzafJFKU4M}IJOq5+?mqnof2 z{>=xH>$TC@R@Q|UfCM(&fz7ELkH5-a6AK{(_(K0SK7j+tcGyzjC0qJW4?;1Ow@;7L zw@I8{!1{}EvQO<erCQ1-YuR8?@nm~l((xc7pr1sl5l&*4%k`krX+-$^1t5hV>QmLh z%UYluH9rhI)aC&6{F;^ILjHVsVUI1lU?8P)lLq+B<IRfr_Bk}65~y7D8Y@xY8Mn&0 ztAp^h4t=F|>XIR4knQ2Rq_oBd*+cq$S&Z=BG25rVrnnuhYc#ujpaMd{iHRolV@J@C zOR+F;I$axvQP~E;V7!=?o|dj_a1Ss(qEL0+tnuL?eArKY_!K@ogbxo;URH*Sj$iXi z1fk*rH?uyC#NNo%@wwL5@Gl_V(_b%agooV^H`a>&9Jr6rUhP;MwT3dB<ImWNlV|kN zo^X)&Fjk}=3YeY{{1I!?_N15igD~qZe4z2JjX~>`-uzQLle^PCXHZ*2aQw!A9@D#H zr>mqqYb<~$v|aL|pr8F%KP12|zErOqo`JMa?t6~Ktz#6o(K`%|8>ou$VMDW0MW!bD zc@8Tu=Z7{xe49bTaH${ok3j@YlJqp!yFTc)H^ddz5Ce;;n$c@NZq{prY$_)qw*G07 z*sP4w#%wl{rDGsul6@Vz-j*R|*2MRrfy^>oIH#20z_wy@a!2=o*vr@^yZPKS1w#>T z``$H(&WBzQ&jxoyVU$Nc_EsJ_*c%}0(kP`gG6X=#C8%_iU^Eum*M@jgj1|akTF%*n zVH1?MO+3J_%jsxc&H<V=uR;5F&(O$eAKWL0`&w_hkq}g_aqk}fW8S~YAYRkKItTJi zt#sOqq&4lJG9Q-t6%L0Ph0RJg=3NheP2X~qy(_&wAu!}MYd-yG(9dvD5Ud#}p$BN7 z!Hpu0Dzc*(##b|V79zr<MmfqkSk6@ZvkwCeACV96`<q<b2xK8#{Gr>!Oppxk1*NBS zuIf4&=EI{;pkngc<Y7Le<Js`?Dl6zw?wcDkzT2Jl7X^@}{Gt2F{;xmX@2#_K3e8g2 z5>0k|qnX_4ah^t#lzz33@NVgv+(Y;<oxY_wO%;Wg8gZ*s5^>FK7-TdJNx+^LK2Y>~ zt7(+eiauXr!|8|!!ilve7zkls`EXcSz)xT*8uio1&mSGrJ#F?Cm~iGG$J6T{e9~c| zX0ETVcdqv-$jpmBVu+dj-M>892H4wQ0j<Z|``g^bHhy}rzrVMeUtA8i`2u+RoZ;<Y zoIJN7pv*EWd3JGNel-uAXUalGHVW0R77=8;ZVyb1Y=1NW6+9-IXmdKJ2tDN_VMD36 z&h(zN)-1Oah9w#Uu8Yd@n+8iyZ4zykn^`Ffvy1Vl{OiHouVJ5e6J(`^eKAe%_!9Y} zQd|k%z~ycfZ#Gtvr!A=OTgWa}%Fl7PUWM+s{*>(bPS{u%ypg%K%C11~y6#fKbCY<K z(s8_0+{Q~aqCVm}hR~AAw7=<7$%=h!>YFsEJ>f0MUSQE7UtkGMh881?KUEZ0B6$_R zLk~lsK%S)IpU@NzQoFGOh7{<v!6<E7ReS+m2Gm6l!CMeLdK~$2R*c62il1x_FE!j? zjj(r~Ntm$s#L(l2PANQGa8Jg>g;m4GJj`DH>8miL32WMNp90hh<M5e%E@awuzT;P0 z*LPFsl46lj=NvPqDlWmSHSM>7p|;o~2q@Aco*Z*LVn{yTS@*FHHx5k<rVG(#+`;xe z;Kg(Zbgyz0l2owKM?KsD!?dn=w^4vK^`kD`JGyjpwv*>xfU^7g=sMQ!q}0_+IFG-u zqo}<(Lx)CUE?NK_J!=9#s`>f0PV%C#2BJCo8}T)fgxHA;rjvbB(fHzGZDbV05IzD1 zfCh(?5p0mv0hb@<V`DZ=#EsFBGf;Q>w5FelYhLaAjQ-`k6+mz&(HS-M!Zb%EjgT<1 z^%0Ee+_*e3&du;G^7IrT%h^}WcGd-Y-m+@jXXB1U)E#S@V`r`ViW&|>FIvFD>JKt| zw}$RS))c?!J2oJu4TnyYK1z-}q@>dkRYD08YoxV$YTas1p$^2)?cP25*Q^RhSxx7G z-!1tKldxHT-8Au)dS~VICm|3jk?(snOSoJvi;(lylL7U(8lS|xzSG2&ibUHLEG9Bi zvoC~xSXL1GUEy9MAt>8zUqmYLM^glk3BOLrGrE8JR4{qqL1!-pEpWfP&hA>85hg$* zkx_98IzT6Qva64E!PZ_@=sUn;>BSij)OWCk+)r;@cI6CzE~E$O{8yOF_&-JxxI}9b z1fyf2;o&YcLBq6I^d-LP{>PwGDBU}K(OCqS+09m1vz-RP!{x{-r}*-R=YU9gRmPW~ zsAscz0~NrX^kQWwZn4rdayfgsR5&J>OG+Epc&r~dr8TFxA0{2r#0pXVH44(-m~qYJ zTd!9Gq@nsF7uYCykG_IV0P(?>IsVMidgG0*&lZ#%wsC<6D`rc5zq{ShXF;7#g!cj` z>u@+rN71|ofqHrif(}RGAY#*(S*fn!^aAFMnBmpBq=i^)jq%Dwnn1Zl+eg@KPW69f z9;8BA06KVPMe<@-CEkU?!3HedoaY?G8+x4<`8zhdu$_4bRCosmpJ}m{yq*HsqQIcT zkZ;DXI-KQ*OWKH~S?)RI78cUiG`*~~-e*cXQ@J&>KI70i;8K+PQ2818=Ns+L=fPfh zvUesA0&Np&JJPvVInrPA?jctqO4LEXdB~l5e=@44B(5R1oAII3!m`QJ=8jv>?d_e{ z=9(=vet#_6IilOVTp_N-svM_{13GFHH>QXPTy=z)8$42ovE!<GQ1|OVtl6AZc!9Fr zR2vZNTZZ|ODBF#WTzg~EE|_U-R!W=8RBQm+e@Jct=}C&_vuALYp9y!KvCrM+p(ifw zGBOnsiZg##fZ9RBSDWw{_9u;yOwx7`nJc>~=Nwz!qW#Gs%oXq{Ze5Fg$^=p|!Oggy zQ@_2fJhd>|75B4n`}KFBA121zEWIvtYSQwR_w3bJDqdDua=oqbR7}F+$?x<%m=mma zmWa2KHIF{8dO(YRgA^z@0`NOyBD=Mx(P6e=_ui3x8=L8yMh=fJFZr(60JTFqdbhVZ zYJjH?*oiN7jLA1ACXDF8V?hPP7g&vi-#~?%bBd2e=>^M)Jv=Ybl18p%_@#JF-qL8b z&Ue`Chei&6f2a?W8PI0cG=SrB(<pHWLwnG-33@|OY0?ypeF^~0Ov!e0?qg@&9!{f5 z!^11dFFU8W&-EdFfURyaGMk9YcR1i37SYwi)4N+>JT88s0S+?6!0}^oEo<JXLR<Zm zmKf6Zoz$zU1G&&$`Y^3VHNKyr+y2l#)X|&VPR1+--P5+J_95z04WKQN@SF{a;S5CN zD<+*j!5f4!;3A_@+G>Q~)o2uNiDBlk2uJBb4e36zgLeQ*LzFFKb)dLO(6*xBv|4ar z<jKcA0>Xq&C_M=FrxsSRGuF1K9&HEV)SPrsYsLKR=m~um&OyQFiJQ*X6N@EpRf*eG zgL$nNQ?{v<F4TiMCWi69T#yNFZ$}V2H5L=D8P0+t(}fDsKUF$`zi})RBfd}nj%Dq+ z*a;G8SM)1>+W=!^{ei%9otCVM_VUBhU69lHk@INlQp~!vSNxhwaIPW5q)yFlG|P6J zPZrzMK~;u2DN6x+26gHL9UF=<VPk$oc|7d|&Wtx7mc2TbC^U&R&utXJ{-8C>znN8Q z_6@S$F&PI9HvT9KjCVp<+SqJYXKbBg_#SYy4E5tvnKv^dv{9m+x@z`N({?J^IRmQv z*5JX=3D|Ac>j(MLwWIlDrLMRWnIhwR7xt+s{DvgYI*3sx;$~lYR2b4|AZQ|O{s$HX zD7j(A6p0g0wiyuI3Z%BWx(|HU#Kx@{7`Zgtdg#ladf~#&xwH01UhNOOR(y`H*l>gN zQ!S%%`R0v#&g&NPF&Jq513%jlVg1OpFRn#2bz7u<ezt3sNjAV`wx=dB5R~3pibCnU zBFApa7jjAJBy$)Ii#^G8E3+G5T&mP*<JuuQE3lG=eN=X9@DX*<UHzD$oBKB~cFf43 zPVW|dS92#QV~mH@>;(}WeeAq(Q8g>81MZX1w?@djy`@F?^Q@q$UA=8T>~@Re*R7|X z?lXZ|;b`SjYYg+C<8u>fjK>5IyFY6=VtIV#hSaN<<9B#*>RI$_DCy(B^I2jmu&Y<C z3+KPxx^}rCcBfx0fzP`k>pIVeS1cn(LiqYxQwr~Y$ZhXIQ>4URQKTFdKTV_z4+N5} zk9B|Dy`MdkAVTOv!||&$c3K?H{}QkIy<a$RLLJz*-nI{2FF;nF1^rHyFUkqp(wcRT zcv<Uv0kINDW#ZCUXsFUsLv<IiK~#4`td@zhhEQCIRIH<^&-M?Lj_)Q5YfRg25V5y+ zx7fCghh{XXP-z-O1HdKh4k!C2xdUpW7&q@_i4+9<4Ne}3OuJH)79(a;qNY`E1~>em zG0Ho(+HjL|Fm1W{Pt;X9P%1IC*&kwLWT`hSy08nR@zec7<9x+<c=EXK&AVKy+HHVU zY<j-EC#dO9DxleG4mwt`)DG0P-~_TtT4NKWH4t4}-=Fol`yH4Q_ryguoamL#+K)j7 z5Boka!Bufah0KEL4hSIs{iRi?H?D#H$ljX`-3V^9nNQNxks+zryYjG>YXzcn>0Tas zLpg~9W`>Su+@F6S59_`<2<nz?&w<oh2|o&$N!{4UF~LQ2pRzXu)~@RCD~i9Bq$6-- zJ_HBt+g`S~&e@_#&lJ%KZJQ-I3jjK){U6aE|Cf6`5-vss<?7_LJC+zH>q1_}y}h2< z@w`z`{P!#heE5?p!r%TOv-YGP>`mW2t=I?*<pd8BARIb1ajD)ak+_=;E$GXN!L|{D zCM_(AjY>996c8c|O%ess#`<y4XBYCBs=x}@qdI!Ews`*!o@$#qZ=9z)YW(Ugp=kmp z=|Iizi8OljsjT7V-@J89IR+F{ae<6dq2+*px0?<Kczs3|M6Q*|-9~RAIKei;AVp(( z(JkdhP5zZ5W%o$H;x2Fz+Cph0-?J*bukxN`kL93HGGZYmX4e{B(o&I*Mg{JC!!d_2 z;KU&jQ^^L7!*qfGjHtDi$pnhE_t}jb@)&Fo#x$}2w((AyQEQPXjM%jyAP{Z&Nk&8O zz=MCu8u*bu4Vpp22jONv#^YchQ$c@ZJ{G7ghKPZwt9Aw^#?@-fz%mj&hLBOHmh}9Y zePIw5R;E2Pra(|OGVk5`Q!~m>6yhhYc_7Da0!APxs9tIqGz`G&slYvUUKG`$s5&(* z4nraV(8b|^@T70VV*9Y5K1_Sh1S*1HC+^B~u`pxL%vj~Xi8mjl`(UKEd+bgIS}&bc z+P*#vB)2V`1ApuEtW*S&&b>~2?~-*%>Xr*O(a1B^!!tC&qmMYI5$327l3`HnMx*mF z|Dd!Nye*L13jLa2(Z3vsDo!*KI)K}T!l1;VNyezY$l}0KyT9O%`4tBPbXr`CvL9Y? ziv%dI<(8NMoZ(ow7XQ*X7VSDHS7_M9Vsr3kV23)YZ#57pNe&(MJkSberzBK0v9QyW zF*wv0if>pZ1GI;dmTGzT{syKBJ}&<84<OLv<KwKhD?FXN0X-VOW{)AV(Ub!1JbbXX z*N5{bhl}p-%j^q`LrbfL>irSg(!)q7mEdX5pS|d3pC3QzlPvnXZ@$XD0@-3xfucuE zo|n@+^l%yIlgNrt`W`JAm%Eg!IIv8^ys{JPeDapAxOTfB)SdEwPF_JQ&aKnlE&u4@ z&(jn9bOPy}PfpLy?w_9Bo@{o`PF}%(?&Ggp{sO<S{uzpsP?UYP_0N76KAd9l?FsyO z*6W^D_xtew-Vt`Ub9*|yJ)QLK_b6fXsGQ_<9-vwHm=m}kO2m14jkzP=umxsvnxnua zuQB9R7(OulGWf((hhL_j55c?$*1+#5rS&QGJN-jB`Aaz+QPE#^*`NQ*oYe-6W<(S6 z`{BExJV?!HhS`-2km0wz6zH&gjqTAl_Okc~&5J}{DrWq~iJnM}uZK64Bt3^61t#ih zI4vrujjeUIb|9N98%B#to&mxLQ7yR`PDfM{(m>u-BZLeX4fm+wRN7A<?&Ao0|6N&v z8I&JgLDdsDejl7s97cD05mV8Q0bQ354$NjLtKcwo$)k#RKjRAk3Nfk@oD@Mz{dIfG z*(9ZvssBFW)OsD`>v6N9u5S5T0!!%;u?Gi6`pa*ePDNPYQKhf?bwEKHth#6;$b{vf z=&%r!;CzYWpY@ryj`0^@G93bWsB}(Q-L6n&UPtTDd=hZ5Qsw3Iub_~r4u>%OS&x>j z7{E@mK$R}PfQ}Dqd;yzv&L*NS%dX0b#9z7lsP~6y{stb4V|E4r$f0E=MZu_~VM;}@ z;;B&$MRNazPzdE1kuwdsOUiSx2ADDWB6&jjp4^t09q{C##Q-MiS^K24k*SqZGBxXa zyWmhE#vq3J=IdiY+N2IS5#xp=HIWx4=+jdc%~409N^}!eV+yq9<VN3cHuA33+2Wrt z(t5dg71IE;_alz_CpCmK@vUb*k?u4~YqKLY<oeMmkxjqzPy#2{CSm|VK)%1)L<!)) zY&GDRnt;=sB$jO`@XedEj7qHJq2*_YX(^_&i#cZw5JuNQ>z+O>%b8(XR8SW(i!+$+ z`JCe8NroNvEq*<$KnBz1#blCC<MtNW3U@kW4$o^Xo6sR{LZtE9GS|S{L|m5LpFLrf zS!bS=<kkwV>+NjMf^Fj-W!nhm$7th`er6a6>1}@oC>T)!?o*80)K#)uf9=yRnmWK) zI8%zCz};YIZ-}VjNwhqYq{|3$AlSloiMRrwL1s~!v3f6iFFiE|Y0aY5%#%}7mzDT` zl7{cgwmLnVM)#8VC{;LUBPK8H52B<eBY{fpZRS0}rw;XIq~aA78UN+@@fzUrz2ag{ z+l0~hfMJm?2_Ic9TEA)FXWcIZl;)3is0lpZO>E|XVpBU@JDmd8CWTAa&S?ba<}T&i z<4J7Cuvr3S;983ibB%B&+iNOUkRsPbB#|@iqzap=u*|-N3P)aOoQQ`MvA~&#Ez%{; zyOgkuCdaXwDWuG#7=K*3MV#L1EJ0gn4LYa+f|W;a54{%@!?s$qT7$m<Hp@#$m!Q1S zIW`kgB6h=KQgv;CTC<*6F&rge(QtRlcMV?nSVL<c!JY7m&PiMS+J#Bzj*D14b<8Ja zeUZP@;{Ac~>U>f_vh!oqGMZgPaxyCCQL|99(5i?LV@R6U*VB>uF*h~CrY?h+Dao*@ z0dNwkgVIa+?d_4NQV`O8FrHGapv<X%W(A(dw%-|6dXG@pJ%XFcrKBT4Ag>(V`0S`; zBhl8}K)w=B@_(gf3aT199CYN(K0#R#{0X*zu?MG=bY@3&jK3YCr1sdYB<-5IWn$H& zHn*PkyriAKL<VTLK|>R{;nZZtuHi|++KayUqN-X0FCCv_fnJ}Bg28yYOf*=vzN*<{ zjfVcHnPQJv!VY_ELa_xv0hK>Y+RNlE+3Bg>J}7Lw*4N+S-C>tyW-KvZiBJWh`O)Es z-8z~bryoGuIEN@v;E)JmeVZ(+9T*O#-^EKpr(bzo@KtqPPoX!thBdA}zj-ly^M~4J zy7qyQtci<SbkW+ZBABw5vfGa&jgq1-qACsaea+z}*d^B}QgA}lfaOxkXp95VO_3~! z{dGxP!!7HLO;mr9puQ^0D;6uTfF|Y(?YZKZ*DQm>FK<(ja+*ew`4~lM<0QZM`I+zu z^~H5QXmK#l*bPsp{9|vgi4dTo<(J~Xp@a<)P~cJ}T4q$NWL1%ui~aiB>+cagR$P6D zjn!vPK(V~4lVyj5wsP|tHRN%Eng0tnRBLSXj_cX#)&7n51PkIpC^gn;B%;{h4zxc{ zNcxvWGHqmHqV#P-o53(Tahqt=zEk5rmAAUc67W-og~D7??oxPE-OAP!b7mm^UVFI| zHMwM85_aSlY=^XJUu7E`1O&%z9VvN{qv>;FTeO-4OiPWjF-482VO<+|BTt+W(%QxS z8QYO$sRS|@5iT`s{Wm>xI_fwkwsDlu$ck+%6RxcJ;)70-urD2lb!K9N_0oR!h+Fxy zOAb#)IOG+X^SKKuK_0hUS@OY1=vct3dD1@C&|_PtI}iMsB=nOb$iVv(=(3X3!jwWR z>m1*Ja`Zz+6)~~$G`}d{OfV37Fw6noL}F704$FWjZ^os-nG0c)#5BlGvd*(7=ym*u zN6(+)zb_vBt^-q~?lK%7;n|Zxw)+WQ8J(P7pUxjVxOlLAI{yOxce+jYO}(w&E^h0O zzj}0h40TU;R;Y|!V%-zG;5$6Q>#W7CsLJUXHGcHs#UH8hX|<#kRDkc@)8nH<{f&Tn z-JSbKz0>{M?k7hJ+TZWp_HLn__6ziZZeJz4yx*k8m(RXJ$_=_00qu4&`|cJU;cs6T z(`we+zJTL=M7Ms37GCh)mZQ-vLf!&MN2jB$@DI4On?OY^fuB&Jchn=~dc7m+5-jJ` zA@-I3{r1i5b}apI*V;>uuN)C7v;_hjp1eZrf7W9#$4~$C<ZFbqkhTnk$a&P$3(Ql! zz&!23&-*w74+%eU=O<x9c#8_~o)`RDnbkU!q^dK>_y>x49mEJ@C}AnaiTwh80x)gM zH{{&>JMbYKq~hWDXgDZNK7ytN7?@Fv#AY3fXhyol2Y|t53PuoAW0s6=t7BkmlL=cu zd$j@ro+R)$7>-PE#tPYCaL1+TEkP89TGj#$(R!iEHfU<Ap0!#Ls?1VN31Fbu(BJir z$XF0SA1%YoaB1yMN2+Oih<dSxS4*etQ|637QbSFjR*PpsgIXLH<WSnP@E-o^(Gn-F zIg3@+pp1rC0XR!Ttsp&ETTyp7eaVsy!cwj4%~eKfLqLfh+n@=6naAw8w2O4n`7GqK z%rlyMr#4oR{SHir^U6OHb8F1A3RkYeT7g@7l4aInZV818?^3romobttW)1$noC6f> zz)5=V6K>`oc}Ojs%si>!+)YT^2OUg=do-uq{oNQ8AbB=z-3?XOu}u-FPr-PZ^G4-_ zCIiNcKex8Hn1FmS!O~(%)r}up+4`rkCw{Jx%Y=L}GJnu2x>s5SI5}(zIy!zGVL(eG zf|+-WnEza`=FM35|3XlI9()K@<pf77n~K3k;8uH^X%_89ug`CujT+`IrkTOeoeFn> zG=SQ0$Rx91)xmO}l^n2_BjkKO9ztj;&?9cLPj`MP(YY&WOjM}YSqT8ZpV_#aV63NN z;xkjg+lycBhY!K&ki7KQuP2vq!%WJXt$307+ljau^}qm_vKKnCO>;BAnN=T(TETT| zOO$GPX;DT%wOgs<D+ezob|xs(^0}d1I<;4HeFFfW6Z^4UKFs_x{UcUm2lyo<KWi@^ zf%<8KZ4?}<y{)HqBggbwZ5@MEr#hu!eJ4{{^VMUAv}EnN-P8`1psMY30?iMQ;k1js zBITl-x|$KJakOg@8?qS8POTNur7Mree_-709%1+7bapy9ot}ZSC4bTM)P#R8`wVc^ zjX7=oi7iozr)8au&59mEyEV-Cy7{tJ>M;AJH(;-otuVC*OBRFRcxSlo6w_YR2#`iw zX|2Hd3<cGlmy*qeH@e5RDSdgHc@GR}hQ!vN#ucwlw{F35fK0Ku*|YaKu#3Y4!kZj& zovkP)e71>pgH5OjrUU%v7x<rtRI)$WdWipiI@#XCf43)Fzuc_%VLbcE#d-Uvht>wP z7)-im(g3pn-!(uB!&oSRozl73c{m~OAO9I}(XU&3_?=;F?4CZ^6`{ijM-?ATws5^@ zX$Uf)z=h`i<kUa&%X7-7$X1)lR(Cvvf5o8}L<{jmyWvwae?#hilm1=A2d8+8e@gFr zJxpi$;2@~JkJYgX{NiuAGHhizept#5$PMh3_chvdo|o@XFpzwTFxm^w_i$5zZ5eB7 z^I8%_()g7i>@9Y<pSU@bFv^mrt%Ma;91Ttvk;+c$1}a7+vMm~&41S`P5zF3PNTQPY zWc%;)a+Z(S!#lekatKo+*QYegnf_s{^$Yw>_%0fW4x_>1|2(v<!1|G6Obd9!H|&!$ zr8d30&eejA3ckAc<j-DXmWe5b{T`ys&0$1`<Xb<^e=uV;J=lg1Re>Kc6k=fd@m|Zi zCVDjy&4Uw*U>m#U#cow?m(-%#3SL)oju1)#-2+TZ_u`~ibQM%gK+$<$A^ikq`>D#b zPPlgUsn=e3`w<<C`o$l-fg>u|gPA(EDIh7sDs(`_mAtG&BeJcioy(xZ*29kbn@`xc zwKfbyz)Tce_i>u@2|Ybs#WJhURP9Y2Yz@tL+20kT5gajwJ+%6;9&juQM%2*NpitEq z2#{EPwcFruqFsu>1dELyylZkE@+_?~1+aa7vn`=OrJaP1N8Rq25`t&f<@BwzAK&PT zZ`j9-ZyV)txOd}|I0$``W(;fz$u>3!3?0Rf@%qHt=a*Nrn`O<@t=V6#*_JMtm47`F z>QZG}0C%QJp@GeZqkOsqtM2Z1r=#7XmyT9%z)+c5zzWZv{*wIce??Ka0k<n-cRcSm zvHd2-?V|VtU%q($)h{F%PPfX3Q#=at*+nm7c$8Z>R9rQ;Fv3DiiR0)&l#NAlWZ?9s zE=V@9yUpO9g`#3FAy0=Y5lkD9QAOizFN31>S^;5z=Vd^!P7{ERMN@$+gQ4|W5#i^f z%fN80Rv?(EW$AFJQVR$=newG*V5N2}IEKbD7+k9XWThDQ($YGl0MJX<8`Zky&FEHR zyx%gg_JwH25)Ao^@LZxDC9!`rIxg5iW7v*|$!4{O%MiVTQ$YAj;O1m7QE6HQm7ix1 zo9KW-b(fYwr{memyC>SqYPoDX?EcMNfPB^h1hnUsp@a}<L`6WxzyDM)%qp+Vl4TOO zgKPdwI^pelQGdP7xvq}t8|V`Jr6I{lX&bY750^#=DRt9tn)<{xg)51C(I>Nd_0s#S z7yNis1ZX@Iu%vs!t5b!0GfXK(**3KZBhx|ZTMct6#Mg-JF|8)$f_PSDdc*Kl_0ANz zCnc>|vD|C}NGR+w9#z)8;V8{4iify*#w>!{mRxUg@6~mI?Ycf{E~V}3pm$1V5ERgU zCM9;=E->+*_`1Ef=In=DD}F73!bMCzEq!mgPLvWwu`(#0#+kK^31CAT50{K=0-X78 z9aV_5Va9g9fvKD{TC?2Ayz-ghIo!~rHukuNt6J#Zxcd-4>)NgYRUxc<UvP1*c({a| zUAa4lhzMwCV!cb@b5JflWl44DH7@Ee$~ksNJG^3PE1Ks`x(nrc`U3w=&nx$_d|IiF zGLzv55Vy7nvDn=*Q=iV}xNX!eRHxh!N?7Y_n`W^&%dPWDQ23ko^ljGba?PKI&|t#2 zbeBtM_caTI-=3be?@h6m8$bMtwS!JE3U9@noqn~h)Tv#<&}c8d^WG|grD1@Kua{6O zVnNoq=(<LG^<$>*onB8aZHUtKF{t1v37j{%u5d0yqJvqRRCF-!Ih7vNWu)bEEl&^3 zO+~-yotA>|9|u<GX`rVc<HzPzy=6tJbov$qv$-2yh=+h$LY*y1hw8Ah(_{lotAj=v z6df5FR7PDy74Q3+^^8$%mRh1V|E${xhfq_Q_yrI)s3`0XI9o@zQCqhL@%UVujn=`u zS~wW06OZO+zL7q^;6GF^;SS}`-U52wwox9JjqBh+-vPyF)&XFo=C;l&(ZyLNKV0;F zm=wKH5B%8DcW@W3p4=J}L%KE7F6tL~buqkhfnSDf*uL!9<2!u+LYop4qnd(b(>P2m zkA{N%BzEEVF)XvV!cJArrx!VPx!XP3zz9X?y4~a7UHIMW?Mfw1)MXEm7Id`ReHF$n zIszElQ9BZL=XrYCMW1QB^JKbl-|vaa_8LDVCQnS?KY1NWEvjvykvNtnKlRpj4=mh? zgR$^Yx3NPyjLq7*lybc~RrNPHrQNct6<!pxG8^T<b(h5?*SHzy)AG8?DPRWB0S(y_ zIO&4JzM+^j%uuw$L_G*%D7{I*rSmy(GB69~i!Vpj4z_)SndYE%@wyOKBI=8A%}3Jy zyK+3LvL|0ZXO|;v*ww^<q`zsPCG|Wqza>Sxx6TRd*A~ox<yw*->V>jHj`ujUist9! zfxYV%I!?=X1&EGA+*`+(*h_{9)C<E%k<olzlcH-%qSg6m&3r}V;EKaA!G}a70fM$L zj6g&h&u25^F?%r|`TsaO6ZgjV;dL*jTcc8~_1k@;%)g22vUk%m7g?=(2Uv+v%To^P zpbOsKocFVeH3M~UL=v>~4+jg&pGfgH61j=-s)731?`P*O!wM2pi=yZ9s+?J%FByrx zmTE(RG^+E32pZIOC`Xudc#!Q$x64~}&%wbW`_vlp(ZX}N5>+T|$Qb?}(^42-nfu;( z@OwDNKZb$k$yKQM+!t%`5@-XsNbuR5Hyv`;C`M4ZxWI0&amSg!6*a8xd<ZvSA3Ra( zdKW$m`%(t0vTixGj(ghisDz#%4(`QU-m`rm4;%vHF>g2~ImT6j8WMnjXvY=wG|l<h zAEGw#_)$o^ax$UYIqO{5t=TK7Bh6Y7Zo)r;%-7K0^tz~Wa+U!%0Sehik@*A)qcof5 znjd_U=Ob=BE9tx$W%DcClu@1^!?C2X(rnr>DyT*CD<?sE1YicmZ+NA*&{BL*a|`|* zu#t>FKb|8irD2}m9p;dB%&Xwm@El9dtwhrBQ0TYo;TU5g1FKvIlp2>MmeR0?G>ahZ z3?~;i>+y43PLqSrxarq<xHT)gUvX#@zyg2qw=}m&<-XQDXg<dL3rsAi5+j^wmcU^8 z!Z{|cSD3>0&3g_}++sH8zPI;O8BL=`ff{5ta#f;zh}|vPw`e;<T&6nNVnXv$nnUb? zxrb{@N(kuK#=-TwvFx&vh4N3cVqDB_>Om1hK*ecZyo0t(c7P>XXZhOXIrweDm^aZ! zDfL-!F`pRJ&(+8p@f)}B$F{y~(ND_bzsqNeBS$%;UyKx8Yd?PS=*1)cTW2V??(E|M z7#DvUhB4a;Y;1o<V$_GjboeeO=STSGW`<sIxHC~qm5cmphT94rdV+-C{^GZ0zixEu zDJv~Z6m_BMjoE71{;`VkRUQfPT)na^3FkMYkCNLzHvT&X)P?cjhsHC6E)w@j1zwV9 zhf_QydOm0^uV~!2-;~5qCG6NJcaoI+R&wtu3hMiXSw~SD7!f|qIHaN+ns{|V2~-8A zZf8`y>yS057$JXE6z`RkSJVWbK-F%qM`SF(kDO{!48g-zflYW*E~C)#0RjJZNH`sC zBJ5&>ri0Dh&pML3;u(*vz{st$(jpbg_{0hU-!WO%a5k?vNHFIFgknC-QI5c7&@;@_ zj1zQsi2{9u7aFbU+*TpQra=?1kIE=QJ}ivaXkr*P=9K4(G^%P09Fh?)S9o&pzEI*> ztlR@432@0pE*u4C2iBI{8b(v!MHeZi#`-!K4a7an4*yG^$T-J+wNU~~jQm3k3oYx- zl(<F{_{6oukZs$Ghp)y_dLJXdYlvDBKAR!TgNt6G@e0;o#8+Q(Vx`rFqZQ*30ST8| z^|3_%O;LchI5J_#y5RLf{LjmxUIkN*$DLh5jp+^NeOZ^4&NVey`TJfM8~NR8#T^r` zKI?50Tk%V&5p8kFhbwTi&_fJ0@w04y3WT>f*u$3Xa6kq47Zq|4l9&L^29L{2ZqVr^ za_US<J&<4@P|;piEkbU^J`PH03mEQNvcsh>gm8%Uld3zs^U-{X#K@E{@v5v)D$DDk zwD=m|_qY7BOV$a~548@0r&EhxX0>1XK@TfG!%{*(o7f9mJ{#vJc$0-OU2@8t;-OE0 zJ}^Lm)u@Pfn#UPcI^6tZ^RwUX4(T8>X0T%hmZ$Ct{zJIzQ+orBX+euF2T|y8%TIW| z)}x!G9U95u3ZAj45Dk5BJ?a@L+cyftw7Eg}^Nd6yjidKS!@jspgn13Dm344+`oXq^ z6_z;EQz_=Jf32wLU;j$;l9;}$jP3#tH(xwGet}bX#Zw4F6c=4I6l~5U-%B=!jblny zQegi1q_`+YXzv|PhZlGuLHiiDE+#09OhH_@#BCW0l`SG7z%(bzyPX|GtKK{8_St4l z#8>!lA{IRX)P2MPu3H%TwdLXF*^B@iHo2xosFxGUE{4*9wyLC2_t_K6>I7ebjO_1R za2uQiYXqWCGkEld3(6+=srbWFMC%x>78EscSocSZ{0iaBuXO*?h+7y)=Ja~&XT953 z5HSbCtZbjrU!T|?{60!3s5?+20vCB&q$9i{5z}F=1%1UIQQV$i4fLf1MFK)nG&khf z=fDD)E<Ou%3^M)ocDewG9lCf|Jl<#V8z>yRonKTPiqeQY*4y~IkD+dAJ=;K<=YpT2 zH2IfM|GXUC$gou>z#<hhL~!|`sAed{T;zStctH%v@6u*AdrW%jnL&p%!h(eqIq_A` z!f`K~!B3t&X`Ma`D7bHIWr0cB<$7(UQpHbx|Nfyb;Dx#tDJK0~B79P2*IR7-eD;(y z$FE^K9|}$s=B=`pqR*QPe)*bW<a-QEneilTomFbom`&qjn^(J&X@?a<d7toef?K;4 z7G8AvP(ifX^xp07)$l3$QCespw0ImpqAecP^C>208sFdvAxyMAE$KBM0xt4O8~ufh z@q9F}_Dzo*fc#>}AREeX!ic~WAV@V02oRi1f`C=$S7OVeneM)Tv->S+^N%K@DOxk; zS1@K&XT<n*@f}56?g=ntj$hMtqaIn<Bj5L#+R|KG>65@#d}}D14NI(S^0o>=QI;3= z350J}*bv)LbF{3k6J$_?g{M+6(qgc1e4~DaaoB#XrIED0Eb=M7R;f9J&QW;Ed;%Gc z^x-dYOf$%!Mg9v@xmFRv{R|Mr#tr7TF<=FI&bhluPwP)le|E29&4Qj=QO7y4(Km5R z)1!v(my`{&wKt%8v$s1hMYwJ*Mr<>ih|%mUgTInzyWwf8^{UF}qf!^Fe8V#fuC;X} z=?PmiCKS6tW8TtxkKF~EtZG7icY$Q8nnrk)LQmwfB7mS6@?R%h;f(p*m#G22U2Ab_ z%Npw~@0+F#!~(<MwOc%CX<7hsth^(C2D~8U<v*Uce7erh-xjmBua{Nh3wFx0`xn}H zErPEwsYo(Kg^6M2;}Lu>#$qX+u#p`HsTTqlZ%gyE;OLinW;0|x4sEbYJU{xty|_PY z9Byu&4Ok;%u34}7GYc4$rq&P2ve2n|EnQ394~Wyg=IlBme<)|0-a;}7zd~Pc3AVa> zdWaDsF*O`!isP`Av^O1Y{%mjatP{L6_c{$@r50V?R<d9Z3y1(L;IiHDyB6MgWn82* z?QR_Iy3$z4^z&wvaoebE9ytJrqlCyxZVPZ98obPQkgyuw!FHE2z(9%W@bo@1M=c%- zKWl!Ga=mL{(T}xz(;i_%8gV0%{JOA1{ATBuAQ*_B71(?|%d}`ZU=ElM$F;Jc0ooD$ zbPJr__OIPe-n0V5d9a<$0_T?p5*V=hD%6O4&IvRt8s`4a!yeOjJXA}Q`B7tBklMC& z7ex0WL~+?$`T&bAjxU5dqIg2RhIYB~4ad?rN;R&_FFF|MC1C8jL$4AK?r0*@fw}l< zUHprp9IP5X4RBs54roh`hh*@>I6RVBQo^Ig-7ud3=4WAYH4nf*1`joY2P#qccEd>< zf%JHmN{ZmYN20jRZxHZt!E2GAJNQ^cy)1pv5cnbZWX@^ilVs#?QM^gJ*`a;abJ71C z2SMro2op8KwHxJD;iwc#S*L#UnkVyXI^-fIv+<gjoDHx&Y*-`83NsB+>MV<|t`h7V zck}+^u=Qf6P<<QAcs24`rM(`_uaZ5k$c#I*Mn{?bfgY9vqNKVrDa}6IRrPL2Zftay z_<!#G(&M(Ij}W@7K6PjcMbqSE5glud!NT65&gUa`1BC6bvgE%iaoprH7KR8&x0(a< z3@gkYF5$eUuu3XECA019lTUxWzu(J9IE=bHl<0m(yh6)s5D1kxbqMJJ#Mevsq{z@C zm`BYLTKFa>pupMDAj1~!-!gSB%mN%`vRS9g&f_3pCdNMFtbgWQ(=;kkj87>$v&@Pj zaMXNe+RNn}MB?+DwjuIcVUrgxbCzl+=qkt+2cYwHuLKJC$%;oPIoDv$W>z_>Ok8vF z$;i^<SZ<r9iV`K2WsO8fyk+lQ57xtst8w!B7`8_8qP;}xN6BLK12}>h8e4R~JqVHm zw;X;r73~L~s6jU4RG<7HWrBUix8_buM6kNG=h@Sj@YLw3B;uE(VAA$LOY?ND3HSY^ zGw9&P8WeHgR!<Vn86-<US63k(Zo1RySKcyU1vZj1>-TUYYHUp~SP_GHJx%A6S%FmF z{S*H9874-UiZeAnf5$KQ8cB+7v5accFR+#Mum#ZX51_IS$nGKUn8f^ntD(3=*Sma# z5z#2rA}DHCAd%-IG8_wz(D5ZW5flMi?e-CRQ61AmAHrql<kjF4NQkl1Kf6!Z(qovm zXG-uLrqxe}y(}Zl^=(h~W<Hz_VSVQm{09Jy<^Xt@$!viH!51vmY)CJM2zU2=ea&F} zN#>ZCmK-2~fCHCc8wqM9=mTqiA$9pLK5LXOColwPIO_hWF`MH}kXMSiuabG6{5-(N z8st=RXYF8X_*WZ={aRH?aq^EBsDNu<pax=U0xXsXODkBu1Pzxj;ToE53KM`*)+5>y z)hz|MQ|6)JDl-8*6x9i!N;v7?inDJr74I6Ttu?1s)2!XIlPUS_(9g+P!_=&b_JmR^ z_Sz&v{%7fHo<0;cqIUro!nR;@Ed^E0>{i7d*b%jLFZ41>da?yZ`+O@s8aq#ydg^O) z_OjOoad-wBdryZ8XJadKD};!%uZzi~yzWxp#$zl*^!gl0#Xi)1F+o0BcQ7vMjlsG_ zraczb^4>N!D!V~Z0yE6!0&+@&_Hi*TK{QNKvGRhF4<}A9b~#|AtoD-!fofTwLA2ur zFl~lS?lL^F+|2c0;pCDr_@N`8?b*tQj&Z~WSjXmH;~A4$%>`_l6m^g>{q>n(XfjN& zuA^^l2aDK)ZCWi!1=kPf&m4i6zvOR=KVX>0s-9}=N;Le(3+Py=x~+otyPn}$)VAt` z;@KQM6V7|i?0nBRWJmlbzq0Q__Z;3K8wkCq2v|s?b6aor-0{a6FB2O18ODJ1Wn!HH z|C7<i5l5nFf1ISex3%TAparjBu1aLwczP?I-*|4Tg_BE0NjqilaKiqJxohuk>$c&4 z$DiUx?G`DK<wu*fv*Y-5O}g&UH7Ci|ojG2QV%<15m32K`IgVH7yASvQxFEzU+iCaO zy4B((K@bE<5X8e5rm%11g0L?G>3#nHuDS3NdHF4e>kWM%gWMfe`wAMJ7+LmO`pb%w z)Z+MeezipFjB~xmD-TeUK|Gl5ei20QK7Afo4uMtMygCy1bUW=OWYPUxu7i)v`y7&q zUF*aNDR_)jGp>(XLiGs?k6h7>9eA?3qdgkgGzC*?{2tSjM5Vgz+B4a;ZCf8EagD15 zjr6Fb8(c$Tt$-N<P2V6iB6N47Sxr#2jr)Sqta~G%X|v#gR)CH&NPjRgdAUC@haq(L z$C}<zGV+SmQrT4Va^eQ+E5^OnJzA}%Mkg`=m;f8VbmUy*8y)}RV8T22OO9jbi!ntT zyk1X%?Iq+8wu*5|_t#b(A@Ru2LA$BLvY0=f@-}1DN|MopBlxD-A81bQtCmF7JW70N zJ%cZCWcH0ZlW+UlwO|=mB5F|;C){j8dr_L^E|<iJxQaGkm%in>v+F+}2ME?soRT=o zzO)w}E+Vr^_el;e!URAsd2SWg@3_{g_U%<UhME6h<c|Z(w3wN}Tr1>p2~kb{usu@C zLQxjIYYSRL6F^7-PM5-~A`D-j6-;pQ$Y%Q2QhK?qGzpklaSW~NrmOF4Jx(eM4-?Wt z6@v&1s)o)OmC##!2xx6$J>b55BUCA5ox$5CkcqFVqs#pFQ-Ccea0=LwcI8GeeZW^> z_fvpfiQUhgniNxQ6A=En@E!T?KJ<LL8M|ubEL3>nCnBP03*L^fp8(!rIyBngZ@jil zk=~L*l>I&1fzgRVjB0!@|BeKZ`n=WW+m0QNmCU`@Hs7J636oy>t*<ey9?N1$1vNfq zXt-LD)go{z`#!^M=XJQ|R^-&ALb#thq<?7cAeBWmTZm3?LVs%A*Neqzv$L^rOk&v? zLW*q2!EXPe5(+@QaesTfx&6uK+G<e;>)A0yOgJW(WSKp$X-r$2MgLLxb^s$;KQ6?Y zkIZH@E`_veNX~dyPDTkrgwGN4)^S}QPfH+my7Bh&jjCzR%4TCyl7?lvPX>xxoA)=l z9gmTylY|AL5_R+Nd;4wC^~&W1)Yl7pyc(lY48@YDA+D5944O_>x5B~{eb$4kC|yt& z+ks_es<BKa#RH<t@s?y`2`006)G%k)bXaty>hDfs`OSiAl=C(d(ls{-T?sr{qc?Rm z>-UB|6?oV*#g)9S;m!3@F#nRc0-m`<2W&sxZmx$HCN^B90zAPCdP}GZtYAW9m)X^q zLvDlH1K<w$m8`I`LQ>)tJ1c<nlOeRy9&OzDR!@atvv;*pIT1ybUxp!ta|?}5mup3$ z5c6v;?d#)5$Pa&cnbj8Fxh;bcm{49Aa)agI7psgI6#4A_{62)kXkYB#`z&corB@69 z4oDVsOUM=u2QK%RTgb??tJLI3c~RHD%fNPvh|D$PV_M$32UvS;H-pug<2_Nlj>it; zbWAfFgr5PJ^nmM({-M%Y9{ASQL<g!QbT3D`p6is*Db<PU+%FZ9fL|^Qyp4ODqZauw zf|M|hvVi#@;MM8Z0#zKh7ycpHyi%)I6~9gXP?j2GDC%3kGTM0MV$dl89McPK-(jzc zc5f%^Ul60`_U#s|93oabk!-9ZZN)SNy8H>$2}Ujk&-vwNVVj0w=bjz@;A%wl(DM56 z)G`jU>EhkxMz~!c1lZA$xwNNDoGWo2BdmCMI&-ur4vX77UV<GJZVoa#fjgk2@mPM^ ztk|SPJ&V<HY%Bw#PZS74{n|@(HKWyA3LJjwRYWM3<zA0opy}V2eAyiI$kv;XotCg< zp$H&E%TqE}P!E}Vc*1_i*87tCed7Ve<CNSN^UI@pdRbCzzscq6`DJx-d?{HnsOKLp zPe`!3JROs)Jm|A)>dxW4!NK1jvWfY|!;K2PF2u_dV6DyuKCsguit*P*#f6Ln$}WHT z(LVXW?xO0fhP9fawj;4$E=BdE$Vuj+%Vu#w>I8<xvY}>C+Uw~by`r95A%WGu7_9zD zmhlAt;O~2fmuxaW(&CXoJfDwGDJ`5nQA>|>au-`eGV>OhsDQXc{JM9?{<`z9$KN-k z!oyx6#x&(Ii7ahvn(^s`R6<(Uep+qXHOF3g!GgNhl)tUooa=0R9U-k&mA{vp0PH8r zP3T{9ZAO2rXiKco*`L>^8pkB^pDHN(xeSPTtsULT*s9ZCR^xlkQ$@94hRqe|lRWk7 zyo_i@7(7pq70D#+wpEPj+TX9(jLCl+hH23lFp?6?MgsG7`fZ{o-ea}gZ_0UvXbr^! zUNaAIv^@|Oept}zuz(H}6i99zcEu%E{+iNY^OAU`K=e4U&WtL>o)V92x7n*e>4(2q zynEki4v}S!a`oz}b2Ra950bkm(^^PX8kD0UrKCTxx7uEO=Wnpwk<R55<r+9d{p(<0 zVuoKFl5+};gPS5tEmr8FY8U265Y``P#1**&u~g0w^w0c}#cufn^#fsBBfihKG;}n> z86l$y8gH4+C1n%OdG}1jDjzZz0t3SvjI>Vy6Ue@b(nb~r=V}8x?)Zk!Fj>A+69&EP ztJEZ4jSZyV;R*r|M&&>Hn?&1bJuCZa+)8i)B3=H}+((S5Wwkx$sa2!RCE9aD7jra3 zuhG0ahD=#5T4{?dK$ok#L3fmi1Xtrp%uMHnIpv_=vD49iorlot&A4bac!9opv)}{3 z4Z!F#HU|6MPnp9CqXC3Bj*K7E8fjGqZj`rLxv>qy>7w>c1{z0~p%nT#n=SPe`UsDJ z-JSWF5)_@7Cky&uED%xi)U@A`vQNsQ>e9(FVrsQW3-zu<dQzW!GoDqau6PqGpspK3 zSo*7$7=H_4v!r=GcTkr9kMN6olRtk(4R((4OSH%kwod)L>fRc!9~#?xWn+uDJJ6NG zNEdy$PD)Sty7X6EWjw3M!w_Ii8M5GVb*0&&mYb9AHQky-ZO{`6_J)p%t~8}EOwa%C z37l$eeg?54iQ3HoGzcVGJq4W;wrWZmvkNlQ4_s&|X6G2{eArP@*Q5qwlK}*=Szn*j z(9fEvwRTIM1G<d^3?9as8)nL>DvA&{1R7Xwnmpj~?Z*AuSL@|1REirD#svL_l}QRK z#RIbir7QZ38_1lmjMXRP?QZBeW$t3D<IpU92=N!uDhAMBEsA9Mc7OhS5Vt&KbWGSx zqyO@Y1C^KuD^cNxX6+`<aX*pZ7`0<WI9%{66&Xy>g46)Os|Ci8COM~ZJOr*IGz-UJ zF-&L}<SX;|t!y|G;XN<X-Y21KFE;bENR~b*erK$5z<b(RH=x+TPF^>&nqkr0BUbl2 z^?W>h6Ju^L^e9xZpp}qLf?vC=Yz2F(?~YxELS!{HJ<^XJ6QK1K3hFynXP7OLSvh+A zI7<hxV0->CzmU!sM`sHxfj4K(0=s701GUUmxjrOU<MNZC>ef`hYLw8pj{PN7M5aN+ zD^IRijKB=qZB<(w6n)bQiszM8L~avN?HmrsUwz46S?-<;Nyj4XoS>${WaY=lTcl+A zc>AG5W$<`7Kg~nqr|m*6KdcNY+P#TelWX@QW3Vb=Fr!Om`mA<*ny9C(Pn~h}+YoDI zNR?nVxSZ)`EkxbW5p?NM1P9+XohQ5RqE_F?(s>L00HqSMf&$I7O8Plyl|r_g8;ohy zww&CU@*U<wh00DB9@n{y=WZim@x&0bAHuF=)IcQ>C(DVzM2FZ<UYFBTwx%cqYf0|J zXjr6n-1b65u^Ud`O_T|7B3-dCEF^T8Pn0n`N)if(2`+SorTL(hSkjX_+Yq}Q*zw7+ zvcZkWkc5Zg5N~kVmsevrCuSo2aLto~+V@~!*mWnD8CR``J=(hF)*Eo)U?jW{c-J{S z)R&GsxZMT6_;|MZ&ZQ7@J^@TJe-PkAqaFTBoPUyu?G2?k-qD2o*Si5RHb$l;CnMLo z+9l1w;pRjfgr^BI5!Rj0UpqYy8zeRQ*L-{|0i=X>!{l%RFtZmIb$_GJ@s<ZgUkD(| zVA&fyjW(&SVfJE0ygj2<FaLlDo}F(6sQD$sqm3oI2udyt`f{~QVDDn-DSi_zVW*PN z$h?BMIxF2O=N0U815`R6ARH~_X`LbZmY)-fX|bPfL&c8Eg9?McUN^{_Y1G?Yz>;~& zA7MZ6L;Rd`ZZJcPoeNzS1p9bYP|1>n?Hzd&i9dWVj~wK^xiz!@wQNuAUtBR5xQ)jc z?#3Z9`j0K{JJ!|vsF95g3|S24D{X2-mx<Gr7Vc}-iD%IpS&^%b1(oiRM1jpxa64FU z8+H3O3~zU3WyeLTT8F}kd%{*s@=Tkn`%!N(hsp7c<lG@rNNeh9`nX<fb&I~n#<D)R z%y2R%J&6X<H^*c_C-KI!5Ar(~YxsU6>K+KsCP=^Jm{j8l=ba>SO)ubTFrG6bJ0ucv zkO-A(PJK!=bL2^N{F+0f^HqJphetWVWpR)!4hN-z@nV<0T2>Voh4Wt2`NiV2f}ReI zgY_oe=$yVRkH)yIEhMwtj01pEDfi6cW(8y0qk29k$kPi4$LByf$9d3H6uXUaYl{AF z$Rzfo&o@7#=Q6KrOQUJULdO}mJ&C3<o}P~{8tPn*pov&rv4y62?s(rgnym|4MSw+& zfO}wns&=T%M9y28C#PNA4I?=M>>zNavG4NR#E`g9bh&3+OzPrcbx7$%8|pLsxJJLS z_C7>CW9Bw3tho!WvLIIjax9OYjJ<z_YH1+>z3CVr5^5T(@QM-Q$8?1rG!O$J9TaOJ z+7`(DWqo=9T?mn5e#9yg-Cx9H4!>7haE>^?AuSs;E(Tqp{oamUiTj80BKY|dTh+Yw zNiJt7{%ztghmuS$|1P)<3u|l{PoAAu>}9*CZGE~9nVXqonxtmcD2GE^st}j~rXfuP z=RK1~M?@yxUDO`h5!SyB!Wa(+X>2iQn!M^r3WRNaWc*hS$cF5u%<tO~yD^;hVO&0; zxn7h8aU=;K(4Q5xIQ^){YM#{DL9RSBw2q}uzEVx1qd*JxHq+UYruPVRghgZ^fMn*a z>ZJXmH{y^tJ-&<GySnnQ>vLxz_^3mJP5)#I<*Vvl8$P({w`;{>OMPbt6|zuT0<M{+ zg(K=AafB`O)r)J@5^6&_?Rl##be}B&Rv674Th#?L%-|uWrksW6rKPwS)20gm^qmfY zrVcITpu}brUFoz!;$VC@$0TSB2l4IYwS&Q}*)XXaz#20ZXcm8M|HLgS^QrJb^2 z1e*R?@zK5kAWoKb|GUS(TK`<)2rp`x*uwma_)M-QWeAt9S1t(8=4y=S%=3!wobw9= zDy3GAluGIS`IxHCxiN;oYzGKlb3iDl$@8lVtHWE487qK`s)kP33uPGRf-Lg74810} zrtG6(`|n`Kn?Zu<ChmBBZsm#gapQYgzw7a)A3x1Ww_Epgr;D_05ca2>H&uh_v5P8F z-$^n_lPs(Q0YS?IV3`3I^=wp7{NSb>0`zC?v>jJ(v9T)*_f!UX+s^p39CLoUHk+4P z#eFFibfzi_@}}J0ly-r}SQU_rPzfAC*lKix(WG4xzFP-yT;lHj>Z}o&N~JvRccDo) zfm9%o05Cdjr1a4=>(EB3mw75!_Uc(r$0KN(W(#QQFB_bHPrlj^^4V1>$6eaX2{MWR zsg&65XFF9Fl4cU4BZRe8a}|3^mB8o*Rk791o@wcB7tT!P6f@+SGi+6`2Kfa+hTuq2 z9XT5tqO9hw6l2^QtSeeOv7D{_*tRtcDWGM;@*)qFj4fE?5`-zDOjqTcQ!-AH*=Lc3 z?hMBIDs6FlG_uc&x|Urt50M|`v_eeGyDr+rUZyJJ;rgZ9LkPNT-(C^)Pg9{WH4u)i z4;Ypm5DJlf`!lz^^h!H!gh^~*IiU1<(`(qEwpaAGHnxjD{AN(_-l$6_N##O&dVN%l ziIbr2)&LWg$6l1AY>|TtM70P@LinBNP|Fc3Sa6jSWzgbR7H1OS+=@y=qg~Wz1@qVg z+2kMc*7yJx?GOEA3R)hI^sTx;4~8%2+#TJQ?j$EDAF!ro%<#magBgtq4_6eLE;CaV zYPmIgP~6|zrgEkq>KYy81yF0##>p}RS$GP(2c0jG*5v@l)ha!wzCh}bmzxgk#n8CW zle24Crdn!Mum>%e!(H25y@@e<$A?tF3(BWZYd46Y7Jl6-OKWcnO6tYWR)Z}|mbt<k zqODGD<2ve~8uKolGScN0WLO$OvERbh-2Uzo6Eu4ro54=f?|X?T89TOHOBSs`?#9n+ zx+BP+J@I~TOX+VbPOYeR%mmCod?6-ZX7<#+-LWlpe2wVx&o(*rCSKZ|?%5t#Rq-(< z%z}@E2coz}yWbDn8{^Mc;G%}$muW*C^#dozVYIo9x|R6K+I`*B-ny@u(M+3}q%Tnq z_k}iYGHx+)kQ3To5RJZybwxM^)D^1McDH4c=IG5kd<M7Q#C=(Z<5TKU_@kPMQzV%a zVdBl$>(U(c2y90@gVmZQjwOq(qa4#)&g63y;N`k4P=lGYAl4R5TIQskn=S$RO{{p@ z)dL7-Pj3gC&bw%tNvtv=P=QLmv7|~o-<KcKW;IS1bc`dW`@7x`)WXG7eR-<Ij^Zsz zhO!i&76A0Jr8f!@;TqG_yhH?rx79dY)LEEN{dG$Yi;(aoi9-BgQhI&4a4Q|ptLZe= z1B9zKgK#ynt(6gFLNAaXgC%SC_Rv?D^AcLQrambJLbyz8{8(x!DvYGRQQ^tZzNzcy zbv-p4j?XS&D=P2cuj|FEY?=`kVXnC`p2C+T$MBy)BF)ew5x_}Co{#@|ft=_p8X59k z%SfSEf}zM~#op2q-nAQ7UL!;7yRw>3_|0Gr&Az=8(EQ8v=y3#6$<7Fp(#~=r5Fo*Z z&`hsbx`do-*PDf=i^Qdr`qx-s3c%z|V~$hOj3UkaSk5#y)0GRSAkgz2T=OeCF(k+G zy?f^L+C4|HzG&K#f~chjj;zN{*d=F7VjSn}_Ey}njogZQ@eYQu#@+kSP3HbalYes( zE}?u=`URt1v1HRj%XKSF=@H<hj7}%oCLvEQZ`B^9F%vJ9IyXt%OL*MYZ}CY3H+c=T z?_7<<Tf{e(>&vbtcjV@DC(EqU1$i$f)LEHhIJ<Y+2Q}I9U#oosRjCriz1_9zt)cl} zSDUBjAq;0{bZ4Bq1rxs9qYpioRgy4>!7r+sot0ioR@sanUEz@A3a3TQ#$|E?@5CfG zE@c3EDU)s^f==(~M(K-aEoK3^Hg==rk$+e8{)%)6>+lC>FI%}qPp6jZzgf=uaWgYg z_&v_6lj6KJb{&e==)7Va`Ni{Fvd-{a(&L7eGEftEo_e_1M=Mwv^L0kB`h>2|lx9#1 zfQQ_2*)v${Ps-EQOWACaEUTbTL7vgf2mRZccUGnh4iB~6VX5P^ET?oTypj}&=;BoA z8?&Kl|1>6g+7Skog6%`^=bQR%tE`*j^&YqfKTMRYugjeKKs+^AbggvbT|Q3l(0O*Y zsLdp@P?vQ*NpK^zJq=^%Hnc(`AmBNUWu2Vkz*K+uVR83ld~sJS5Sr7oImcJCF5L){ z4%y#`U-}%MWXUjz+8n9sxXv>zjE@dvnQ3!>XwOso$CA{GZ%0RvkKrYY4iDh$E_x|A z%RjX0I+uctjyJ={5sH1<2i+0FRqzcB6T{Ujpjf87K{$+Jw^(0)vlLoBdxV$f2h@fR zMSURG<b(dD<HGA;Z+X3yelcF9Bg3e(pNsJv$7I2&9DX2)t|`=P-nSCfnEQgU5US3G z*Ba!r{a#j@Z^1Sz(bH_zcASHhJxf>=SN&nJ#B_tMtYMK4mX4-)OHwpFe6k-3xqa9o zi_OXx@X#Qb-bFoI6v4PDL@z&dqp?Ys1(q~oZj(yNZvER*j`uX)pOc?)WA_JxjW^@B zV}+7TmUb?r5IDhPeBa8t+0~jL>YM%95q{c}HLP@5i1`}CDNqT1P|=>wnGz38Ws*fe zRLI@tFg9$n%=Z;#GZu_vd>}W<2hloMWCE?L7I0S>(nUwLmCjiBIlS7)Me>0oI8?BN z(Bh$+Z9JA1R?(Mq`224Y7ef}nz`n3Wxgts6;Z>4iHL*By%a2HhX;u>Vdt=&~7Wsfb zh%oIxgISD0@jDz&GB<2dxSe(_c{PJ%b7UqW{yCbj=<3mnp;WdN<0*^jA9u*YL+#s| zM$!R@1P}WEIUlDT`SZPZt*%!*@0@m6H}hF_;vlgQ@qoF4_@klYM$e@ipKW|Drk4GW zKHI$i>A;tM=*3Bsl#al7!fTn6kwFP;>~N&`3Z`+gIOoPE%O$tfn>=VLa*jaCbACMJ zmVa(BNPL`z*K_3P4j!LQ#&5>&`atk(KHX_6NfhzsVs@k{+NeOt${XxXdvKVeqA`a9 zKAzSu$J57zl6I}vYX5;W=rb>KNrFl|57}yG;G22^zfZ%Eji;xtd0B7Zj~A3@dT@C6 z#Xtgj)g&xb3&i=-Klh}91Oc0jo7Z1h`}O|8c>SM;1C1PZ#`g#=?;m`z{x>Q{Dcy8W z-yw3@`aVTC<4jxc2KygxRQj>~w1F+ZX`a2V&tYqB5%BrR=Ven*iCNgsq-v^{6~`Z> z^4Hab40Whf?Q!_kXj&ir&@0{#0qnbKf{WBa(fechYQfjEr+iDHFiTS5>ym#;jpy|# zSNKg$MjR(v<81!rvuBJM9e`hwL`X<Xp7AABJ~G|$6G?WCXg{9vMjW5sIfpfI@uG}= zFIq+$_@9Y#W-7Lv4U2FDwD_9kMk2TdsG-W8R#kFGHo958UY`p8bbFWJ^>?-RY_zk@ zL+Fi<j>^VTA*HBw2j2))LKjjLqd$cxtxybfL)r0aOs%96eYGfjdGJ|zn4e7e^a1o% zK}*W&`UmK)aRSUM7Nt`Y6*0yu>6Tb=oma)NOn}5gw!fF43cE4n9SmHTm;7M%%3oNH zl;MI{o0Y0QS_3hwmAL5m3(+&-`Y$(T?N!>jrc3zT`t510Uh=2y%Pyy>dalP-pj$l= zQ#&No_$CFKj1*{xh38OhY2F=8&nD{9T2D#U&m<)R8ab=7!3jz8clr*b{S$^N<m~+u zw(LDmH`jYrQ_OEH_Ow(Hu_83B>yz|1JAHqhHdHK~dmJUY5Y|lz)@z{6CoL1(Ji}>I z-m}rrc!ap;c-hDdgLy(Ag-@tD0?tV|xmVMAyh!PA!6<SmVYe)rQnj!63r~>!4QpLY zg8cNs{I*;e{{orFz5K{9hJ-@L4B?2cJ6Emmp(vQ#5b+T!*%-WlmUj!P!@V+7yO(xI z0n_~+_epp0=Xm^cPK&N*rsB;#TEssK8bF#1Xt7<Tg;BX;SZoO(n)_wLc7EBQ)eb;V z*h@HnD0_=Hv_0X#fr?x;3-FaCLNy+${W1+b9yp6i{mpzYk||NTc5Sw+U6}tg{u9p- z#7AifPiCFV5gk6n2OoX5we_n`kKLf}hH*ke5JL<BtA{QO5udW?4R3oIlwPOfrh$3g z5Ie!0(|31F8QB--c<kclh(lXkvRDT<!`E~;?G_W}Ah;kygMa$2mm`g72g;mLrJ9tJ zp*#L@+n|<azd&1uxc(p+vefg30dNxdz2BqCumnIEh}zfDND-Mc*yY5-Jmd^uhY9P1 zElViwM05$Ux4Sv^VtL?cL<4rGni0@yawp-BcA$xxpUubF|LOky&0kZoM|rTd;?_7G z6CnmL(8D6yrL3lMaV%7XnZF&J0^7z@&Yh;96;FEaSP1GRtO#kTdF<5WyMgU>-9(Lt zX5@`;<D46|j-YSFY5>3H&;rTKN=2pU6<f3K$^X4w@ISlbT{G{i=lrKnISB#R&UiZE zYjLWF$jL<LUho3zMpPZ3e3OU)IaFSYooQj5ZzGqPF}dubW*yid|8Z6w{lE#N&S~Mx z>)}RywpiLQ6<ssRW`F6Uv*}pv#JO$8b!LRy>7HLtCuTKhZ$2e&uuKpBsJqD!$B!t! z`IEUsH$m6N!=*~rp^=8b*b1?OI9oQiyx8j+pt!!)f_tr-5BL!HAvO-c@$AO2yL(4G zE^S+4390qTH(aQ+%rl+))qPm_MRh5e*rUf!o<9Eai|3CY4U0e1*W^~!y5QP9O1Ld7 z*d_DNgWhYFn{n$t=ZkpnFuf60!lQzAwmBFf=;JlFqp+!gvzYFLOZSB-C|T(plukxy z33we_I%Yl5#RTNLuRFKUuB(m>gV%yJQkBMVDaP6j`w(?qM{GE5`XEQRV-t}7H-x>p zNIILR?;z%+%8X(O!|*W&?RYNta68C!_Gl^hROQnizwY)@4~b3L^)`8D@>b-XO_v%r zN8`nJPHyE54s>jde#H8~*uTSmSuguK-W~p6NOzN#`nUEz2q$#+Ub6Pn$9RJw{=^Z+ zc*QR3E@fWiB579KOQqObvhmz%y4Ij;a*TMQ@au|2qPBR)berWp{CK=zhcRpn*x_Zf zFcI>jt^2?Jb%^dmTFyppts>hBLx(HP!>}NNYDvdr6p1T0*7bqA)o<5xuBkCPcQE^S zlN~JBk1}I4n!iGnPzos(E3`<++*ddr;W{kl{k%+LV-}|FPRa(Nd$uqD{e<dI%VT;V z7=28pup5*EY;(Xw?WuKu;b7VzHf8z%-r-$4zb+HujV!QiT#(T!*)51<Y6PaKajzPU z9znWbl3%p(SM~g;<T@`ef=?f7dL+3rR}><k%#wAhZWWb9Yp!&2uQkI$$6!DGSd{B7 z#%eTeY1RYKzA4%%jg=DRE|XWXS&2c3^h;3FsgjuzOhfseD*1&yY+m;hNUdBT6^Dkm zXj3CN!s8D8_ny^B?BQiym<gTx%2nk#@nUEBC@RwJu*pjI@(WCP&XTN44e4bh=>hA? zAtiSUv~-b3UMxsBS^t<gc98jO+eN#d04E?J#6vc|rD#WfGl;>2bj|u`uOg9BK#!rA zrY#PZn?6yM9o!T908K!$zkWhX&#t%)+6|3e)$}`uCx4g)z%W{-7$RModhfjZp+9m_ zcXy*)H1U#dPKgXMrI(+f6D;2$^KH`)b!ph}>yfoZn!%IO+J?fsZRf5g`;y)7$LD2J zQ-jxZ?DHn|s3Z&8#}h~ZYiZWRa$fyFvUN#8=@uJfa--wq&KujCo1bmaKii*eY<)hu z|LJJ!{>DeDP+i~J+}{567JBqRR1&GV98cS8{+Q<D_-xAQb4gD#RV5p>vakbMg3G8_ znG>jL4rghC0v`g4v2djJs1?7k3qaTD1_6O)L@aN()XSW=;<eE2#{Ft_i>J5U8Tm)M zcRwM-tC`&ywMpv$v3%vmfuUIHgd2m08Mc0MUUCFXu5_ey_mQRds;26s&zHB8@`Mfq zXd8G(-!wNY9~3AEgiMOz8u7Y$M34Q)HkKyq8)$v-@T6W?zFqG>CVcLMMcrNyv%Q^0 znbIseRdwHm+*es*TR1iKZpmoagD)XsPrF$7M3c@2`5ka4EfN5``T#F@2!NMxrRil) znEFVXUV;VR?Di*XAsL!rxgNw^7b%l`&yxw{^?Mp$asZyO!zIJ?WIU(!(o6fecXc1u zChNkLt{;G}P|9F2|ANrHh`2^{bwc{7;MO6W=Q91N;)$wJIzEiVJRmzD{AkeI$6m$= zqPSGsfKHz9#Bd6OwFiu$w36RE#@tzLUQUs__iLc{E#Qj6F_FgAqJaT)kX64j8TG+} z6k<KK9_S_p3@18{%gDsHSJN@ICkc7&wl~>`;}_eTV)5~EPRCfe;IbD7FAhJ3;mDUy z|M(S3=KC*ZQjZRi*Ie|`=q~EO)QY-;MM!^icYm;RP`p?i-X#N+7xNc0PE$80%aId0 zY~)HXElJi#B;*%!-T<j%B%@pukH7sR0Ysb!0k^+Hslw{{B^mIP_&?t3E;$tZ^iqa* zc~Vo-(MvhzF8O8YoOt(g&fDr`Q}SthN!GxZ{A78F)?_bqd0v)33_jKbcJvJPtNWh} zDZty-_I>>8{`O8Wtw~eJYScwdIIvq^3Gx$y`1C}-FrtL#--+tw<==^`XfM2cu?~BM zhUyP?giNzq?S^b*zkU4t^6ST6JQ~P%>q*iDZoJq)DV#wu1N-<b=1W|l$<1E8Jox*A zL(Zp1*#sZF*wB<`g9j)c-1Q<#Ce0AUL-x7G%rIn7N(9nkH7kM*a`Oe5T5&zgVYq0- zTxkE7hlB6;4*vej!@DRyJNnvLq5pRx!oW<8j>C5jG#VKC`(g3%7X5EKa5a?`_oy&8 zwE?ubkczV%zPR^d^kV(+-p+st$BehJ|IrQ&pGLORC;O$rfXRo+{sU(*l^A5K(lMPc z?Szvy`u6wyi=ewb4;KKy-Qvl-)D^aNi?4ix;<-kEW*xw*Gj@*iq~3I7HVYCM%>=C} z`b}9DY`(Vfrm1JAqc>0&NMP_W8?O%lcN=h<k^w^vUru)Lf&Q~z{O0jj-#&d@j2nLP zk@m%cn7-ky%By|x)$_+s3*?S$Q{+MOPgo#cmlzzG^AY9G9uXh1b&#eF;a3wy=#v5E z|G1zs(9FhzPoECBOy2tl)1tXJd09`{ZyDhiUxG3dRJ}ha*rxqV)6H^a;y4L}?IUQx zL&fy`>&Jg8%rdr^&@G2Z%+LvANUs8WgF_V9+~A2qXY9FwrH9N4a<5L^>Je?<d_+VS ztey`Z(Q&<M7;P&VhH|c5?65V-R>W-dNBy;`7GbA;Hdg(~m>}cnfH%8OJ|FU~Odd4y zOdLYg%S*8sj1k?q$yh@5;8D(Rf7Tm~CA|`IoEO|XUY6wy{*QP(j+hsFIh@gJn#$cZ zdqghWZ0^q*h>$CI@D*CijQAJkUyG`Q@{v3Dp41bL4OT4>^J<p&nPb%*43Y$A7*<(z zN4S75U<N0vhl3bus^c(M;{SKb^Rt#t7Qx^RPuxKwxai-YFG9cJN1`4rnTFOc#}VjZ zk4S81+g*(LG5ydk7MJcxczs^`w)gGa7gWEH9?s@6K_I)aI;kD!#5WjMqt9n!c($3| zq|p^%LZqJw9Y91Hmu{j7NM5%y;yjw~b=1aHsRPI!<91!NY{SY`qQ2SZy=7Ad2M^+@ z<gm3|d~igNKh^lt!I?d%e6~`pTr~^%3o0{lJK9}yy=uXCoEDT_wsTC?X{RsYL8Qaz zv14sg%n%I{B((tSHJ^r4H*lh3tDLAIpc>d|b&m2Vujn*!zLw)qL`1r`p_&Kl7)#Rb z%1L!awi{a#?_Uy|^ouQ6HQ9volp86FJ!kR*@9l6^Iebf<0C3+tFL|tL<>bwHXRQ%x zd3w?IcMy=@XIJXxb@fV&0NF8#jGT?@!lQ@oDp>p#El`|EzNWAR_z8)1=qHUYcWrv@ zf_F24R=@MD6}<V!U%!4zJm@6fxa*-~NnW&G%E{6fS>Ih#MRc_uM+viSg4rD0o`a?q zVyNJs!$et_Dp65fHP<v0TaLaMrNut}W#-vCQblB(l7ppDJtvx|GJFzbskib2p^_~) zTrrCTAdJUc<QSwY(u)N<ti}Fy6Gbo*O(O{=?EgQh=Af9wMU<F*MiA8Is(hOB7dCJa z9K}MG&}9D7+;TI1h?$e{f3dW2C+Oz;wP{=8$bBZgwOjNB0=N=CdpOMaXrzm*U!;`H zKwiBz^iBH%R*3hOu86p-*Mbh1Nt;r7Uhv$gKe5M$^!bT`tZ(|S^2q_kuVyy9KKLB) zeyP;|U_yNenW&pcAfwCKY*w;xO7HKGRhQ}0_q8@?qw!XYI~=2+)MsrvgP2Ns&Eg2# zni+&PQj<)4qE;sQ<~w5gUP=PnQ0`utAyrreR4<4tOk&(X<C~O}sUs-#a!WZRQ+w@6 zjkf_(A2bV@>X6V#Lg8D5a<XKnb~_}L$kKp>m>cygmU>w@)vydC9@BpZ7S0b9{Dof{ zS(q+u*|3W%Y7X(+dfrw4u2^kz$Tih8&PFZrB=)L;G%GeVMRFl0Nsqqt+yqghOOkjp zk$EbKO@cw9jzMQpMxc$EiHMf%e6LR1<jsS%E&^lH?19$+4fq(NpkB*0dkRB#B>6k+ zaG7c9P|}eUV`-^({O(8}3Ooyh96Gas;kS)xm|h*!p^0+Fa$H@J_H7fj8F=#Tv**3| zG~wA}guBcrPiBzHB>&c;Z0}>M+yJrU*0i@B9$e=C$FVhfZQ+g$!$Pu1^Z=g)e&3-z zYu3O`-$Dhn^2+oA=I9o5AX)voaUo{u8IdV~N!Z}oLUV{&4Q30s9@m{ope44%w*tI9 z`94Yuna0Md%^5E6q?_VRlwkm<L_e7Eno(cY6Fw$92(*Xh&<?8RY1!0MN`=;UW`+v& z)6ci>?-ai^vkThS$5S6tHPg-1q<ox1UtwQnqVk1<`r~>jBT0Sfnh&bJlXq_2=d_qd z`@1y5<Jfne^OVd|&vOuYHJD#0b3h5exSySzTyT^H1ZyGfq0JxPXhXKae(wQQqqsI6 z{Ue<K%a<;SNat^=Gn6QCYV=}35gd#=8uN|m&XaO}Qpu(DQ8}X#-4RoN4e(^`)UQ7< zwHuX4CrFYxNaK}2*HA{c24@ii{i-6sMz?`PJaHDB)tWge9X~PTRO!|=mAU<7I7WTa z^v%xGT^)q==BrSaQAa2PD(KEMXj;>9RUY%WE8^g6+jyF0g%-a=kR9n+{d1m)%TDwC zA`AYoRD<Tik8S2eeIdFE{7ga^s3b6{8h-hjSO7-pLE;0;Eh|1NhzXO{vXBS3U!%D` z@uZb-JTRdQ$2fj>3r~%Ov(%I$DufMCFb(u9xozTCwU=s-YM~n{!{W+6G9LKgZ^8Pr zQe?cZAMseNkI{)w9n3S`fC;Z^w95E(jE~v(wqLbrd43L{_a2JXEyTY-5KE3WL}Pf( z+l>uI9v={LfcF}<KdDKL`ui{bYOyK9vv?2NGxXc?SAB{<?BK+Y$Gr2%cR6_EZ;lr% z+Ab9lm(0rRVi05e)=L3?N#<K#C9KaU!I2=fFP!{GMEXFyMED)PZrF)DcC61n>4Wrv zl^Fsq(QD`u-)oq4-8Bc7$V4u$L_67*;M}QCss&5kD<wv>QF+mYCkt<5eS>dYL`0)j zl^LbOXay35CzF?S%)=;6nWO~h_^Hywj?*B@SPYCi?3fV0Ex~qBf<7$Wnc`h3Lz<dN zH6Nb0@W?>E=Td{;Kl}DiJ6-d5<Gz+By~l5N-ieC`#Ordby`ue+EqfZ3WmI?*d5abh z!Cq?vioT>Pe2{!npY%p^BaBoLpskClWh64=npe~}fCo6#Mt`0qZazg{VGO;G)WBt_ zunqf9BA8#4U^^!BnF(zzfIaO9Y$<<cS(u=N>%2&$=<R0Cg9<ua*b=0K7!@Rot`4>N z%{o@oKXRKQ2s$4z*AF6?YS-mNoQL4!B(+%%`_UqQQ6P6*bm`y4`=ITzy36xo#5+I@ z*_W(JTecf+cMdF!@OrqRc4rq%5nn6<!B#@jOkLqI(D+hGqiy&XeTdc+Difq{Uk5~_ zL(!8;Y!>tK*KJE~_54%CX}#&OqNI`zH{PwEpP#SOjGU|!HYH{Lqd7vG<hk46Y5*Dk zxp9~KBHIzNHH3aww?s%4sgm1E&KkZSo+Kq^nxZ9^8o_@im*ymPjab((CEugXye4Gv ztm-Z4$(WHo;x}8R`K@;+(<K^E$q=6V{1?Wq8TxxD^oue7w9?Zl^(4i-<1K;YB8BPU z)TA~k?5OhH4Sw4LW7zaW3>lY=1Q(#Ok@SZ?HWY^6558h{jAOM=6yiIKBfSY2GIFh9 z?Y+Jpn(-@<8XwIzfLUgYt+v<HXXKFZJ@Xtw09P{*0R_FHPghHR#wiPl5LnIDUzQ89 zGnx$m@P-xzkj9dpsI6nh!;P_HJt^9v#ykk=@h8#$oTQ`rd?fKEht`$}(S{l2XzsAF zujMUB2F!L#0L6e%(PC>DkjE^L@~sdxU|7sERh0gCXzlUA<6OY<kWb_m))OjmKs1}) zlzxPknBK&(GCXDPT=`PH{OS@OyRT`Q7-S6exc`P0hDuBVYgxbu{-UOG<S($fnYF1C zo9cw!aZAQ;eQR`|3XW%E){EzQ;!X{n_9IGCSDEJGpL^9<lSNI8=g6$3!0a!3Lz8Ql z>p^gVhf%lHboErCE^Nh*K7mPy(yH84rfTePOoiGn+mO-CD2Z_G`Z_7Ys*%GXM%4eE zYgHq_>J<w!L39wcztKh^h!e9Zd)vs&1>bLUgoO8WYPNxPMj@`8W53kBWDWD%bo}h; zLwKz5o8+73G;H-N>)&&~N<jvXH2@)2o{{enhpnUc4-9sqKYZ%!GXf&Jmh(|o@%vCy z6mHPCtWS_8hPrHV68R8czocPeYW=5hn*t%ie^XDOZsN_D3%!Iw7g{wlJM1sa5D&^k z>X3~}Ya$jlGkp?pBSr7%sVOS;xJ7j>)B3iF=3f+uZxZ~w{b65Kevqqn$%R_-oc=X$ z8Jf@cb+Marn^O`a1t(YrS>5NR7na0WMpq{3W?QE&ewfwgM9H{5m`b|(*(h1mzH5>` zyZkL`w*CCEu1^^QSU+PD?8{dihvMC9_`(V%dlsu14~owi9hR7=%vL*f#7ojhtuL&L zr|IPETopOZ!}MabUKl4>ozbJQjq6U_8g*DKS*8wRBoh^Q^CvJBC6t54=gAYxEy+Rf zG%`xm_XU_3ipF-^FFIMT5P>i2`8WK`(-`L#Y@dxV(QZ{}7#TVlk$H8cj?!~^2-tOE z2Lz?2&%+YB{yi=gTXX`}B8}5~v-C#a%$8j3+`7pyFuh237Y70@i|Njjs-KE&y~z07 z`o9gA3@p)T8Db}UD1aCfuMn-He9WfsTZva!Hr8wVG_X!*e^@HDR{f?r!4Z+pBGtWi zjgVp)Elr{H0WAI{A3O3+q$>?y#xEg1IU2H?hlj3PN!eaf0Tx#P&~s)>#H|GJwrqs@ zv70yux|HLYI9BNzptWK7CP*VJQHVVO`)Y}d&2k%qR#^_W0-Io%z*sh!H_eoE4-$%; zy)z*|Xmv_)JGV5XV@<a^o7e-8D`+$qFvla{P5PuJ_|y8hI#L5l-d|~z<7Bf|z|IJh zj^3XisrYrWN)s8ZoZzHf>t67ygL`3*#|4Rd?-g{~q$kn#ZrcebA+lpIBn)r+Oix4) ziOlVu%a`RU5tT=!$KiDr;+Z4}q`o>H&tG!39T(WNVSiTh%H+pL4r4m4XUEyAD{P4E znl=bWeEtw`CtWeWsbE1cw2JtL2TyiCOxu%o<Yl&^_$}yDHb6sL$razI242&3r9bdK z$bULU$+pM9Sakmy;)<OdbQN-&9Is09rBgsaa*7BO)wDlKssPOLM`;y`WCNq?am9I* zj4Nz#4~dyJ*;mU79u%L@Z=#m`W?rR|PnEGl902NX-LP4I2CH!DaigB|hd&YDu7ATD zvrd7ev!A8n=ZR+eGL%OC&HFR+sdVh^+kAHZ_9?h6Rc!I<#gol+mMO4<1SQRAA3C#b zFkr)UzY>ebRAEKu+_tMzF7F7$;%~jhiMDW>b<I+KHuR{mwY4*$<zhG3^v=#p#EyU# zCxrHqN*=7v`Cl#aRfj^DIWNnWl4GSUfl)U~w?fRj5IW~OMR6=%mvgMV&Tf+LZCCik zG+!ckI#llnPNcM3p_TY(co)GW*~6211zr{UvrV&)<F@fFBOKsnaZQqj7y6o9AprDz zgpoTqfRDEEMtq;?7<;loV)7YbIYjkVq8qnwnF`ME-}Nsm#1r3yWwJLOW9AHJX97Xl z@6e+;%w&+)G`o(od4lp&Jfz(^!6!Ed%wt*wS3pFlptVC?yU_(5aFTm@zwo~mk{4v> zpOD9|l1`vpJ2G03$>(u7*SBTzIS!O1^LPCd=I@w*UePA(@evP0BU|Y^`S7EqS5R!+ zboMeTGyI=Ba>J;X_8@o*%5oHg#RZr=(;wAm1P)wjkxw{#kA?b1xF+A)WAX*Zz+Urv z-Dy7DhG614Bj?If+Gi@d6S+CLv5;@MZpP(bWpeBrXQcCQHY@Zwn;?O*c0D66^Kp32 zC)1Ab_~yUWYV_ok(1`-^0~d$oiH~cMu#h$mi{k(l4iT$9DW$^0AveNbewFNqPRH%{ zP_;;h)3%X9-qV515FN%@%q~81<MEVTP#d^2HYcpO|H;;loChMH@*LOtGGJk}&1u=J z$xW9^?eBm7t6%Mq>DgzrE}JtA{$%ynr^FMiu5J|AcO_DzYT(S0Klw{DEcf0LbEpEU z8Hs|sPyeOA__&cG4Q-XGd3apI<w8Sam_IZ!gpG}!+fzT51J&J|;8y`GtjM+9yr9Sm z%s+`s5rMmb(^qT3&0{{PW@@o`l&A#Vq?<04ni|$$?MKP$pz-2q<~}I2iufqI1PIjV zHf<#U;Hv6Vr_}AeoP0E1tFj%dc%fQ>Ij~QpT>y@U4#dylh##MC(oX*Ar=RdfMnH9u z`8#od<Ha`uhr3)bCKtg_rd&DOTqIg&X`#AJHPI)!PJ32=t<mX_sGp)~wZR+~xgoW0 z#_R=<yl7FWdPiLU`h~-?&K!X3iAs4)>?$Dq;ccX;CbUKs4BwF&IxRFPZ@0?8cO7}o zHvG*ia6H37xvZFmHLU8a%~5bID5mjdAgv5-1PC}9%kBZnV}+{Wl>8Cm2z0JC8#?cX zrhx+-`t8vhZhI^TF;`IdPQ>r{5+Gjr9Kr}u=js-EvzChq%rD`{zITrasnYOu$2ReK zFY?DX_1s_i%(@R484|J~&uSm1ZX;o|+`C`dHDZ8o#=}Akisj3q=IxlOhovC{uwDBe zZ`%^qLWpNuH%ofIgp9Y}<BeRKyVR!H4&rT8y+`@=)=Z_z7N=T=ZH1p8+&s41L%-l3 zJI&IT)r^M{ROmJ+t^h6<uEzLWWJt~e;$e9Yv*)1;%`eTEe!u5hL0d$!UJSM5yyB43 zy^puPN320}_OU0j;Qys<CWx#LWf?8X6I!RWsTzGQB<nup?Y_o^^2xaAEcFa2F6+gh zaX|xP;ip~2V(cW&NO-gB+Etw!<#%G`Q{1*$aNp2SL6|Rp8R{v-b*|Lo^C1G(rSu<B zA$2N{x)?P6HX+Buf!#<!q_A@eWWxa&ZUj{3*zs^((TDZ#RI|QU16s*fUx?Y0(%qB* z9PQ*SPlH?w#3wa|`B=tjB#;P?W%pv?JGHMm2%k4ebeHG%D=P33%YceNa2Ijdh6Nc) z?H2#o+Z=6b6js)$2C(XC8B&JuXiaUb?7!w|HmezRnrQp|Ucda_3M*)<EB^aS;s)pP zu~0TzZG#_@_}qiBs;JmSUT`Lt-I*=FnTD|hk=XO=wOxG~<-KHiN9jVxBgk=|-TtgL zVtq5>F=awYGR)tRZ3Us@H%MX{zwk!V{#dkj&|9ix!C!V)b=yuuLVd9_`pUT$%m>=P zul1z$X4lGfv)U`Ooh&jmuZJ1CoxQxtlhQg3toNtdBkA;_LGFrYiLG5dU3tEPocHro zB@8a8NnF399qM~ga%{t<Q&zIQK|OTwDi~vkZEgGH6y0PZOA$ia(iJB|@4~fCK@;6L zed5z*1M}p#FAc%d49OMDg=(19evSi6A2Udg+cR#2C)0J2>Ed0P5oTIC)0wM?omp@} zY#`5evpR}Cy6roV&U~>TVPZW0%p9YNG2zbMI3zH``qKTDS)5i;n%nS${06Kv%<jE_ zz|vmOApNBe({!auFH{~+uwm_t#C>J4X)jtvMC%h>O<Go&3$VHHzpa0uQc<MqSgS=N zwL@I=4yO<6W?%m5(-DxGq0q)*PT4pv#f<sSPk+an!+J(E0=goWK`P5@XeY)^yMCAk z(kyDcY9v8}IBUVy=#$ZQn?cWHnb2^rE2~PVaGk@jZi`B0XNQ<LD*8^-Kh0{!X%Ss^ z_oBOr>I+71z&a9I*=jxE$NO*bh9GtA)QJpBD<bwsHDWB$aTZ4ueAahYyP^CU=7#>= znJ_7(_fV!-km%LZNsklMzz~lA&>5?dw56OYh)Fdek`0p7RSL!2z)4O&n>Ta`onA2Q zJY9?2{@?NO=l43enLk0xzE+^=Ik38iVbRIGB)=s*#ZqxUT4swFu`bDxGI~>2vp!u! zqE>HvlMbnSybtFoX1kE&_n{m)jH{DhxIO}4@E;*MLSP8x!fHXjdux#s&|~yHdn*v~ zrNo?RK{;^;GrXhl^PG)w3x=NbEB4q8i815($k@%t{Z?2j@|LYP2U0b7{}V7pUl*4> zs|}3zcz;s>9BrD&a8w`^1n(mHl0rgM3_mzNd08EwQCND>4$~U7w955DSM?n3_fQ8B zACqJ}V3pCGg#{s=UL;V<76ZhykYQN5#p#74BN{I_SI0ul<tKH~)ChYAs~rO{)~kaY zpQGYQ-ADvhB3)^AlNw77INq_*=YyOc*K^XcoDkKhk!i;X7ZuaE{MB@PtN^$Ut+gX# zp#V*-H5+ywAe;VGOON;d1K#^RKVC2zC$?JV>$iO3RC?>+_J^FX_v&Q}28tm=ytXb8 z%Om5uP?Y8-?EaG9lr8|krfR60JI@;;3K0R!CTc;fkGbZ(UupoBzx%FU#eocuxv6aQ z`dRRb%SP23ORHTw)8!tPRG#Kaf&X~z<Z*qS32q~%tT)(7z4wTutYJkm3=8l*+jNp} zy;+dKlir$@Ryx?xXvBO9Q!i*cXA4;qZ%dqG^dmjx3q;AEj4yI0P~2qY{Zj6-_0;ru z7P+3dMl_<3?kWzFj^D5=76`$N#uNci(+Qf?pIa=Znho`;Vub_$xu*Wocjc+o%`r7= ztpukqP&;cB{BxZJ(gvpHR`;)e{i`|%hUjjn%rO!gPtNDjnEEH>q=NgXdJP2wP`O~g z)8I$eXaJZhWj3Z{6Er|Y!-(o_v`68GSatm<k<knnQM}ua)bXu}T9aYssfF*c2<~h! zkGD82@FsZ#AXYGM7FIwrBMB)xX}zY8u^P`XcID2kd5tFC(U)2taP>nLx4ppuV0eNz z!pq)K<xU-9y&`LYPo{@k)YqalGlO1I5ABJ1NU`%cWfG;#!z&#vx`l2oFWlOfH@wv* zU@3morH`y5J8eur0r!H)t!svuqQYy?>2B;3<Q^+D($bNUl|cvsSQmgg!nf&5jBK%V zLj2$xWE_#C11e=;W}s!0Y<k3O)!FFcY;`bH<Yt<SEM#Hate?*>%n6aj4X++4n0I8V zn+RX@#qK)@D&kBj_<)HDN(GeRj5Zl5z00sZ9f+4Y5T69Gc%LH}4Bq=upWU%Kh~~eQ zhXZg)+~DHFtNM(^JfABwEtpJ#?pL2f@RILuJgDvW_SGAz@_-}f!|(cVdvAI2wQkP7 z8O+`2YVCW_QpLmM0RNH=XqA^5Rt8GE<J54UhZz&I7-T;uR+&iZxnPgb3?@W#dgam6 zO!wxW(Kt0Y4qx5nV<_cLh4*?CU2)<lv%7DXdMdFBXYHC0x@<S2ignyBKp~`2uIjTU zEJnS4WGkB6a|45;^k4Rg^?AuFg7#i*b%mzrLupt+FmjLsZMkLifcgFEpucKut%qmD zD#`9xziVj(EGINuCE=5t26QpOE4=vY={q;z?h$02d-TQM35BplC5b-m^1{_RLxcKk zuW-!)do0x{4!cd;ENq!is7|Hl(A@Qj&qE!%w#uqhO%w!%#n~zS&39!>&%Gw&v=;HW z_r6efH__n(FmtB?$EDOluJNU~dIcwlrR2i^WRFgKzS?g?!RFZslFT%hJDVw5cA7Ym zv=)6&N$(ADE~VcHnG}K$QwM8-Wg8x~M5Fbl!$OjK6uu6o7k)BvJ*A~Cge)Gc@F7+U zb7IDaW_c%7Lg1p*aGC0uz$R4T5qe>qRzoHd2-UX^m&pls^^VZc0qH{TAoZ3s^p;w2 zPfXPvM4YW{Yh+yGy<XdPE4tG~fx%1P$K|(taL?*=e$6ixm-}FMeOu5nR<h^7><t1> zR?d8|h6jPYtW_Tp<%c~)qc>wX$57C7+=L|;K#X#5lh(F$&nd<2cBGhZ<dzv?i<Ljy z4m92tqgRfA+{eHA=|Q|B1kfq&+m}HWL3l}iND~3QX^wK6l{bxqS?|Bt8@$->|MK$V z!DXNRqQ5CO3}2Ex<|@*dw9#nRGQWQsKdO*|$sSgFLoG9ZyKAEB(FsaBUJZK_D7P5v zd-s;}V8dT}=$;Ms8fvM?<Kr&N_=3D!W_4vq=u5OGsoG2Rw@JWaeaf(VG^X7pmfyLT zS3lYX#?y@l;zCn?9~2bCf^xa%Q6T75bxbiQb+piJY2>M%IUw5pnBis^5Y-JeEpV9< z02DB;`&WC{-rPnJ!~dqA;xLb%spB~1oe(lS%4>KHl-GpNapOyS;QBH?ho%s|JJL_m zY2`g9;W@($%mDG;u2!qv)oQhRyd&8v)!RLwi{pB&1fAv2WLZU0U#^$o>1?eGopuu4 zz6M7*EF!QY3x5WT(g<jsz=;y&8&pV!S-d18m|IkQn^w8{FD|~KgCs6-cTn>fWcbgj zak<l<4L4v*P_6Qwf#k0+KT;FUu3v0}?5^w2!udpDdb1gD{EYE#Mz9B{UV$?ATcD7w zM)VNEKr88GiH-{WDF6)!YVV_d%pV^XZ%7QGa@}U|jxRu^8#ov`syU%g>!axcqM3X( zD@ac1rQ0Smts^zOQNkW`BVqdlS&Z7Fz$kha7O>yK<;Lcf<?Gew(8icAlzor6YO1lU zPuU25%L%Rv_IYG~2s5;dKQTy?JT1{AR<x4AoTn#Ttm)AZ{$0BWw}63EK$AfjVo;@I z!|RtX@;y%*4x)i3>;glN4jBF0ArcI4KmeXvtK}zxMj>=d=6MAxkX56E@N?9{BFcHm zXz@QjIoiPc>p8_^gfVGAt932>*Qf{)!Zwsw$B%l;&$s-`Kr+3V9x!&BK)&!M+tMV4 z%(7Tg3N^I|L3y;WHshn|+&=I5?4bm6<#LBPX32}gO^qr&<vrG_1{feW$rgfElq-N! zW^kM-dAo0&f&FjZD*A$;b_j!y5<x8h_^nGKMU27L1^W;q&#_yn_2rD}9ZoBvfIclb z1f*(!I$4d;fpQT&UE2Nuxp1MYh<+hfUYfNFzb`Jl;6Y{CsoS@o+?_t)u*8Hi)#I(o zs!*$)C$tXPL*=5()>^wUjiK>X!_XG&Wy!=mVrkk!4AywI@CSCepFC2BG=0mqvK8!2 zkF|V%y`~-;p`Uhn9IfHq*-!oQmztrF;~$U_SW5*dfM%iT61(3p0)&y9<TqYV_E@*D z*>oZ)-&Fu^L&)>7&Csjag&9`bp_x^7p))#6QXcAtl<RZ4k9N_}|0w#1yknsKwZ}uV zr#E%1JCd9f;OUfa^Pe`eaDC=V<0ZhnLk~bR9gy-HpQbFdMc%3W$h~l5fHkuOG=onk zyHAJf7EF-lm<uEKe|PNSl^&&bR@Vz!A}h&Xg=-hnqd8Gu5sbD#!tr`ZTjFPETX|ky zAv2u^V?Z)yF<sVe)oK<(l8@U;;;&gEhVq%)uTEYEmwo1?7hipCh~`4v6b+;9sK6(@ zA^;H`5bO~1ST;d)R5GJ1TR(_5vy<CA#sgO)=solD?bjx|c$n75ZTPF#GYn*|aVh;v zdoy)vrGgJ<*_EA(ZK_*+7$@NhWP-U%=jWsejm<h{g*SEHQ&gSMbo@R<mJ8w|lo4)D zL|jS?l%F`z?Qz42cl35WXFTf@4~PpovhBbbh~tk6gyd(7uTY3J2MSx<I=zySQI|9; z!#udHH#m`*_4_&D_7<jHPDx_(mXw)R*yhf&TI)-S-FWc)54J7S;p36QFIO~gl=hzp z2vlL}>sk!>fN3mF3SapFxgo0gJ>GF+j!V4atigW^E8!Z@wW8Uw3_hv()ND>x==bj3 z&j-bZ9z$G5BdXea@W(Qmg-mfiU}eR))jS7G+s8x>*uqcgIkP6!DP>COv;5?Bzu${~ zae(Bl-4F_P50@UztPA;9*+3abDKL-p6@LF}QNnV}hNZck*^jXujsT=>c=4L|al`}6 zr(OleH#B-{X0|x<Cu<#BOjpaCponaLc;_|h3#}hlcz5Lcxvs~trhn~Kg=s1V#7%~Y zRqxunxX70bCVbbPfv|aC`Pm)jqi*1>0$U%ASyW|R3ct9^b+G?2Zq#DYH;uxf4956Y zz6==Am~tIe;D#Ky)4NU8!p_JBU>vPTMMUn))p`-`af3HPg(~{40gIrt1vrF2O(N-l zrp#)XMEq$ZQ)b2iWKKo!IQ1Ce&#`zpOqY)|oX5VwTmY`|#$m$%?c7F?VQMn{oGL2m z^vdAbJpxidDqBPFh8<yr=%xy}njr)5*@K5`^WX1c&Wo*wu!@>U=boy-FHt}#lb+43 z$USHbkUvSmn^pr(Y6rqUbOBjZ5D{DLSH0&@KBHqpR(ivRwO#q=Q{*=mwWtN}9+B-1 zUC<?}KccVE{4}R$r$j)4L|<6`c<q&!hk#?Uxi(LwJ;H9>P}k-vJW}1F`K64!8NOMt zaBypXlDRfKZ-=3~%eeY*snJw;toI>+nr=CTFTwXIuV7e-Z_|ES14S-1I$AOIVZoM4 z(2cuAhU4UxOi)i_{4o+@BzOKffaoEQE_L#T<ghPY$VE3xhU*CvA=v_(y{WAsvb{fk z_=JP~A^yPjHpi2o%jJ*Fs%hpw)g(bKA8fB`UXR<azx3KG!>;i+5T@i3q8Jfz%)PB| z>YiS^DHE|Wk8Un9SHHoxTXEonqlAuDtH`T~{wcDFK~B|Aal$PmEET&zZy%d)eE)Ty zm)Cpsl7#m2;zf_(l`lf2$NB>7_ic=xjd3x$G<1()8S*%23T9GS#7n!Kz<7K)t=lT* zOqbY=^xfX%t(D%V*K;z^B57#tIC)_DjAei^sasf?IYX<87soz0m#Gjeygjq88{tBC z^;H~fRbxmRVUu`L8zQ@A<z90BC|sRwcHvOgI@#K_T=U_2VvU;<JsD9M2f~UN<xlGD z)*RE@c{TI;y5$~L^HT~mI3{Do`xHxs&v%Y5v<*Ln@#(|U?ao8$o*Yuu>>kUT1nnL> zIqcq>oWC}iyfoR_*|}GK`sKYlUwrY|7xzB>?C!m{zJBY&kKcOx<2yWIzFzS|w=pY) zIgY5Rh2=TYgKO|!NWxKN$<834*i6w}^Y~rwA*#WbqV~gcwj9UUo?$WMDg$5o&=ugS zH*M`IY7)*<36{F1eH+@M&GjhhowYgL^Xjt-=Y6=EDO^1|qCzC5;9LkHBUYJCBRUJO zx<{FK+Bk%DB0mixD>xr!^elF^lAYQyq8*@n7`om)Wz~9PNo$X>oyS-9t*1be>=-uF zZj~UJcnhlo4a7P%9^uYG|6A9KQvPnzy}bVNYnHtGsT{8{5aHI5PI*PB+#|{!iEjfB ziQG4Gk<iT97!DwqFFffDup}%e9zT&6I-XwOg9}&e&>R-2ZlVCeflBU^Ai#E-gmUN2 zlHj|k|G^;bGZINHE@L=Hzv7u6XX~xp?kWv5h1+s?J4W^!bHSXNBYXf;N}&rzIH?{( zprHlL+(lx;!r4o+G~7qnp(+K0OVO+m6IQc~@;m<&C&w@@R*OZ+3pU)C`$A;pTXStO z9*_zY@uDU#?L|u6A@7T4c3ygUvI`d%L|f_HF?Md>e$iA1?zBX(UILJ4XcfbwqG>;J z+`gaHBnDV<0iMWSc?;8V$F_;X->e1p$cXR@-w3HEmU>h_+wm4ed+$0Lw8yTmj%U5b zG;{IJWg>TCpxMVg>5(M!z)8Y|cu%wHSo0)t(Y#fQ?!9@Ywup3el&rIUo)tSTvzuCH z)%X#^gv*jU8{PHFw((pCO`=kM!>usr@KW`$YmYON_hhK5)I(!Yz}ovycrA!ZRiCg> z9?qdm=^LlWEhbh?P=06FhwDA{0ZsU=TYz?%)X^_kBzakko*wdk!(%`$ob}DmWVAEv ziCF9UWjDWr*EpLx&ZkezY<+ohzETtS?H|g6-Bt5|5=&hW6M1~`kS=_~XSbymxyVVK z!&~2P9qkVf%ERwxx5o7MtzmgM-TLLZqZg=hO|_Xh5wYm6lXH69gK%+pLuBL%zG%}$ z{b*{bZ|KU0Vr0#HG+mPF<8E{6Ki+Ouq((qWO$oilU;USUhBcK~htF0IvmQ|DFh8zN zlJ34h?+y}Q{U<(q2MxthBpq|sg_cvr8&4hW_2=zpx`zA(rxl+|)s*FjEJLKt*{IN2 zbK4~}<b8}kLj1Onv{aC+N>(qucU}${0UFwi!_lU`X~k^xEv=F7rTCHlm!$0%GyWgN zg5Q=X<E_;WYZa`0?eSL<W}eKeaXK_hkfSEy^<vJCNY<=50XPeOfGu22X`~k2Od)8H zFIv8{iZtVVFKLhYU6&$LvZp1alT{ML)=~?x+)#qx2ymeN4xq-6AL=2nK>7g;^{R0t zg41syRJ?_7&?`KI9WZ}rlYlz}8tZwt;9d;^!Xluf_F+{qEeH-xG_@7?0yUU5eJ`py zi6r;i87!U^6DLR<>mV`AJ8s*uPy%TsB111tuAu42Fnm`EP^HV?JdAIfH_`z6VLd!* zz`{{%1XbEp#|=Ml((Ug?%wlfd1}vTOMdXBZ)4t5H#Q)9}-AB=ji%Zv2?<%@-ks_Bv zpj#G;*OS>XZ@)ex`b#W_yZTpH4p$HKvL$PC7FKQF^gL~ofkhwrf&qzSPt8)VQGL{P zb=?*IZ>(%ZHCu8*ioGir6JtJA6BQb4AwooAe0fhwb_+ifrG#7Sw>0_oVnqMm?mZ9h zHw|6y)v%pv$p+%mY6|<rjft*L7GUIkA8vQEh&86@j@epJ6TXj<JlkQpqBEdjcJ4qi zz(YV5m+gGHTA(>;a=>tmMkTi#5}M^;S5C5lE}8WEp+KOfa<Wr%*>7ZNpw=e&<_f!1 zHz`J}+cc-Y2at;^0JDEWN9*0DhncLJ4Gbmn3$;%4VPemkI7KK;hGQNag|cQTO0PfN z0DjeqyVT!rn^}xutIZO0q5K_PLlh$q4=Qxlf)?fG4t*)+!9S!|0v;KtFBk32L(})p z!J$<n4a%8Eip7FpFjx@$4J#rpL9h;vYH*Vw-6YLN)oT1{is#gt>As!GqF`8_EfyLz zLm=SYnna0uRS|ARs66vF-8K|gT41Lm;k~Wu^_01LGD@f>q>`)(s^PV<i#Kf&Y1LNq z6NZX)>O2tP^Of?x3-N;LCkFkR!?%;Fhhsuq1>$=v1GAVZ1VetFLY3_5=B)U%5IA-S zcps>F3LhNZ$~;^p!o@}Wjy;c~N-M18`eTZBD+oa_g<@H^fw+tX;M=_n{h~zfQQ_1> ze%hbd)N85Hlq^VayQrod*Ya$YynM3X8SFw{grLhu6e|Ok_5CwiNtV})^c=Pxy)o|C zIA!vtx;(A?TUIhy!>;r@P1w0Ir~H<u%^hE!Vscq!zO-Wf=&@+!qflu5g;MViKBg}8 z+re({O-~3Bz2$7(pEnj|6;$5_sjao&HW4TkZCo$_-7z@Yv`l)m-4;M=AksJ7Oi1dH z>(Lcfq3Kw98qsK{tNyEi-?F0phQNKBN6jy{?Z?w6v{I~<i6yyAl9CJOeWsquWx;sY zz#j0s24EPC6#Bd(A73Z0cq4?F+DjUtV7-lL=I+})R{hp7OlzE94p7&q_a_LUl(=SV zYS&Zkm!{#H&Q7ju&GK;d2fi{cWqcxP49iX@I22tV)N$s^aA)doDJ5^nP)=y&Wk}>Z z1Xr}44|j~!q9A;l1mAp5r4x3)`7Ij$J=>efD10}Sk->7$mT%E!>pKL21=d`M*QZiQ zUozToRKY;JdfW-p=Vif19nRJf+QcKv^m}5+PSBDWsSW`i%TDFL;=qoYT%z1X?IXby zy~O2aC|Vj2Q5qr<2s$2lz8VA@u9!?E;265n)-bdo(-PU2bY|}{o3Y#-w~q?I6i>HB zO)&M#i|kwxxZ9@)@MY&T4-Nx6J-3UXKbP6Q<zti26`)J2%+3i%mivT6062!U&ns4o z&W}!KNrPeBcF5}v?Qs+bvXn`kZ6ngKctH@^ySfk5i{Nc-dgw)R3*6o!`G`WuE<$SZ zk%eArXw2~3oKIOj?gx+p^7*2@mX4m#$1v=hEU>M8UR+x{MD`sX4b@^A0ND)5YAm*6 zrF<W8?GXlK(-jw9-UK^G<LKquaRFjhsvmucIKIc4Mz!YLvo4cs&ONl!I|QdANiPsc z8%pzW#%6rYs<}fH@M{Cq;c4C;{PydCw+@#^NbTj}k<0!4cS#ut^(*n3IM_fX*?NkW zgLh~`+3AcX*W@0+E@o#-73HB!K%$=qi$;xFq6$Wkwn(H~61(M1Q7CL}MZZ_ng+f78 zX8R(C$8^C;Co6MjMBoE=g?3e)>In)Qr=6uh*F(vZ6D{oQE23zSZ*5KX_L-}M`FqM@ z@h<B{LLWlY`UNh$Pxwt4XwEuARUJu~yjdmFxAEe9BL<CCU0ERpmc%vz4a)~{Eb+v3 zBOVy?xB{P3dVW=91%;OGKC~GBWJKVG!z?Z^Vm)GBjy!M{kTP7UhIuEvug0nTy1ZPG z!>c^<%a%)DLQ)K=7eZlHy-QKscEbY%PsvEXennd;Y6|_^T~!T5B?W4T-r++6{A*zv z06VgN)32YMt-@z?V4oej*YI<Y92K&|7zdv&<4%#~cfV_EQ+t)AfW27@0p7ERMU#cL zd<u;&(dM4m#n3P3sNvC4<#&vidXNh*Qf*ie&C+Cs)HUv=PoKaDv@)q|Q&a^&fpw^2 z$`y$lVGZpjWde!7N4WYIF1|T<`8f0z=I;#A%(^M|U4|MrCnq#qvb->Igqom=ga{?7 z#BWHP5lZSs0vJPSLCRQkn6^18cC!lOdwOXxPK6T!qd|YHXWdWl_c)`{-y2-c(FWWp z20qAii-C!SBrN%i8b&T%YKbTvgwGfpn-14e=)r394G?@inJ$B#jyU5;qVkbEH$wEO zs6XpI7PsW<3k7Wd5TLDnOtAkTyt3q^F%OBRZF%|v{`~yI;r4A7T_)p~S&%`iTOF80 zFRlmCF5><3W4L#&uV|h^!*o)1%<G3@->U5C7d=zazAHm(x!|~5@wB!ab7U49S12>f ziQoJ{@@0s`h2q7{O)WoztMzdLXeb_gj5HxxLXbs+2E!{I-x%kr;+B1|#bd)Bsg}@` zFo{mIbi}#kVMi8R1>(nUYYly2V!}c=GBy8d5%8OS^$x~yOL|O$QJ3OM<u7`S&RS8@ z)SeM?y|8st_=F$X=<V9oD%)I!=dYZAdV$lVlWP9AL`Wg@K5|oCT+jy`2W|lUl7%~f zC^=D!2;n&AGWo5(E4RgfRuG?UI}}KID9z2_nLpR9HgB=6verA3({r@K(4<FP0LRWd z>h{y=r=?Yhx5Op5(E)|nKzw_!aUBVGJr(V0%VhqM;f_XaLXE}pY8DnITH-Uqt&J82 zB%ow%pf=t<<i6quudAdnaN-B)8MN0)_$-nlBg~rL?Ov!*?4zfy5VtPswkwbuF_7T# zds+Y0*jGk&KQ@R9s5~46XFpAwe89;w!FW1Wu`2Ci6c;v#f=y``g5<iRtj?FO^R`u) zzU8UFe|pwFELY-mqBcm@oBc$#9rzk^&<)}T><hyZ^SIW+p)>H5>D^?>@@6;9nI#YU zQE&YUtK=~v3O-f^0*hm913j&|E<R|wAWSqX^C|Uj1Wmbg;0{H&_HW+U5e(y+=CkL3 z8`T5cb>h7~*X0}jq-bXz|A-iJP%iu1Gu<>bq|BW2`!*-;p9E~|er||{2L-Iq_yO=C zhO*9JA|q672u5L>l`VXDgm#y8a~AXU_H)x-68G{6=DR^U!TkHbGQo`NwI(=Dgwd0p zSW}AJVarS$%y5B80dQ$Tls;|88rMQfDMwB>ur<WIvmPNGj?2=wipUYApPU_43ufV) zxzUb)70JZZj-gxC+D2CBh)0zOh?_T#nvh=b^^r$x3>mR3G)}*E8Z}Tqn#uWN*oJ=X zb0U^xk1_2-I{tt9W;s2@gN*BHFsJK$*tD)Lq^2E$R_oervX5ko%5V8U-?1&Fi;*Qf zqcroC^c#(!sI85GgOi~iW@deahk(@OH+LJGF0DQ96Xy};6|IT^f>&YTiAFT0G0XPb zy4_FNk!OhSrT3oAn7f;e3<adYF#~W@!Z%BBw#8;NAWvq@UU7^0l&)N|Hj<qA@Kq`2 zTc<~va@B@<2T{>LYd6Su-kR+^t+FogdrrGNm15KY;~Ae9VzITxGXNoQgGI63&u==d z@aNSMX|@P`(={0Ko#7$^b>L2E{jWV##XiDE+Jc+ErU$~F!nRKPVY^~PuR&Te26`;b z;SY#(a;+W=*ZE~=c$mGfh5nC9rzhW`5z}PUPgCnCmmiT1xHSG9=8f;whTAZkm8c+Y zPO?)jaQa*YyFAnAW0@|^#qkk>pVT2*?6p+-zTw>7E^5z%?Va4zU7xKNzg&yGwM8_J z8F;+01Gnbsjkh^1gH&sxF1^IOXwMnhF!3tUNy>!@&;X=AELIi3sut2h=gnC<er19i z;>olnJ?w4ykp%Na11hrXIQu<K6c|sffKuITxMH3AFr8s>xw0!a9-}g>JKzn--dzUK zCd2><T-vO$;E;Z*c#u64Z>q>IV)&8Ey(rG5UMQO$P0!1T4TANq_SY@?3)i_lPp%eG z2%T#?sT^VoV!R&uSi-RSPqof7t#|&xG}tkfC75?#bma$2y6S~pGYW>EYu7`2K%y@g zl)S^~T3400zoM+$dARKwpvrbhoL~;U!cla&@TdE7@CFMVsHmB;-Xs%6i7$4yDarJ7 z_5@aEnKd}f7`1F5Yz*ZRiLG=C!Q2=;Hxb7JbL?cGrXR)*HjQlG-A7Q-Xxm>sbr@Q% zIHC~zepcih#6K=(7Z26Xhuq+sl{pSE87>~K9?kiqt*ZgKU%uU(A$rz3^O_{CFYvTb zFE)lgTzg(&)jUZ}VR7jZ6K2d!^Cu)*-fzyGxUqU}Y3YFLH9fd?&T$?-!(SqrBx>8* zBoseoe3juz1T#(|T(x{x2O1Fp`v{GF(dTW)Oy)HJ0asKoWC6%9OT3GTJhn!ACy1A( zdv&r*Zdyj3wxSO)tbh7=2e@;!zL=I#!2m-8Se(W@PrO_u<{Pt>cR%|CtFt35VGqih z3QL09lA2SyAL+Q)$i&SK=&cWj9sL-u*xqJNu3qw!|0*bWl~tM8$4T*9P_$wSFhmd= zBPa2SiinusAi7vdAB80xgQ(=OR-g$G9D5-R1n}01CP`a%MvHB&(As*Dw{6M!cs|#D zOG0l<X`8F>WM%Y3Qz8m{LPW;p(7F;B0ZlI&Cfx{%-p#jvqMI-xFOqIn7>CVTK}<No zZL8>rhstwc<8zA23J#TxTFE1nO?t8>WIf0kb3+c;zs#BbXG$4UiWO^;Xplz|$D`2D zEU{)^vP^|3mfD{q*r~Cjw5*H2|5;uU-~K!sLybNbpt8r;b@kX<dP#@SJLy=cUfSv) z{l%O)RMsa$6E}ASdwr%t4cjV#B4JyEFTMwm6_Dn*Ox_lgP_nF1M;Y{1Jm65E<O%|G zoK=eg`W~gVol%loL^5O;8AbTQSNo&;2{(Y`lO=`&gZ%TvbXxY2Qk4eaE<z6He0v=+ z<0qr$`hE#()kY#*EY1@^8|?VaVE2=k4dp3l7<sk74ZANW_{zLaSAmS)?y@ZR7DdRd z=JS>ssHg`s(RE);!P?P|&un25#`n<yjpZA-VN1NI2?i!3yH0Z+uC({&Hs|@ajwGhK z*I*F7i2B#-eGZ(qYCCd$rW!^f^Vc<UG&9X2?yhI$rTeo~lg0bjY4?{%hk^F7p9mr_ z{44jS8iwMka%E*!71hT|45tMS`?&luQ2*qsAGrOK>_w6Ci+3&vjWQ|7aSknW*+!ds zfu4camO-dy7`B*Y_<<QUIGL>KCpB4>Sw4u3q2l@8`ZL{X>88e~WBoHV;zXwS3!H-f zH<K}aVj&yC`+M*$;c6kc1Mw7>Rr%J)*V#9yPcb9eziAUich0t%(**7@Z6<q65&EA% zqCaHS@4kF`UQoT7LUT_hlRXXGK;NNe+1)uk-xJLW{=E4nclG8Q+sS`1sDG#T;+UAO zR@%Qgk>4$8tn@b_v!s7#gc|<CzqWzjo8spYm6kr8qIDY4Lh1%k3~UI4QMlLO4;cvl zl%e2HU`;IvS!$%1+fVQ{1X<qgydR3+)GXUE!Mge2?k6A9#Pa;|TIW>|Bc(g)vXru5 z>9+g`io^CwTm|b=s#xu{8mn3QjWx$#5^E-6C-p)TeJITiR=(p{ch0uJ?_c&u*-MXF z2C<qYjrX;2GLmr{c~!@$_VP+1?hS6UtxRXrJUy8%>!Lfw3K8XWiZQ(s_R*t9(h64e z`?+Ztc|`v9gm?0Wk2|2tB_rz}4iCjA|1!55ua(30BdVLy>mBWz2fKx-ip%4}#qs=X zRtX#YaPf9`*I_tV)nTbbo+;qCC?;rd7ELwm!VwsEx;1<Yn8I%5+WF0QtQaKG^!R>R zOEu)czz-Ho6bk#U8Ts*jjjLXMvR_T%aCHCi<EJ~luiKc%(zX60=Qk6!yRlzl2U;gI z_NCkxf5pBIJb4v?_C{c6e1LBuIS^sB4Rp)}w&EanR8K@RK($G@RCeQvm+v*#m9Z7& zouExeKdL;UkG4^)qE39-Re0yiFKNR1DL_LS6lqPKo&Ksk@~-Z5etgE(I4PvPW2`7a z_vX88+qP}nwr$(CZJur0wr$(C&z>_gd1vO{PxHUG)0M0boz+RFo=#=eub$-$E&R&N z42#i#us51*Bjn+%g5$Ox3w8I`LZe$!Pi_&}=F`wLnrbyaUBlR}B01wT)`)&7A9s|G znMEFzQkr@raz-glYsYI+uPRCiH(u633@Cd$qC_?-@Ucy$wtR8~XH}3(quzzN`8y#Q zfz*ZCjch_sNk|8n3@m#nB<F_VD=6@|k_+3*%n{ZYL|gEs{Qd;%#Yzhoc;!qWVEH4R znO1Gf$>2LX|0$#Z0O!D{z9%4bWi*P?0)^uG8;+I3+7MZRJ_l_<3<nhmb)G&9KM%(> z*I+D^>vM7!A9_Yjwa@Tnsgh}@JmcE`Q?k*fPXImZ16q*Nfp`gKpFn<U(hv%m^CMmz zs`zFT{e5hUdkIOi>d4xI7`aAj6T0vcD($e~Zl-V@wp^Rs?yEd0W`n7MVUG&ka{U{R z5s_yQ{W@CaG(WF`xgdXWAKPyplH_v7m~`IgL#cS`h%!xl;aw@&08Fa!1Nqb-InKy< zq12Yg409yb++}gXRj@jDnVsgo2zf>H(9L#tG<^#BidoWEY$f*XD!>=SABX{-OlVdO z&?$t+&Zi^{217$vG$WEIjstPeZK!xOilQirY&qm7<@$JgDR%KK{a;(P{VFyRSoTZ$ za&vXf@T~i`_4*^9F2xpE7Wt7%!vsI1vC^5&u>kk9Sm&Q3`#eQ1*^NUiA{+5FR>kGL z@R{l!#2YGbwCbd{X+<j;#c1Jn?<6Pyv{ev_Yb=BivUg^wmi+~Y-=EmJo9F8`bo|U( zA6X)gktNNv2@DX~1eHeJzY=7zPv#oSv4Du>QW7NFluuGEfj*sda2WjY!=f!=k%zO+ zeKxg`m`w_*KZQsbEdn+{DO!Kc%52y;6gFp$dI3D?NO1!RQl<nSC7=NV9!lY#`-XzR zStanI4Oua;61s@)yN_+tA-g69hrngEx6TN!9qWpGA2fRAL!x`mMR6mHrxeC+nfA3} zfm?D8;_k&`gkHF)_JuzS#LLU(On{UfRDo5st_}60#b72`RI7rD;yL(|eEZ|Z?0v3w z9!+3lC)b~yC{VE9dTe|i4uvThKjX8<R*)WQ>fI2Y%@7$Ju9Zd^1R5A&&EYxQ!1WP2 zZ8^?!JQ?iptk4rnLSoFcC^%k~DaQ~;dN?W#l)p`NP-g=rvDOKk<m?6Z9)KgpwGIp+ zs%0*hQCus_uYiPJv{7_M-2pd%knzTU-FUr>_g*N7Uc#r5x5s1wxxQK=Y}owz<!gEz z2cTHX@BEm<VzD>m6S(=6L%|*zv`jX)Y;0F)iX0TDsit1nX~xew^^%x}=WGo<&$U7v z*ZlNEb_YUDPLoN@X-n)sEAq6mnh<et)nAb-z^@%8eEcZgFl7qPKRch`oG>a4Ojh{x zKcoMerEwuNp=p0i6Z!5MX-}k#S8I{r++kkE6>A^OS>TT^FA=KBZQYW#QCMfyoMVVK zg@2SLL%D|I*@mxwYz@N4MU4)RYw#g~vIh|@3Hbnsb-N6{2kT;(6<lv}#Ea>nhG-<0 zl+XDwG-$zz-S;6)Yq5qg$w<PcU&qWhrv+Q<6m&I2>R=5qsmMS4tB1rwX+k{5)cG&U zC``#2yk9F3=JzT&ru+YCgbq-L`9tx-A(l4#nKLRpq<B}*8G3ZpZM9Vx&vs;r0o&dQ z=I5XVGfbRC+o0G={o7R{*FYCo4p3()Y8sPg_Pi12LQ|EZ#I^l}s~`;wf&vTx0098& zC@65u0|K=Q1OVU&1^^%e@NXEp7^)Z=*_b-hGSYF<G0>ZOxHuU)(+k_%s98GG+nSnK z8q%BC8~-P?a;A5-5OQ*LwvbXbcCvJEp|f&MRhh8cVnE>4)@KxjOVUwyO2&i27DF!^ zUqrFE+Fr!5u%uy3lnjkV2l;q|qvUin0Jnw7BnY?P?Z$-5bn60iF>FK&tC90mRC{JG z&uL&O#Ve+)a!{3EH6^2VOf+%IyA8Z61FR)X55lAyNure5w*j-Z3_LYpMF(|Q3hopt zZTNStWOCi|N-fKC<?_8-poFqG8=v&&_y|$ttW`_+7Xj|;?yF(zzF%h5`ov?~s#{Zl zB@S}^_kOnU0J<U|nH)2l0(DNo!sW?$ippY*QzKFNwp8TZ(G61O*x~WXsHrB`9}A`^ z6E%}s1_k_0kX)AXuMgeG2g!McYpfF*Wp|T~A&k8k0@orYdPexYrF@C_{GTF)bmIz! zm}K2$fRLI>Lj)JLg@dZbP7+vLqy<d|(6)9xsZ?tW*TD)QH|R|6+-XzzOq4L_XoNxS z!7hD?&WswEV~s+`F$j&sp_mRwY>s3oyrV}<2f=(c8IzP7Hii8~=#rcmRiNe?$!<NT zr21H9(lr%x(sY9qQLNSZWjGzOsU&rXW7V*lF$Rm|;-DKeMn#SN%OLsikUw(^_BNXd zW2r?Q;PzMnQl}|weFegtX>M8v^whAY$VKH1-h6tcF91R}w1hkf3%D+~3l3)o^VgT@ z<>bvDzst9BKhd279JdYDoG4=4cjSxJEqn`7fy;d?&D!28y-^F^-7=Yf7j}Y+v(cOf z`HL!1SEbC#TU6p^n{2TM>V=XwwL^f7iu9h;?*T-2Y4SmxYF@FU?W?#R$8-xmcJ%@* zoRJUlLPmIEylX;M<rcDaHe2TQy)bxM;a<Kdd!&+O9yUc(Joqis(n*-eu7j;5{lSqZ z`z6+Ta}(2Bw(_-~B676()f_tuvbt*rv2l~uv&oY38$qqr*XWk%E|wGLn_O-~JJ{Zu zL3Y0=4l2_o&w1mOx{^KKU}uh!pAfhw`~m-;x-ofj!jB;Y0HEgw0O0xmsvBW@C)0m= z$<@9v$`(WTyI0oVoJuGp5fFmRpoY5@dGjfOQ|3xkMVk%)jk|C_tkvV)w*e|CdDlsK z&B)EYHamSA_1R>;Coxy-E<cp{>yblh8TV`c5Q4R|VROBF<%h>lRwTJUH^|bvHndRi zmwewpPHeJNi3RJk$%e(}p1grB_qn)iK}Se4OTNjF$dp+Y>#Tu47SyErcdX-Tq~3*X z9Gc6oJ)T@yM$%N;{(O#Bk~8;AUTG+0I&49qA{aQV=wT`3Ug4&oT4FK~s$Z;0Y<`ii zJVCE+g2H^Fi2+Z}m<oUPM~CV%kp*9D-#2Y^@nfRp7@qjzCA+E7Tk7a)Z}`ox_W5)u z!K5gLRUf*g7tK1cGonY;yPS^f!G=%Ja?Re}p1XnRm3-;lghP3-v#!!gRZ)okdsqFf zTJ3Ac1}O8gXTriE;WIf{5rx`t#ix*~kPkajZ=_Mx^}>wT)Y@A+fB0w{-nitiv@Y^b zWv7Qk6ArL7t1F_bf<l*GAF>-}(PQJCtJ?Djsqa72qp8|1LGO(gU+*u49lg#%bDAC4 z<${3v%IF4my#>Y?{NgGOPA?p440IcH%SkGFtF4LF$_K(JQ^qTg3Y%Yw+%EFT4y*3u z>9;7G&$cb*ijDNylGFI4ObInQR(<IiV@+37Y?X~gkqgU$Z;=hIwOHzsvPBK+g7H-q zCM~5Wr~-be-nD<=X4_dVH3dvFCP0<cbOucomD#iE<r~^)|3k%|hu|Ihzs-uUIu?~P zqYFIgo)X%H^%2GcPTQ%-YXDKymeXch^Q+BvTKLtLuh#GOO3k6x?_uly*QE3C5s=G6 zamwe@&rCGSinR8(-PEm5N5_ixg!(EvBzrhV#F|u*HnP;H#?<rE3`Va@e(FFd+oEqt zb{TrGoFuPqFJYky6{VlpGfxE7W7_K8;MxE&LpuGH7+`YU&e0Jh{~B*nW%LB2RvTZf zZSSxKo;0EaF0|sL`Wk`Xa_mf~$o&$9D({N-yg7}b7kBT^%q#V(%gDv6cik+sgkEnQ z=CrdsS{5;>3zwGu;9Whd!Zm_kLAOG&EYjUa9%3XY+So$YL@jcqtJGyL$`&|@ks9I( z*08kr3AE*tNT=VDk8c?@XSx<WiJHJ=sp8e5<w*d1Z=K%)Y$Qf{oFRgiV3H^CF*T%f zji><}DenU9CZYu_^&XQ*)c#D6@CtD%m==L(f#$kCb)}ulDm#rAr5%oQmd;O1<I%@p zk$T}DFs0vZ$WE<z7;2R%K>(EC_lT2l(aQl9h{2M;JaTuF)MC@T_I}c=&OZ|#7fv`K z1)a~lMJ4@C{wfAWn+pEXn8r7PN3FN%Zo9;G#5>&<;tWoPyMGsX*J`}w*`CvO6Lhnt znRT-InHyr@x<7Aj+@-b@?d*xat(#`uQ}^uJx~Q}%a_{zWI#pdOR*`Q8s@(l7OLnM~ zx!T&6wzk}LRV}?uKQ?Y^1P#9Qe$Wf9n)6k=Yye|amsz^=D{e}>ytnMuSQ`aw<yx7Z z(b(e_f-ZI}MtdnRzf8JEL!!VpwH3XpFdY}r=v&5wE?q@I`H+Oi&b>^uHVLZ}Wg5V_ zE+e@?xBy-uMtOIG!lq09Sjk(Liwi(T8VOqK1LJw-kXg5nH2A-wNxwOV7q6qn>>kFy z+b&nr;c@SX3NxoyFNq|sZCxWWG3hVMbgf>|&9m=Sv!~NsU$0dw-Z-b%fK;u1(2P#e zn_GVW$WS$#FYCETZvL99g-I3^#vR!frm{qA;-^S(f%q2Cy<E4{We@3~pOS}fv*%c- za#H#Jsmu&Swq6|$WIpH}z~KfoMwfP#1moOxA?T^pNtYIf11|j=7k^%gLVA}2{8XqW zA#ACO-t@Strq}xV+$Pnd3>>@z+Wb+yxyp)kLciBwKj4D?N~QeMCB?|Jdra|4CPm`` zNtMdVZ6^cQ;SkG9Pv$RE40fYevUnu7VgHr`T{dR<J!~60JOZun(WoZPq*SqzQY~K) z&>vfs^qwZV`Zuy#{bY6!r=Qc!G|r`4^1LKSKpCmZDp8$z-$R)mC1n5?)v-`3*5H6J z2Z{qgP9#Apbn>3jVK%~_>a1oUw1N1PK+9$VJSag0#gp+*nq5xw#SKjiayXPUEhs4B zCMY5#?Hx=l#}k%aD|Ua2Sp>dFCz4AeU3o()-$>gVhUrer7p|A9<egl;&RLQPmQwk` zoE4ZcM4b7}@I$HybX8cV3Rh3<YQS#D8b)0OFX$elLW(cH|B7nso&xs+N-{qn)QJjn zR^{mse>BW-gVMmYw^#`i*~KIZ$1<q<SlKuglsb>Hoa&+0yYa%Pv0!x{ARB|$<+wl! zW7htdi!h#StQk2<o-`@tVXUa5&^SI7s@Gt06$@Mcx&iudJ0SkKx2QdNIi@bm=wt+9 z$aak|-+i;vMwI72Ct_##<_M*lRuLSXPJ=rITAo^jkVWe6%Zf0E9-*ZzktOY-!0hdy zNc23d0tzGEH0$_~<szLJa<$M5!1ko3t)tdcB-Um%dxBA*oh{jPh5coN03OXs4EKnm znlmVUG&T8J6%UQ{KJD>kmEg|2gggPnstyYR%akM`koCL-Tp^FT%LyhgNb<raQ`Tn& zB?-XFB1H{j1r^}S3&~ND15>H^dMp9|;TrBkD@ZOy^^+f5DmUJgqRItbr@;<_2x}`e zxA~es5|5;e2p#AI={CPZM9*?n1vMn(G~)xs7;yJY@EiinkJ7ZnO2{p!`wa})kM51m zG2zihprVw6JSrcuDnwdpx_Qvn<&H)wmwh{bu?nth#d1_uY(M10oTR(0gu+q;wkbgl z$-F@<2hL3L7+@ZGBg0IUX8`QFS7=ELT!EqAG$c0_$q}XTLV%1u05ur_2F7Z~7y%gv z3@qlu&H$3-W&oZb)rexlY!c7u2peD#>tLv9W{~54;J2V85OA%L18W>3tpPu3UH@V| zy-aAZ?%I|&tZ{|d9R?*^RU`e5hjH(mkjCT%A#v`E69<bS>1yP5fZt*EZ+!4bF8^~A z7Jxhpnyi(Vjxj&DizFe*2eAO4cnMiIgbaar0>ub}!P)SY=WrqbxGEtgFN1W+*_Z)| zXiy<VQV2Pzi&UIgLYi&Ih47A0CD(XFs9P3Qy0<+;Pfg-!sYQLL=<kkiUh@$j+Q+Ko zH6*agR*5PWOijPUieKCXqKXsJ%`pND3W1iPqXx3!-MOXu*git8?f1q7R`ZIYS?l_= zBKZ4>5pK8_=}3LYr)JSSI=09~ymb(m&lF1~qufx7G8^`yZc`4|Vk;Bo>1XM#zF44# zSJKrefIENmuV|Y<u90F?Q}H8uU*V$lMS$j{+h8dgB<auwcE-8iJlVUFU$OFA4HVl* z2ZMw-|DC9$>l%#SL&w$k=Ouoq6eH{xWhJza<%ss0ny6iWB<98WE+;L)@h)}CBQLvu z(8*~wu=7L_MZFx5Pd%wBaPn=Jukft{xXs9EKeqKwq2cmrr&<4ci|_o@FTB62*%{O= zFF}FinXW#KUdJisAk96LxA$f9;=S{uGrHP@&>vb5gK)4(E>uU)&ES+cqoXkCsX+;I zH@RE+-)m}Sx?rmTdsx*i0;&DTPyD1#zQkvtZ38T$We^LL9^8qw{z2de*e5Vz=!6u= zsV2^t5qt`2WkAs-XbXI)aRNT9BIWl!Jd>pYEQ%0>^kEI~L58$M8>Iw*aZCer&#}8+ zhj<$7dWEp^If%_N=;To7c^YOl;F}Nh!WvQ{#LXhQLL!pccv0Iv@TwLSQBR4d$nwar z!7NRErD_tta?$-b?)2!FK_2^r45UGT4|xX2@lptB*nx4U#QjCI0m!EOgnKr86et|X z5VVAm9g;0l-EK(3QtuB&Wb`^>K*|u9K$xY~DnYaiN)-X-M`4Ys((HJO)wPqWiYwvF z$l=&;lVVOVUs0&lQ-n&&h)u$XP0)hW&p{57o9pK21^rCqG$omgU~N#qBU?`#5bQuU zpcX|9(p!;H566>M8zi(cwvlGpvrwYF0q;pc0VxmyB+`OHDlZ`5{Kyxo)v=_Qx&lE@ zy!V8o!jC>~sBwYV-12ZjS!d`aMsm7jkb4P>i3(cp@hcPsr|0%<?y<NN68-&dtOBaL z!i3e6U9QIF@~4*UHQj~#KEh6P>7=E!BI{NVkc&=#lld_tq#l)t_(u*2RhX-t8UmE! zlBxm88Wv{IGpb50j-Xi;s|qPVTaLd3Y98G{{Ao*EKqAtLtH%a29TFY<CFAcT=yfu~ zsZELY!6N#{GERbrue`hIQeT**F4;ckUOjaGY!?Bl$OEO)hDzn1UMssGVD-)`Nf9J8 zoSzzI<H?;<Ay$q;o`4MRgi2SDJ|X>c+D`O0BgziFI>+Fxrg)N>ppc&r7*y(_O9x|9 zxkUO73L!pBa|3e)RTNaD8nsSO{HZ8k)g=tqXnS?N($P?`^!LFmBRB`EX--*+3lt4Y z-_XSy67ZRj>F^EFUk~piS0|>sm>Wq0(=H_5X++&PpSq-SbP|>_e@7cDoB6{EYHbFb z7?cEOb%+Um{~Q6HpLRx_u0hyGcLlIgTOScs={iwW&zn^v8E8cI)GfX7*uXff2?Y44 zR{x|FSbX3@?qJr)m@p-iI~b%elYUDMDtjF8d}=-_VyI7Qi5_P_v=p}CRXBef&S0t_ zrrI0N29M&!dhrs_EoV1tipR9@qGgYVh%!FG>m`6Mg3u;r^VYFiqi%{Kda`|F`m)`m zNBPJ(IMX2wIX&3zj@FpCJdGQ|K)}$H#h8i<Trx+oGMzac&pn5Gjc?{LF59$fGck)Q zr8dK2T2_JStOA?8S)Fe+3ip!5ISM#h&Whc=d*%wP@fG4!fr-ZU!OzX)iJ{3n2e{k} zS-w$Rw&HSps<0X(Zf=N05l>>Y;Bz!?+q_F~xI5&%pI@yhex84i9gt~)Bb6RUVm$*A z3taJ$gdc&iSTanWo>f=Aw&`dPuRUYkEH&evq*Jw)&A)QB+OYhs$@Cny{2h@7?~pYr zt|OHx-|1Sa&A*z>?s^4c;IW!z|9o1}-6l;T*IfrVcUi;iqE+VIH3L2Iu3??$?R4c@ z<4Py}8qcsj)%mcIdaXRiSHYWJ!i6yNdd+;y)#aMvcE$2<$&YCcV7GGZJmy!mVbAiV z)I@LfO1<V+naO*m{k3pX2ac{#da?di>#5lUhkMlz3b=+dP&wjNu32h){(9zW&S=+X zhF_R?+V{6ny6r>YtHfCU!O(k^x6gE|fz)&?#f@gdOJ$^<w|5%aQNwx1ryTpO(WE;F z+l$V*SfutPB$G{W93BP34GYOA@<(rz@%hh0Z`yTs)(gc3KFL=?TN*F(1RF^gVXl;z zezF#RNf3ZH-LqjfOQ7wFO_yEUrrVPB&axK2x|V(S>Pb3COKk*H#Y=Ltwcg5`)?LYJ z%d%HnOIEF2&+yPY%w9_ftbc&xuAyee*KE+`-NPb{%5`Bd2*z(-ja=hac|nC;SQamZ z*VSj!orm!4av$xKZy6nRuD;!aIAG&cd2!X8Nz^-W%r>2ueH(k1eOrb9b^k;@b=wvx zRGb(<s)t=$gA)Hx!=^GIZJh#Cvwi@uD&*gZ3ThO{_1aF=sv6F!6_J#6<w(G*oObVW zt{~A(&J`Dw%{_IVGw`;rnDgg`&-}Ut!@0wj1v?Oy)*hjB8rH9o^n$%QfWBWKnoq2w z=gft*{2Is1HJ@dy0y=~94nPsF=D;hAH4eVeLx6`y{cALv9UMhfYNsJN{INhH|3LnZ z(~o#VWeZ^@;(dHX90y+~<&f~^X}K!AL18J(N;@28wDJhn@~A1?%xc+F$xgF4oUZM3 z1r%0)y7cunru_LhQtlH?^u1pnRBiVw3<CO#=50D5Zul6j@nG=2O(+NU(4j!pnB%~> zAZ+=DxYQK6oyAI<xB4!U9iua<KR($;JanNb8*&Kq4u4{Gr3W~i^mjzoj{|Rn6a|4j zpRmh_v%y5O*_r4TVw6^if<Ga{*E_0>hDMN;{-m*Ep=7Ud-Lu9KTY$@DmS%&^+$$9v zVutvZ8JLSt2Y^JS`61F~a}#ONQ5Mj=V>nV!Y|Zg*n}5s)kYUd8VtRWBw>fYc4X{;O zG*ACo_|{<NPl<({Yh;=DKF`EIW|ICDJ#v>QH?lVLS3xkC0Jh@G5(%JJaSTzg`|aMf zyDne8PgWYFeJInU9n-VTrHK9aLE+3U1msDijk;H8o|5F;dx#Of0DpL2i77EN&}kD7 zyFfrxd<r~k|3oqgk{Fu$>65(ozmrymj@LnEr+N0So{2)JcRf|-mxQG)sk!V!-VO3f zi(B4h@!wEtBvwkn?%eGwm4ZUJ-d?-5JFdJ>fYwNfch6hur04GWM|TOuA!KmiEt}}2 zZQQV-wniV=VIz@OsoZu`PPg>QC5rFn+UYpcy4LG-#_)?u$xp|(T9|Y63q~*r-LgM| zeZorJj$>b(%1dlv+fvPwg?S^!;<>I2IO^_pEY0NBvTKpG^ZTCktHb63bHw6|&9B!T zx|}2!llziT^)Z*hSl8&nm$B07Es1Q(Lm^>p5XGisXNO!76Z(SaNsMKte1SK&em!Fe zVf#*(o?!Tdb6SSJaEqd?iYj@KGKb*~{D^I#-aNjG6=qVqS9+gK%t&YMNr~_BX{qeu zc0>$~+1;9Ux(ZwJW6l%3In6WN<E7?YtqRNq-1WJ&alKmW$RPhj0}gM<q@q`HztpD9 zgI$_a&(qz4zd<;uG^y3Y!m<M9doR8APb8jEW!g=T2MX4CJS#qxPmtF3aHHG3(Kf@q zg)LIgAOG{(@Pavc#$)ZkG+pJE^}~>Xp5;NxI~HWzB}l%B{>HB45T`!bpd)cVUKlD- zi^p4bJFVG%p^TY++EL!#1@*{V_@LY^4IOcp5=Tdu<_prF@H~`=8C9@mep3THmzx^N z!WOs*-r+XD6u5EE6+{<z*6Ssy+5l(CrG>u1yn9&%AI?#xQP}Vy#T-leP&@6ilRUk` z22(ueI;Jav-~QQwY5(f4fk^i_GmUVxTkN<(doH0^RCJoOM>$`PJO0Kw!?@|=6S5?8 z2|4VSk~4g9=@K_~F&1ZrCp_gI(7oMJTng}6OL1|lG%O4fX5k-$*V9wna=uA^#VYRI z%?(;!Gx^EyCMR7h&0W(y*ZL?nEF82MPxt-v^ren5qrRO>5do;OP%a%az~YaAno<-r zqZlZrYlK1`Cnu(D@0s2id8E_<oa^3Yvh7~r+)w(JjD8rXz@~www%mR62UYZ^sO|ki z+T36slr?uE;a?@|IMI_(|G_rH@csvdt<MEU7@-iEP{)S=r<lICjWl^B>i|se;M3R0 z#`owLy-eK)T9Q1xc>r(R)TF?f#|kvvq-+L*ZUQbvI5lC+NXW5jy}#y9U$3f2!RF(; z3=6aB!G_Q{92^W7wu++>X)TqM0;1XY+yW-$&b9-H$B_)_ATH=Pe4R%~nUdswa-dAf z!)~Q>-L+2>b|JMW`gaYyRS^>=6&(6>hf@?w(K=wTpksf?3CXScq7_AL9Ps$-j~4^J zNzRm3nRZSah&BncBZVLdIFHO%97p{7@Q~kl5s4Zuh_pJN+rQJKtj%CX%zdxWBQ5xS zBQG7^WAU{D9s$7BCyb{BZDw+6nS}L2k@AT5*D-K<C+r;OVx~g;%<sF!NA^REs&WEr zq5+=qFhGZ;-q_yZOzZ(Du17&iHL85kDoK7M!#|^3Z77&jArGxAm5&JaPbw+PU*H>q z)QY~oqXkKRl+Pr1Ah;_qa^zsnyjtoI$$#1ga8ujA;<sfoAdGagZ~x{tXIZ)ntdtQr zw{d-c*S9|*slTW9&I`l^w{xq{@OBWYI}f+x@P~C44P(!G4kG)|VC4C->!*BwKv?(A z@19<qs8`P)eiyNRB*bv6($SnEOw6e>;>0{q#O>?mbrV(fZ%`}6%ZSqS%{v*P637kH zOMEqZ4dCV?L5(s+nG%Bn1`)mCo^*2DP>>YTG1n&~HZwbVWY>foqgRt_)jsGH{)`0L zL5)b)K-YeC9m=SG%P}fPqpncn#_grKXS<Z1ArnY}Kmc6xua;$V+EORbH9K<%f3qz} zF1yA3K!?-fB&8+sl9mj6OxD);y*H@wQ|43qL06ugUHlNalOD`VQguhNm*w_DP<Ph# zRftxCv1QE-^y>sF>J)8?>y%=vJs0_?iGImJS0TxH@!|jri=GIN05+K6)O7<ULXSzA zCpkFWN*aRrW@g_}&i&ZPcb}!;8cGZGhr*uV#QAYO<=HEGbOH$s{NlJB8zxM4-MF8Z zBDtc8dt91L5mr{^N{C-B3JxPwF#Gcsg%NF$0_2GO8AJv?Sd3cYZP^#Z`GREgk;ggc z!f&r5$3;!UiEx(pgH@M{b#^z9TOqwX1_6$Ts!$&Tgg%*ep{pN@PhWH0j5a3LyOqge zlg0J`yf4YpaINY+Mfc75YtX}C`A6TwD$ct7RJ#{Q9W121e(ilRD&Q6IG>9jAak)4B zQ8(Cu68&35v)%A-bnq#8D1A3G?Lk>>f2rTk5Q)$v<5M)Kl0>~DybI6`QLY$C?06H1 z3RJ4{r1zwiKqK8G{rP9Filk#}WzYvPDFS=h*hyxcXSMcS6uKXF(X#eZrxu2qv`umF zVL#FFmA9Ds2BG`iNfLbD>qn^JK^cv0FEo4H!xYvnaKOYTMGIdtcdFLdp=%U6KKP{f zhz6HrxN?21WBmsh9?*AkJ|nTC0~7szO&bC@Cp<G%_cYi%TrU6PAJ>TkV8mz$EcpGA zqbxl9w<rwLUaeeuk79}2*nxYvXUd@V7s15339tI>LQpT6PmKrd3Lca(VwI(1G&|oB zK@oz2;ej{w0B)T5QG5RA>H#0>2m(Rlzf?5ksFcq*hwLFWy;M9No}{`K#aFpVCBk<C zg|S&-(UBucKjv$V%UbRylH>XMI*P=q6{F)M!*|dQEpxnWlh#c4&rqF|6J^9~le@lB zd9qW5&{*yL1vW5jSnfG1ySpB6rb`&#ov`H<rsnY4u6j@+`UIaQ61F5ua529@S95;I z2K(u~Z<Sp&8)SCSFt*tbeUHQ-ul9e3+dycp8Z@(HH+uLDJ$YozD7z5ziRuq{<}~eD z3^9AJJxoT%plsMO$J*y6ZZ|ymWHpiIcHfcx`-SlLAB=GtIr2wscra(gn#vdry!lv< z|GKyhGKLlz(o1LXOP&UMaAY?c4Q^PZfd2*gLF_-;h2a=0VCuaGe@KzN&_){VQ#I5a zKKD-6V~ZhX!#&%GIUt5YGfJX-DmwRCjt>vIpTZ+%660lqCExHM3xFWajypvzz(M}$ z=Z7zCf_xe~`i@M+kE=gSH6~-5GV`2H`hd~jujltk9`f_e8J2_*EA^R9IbjyVKd;y1 z$!(Z=Tf38ki}&N@*z$jigFSD;LX(jQS)e!$GGO)xa%?maQ{pX6#37V^RNOziwo8Ex z{DNdDK4}&}{PIPzJfB+!=D_2vcgDAxE-lemg5116nc+c09#wuoW5P&QdYD--5ffto z9btCp&y;4*0M>smJ<Cm4XZgZuLihvs0Euh^(%kpBf$+{TbQe-k<ogV-8Rf{yKmyDb z4KZiIG&HU#R~mXNxozBI!!#0LgB5p=sf^P@bAH@}Y;zmWxJ1z&EzAV%lO*!5*r^&5 zrlW-5nPiaGAis&Jbcg9O`V}^iGVO^lykGa75;5TO?KvxnS#N_j1cHZ$H;-R45)HUr zdd6(ToFo516x{BVwa?H+?xL^*DuedDXCBE9tWAz?tqP5sXSz@SQdZ~0Z+NEj@nlH@ z;(9}_d`avp0zP<b$Q+M>aArJCLCku@n>WP7<i?U|09QLtd0{{9G-%g~h0zcCnjqSg za?KkT&TztL&5BiD8)DrJPRu!J-1{66-T3`@(HU?bynr+P@j+qO2iC!Vy;K<yz5vK) z5~UGQSN&>k<InVv|F7*%E59!-jSJRX#DMI_k5)ApSdW0M_?yYOaD?=HQhdMEez<QV z(6kiIY{9lQjpi(Qn7QF^r0=t&IC4G;U@PC4Ph_w^0>Tm$I#Dp2&+7@gOZ7WL9Bh5J zfy1*Wwl#~^oc=mZX4)mB218W891n^0o8S+Ei4!--c$p_yZpbiSh1Vop9sCCIMkiqA zkdat&2(N|>-^9U(k<p{Vzg7B7CcJb`zld~IH$v-pEOYQK{Wu2M7o<Co2)Guc-Hk30 z7}6kL7rrSX4d8iP-P{}oiwsichag^Z{N>Qsj5#qIXdScF=^}n#j!Z?6Yks^%YEE#t zlPVx9j`yhgG~lMCo*d>|??!~XLp18lwqF$2BxKBsQ||z(q)ULR4`3O3dO*lgRyVmJ zMfaSATlXXCu}^3&3Jt2*1lx}_Ur+)2sKZG@JM`HwSc3Z~?+d^;j)9>-bdjXbzI^CL z@GoaaBc=_e&zzWfQMiZDPO)RR$NfH=6f|2{MreH<W7yUjV6&tP@B0$rG;cUJ6$KeW zV{DLbgNm3?kh0wsvKJqmlZGwJ&^0{DTnswB9z$cDH(P``-&?+DL6+?I0ShsRhSq4J zsErXH!r#-MsitILHxEyTpMx31AsBvb@awSb;TKfyPJ^{<;|Z{iQVI>ZL8aF8!R$|7 zq+1g{6UBsZ&T1KvvS1W7!tH6(cm)B$r-W^7m5kSCLSk{UQ5ms_@oml9ISSi#h2<FW zBNA+$8YdJxME+5E_##ObP-nL2vch;#m=wxV&=17zN0i%H{J4EYvSNYv9r6sQ`1!Lt zxi}3p;E%6|b_F8|7xao5d7k|T9Ks{1{i-C;jD%*c48B@VqAu(K8@VtXEE73~4`HZE z>CkY;ym&(#kj<%s22W^Fd8<s>ybx}JF;$QiN@jhHShFFMi-@$rI>30fKC=Zb^dN(g z^zLbJ)VBh3mD3`|HF^FxN=l=6q5eL(4Op`MJ=i6qyD=DjRAK<$*uo=(Bq(r1?+D-w zcxZ}7I}i9~!wzti{htdD;@g;|nN5@i%uRn9rxI8B%$y&oz@#53MrQ!j)I0s?`%Xl8 zJ-%EK13S36XE#0|SWz<85#lqwQ(2w~c!oUiKdw)L8)U1_8_i%}NC#M#_wmWRaI4Jk zA2zUGxA7iwUOaDstU*IyKxTDoM}?G#r8`1TN5n7?S~&H%mA!i4nK@4EVDxb@pZgBK zUisXAZ6L67=Dc{!h`1ib7H{}MHB3f>V`w(Vyg1^XzAzeQ#SLZ(=GX4|-uRjrW*k(G zbE@K7qCsG#?O8^$G6kq(dUyVzPi)<AFmKC!Z_zJpnPUs&2i1mX7d{uIUc5xN9W6Ca zCR!V2@0aa`hGivwPu%~ZJOKU&9rX|F_+J;tzv#b8N7+~!o7y>>(*Gyx|75P<vR~Hi z|1npjAOHYT|39)Sd)m1edJsrhnp@cX8!o0!rit?L*$fCHcYjfea@<Ipbz68}P6ITz zkz!(+EaO0A97G*LWQ%@Yag%5MDwa@;zjnW6dm?W=O_{{?gm<0d_44ugMGyYEzgx=H zFPSmP%1cy~B|FZpBgO>l$$#DhjaA_F*b$$T)eN}JKfkyvBYHr;yaSo@a-ysU*Uear z5?2%oYL!3pZgOmWNb_3K*cH0XvXzSQTi7z^Kc8FUd*os^2XpUPH&*JQR(*jkUU~sA z1N9EvK+=uAxxF%2o;7^zBN{3)Purd!yz*ouYeJ}hAO%8~HZ3hInuCyUWzqS(Fs*v> z!Hm8jTFTb*P2<t)w%a^MR5FaAa|bRBA>hQgO;z9R=vpTTF<>9}i8VXW_wf2w!b-Y7 zu@EVN!=45u(hl=?J`9kixVvFogNh3uuV*nNehEelmVFxhT6Oo@dNku{!_w-YJNRu~ z-b}o(zWU7{V_`Tk?tTt&DED*6N3&=AY{&(^?Pb7^&ta$#sd7_c-a|=I=6MbxX)Hj^ zRYADvm>N|9P?OLu<B32uuMg4dksuoONl#Qlg@E)@I?pCScp#o_g`msVi|G=g9QzER zW>En`bZa_>b*9*4#4z(Lvd(pEiYGX!g3O`FQl_X-;n_P=6>d)|slYryQi=>js}P0S zY82unL{S*bc?3`udG;2ZqjjZA`!`U$CGnd=F(s12(67ZD=hQl*DNHFi%6*Uph1i`V zYpVe1lEB@s?$8+@P~B7fH5w5W6p4BbP4b9wkgC`%=GJR~C_h$(AV~$f5zZ+`7$7-^ za&v`L92$!?m~h%vyY5L3S-|O`Lh+~aBlrdQ&$I>rfcl3L{x7Bc3uyjtr?sW6p}DE^ z{~?h7p6O+!9ftECq8Ry4AZ-7|Oh&FQF7|eG4tD0g%Gx$CiWqse6)lQu;G~0$BoVi> znH4)`;VW|PZkiX>n|A9gj+wcfw&bkn%w=xccx<9ONRi-z_~qpA#Zp31;HX3q<dBhJ z1Q$iaw1`N{nVV@6tNAjg-~PRK+<PB${&8%i>?)sVpA=D*GBzm6$NbSg(A}sgC!Afv zHjc<RQ~PF3sAneFia}Oph!W>c*iwX=H=9ooHAUr4TGHkYVphkf%JAcKWC?4uld-O@ zp3-Vu2w<AarI?7HKR4Vg^UDxDv=o99QGeWQjoV_gx{@tRx`ZLCTz0(b>E@6DaSbt# zUv|QV&WNAe>Eu`KG7ASdK-@*n_ez<RkR!6#fCd1bsTn{7BVg-Ut*xxBs{p|@#|7dH zIr+7x)*N_33NTnUX4JGlQZVRmMH?Y@;u=PnW$4nOkF9`8cSh?E9M)I%Irs(NbLoJm zJo^r4vK0^#i`KJ3S(gCp=*(y2a0)N>8f&*CHHRo$BUxf5rqG7K2%gXtlK#T4yht_& zE0@3gT9EIU5|V}DG%cz9^SyVTK*MiIjFIKG&FUiWTwk^`TC!xPMX-efl2l_Ent|M9 z9U+GSp9%{?G72F}4JfVXMhFIiiCVxg5vHLY4J{ZSJ*w6~wnaF!{<96D&XOvJi|G+m z_4gpEq}|Rs+Q!7%I}xi*7B>bzb4|+o-}zhA4l7G~Skev{#-VTL1-l9k-diUp8%ZY4 z_i=(HyX1!6zaw%<<PXGzP#514uV3pLx}GZzsz))U2b52xUV=Ur2U1o2X1k>na|6&l zc$OZDu7#W2UA>hjGAjhEvOh3Op_KMsgkz3P_A;QL?LX_&etUlgvQg93;CG*A@VWdl zy;_>9{x+T|ht?O`OkU$EV~c-ePUZP?bpIXM&39M#(RT22xj7$tzqrf$lE2hf;*7hZ z-Fj*_N5gon)o{Am<+Mt_zfk*F=^Yd(W^g~4-=6RPG3h)z+<01Q$tO3u`&R$bn{s}| z&16pMXr1ipJF_hRtBZ+6?SC%<%8zDWaoV0}ak3^=;cxE0m)jT*v#ynB+RwRHf%^Of z96v-m#jfnIR7gFCH_a=VC^4LLC@@r;r~kiY4fFq!HO2p}82@3x|H%UJKYk8>(H&cj z(E$Kx4FCWb{|j0ECwKf0lDxsOcHR=XcmAe^lLg-zPE^Lwg9H<rB$g=@5DGNJ5Nn-% zP}F2f%3(?Qc7Jt*mn7ei3jkt9$r9`A+3ET3ch5?!{#E4KFgaDCxX>@>Oj21Tgg<5d zNyRjDYRUFH0}ssJXj_^59BsRY0~&vSdb|na)Jmm@gFsT6XBvu8-ic8f>6Ix}tx92O zB$a)L)JRcz4Ba0~qR8oqP92kuQO_h2MJm4dM~xCCnA*C!A*0ki8q?}O4r!rR=E6oq z>57!bx6ipTBON-C;r3DCcQ`$NM;ET{qT*-ihp)on;St}XY1Euc3h{Y@;^2p$#dr(` zhkuVKdUV9oNgxXRP#+x1C1*^uED(J^SBxEBI>(&|?j^bj)iR}|6;s$FMb_&cuhBWF zF<+lt6{95j3#LS(DyT%+(4SnX;@})$NJ_^6+F)FGi~&MS-&bU7>Cj1GuL1mcs-vw* z{*WMoC`IU?G4&-mLg+TUjR>Ls8DIU7iRu6f+jq>9hP*pHaZM4vbH$p{kx-@E$A32z z%dQ7;SVk-uEPP6Eg?0grtN<}r5jjEZ?~gz;?cl<SH_o_9I^~iv<y__U>(wExy8~jU zH3GnX^8!xThIz5RH=xja_BvXVpwcoPp_;2zp@G)lGpmj*kAWTea!3;q9l&@8?ME~1 z%}dpko2#OTPdgN48`11>-4RS`q*3+Kgs>yVW2Htm)I{AVigt$OMB31Vl47{-Ilqb3 zM?O>3qB5{2G@ldLRHUpG^y2(Rt>{LB;)q<#6dCrmq60fjMJi?B@%3@?qx1XKRms!K zj0lJX5AcJ(zY~p|o(hEMjebNa$H(NPRirFq`09^}LQ)O5(HV+a^5IWrU(>{k=3|%# zR~hT++1kw`)8DN&VOtB%kP*ROF@>{2e}h%rA=BH=%41pVd+6K6)7rr@^CI(LtNWv~ zfFiiGdh37M#~2@{`OXlV)~F%Mpnv8%gRln8stwU-nxV`X3^|@w34rH_CP1BzcnNh` zmPf+<7JxM|FH@u!7?VlVy;tyWSC0=QTVn!8hM=|10SWZ4r&4f8WX!50rAVh7k{4%K zzMu}6__Gy=yy|9|7s9Y7xawj`E@Yj-tqBaV`*H(6lfbVRPC!+*Sd;ncsz_#}5*Z}r zBbE<7gkI@0$RJILh6uqo=({JTclGR&a|mb2DcMxoFq-8`LNjDsI#J}500=~#gcl(U zsc7`|oIqs$%fi%aI%W((SCVJnMCHYWv!~u^0We;C$O>ac7qLGeE2u15-z3z?5|{Wz zp|C7Tv<Kx9Yjlf-$yx;m!oDD#G9rnS9@x02K$ZNyqizntek~6&(ipQlTwF%n*nOyv z-eJs`h0yS$i*B0crioCW*u5?$XSiWhgGT@4AM~`rhLd?hYuW<5vV4*S(o0K3L5yQb zb<}n4G`yqFma%7+DJ0AfD@f`L7aOOu{RlmFPOoYx7-^U>BY=aL?vQr-aX)BsuiWAC z{KpR(%`u7-o_~G)AYEQxlzpcI@Vdx7@pe3>|Gp<1ue`#>?fWLLIcubnBF+j3s$h}U zPgWUKI%K-@)sG{9p{dPqhzYGTziQ_4EkxW7Ro!fl(pbX%a0DRKC=(*?lXSp)?x04_ z6%{AcJmXp_24#J!RU}?p!R;lG<bLCFgC)0seD}nXGh^ox8DhOH;4QUClXQAEiC|cm z-*pNS#bp-&o=BfUwttcU#mc0{fgQTe_E9)=o#Ew6y}grIF*Y-|8pdz1!^7kHqr&tP zw|e#xW=)DrUkhEaIip;M91?kvK{K#ziz*b;NZ;d#*Q<&^v-Cp^4xbS}c)gG!Q=r<# z7@e~Q_u$w~=*R&7i5S7&K09Pi9PE_D;lQDd=5V}@JWAG0x4+zNaL6xd$TGwzJmr#N zu4U9p$CSf@x&#|x)g}iRPYnNrP4}*G0;K?mDF&Gk%r*;Npx&jaLP`(k047HhB9N3H zsHOn&k`*K-bQ4Jgp(?fCyll&D!D!$VG*DO4_QAD53dx4if~JZdkpf5Lsj(C09gN+` zA^~ljt<9cdy<tSQ;o#*r*93?dT4P(juv9!RFnwc9;t9caMiqB3(Q?FILOjVgn=(!N zlV)_zs84>lkW3#ULozI3YN(R>N^<kylS7-0_~Y)`97MP>gb~w7w}LvXV-jkr#+(EM zIKfo_dJ!PP1E|ZaC(ouY)J7{-*yV;X5*cg69<K9NIL+Jjice-`G(rr>V!1Vc>Gv#q zCx^!ubkRP|ybg-&i5`d+O##L`k|~(2n`jJ90hz236s(bY)vX#&JNR{f<>h|=#dt+_ z9@#<`s15T<K9ecJz~CGKU`anXjgIm?B;n}c7QcuC@z#~!dr|8JfxA#?wxFdQzKZ%5 zN!V^~E%7!pIz9rz_J-MVTPbe)J-Z&#oi521i$uVX-oZjim|GD$+iXucxYDTsLqSUt z1~yP3Z4pV*rNVp`&<`qDTbfnKwMxrBr@Un!Q0@dtl}%(70C>6|PX=E^&x}L$*_fVr z9jIZPI6}`p@f4d=tBSPM6R#|KbWh!Zy)G5Xv|ME(cd<H7lLn1xSnApnWk`tos=@9d zQqNS973ViM7(T34YSa?|f=0&S1ep*xI~bd|Wa?J(CM9W;VPY#R2cAKOY-ObOM?p9w zQigtNWI))FX89{w`1@=hV97fq6FG23j=wUW0GN|-M^pi}%lsgR8rIq9+6Az>jTj5h zcy9~u_vM{hEdv8DVkq%^KbP@2tJ@0MS=h2Q1YsbES<u?{%B`A{>5(_WNGYTQ<GvXk zW20gC0K)|G)eCp0AZ!?O9nBC&&__H`PbH<BX!?vIotm?_qG8n?X$=3Np#Pg@!Cq1~ z0faoZY{OY|nVWC2$T}IbsJ3l?SWgd+t!z1|L6)(=mm?yT8RiOSH4!zF{?>|*AHUEj zNITn9`u-?EtKY+HL?VoSrID9?qkf`N+=f}Y2j%<$o4V%p5vGM}r%KgHS-N7=5}f&@ zDG<_ouTu7W9VYA0rgb!xA!nf>L+=9oM??1|+}2kpO1dw^LT$YWSdj4qba+ZMz}M#q zSfk2f<FTkbp}J&KFKXU&xZmLWFKXqNfZ9K!<G(=Df~PT57AI)_rH)-|22v|}Tw&$T z-jno-^)-1FfVO+=T<sK9gfL%u+%~MIttM#`rmFFvKKZ^7cE=4e<Zg)YMb{{6s8>J> z)_vg&?^Az!pFBIGrFAbd282a>Idb?)gjtS$vf?0!>mh)KF>>IVG)I(OMYCWY1FY3| z(B5D0tUQ-OL)**n5&$zo4MjL4A^~DKUxZ#mp4?~aCz|`$cH5oNy*2)Iy|FxZ%KBF& zi5qu8-y?oE^Cn;0cej5+<Tzs>ztGW*ip-?oLNwH^%$vdNpC|bkp>8qmEG6P-k6cSN z>&^~pdZuNmOh`_<)jrRNxqmIx=#O0UyfWZu+>;s_l+Ds@Q>1V!R(MB=+M&qsxkrP7 zvpaO%VGF~h#Av_7a4Qx#<I#R#UM^m+g}%K!*j}|P2bSMVv>`lytlCO#1LL+7Y)}p5 z^z3l8gIO<LaJ-rpkaD=9z_3ud8;;<fS8KG>F6;UCl&E0yH|u_+URil(h+0)*O=m)_ zLNS(#IKqrHB%-B+D|1c~jRkHXF1<}Fw1yzW$0pcGOy8Y)fkJtmakVvQm}1JibChN} zX6c9Nx`qzc)P8PSs?}I6=t%9O(PHas5e|1yT&{2|_YDeUJL|Im1$671!Myr~mF}y! zZF#t%O4>(({1XHfOJkqob-lYZKWVYsT~JC}H91yG{C%tL6`uJ96oQb9M@KoyBxAM1 zrcfm!YUgoyg%MRCDw{O#O!-K%`y%vOjWD$X4P~%Gf@(V`D+cJ-j4RtW=xYlw!lMIz zmLi_NZjRKa0)~)Fz_SS-0UL@EvM`MRmxqOGgy!2Dh0NTw5(;?YZtrmMEK5P?qdVkE zt_1SmR&~W%bnNql&ulr^zO4wBW{J+Qvcl(g0AfJ9P3sFh2K}z613RVr(L<s*TH^%; zcZ}%U2lu!Vv*p%nl<Cw8huDyRZ8c?&gUs!>nBS9E84l1h{5n@mWOi$(N_}mxX}Xd` zFjPgl2tE6Uzl6c~^+mG-pe@Ym)~z$y&flY)ftTj`c#-ildbZ|Zt{dS`WeMUE9@!Wg z)WDU$uv5Ko&sn@3Y%(lonc>6VeHjYE4cjTw>({RP!i5i<yCMr^!B+;petyI<diVV8 zWA^XfFwqN*g8~vJtH4q*6Pwp=9+MO`x3cW-6TR)mrjcf*2?4~)8%^rKV}hr!A>o;; zt%&&!n&rj~id+xT*OU1G4Sj*7V#C%2ql9AxQI~2^fvKAt%8t6Uk<c;@jN2$V^B>SN zlSW_rD0@_t7nOd^Wg*w7mt<Lw;6N9^Lb2J<dZJ$h7j$<vU+sPkvx`{PlIbaCV?+)v z(OMGUOHYX?!40C13XSg3gs8##&tKPAJ;YzoF^Wqswulq9Y?3lh%@z|kzrU{21dbY| zJd-JZuWT@6E7}E!SA-ojff;~ebOP0BClrA3SOF9tuo-SSdo-Fop>edUhQ<psh@f}< z<6kXO1TsL(%J5?L*!7I@5p7;Mh9`X2Y!aX|C(Wr!BdxEo!U@;C9g5$=0S(x;Ffh{; z{V1mpqD2fg4>-MZbf>;iX63<}6Coj#6<j4ymAVv&?1B6lxqnGX=*qo-{}}WaTqOix zpxNJN220xtKgnPpC&7~l_-R_TmVxUq%I5;`nlATo9VPKW(O7*v22l%RI8>K}fzO*m z#0vw$LK-g}9i5q$%c(_aSz_GWl(s#j#T8o~I|JE(J0@U^9zx~~Ru1}V3+4--fKwpn z4hx#Oa(>Z-;{x&wMi|$>Bl!i{=M;6GAt{Tw@h#x{10iXjA-%DMJmWa_epX@_9C02% zMc+}bAcDNt$i4i)pZ?tA4dg69w-vj*&I)i*(3MVIg@snRJ;TLee{Fa(TMkX#I9sP2 zYsA<V#;y`ldzRjsI{mmPVH=!KST2tq?Wirvn`%-^vq<8WW!1uwOghtnIB4ScX^=3h zmi#@us`B<VT%oSFen?+ZqtOfLV)g$AIhB3OO7l<u%2rxCNzrt4H2qPxQ``2zv5U84 zu)gwz7}R9rf~09A?G`mJziLI%a4eDQ?T-(AR4OR5kqhO1c`YI!)N`=Cp<PLZ1}og# z8Y&PsmzVv?I&e!*7*DK|#Yg@DZ>8i?_5iH|XmzaS$OLJXU<jx${50X`|D?BbIagoD zFJ}6^K8*fHxIDfUMOH`^5=WaKgQCuUbvglW!&?4Q7q-V$(&00j2lFG|V#{iyqhO!c zA$EAQrsd!%gd%y0GhzQ+ByuBQwrYi93v{GjzUUS;pJ$#1m*Vokei`h~{$rTU4* z+$rG{2?~D}bF!dz)r*uNK!Cy-sh_wEIc1&gYLV`sZc|dLP%q=br4^u2m7@W5FFI+N zeLFc9Q@dw@=`*7i0FuJLr8Q>+GLq3n3GxS5x^qkg5j@uy{x{0rDLB@E+uDt7+qP}n zwzFc}S+Q-~$%<{;wr%s|+xxHjYoD95&qY^tS65%YU1L6D&N2M4YN}uRQ%(b?_dL)c zT*06up3tcqNU-eoQ1KG)+0h5JSZ8+ft)tqc7qoDxpVq1oCVJIW$0*@imKFsXjC~>n zXX{nZ9H}@2n_feK$iCO&g&9<?k5%h#v$b{7f7x9aoo8y2>FmRK2bM@rVUNR+nwuiv z$dVYU{ixd``|wd~40m}T@Qzs=AB8VOq(Nxq2`++xAud35`^n@0VDm>|g!?1gcGuZ& z;znJMq=(_fE$-#<<uv+>6QW;fuRfOua~HO??;}G&2YN#PRfg^etDiz4^J2wrKVy=f zipm_jiww@}5Y#OG!|Gz|qStg7U_GaCPED!urnlt;#83-pW_<H^1$y*tQcFPCsRqrb zW`HI_r&O&ZD-5&rUv_@9!A#<op8jJ?KvFwNL%M7BSTiEKi=0u1rTr)d9U;l3`n2%< z`}1LM7MyT&*R3;_u5A}^e!xu1ZTWNn(!WRP_1w{k6NYJ1Cv~mxA-)s~j=mn7=iXZ9 zs<3&UMK#^v2&*k9_b@z2OhVr#BzSmml?MDQeWT@<E%z`rR6jEPZXdlIgza`JLcWn> zH{gezI1*EDcM>#{S0xg*878eut0*fBBW8~~<w@eg%FeJ3-mb9eQp^H**;7;i!)xjS zvoJ3RGj3FL=&UR&ufqn6Q*hyc3@~rqK86(VU@;3Xxbg$=6~r7!$!LZk$AzZ#K}+{v zIi`vSMLVog?_Gg&f1WvwfO)1OtjYeyf$R_eQ!NYwadXbHJr&Pd>fqdB%Fwa6Qloy| zsX1Jr=`O#5v{GZ|*@m#1bf?x)wp{J=aTC%<=`azTvwy0Au`B4=VRbE`?m=lTIC#4& ztx5PLv=}TS&y7>XA)Pa!uH1h%@@XdV>fhpYH}~+dvcHh7`|^stbOk?&IiEy>-bU#Q z91-aXPY8>n8;@e5UPFG=EC^n-T(;_5GtD-d^e%pq_*O#dC}!HU1)Cl?)mixx9aVR9 z)7!--x3@>Wtca_Y-sQ;N1JmLEs7wp=!NZ=O^|n5h0I%*7M1?XO2aHAuUkiBX1TWz& zgCBzhx?);)JzuMjcHZEWt47hK!_b@ti1q^iNlA!)a<Q`)0mKBN;*0_jv5NcAF`~he z)<Czxpn1c7&gvdkDyHl2C3C|EwcF*?(XBCu7DzHBeRp<XLuX&p!q3zhC^mb_A@-J; zT0uj%q+}$@xyu&U(Z<|}TM}#>%tpmzcI9+OJbl6@staw=xtK32#l!R3v+?>Fr~@95 zctl<m7xVBtWE8FElO9?dv4a#1>{V>Hdo(bP5-o=knRww#hppl4XW4hyL0HE|g6MLG z?fDSh=r=k<UZwy0=+GhbVeBIuSP;aDSHG_bbX6IR*>6S^Osq*-OXNMzF*5!2dH;lk zLY#HXaKey1A+)Ec_V9$N4=On^uDxfti?dLoOmgy<qkg1!md<>AP!iAfWq0JY)!~)e z$a~Of1_Qri`QggQn61}?m%UeA-v)ZeDhH3z(=i_k35oQ=0XhNB$9BbxAHLec^^kvS zdD6TO@_VL1Au`Nz2NF2~jCa@kM2{=R@|x+(*;Gj?le$O<h>NQ~(zK36JdYCN={CZ( zUHS^JKr_sUYi%l}#<ezZ?Lqs`UozbeB~G;i2WOmh#^@Lbk;p7VhA;{Gdju&I=a`Du z(_^Cc!Oz(|eWB`)*iiob`a6%fqa_H$8{j;CzZ>vj?{G@I(~9(N``K+kg68Khr=RGv z<~h9sFaUEu9m%1V##_i6i5=qsc~Cmo-=tXyqglNn^|eg5tJJSetyzDsr9?62_o#ZO z>(MnlvXuyaxKpP`nA(ziU3|D|Np%^jh^p|}?BXo5UGrznk?2gpwyWgjN<mq1SkTAG zYUIE9d|=CNA<gFvZX2Q<me`hj+R@n3|0sx?VDVfTpl<v#tV>|$$7~rs(KSHvtW%xq zznEwTXj4#*NhA;GehUzEQ}-u2^KZYqXt%3rC3*tH>}>Q4ZsnN^bh>2>3+=!d7qkSH zY_;5(ry}#L0=#V8{FaJOulex2*xOG#g146XM|cPP)3tF?*}@`A@%@~9pARRXzUaVi zt3}kYCaB=C0Ow1rMgkf~vj3L5d4?<dseK519!>Js3Z+8T%FO0QPqkr1%K>gW_9kjM z1Vx{7Lmfqz!V~aZ?crEx^eDmSJh|MKwmMndbTw_{{V;fQ^IXDvh~D)PYipZd!|YbR zy;AKyM>fgw2vdXU3-Hbk*ekpjzA+fvSkQnAXKT4TP{*`$uT}H&=@TL)@Ut)9ypxGJ z4~|LGxmD;}_hk~bzeI#ixnY4kR@BvQvV!AuZ9kXM+=$jbq}=Fyx2q8hS_)!G;1woF z^TZ7H`qyOHZMNeLXj&(TItZwEwhRE?0Po$w|6gMNAMT&*0eajF4FK?$8~}jz|39&} zv9SFQwa2ou+hDux@C)vT&uOHnXfVV!2!_?6*JUn}MfZv&f&h~$uqmlOlvKf?zw_I< z%WtuEgSXaK%lkc!<=&2TJ5;3SyTQ!GuGN$X4f$q|8OYT*r_nszEH!#0&nTjaLFq4N zw(mxqRUAflC@2>*lps3rN&ulL2x-%+&2~<<PGK<^yfY^M_ydXc3V*4d88n5y`D$d( z#SxIZz}03G$G}1&Wl6$PJO&JlLx8%t04g2LGL4jr#T>WpzoIEb*=y!4i<CEA;7<l- z>J8}k`=DQcCEwi!BQoWRQL^q25(F+)j<tlm75|IS9Hb>a!rm>h4}xHj{?#;5V8d7% zfW&E(xr2z09fOb><H*ORI1-v9q#A?NQ1C(6QNY{^GlgO)^O|VuU<Oip{Q7b`IzJq& zVmExhF+#SsVmBrDI-DLb7>@x|de-GdK%7WOchQJ5Q7!1~2kid*o-Q6PoL>a1kgWQ@ zztoi>8@{-}Ha6+R-;$vp;n$0{je6nV?(E6Y;TR5rYIE#LhBHvegQXy+kqIuL_dKSF z^oC<J09#IsfY<R4yV8_Dj%SEt?#7ZOo0*Z=%Olnis`kwdV%Z~mPbWc)JQl{a7-o`g zV}OXnFefo7Z*EJvB;KkzAYtH(Jbh<2X_IJm12aS-h<Y;<74)gyVdwp9Y|`P>jmQP! zi>ha6Jdobye7w|T*$Y~@3lwpx2!W9J0jMLq7yO7Fl@lk-6c<LB#}sFC4<4CI;=3oz zpxJM_>({9B$MVH7o1hS7>jY)N!h^N$r^EYVfIhu_o+jI74Wf&bpxEXSgqq{!;c8O; zs(R}~o^%ve#v@mWIhm2*$N0Ao;(qxaKt{OMNyadt{uhwKS(FD$O4XnF19wzn*w}zm zZsEmYJjl-fN^OlKEcMkQJ8mh0EJ1?0EJv_BPRj0_ao;bCoH0$S>&3hOOEjAa^_^5o z338{M%PDSx;)vwl;=HQf*$@h_(MkXzCfxJe1ufdRSB5D!GbK|YhcsTt9JEvw=|O`7 zlYgoJ``nZUCPZ{sQy!u07&zc5%83-0HVb+F&onxD>GduQ83{RgO57bp3xnO5ZjU~I zv@{2#?l3$86GQ2mph;Ub=R&fE_;K$xp=_`SHeGI85C`=rJ)$2v_@Z@;X7HYv;H}g@ zHtF3KNX=M6H>jKR<>eZzR?DV9$itQ?4&Y_!6eQNulw)VFp-(P*dxVcQq#~!!p#J$b zh;nyk#a=uE3${62eiDoK7#d13&vN;2^mz-MP)f@Tcy!Cb33ZZUDSqWp*)|+)SNc-U zVTqF@{hfrQ1(7=eo3TMV6zBKmetmHt)%t%xkd-aMB_SFDm90np73JCjQ@C`~z*_^r z8zVzXjuJd*Z)IT&E8GvdH?OPn6sBzR(*I;VF19%F(xL*)2QNv5SaVP~tNJYo;>{L0 z`FPSmjD9zZnI@t8&;)c5)s4x8>DA@TY*VKurTY2Dk@+0%FRM{$w;ebe6I-!ls&D&~ z_jn)BIrW_=09%<_Gxf;7vpU^JhGy~h8wImc2G0cdJ4r0|_i<B&z07Km(Qk~7vszmc zwNy1^D|hVSws|e8-L1~K5ZL2fA1YAhvs7V2tSG!N&VZ^s4r^O6R%IzGn@W`FHGtg~ zR3h7d7h&viO|96`j$;beroo!W8H(cNUD4#>BT6MJI1f9~)51h6Vb~OLPg8_B<YhoK z7k?n6)`t>VH|5Kq@5{t&%LkRnCgfxVsnbqd+f=f>RzETsjBp2Hul}C*bswJRg4Vzf zb8rr=I$>~}-+7Xq#(o+19c_{<HP)25;67BRC{dLnVf;x=unY!5v09a-*)(d4#+koa zIhr+~4Kq!gjwt^(yMwfF#ab_=j0Vd`5IOwrRd0Qj^4@VCeRZ|DUKSp2`oXO@j|vE~ zQhDhXGfr{e{d0GZV=<J3aKuItnzu&?Lu^d0cb62Q;|3HSXhJB?;G*ib<2V%CusbpP zc_|ZSE-`1%2Wiezbb4ey5)I@SHLVBnm?}|sOCydKJsCq<ydYu|sdyZfBZVcRNiaPF zOeCpXlL8uM=;@jbSmpR}y670b{<AqCwuiOY9=>7(zqntblm&^hvH!YjbETE{b@Rll zx5D-w+C^7i*h~3f9Z$vk2M7l)qOgx24K%`r86qqKNM1~E#a9dO*4mSU=NP<yASZcJ zR|__Itp|yy5sk=c;^`j+=5F45_tB=?d^tp{Auilhwl@e~!I_ZAsJDI`DTx82rw18y z8{y1#g@)H1vFDwV`1<zk<=azOQFYj3GH_qi6Ybw40f2nNf1LJD1jF3}l1!zW;kyR3 zJiE8ARC)_0FygYv{qsfc{Pcz$0GIn9LC9ypk>b~Na}l}`r>-wihVp7X-oFXG=dFi* zchlke%0T(jqDLsOGba5&ilc~uy67<SpCC}#iQo61n;<^^KA~;~iinvJtfnouMscDL zrD<cyMfLzKTgr7IxeW15D=6KSEeU$Y$nfjWS`0RX+I6(4>|5*E&zIXraMn$;*a;^d zky##e0ga$uH*hqgz^y{KW0178;A5az)>rio4g?!Ga#W8BO6kUpQTaYN!dU{=>@mG3 z$$gz|XYW6{>GxKg5dFf7f5XV^O6+PG6h$YD5f4#2)LAp4dg`NzB9bS6Dn%aq-&!Ji zG{d3!-Gl{~YCgTZGy=Oif9pcRdjgpW#1wH94-@1W^xKeWVO4~JG5Jv&Sj?q7u8vF~ zshCONBDA93=NQoal5?RE@02vMaGVh`jYi}N%ZI4<nY#s_^B8b{3yi>4a<>@+-mp6I zg|vtMsWbuP<8Htzy?kOz1h+SsyqJJ%eJ)P;G{irr9_?847|CqH8?b2brV!xOLP=Qo zH+M+CNm)6^N-s2SJ)OX+HLP?u&fQ3FgNjA-??P%6FL^kh`<_=7r)oiare<2NO6|K^ zEr**oBt>il=2ZOPjtGp#;9jY%h6x(;7N_o7$+yq);c7e=0HNyfTxTG6=62@W<3l1t zS7cYls`VQ>L=oUwYr$ru2emb(8+S6GacYr_G>`by4Peb1cZS%cCJDKnVZt2F>A<bM zpnkGKzXBOVLRkX3oJhgRM#%n<a=(O5CMX>jLSbjVm`6T*><PjCULBLQ^}Bv$Z2$@% zd!u}0ukuIE0cm12lj9Z>vUZ?JZ$$o;H9qJtkGsaUuAt1Ow_A@uEyDJchuPV7*@9ZU zER!(h*T*e6_iVv_W7xXh&Rhb#NSijRumd`8yt_yN``S(r|4g|JZXk*6N81w{Nt~+k zleH%demob9e1=-QigBT2duiIF^-ca5=X-2}D%iUOAu2%h$wkUm(9#NW1*Ci!xm@*X ztE<Woh(wk@gKD!GPeGxmSW|Z-MAQ~aVas*4#mKR>ng63#IiQK{vg=H+K@mj9EE%Vp ze*PUAMTR{hy;}!s<(bY@27PK}4sdK41z4(rmFm37tEHVz(G<L-%E<>rsfAkD0d$I@ ztu(;n!P0clS244|jpcvDecLXxV3;<nYH<={Po1@)X#V|)(zL1E;Y=pGeXY02Bq{mP zl0hDN1K>D$9ze-Y7_oqRsp0HZ#6zXoZX=f=>*#o~)8|3yu)A38rg>I5l{7iDJt~3| zv)J;NdoLR@%d)P8*7hs1(sz?jSadDtf^uSjw?M84hmRq^HJ+~y^`%s5dD#t0cCGT# zq3`=`ZNNrLp~02y@})yTs#vD-Kp2t&x7rSG(VY2>4(aHCUw2c6u6D<eq-RiwwjL-y z=B8jXtyt{I$+O1~0W{|Rwx$OhJ91j0#}8rvM6f3S#3;LkQF88?;yU#RoLjZ0a;p$B z_vds2a8=K>U0fHF`(HoT4X;foY?`SmKhWxWcMdL`+3lPBx6-yIyqkAj((Dcsm=Lxp zbUy&;5V^XOM}<TbGH`c5;<zK{wMbHrKNeOnBP0Tif^xC)>e%;xMV&$Y?%x3b{AUn= znGCOb`yB-S^ZH*e!Tv4){h!sH{~iSB%sufVAs{rwDdmBH|Hn4~S6I4E8?AS`J%Pi2 zg>o#!y5+o>3lL)qoUnE{94skQ&6v_*B!rM~B2*w}>(5Vn+ywneBoviu+?;$Y%!m?u zuZ?=#0B_&mc`v{(P$SP~=YNJRKB*736G*ptQyY5bqZ(Kg0Zz7iKO|#f9REo$N3%v4 zCusD<(HKECT|RkU-KjQf&W9n=%XEEK5<49JIJB>uSa%~V$Nqij!~D!*pVN&T{HN+~ zPhFU02G4R2plT$K9;MAQ)ext}yt^K_qA5lhH8q%F;-5{9I7Kr)2=v_>`}E?*zB~}C zHYt>0Z&{o!N>ZMhm`nRXzf5HsZcjtUCLlWi09_~5tu+)Swu~hKm~Uj*6s8WfFeEqF zI;s%|Enq6y*GHtQ=uXgY1T-4p4%p-<XYO&S1)w?mZqMuE^Wke5z3tn`7j=CtW><>; zWpsx^a0;y2xT@qNS|3GXWL(UAF}1Yy%Gw*Nr?;ac&yRK}FsZ(>(4w9g{&fC4jiq@b z=C*Kg_mMf5{dE1c)v+;_Y%WVd8<x@@&*U!z$X*awmnJQl`*Nw769nYl8<RzTgx`uq zWV_3=My@2d{c6UN?)?#h0>jn!RJL%Fm}b^5hA)v)XTrCbV@B&lS0tp-4?@g%&@^5C zlx(|ffu=cw)b1OCgD?3o-78BJ^l!C_A`JiW!__~xIYysm<W89+L=tbr))ST`G=N*0 zED(ZAFU~}62?g*P-@rOdDDIou@r}al!Q_{EAdiAphOwm2i!+KOincfBXhWkZQp+58 zr`sR)Yl|fAjrEdVo-;;0gu(IqxJueX*GwQGO|%FU1iHb?PwVROQG4EkRBkHL%}1d< z95K(s8wiO)wp~64m@%$(64j0Cg99U+hJdiB72HC8u;<0=6bU#^zI7xqTVNA(sB(qR zllp3zn=}=q3n>9rm?Kb?1hYQjK=w>Gpr}-Ddl4e;6@-r!d#9Ue#@P8}bB?<7gGvgG zcd1UJH=E?KM59B>EIy=aGJ!D>O$Zxu`-+L?kcwuhCaGysDOs3&vPfV5iEH4%Qj0m^ z2`F5L2ieC=74ppBq%Rr!&HSGJ>I0>bn4ZQNJAm8{_!QxL`B*ZjhNLf?cm&h|TW;iz z!|^kh?M`qof#2la#Gue}7#{Z=)E4xW9Nb_jaP^ulM`4dBNR4RJh5ycqf5LDqZOpl{ z)>ZB+S*9Y2+hH??=yo3CP)zi#mg`ZkuEhlxw@9N8;HICX2%1)vIm(PCdiICeV`)Vn z4ti)Yk^CnIv77|Lm|bEqsi^JKibSm2O_D|RW_`ux!f}1trFV=%oUPp5NvJa`GbhlI zHMT=?-dHWD@6|Q7rUAP~rgFpt+iSTPR1I87Y0GJO!{~5!3W(QASR*t>e5P?kd}Zis zkNDnqR$eH0Zmkk(1pT0VyY~BJz|a_rPy(cV7tInv$%+%%)B;Bj{gdr|@eCFWF(q83 za@&03NX$YU+oWb{nK5gQzm*>klJ8{lQV%?L(~-XtXUnn}>8j)OG5BISQHMzaUQOfa z4V=D11%Ag}QT~YcfKFc-{iJZzOsGhH;;t!$tJ)MgW_5f!eR(!UM{Vw>-L~iK^qUjA zqx*;bw-vN8H$_uITIm?WHW0_Cf})p|dx*M*4DJk}!lhckz0dR3e=e#(4|5u0KsJtO zb+VU7fhBXTR~0j)@nNicA5-A2F+5$E&MQ7zqkcR;{2aiIhe*VXc(h<o9bvvYCu<K; zL^Vzv)>)i9g-X*^3QDO@sPszV={o<V#c-H27$3oFS1dHa${q2IkmBGH=b+cvploC# zeUKlP6!2u8tQrYmwLK<y+E!iRP{l|FV=GiMKkNXeBfeO(qDYqv&H^zJp0^6qL1$i* zkrm}#*ZMpsf11ih@9`E<k7e=ZKonF^`t#Zo`1@aNlOi-Rc&9Nwggzp`EpXuuXL%RJ z>(SR!am`<S6l5{%BJtT<jG*L(hCI)Grj=~L0s;>j1R9%hJg)A~J2WHAjTt%;FSS0c zwGbafnL(5;ch_|)g3{CdHW0r6lJMTUi0b$)L?zRVKaCiw)2HP{f=OWWj{F3PET~j8 z{;=HknIHt?TZv91<P|?{p<;VzgYD8Q_2B1uWXf5v7#o%!2uW&o9P2;T+ZHa>h5W1M zOx#pyR5K~%OmU$A;@LpWi+)MyX_T$5Kn0xy3VO3^@&jNq#UoqBzJt7*nzEavC6$xk zDCqgH=;_?PVWwlf80;S@6SD`(XLtk0t+JbrV0Z~<LY||)3E!q9MwFfoiYShis~wd_ zxJ9w2Z_rm3;9CvoY`h8A?j~h05SG@>Ffrh8K_RM6yBCsC!t!yywp(iNu$ERY@|kRV z$r?s;23u<}>@uH(^f?_+mpdY2QC<I1;qB_5p_*d15AfqW&A4lg={rXqn^d6HZI3hR z+Z>$dHwDh40CP6Oc$!0qb^(}$M25dYCwG3nAIo^}5I*AeBxPaJrZR2Z_LR3o>B@r< z5=sn6t|u~mn7$)I(}Jo&-L|BEU6FTgUR;M8Lv$pY;p{5<y~K03bgz41qabQIS3Dwh zK=^(qhAua7ltVyk1M;E3nB%`mFtFp^%J@2$Gi>6CP`oKB#~8E=S<0s&%qsuXuf6D_ z$L{SH;D6jqsjLqP?BO-xkuth+y4(6hP^$r`f_UA$O6GxFgfyDn>NQZ`{F28S?C%;1 z?67?iu`GIcW;V+|LucypI!7Y`=#9KVy#%5XSn@}IOG~=jky%kyVwWv>z%(lpmFL_! zwF5_C#-jHnN7!a5*YuM=ghYVg`X~j!)=<0%LyJ;sBt{3p+Wtzp6e(r%oqbi~CMxOI zc^$uq<`%Gus0#m)?-0yL@q;Z_$farP+6QT0eRfXzcqh2(Iri)M9_RGn_n$L((tr<l zR*iP1$V(_XuHCqO@-EM4Zu4#E$9m^VVtfAzbOoI&n&IU%!*R*U`q=5P9FUsw-!>;h z*OKh?V!0@8z!U*23i!|9u<@V4VWfICtXg9DjCGZZLgq9F9>>ivCJ<G=V;SVaytceE zHVBs5;3}HWvUOk|C4j$m(K$nt@p!>C26A8J_|MW=BP|^0fS$0Y%*w2*1zm))Cm3=u z`-<{)7hsQByvC}M46;h>yVF#t(2(nEpl*opF$LYk8W7gT3wq?l@8lpK(&{5olSjB_ zWjTUUe)i}7Bafd#P1>M*HHRq)kMT(>*fmZp)AgXkF99#ZI#Lruf2&ayu?X%l2jly( z?LsXtUp!bV>jc~UtwUXOsSlf`<>zwh4C6v$+Vp(0=m1YTr!qYQ>}@+v{4*phxP>HE z3H?s&BXJ^&KiXj|xc;0m`k89>DyKDR%7@quoxQW^E#lxr`bcD8O%pK$_T~fcCaJhM z`gECC^*b#aj2<m!!QhVr8igidi|kqgP)NEDG!==V^yvI^;xz2QgN=jdJjbkBW&`eQ zzzX1HK^ke2$tY_|`;WL>Lo~Wc-C9VRo+FqG;MWwkf4i0w{COopTmDX$mvggd!6KHL z`jG;Y7OH?+)HReriAM0&O-on#Gk9s6+>Oa@M!fcbOIe99<5lH+O^p3Tn)IT}aSQ$2 zB=2!Cv&F)5Y+s6GMW?M5P7Y2FFa=>IHd&W&kQ^8nnh%eXT{4c3wcL8>;i2*?=CgD< zc!%wl>0N3jW%|VSsMzlxPcB$)u?tyUWnW)&`%`Vr``tC36j$H26%u(bZ-Hx3AgPlr zx95P`RxXvETaWUeJ6ks&Q=x7j=v%rPl!Z;~=Z|cHWCaA=4t%N6`MK|7K_50{*Z8um zpQm$MN1qS0!hLC)#z-|FmOUR8s)m%ZHu+EielVhz`&~$?`;mJSkoI9>1U80uWD<lE zNA!fn5xk=>$Gg553%4cSbx7Td4ZuJ2+*5@$QC%v6y3aYy1IuX#Y50KFTMD&s*vyCb z@5R3rP1kP*l!ZUzm<%>c;s|IEl>BWO=p7N0Tn&fp_DULxlU|UhGx;H84pO}jEiu*e zl+N`(fd6q2{^K6}Uti%r$343cU9uw(0083*zt;f&3tz#`#mUsp)zp#hkF$;SROW_b zq5#H7?GvS%b0aS7;p`vFg{X|-hNg9u3srOAOtYzeA{yDkgXq}(Ci%U>R}$Y20i+Cx z0Fv`4Wdrz~@7J3E*iRe14X>?hUyjqf(k*rRxxTr=)R}b&YRusetqq3fb}z%>6ulY@ zF>`(4bpeQ%Zo?=sVjq=-HaAP>9V}qO2HF91Jl0@aNNFowoAJiwCF&`_J~W(K78@dl zgeB=iWq}!2)<o_=jslWlx;X{srb<XhI+a0O6S%q)<bT*<zUBGl6j5BlhltIUZ@|}( z%m`sZs<2}e9av3wl#B$T!oabQZss07E7%)@1sd#acrdUowq;n|b0g+VF>rn=!u7O* zpv2W|<~L=rqnypUVi{s-R1ZFkW+JROikaQDgvs!3=<ax%Gx;=yM0y?qHt2EjB^O|y z%2N|mA)?m4`#>Rdz?V9DYP)#aD(+e|K{+TESiM-vnRqTkG|%GRAp<HlL~Ur6G2Szq zvI5?Z(XqKe`_WIa-OGW!75kRN+8Vnxo#K9^(IR`qswvUs@AtzYLsPvWaNCQ#7<&h> zi|{zg3fFnjvX7wSqe3k;;seLa$B!j!1((zrJtH<(eC<oNmSn`M3tCk-kmuX&$f&!7 zj7b4hhDae|({%)KC2Kslko?3sXve-?72gF@*_8_ik8*n~8PQXCEyH129T}u@M1%Ie znvXE^17qRk!1;unQtX(|U%J)!46aNCDHwTpys!_oB<7G*ghL@DI8gD$Y*a~rzaf$? ztYwXG0)idnCulllA}vd}2qy7-aA{%Zq3ius_=+bekfZFJ(AFd3QSU~`Pi>(@P_N+X z6)*z5kl?PCaH!=nSD-?@CgNLwD6IefdV&~|g^AN>Viam4Ti8vp?O+pQ!<&AbAHUZ_ zqOzP*@LuCKqQ9`sa;PZ4#2H30PXhg!`iB5RMQE%D7(M-50;1fKZ#1FpN)Ta9gNEUc ziGL<LAWQL<kRux*vjjqG?ZI}X+ZHh@szpmON)pw!TJLYFPHlC*?)DE;|E1L&Q9fr_ zxVNBt;#Nbs&umy;StiA6Z|tv(MHeaDVyc@|mh$;1t24ux_u(Dlqax9jzae2h`{$I1 zr?{#(K|H(^S^auw=;`9XG6@GxfB@b;BRpZ->&&VU2?Z&+$sk(fB<+QWD)(}Mf?DN; zA~YIqnT70p4kv>>E|J2?rs*bej<+7URA*>kgKkeW8y6f;_HVC{?CHPksWm2tLNbxm zL|<y!2Mx1fcE^B>EJX4_+moRh`e8ZZ@>0|06ULJvpS0ZioJ=M8BkwfH>CHU16GrUv zG`C10H1vmUoP#?+E}pUy$8GBIbj``oTKxh&j<>mx&blyul+7(2|Bn?EAE8M?acuFe zk>X(==Yx|M{T*MD06gW@hkGZLxrxYkJj~Oly?;4$wxasgoe}TwNl&B{*rJqz>o{>s z#YHqQ>B{5lK;!2OB~`jYZMsQJnMpR*%Aqr`<3EBu2sXAPW{A}cT5NOA;kUAvNY3)L zblxf0r>JcCUW&p!+Uv`eKdy4}_V}WeX2yM0oR?KrM`Pt@e4nfQLqNVn);}YOAE-Yv zm;;gO51ulblBG1`X|i*aM#UTjdKgSCaZ98Wm7>3`A)4Ai^=c?gElJwa3bv@llhmd@ zkfTesYYP-Nbb@W~xX1VeH?$g*4MJ#oD^AjD8iDn<o;kAP!tP^3*@T!AOZWV~m(Dup zaCOWf)po3JyB_=YnN^Us@gX;ob`qjWBAX+4$<%M3A+*U=?dLnY7WPfv_Dxbxc9812 zb&xw!xc1t~SE&4|-!keGvg);Jk#_h@QZMVS6eJVq{G4aa6-Ncun#qOWn?kyHX}}tM zr+xn1CUieYgH6!x?k(PTTt0)<uAO}+p!&BaD{X@Vr`t%_7fOmEvo!E~1-LTJ<f4ZC z-b8GV_dDW~q(%on=nh`_VQbqvC}NYO`_F+pa?!&XkPi_WKObRjB1!n9JIbB`2{oWJ zm98J&5{&D1Nr}V?WL3e`g$5rg>w+{f&u|CqcYfpY#1=(2@9V<@CHSrPtl>N+2~Nii z%g|>rk_KJ7)1?4>)&k-ybeH$~mo6q+Sa2q__g>4S?oA$@($D48+YoyF>iWIv@<-I& zL;A1Ps2^;ubYF`ZgHih9Db3I`IiLFK4gSkd<3zJw_g4;k>|yC*Ccg9MMv}2B{cZMt zx(m8J?zZlX;dvOH7TS$p!b}mN`49vDM!g1i@Fu2UBDO65O|uEXFJ-vy^TLW5_cZ49 zAJJryIq-sf7UGYe2j#}thr_M~rOLFVADMpB56YO{L@6=HeT;aaAVz=DLF1_^q;YOx z&~L`f1ar4{N4UYEE2#~(ELfjIIcH6a?Mx%$tifXn;V{vcphGp|ma6X~WJ2u=Z}ey~ zn{>M;`CU%@E4h&h!^V0xwLZa>zc7)jH338xJD$2>xj*UzZS0?QG2dU=glCwWflgyD z3oHz*U|e&)2#l`khw*VHrUKKO%04EJr?w8|u8NuQ@r}XS=qv`f0eHz`L!w+%Y-<T7 zQw|qwjkLsn-$#u$@9j-IRdITXc|Hzg$7wt$4JkY=i>7f%Qco)e$W5gR7Co=HbI=Tw zIL!b0#020ManDgg7(=9PkJHS(Pa%^QQ9Bu3DsrY4XmV;~37STE(=?KvTONRHnwn2$ zmY#XvCkRcc$V^#Hk?OelBx4Ix7ndTI4u?d!Lh`9bFwQW>3zfp1g(mOuPaYuosg6?y zCSWyY?1T9)0ON0hw0qsq6A~;-wEvWBlzI3aEW71Yh9>WP`zC#sC0Y(wupQGs<n&;> zoQUjj{ntQEjwQ;^C(BdV6u*p+!NenEFvT<Jpnj>>QDoh~4{n$1(21!Sv~pPJ5aiTz z;hz-m_w>!$q%9{^6HC|>ANGrgE(=Gu&c6njK>#!V%q3q;nsm15R40-hF*f7o%vY+% zAaM?cWWU7!?)*<hWKm<DH~{r~>dX!RK>7czh@6}~tWE!04QX#F9k8KvZ}SD8ySnCY ztr8+YATXH%Z_L+QYYF8qoH0aHlK_o4lBUPGdM=2cx#Ska&Xb?TTa!B&McItHn!En< zDRO!|TbPs2qMwqF-EQgNcZr!}-*PK0bGkczEQ*ebFx9nfroAZhLP4`mUxJ<B;$x0u zOq$<msJe5vj$xM_23LClx1tcgP9Y^JZDzqe!>E?e7+-!r6m^oQ171O&LX5|te1Upn z&2s|}nc|V;(TqpV#h~!yVjyWt<=W?~4^4w6f(KfwWr4vRD&D5uALL~ijB~I6M^dzB zjf-$Jm_@`xfTjV%a-8Q+8=>~*!$b@<S}-%Sw>tBZ_JXL4y-~qI{yq&+(N2&`ZCs!H ziiZ-pz8iIuT!5;s&>0Pvb{;^q)P?{)b3E1U<$OHRS(-!C_ZAiB6A%lr(7KgpuhpRm zjaqGjXOKZP__=FGdeL$8L7oN2C2BPCbfN{)SFJmYi|VBliyF%pCpes{1>8%N5}?L5 z8`xyJ5|Ch%g5(uObaXr&x2P@wwI1wT&3bptNyGLI6|Q8&RUyVvC294EJ3W?#8S6w8 zg9fr1If=eB2=9mxy`%Y$elp6zQZ}DBv4U&(i&!+<K4u6fyR5)}Yb}``y1YDhqad#8 z`J~CxU%PCctrZ!ekFg&X9mV@tVc~83=po&lIjsHny;{At5UR_rM?FX<OMrF^n5oI_ z*56YDsqW<;bqVPH=JBM9A5e#4rP`O5@i|gT;~xJrXgCmE5*}DWQ?N!<1ZFEJ@lDvH z>e@{H+tAJEDPS(jJIj**m~#Sr*dnST>{sA7MCA{XxUnZjp3WTtE55{7Cmlnrf6t?5 z|L^{{ytE%d+yl=rPm^%OLO>}G2QEx8;`&e6#+jEmPVC02i`Qy*uw?_H(Zxb@HN8S8 zWW{eCnnGh<P#6N*DDfa6+<Sin&NYL$p2`J49|rg1G)%63m)PXvBZ0o-<wsEMkIt7V zzhhLE3@_>wqst)zu0Jqz8~YjdBz^LeH1II(mNXN-_i}-n`NN^sDF!8g4FCDodi%ZJ z3<MuZ#BkN?jz9%*S9ftE%3EzU`8tI74}2rs%)*8BbDvEkIIGuWI>9*(Moec+iEL{n z07_k`Hc|=R-Z;*h4LY=g!6WcW7aZl)oS?=xQ5$<6W3bYtRKMZzEO($vZ8`hwKN^UV zuEz!Y!leKU-t%%=P`t)DJC{%dx$3*Hrvs6IXj>WtF+GNJ#2P4^^&8}-jy%3Trd<(# z)svJPu)k1GGLI>agj-`)BBnS7m@9#)!?iFDww?^s1dMhD!UC-$y^5$Iz)OEgiVcPE zhyMO4Z~{W%x(2xfKu`?c2qRa=Ng+E97$7{rVSCmqyo*~G7T9YK3*~DkI#8(=rE6D~ z26QRUBG8~CeH8GApWEv%5;UeE;430_EeE)?QeuSqS)8TXG`NseAn4WXm^$V&>K@;B zA&_r6mMhs56s1wU!qhM^hJS+C^#=;6(;`=3>3h;bbijVbd>{T-AR-Dy-Bv_DRdO^! z>^DpjzMg&zpiWL|U^LFKX`9AvhD#wx7jhRxG?{RY62d+`qG|MmiC^BKSyK6Wo`zO$ zhP?9h?*M=jTx@A}rhmlsbJKW}P-km+p)bGR?QU?k@Az0rSq|Pip)#_*(U$=4m3llJ zT)13Lalm2^8x93Ir_LqM4eBvNLw+^3iMyRxr&obAV*TXgPwziwSU7coJi5Ej&^Q@i zlT{%J1!-D2#O5@UV~&;etMM=)&T6_+xJmC@=aOb*d0Cs$!2_?IV3p(Z!JIM&NGIEt zZ&EGpXA+rQ-bW-cYd@cExy>@zxh0_1WL5WKsDl`qJTkXIXv3Ds{+iN(X(6Q<Dr@=y z9kQ1?j&V=JBr~$<0Uc*Fu=XyPhImM)4w}(>lWQ8o&hxwnIa=fsInAuLF&=Nf2+zGk zajWw_!hN-DTcurJ2C*KpXIfz^^sScUVZ8Ux+@9~RhZ~Z-mO9<XHQr04rN)2aXr6w) zre=v9hJ5s0SWmzd7xDsY6p=_}v;g(bBvjIWX(W!!pvKp2q8uL(lR8Wlj|=Og#TSjG zCEplt(S@|f2YHH;f4fo|nO}pfjC1pF8&cX+wNG)I4c!$7Hft_3ntt5m<oCM6)uzP8 zt2p`fmd2Ii7MR_)*n5#;<~s224t+;_|IP?;_^{TFP_Wl4rVORU&S4Hl-~U#p6F?(t zdI61VX(ox5Z+ZibPSq1YE4Mv?Bx#!}q7~PFgT&2vnal{aeSsv+`1N}O9LkMLrK6ji zxpXlkN0aB#bmg2B-s5b)Fy5rdELy%H+HsHYJ?*hBfy8t-9S%P<jfk0u?#^>`l5}ZP zC6es(9jjCyPJlPdm^7Vy!{mV4Hej?)MX!ev)ucE=?2OB_R!47{Z>!>owP<4KcBxVO zd5=nNeZ-6RRq1`Ah_t9yrVOQ|a;_V~o!9r`_1_C}3m?Z9--{E}Wc5B=o$ouj4)fY| zyF9i)j^+QoNn}{}=<jP+LL;(Q12J5OB-@cw#4=<=!Zv#v5T+3^IyfMAU{4<OzOj?~ z{kU&CZeA*8JOmM$pz(8y03E*?$_|&BM3+}Y4VaSJ!R#u{$YrIHh*<_h-IttL$6Nto z2q!Fla+moUI^Gb+QZMggb5RF5Pw|u?qU$)v`O>uPCWW8s|AhPC3%eT$i*Y&?to-dJ zJ~EyH3LcUB@KGhcYeP5Sb(r-&3En4uyQF-(#C(^`zhCOR5-|kf73;f{5ro;3RDGF} z!#mWYI|bZmYg+`krDzu`-6J@e96uDlJWtuB1v$OA=q(=H^?LnE3ywH8-^d518B++N z0|y98iC7%Ui=N6!Xj=_t)Q#zz9B>D*y}+Qtid_llo*X(r<6TO?fCd?f1RMCfAX^2Z z!nZ6(zWoIb!kXEJnI;!A#|`F4Q}2H4XwVQ7@yjv2-^{GhdZ#_e`8a9T)dMZZ*N0#h zy^7x>6iFV=5ln1hBG4z3=U3?xR(FxYBX-5cI<=g*L|hUTf`|H&E~P;;&rnZ}Oh@9g zyvb;xbzGLlKh==ME4)Sl9qp(Pd*(d<f;O3F@X$1IKnVly{=4Kd3Lt<HQHlS^hm8=W zF?Jx$NSUEN2jFS4!;iv}swwohp|ukq2P!*e@x;8=V!?mYr#LeRI~KDlog0EYuYlsG z@F1Ll5Wcoyw;ye)Zki^7a<8hU`eP#Q0|$^VTg?|FPcJ-MO0X+uCWs^6106QtIs#)M ztb{<h=Kp7#${>WWM9zOp1DDc~)xP?OX>r*0x&(w`vk!?iaV}yRazr?{Kw~HexPDZ@ z1ru7hVgF3uSZ5<%ggYKck&Y}lgP`&fkzKBNm3~fO0cx{2+#zAq?zD`#_Ts4MsWpdR zdXiuHzQ_5f8||S7XVhm+Emmv37Ef>~m+DM@<$<5zct+vgeEc<)^>Ya1GjCfz?wbDM zxyh1o`MMP9C9%SXw4Rl3F5=7E@ykf-%TeeHiRx=f@=?8d=I0<$A-?w8UoAZ}Q$Z*K z21=vJ=Zq5Xi>svIY0+zMxY<tR0jrsezGf*jxrpf0&cqIQUQIn6@_vbmu{Pb;g4wS= z)?gqQV8`g1BAf2;!?sv$t1P6C7S+c$G;6z;bzAHycKsXpe=6aC-mZe2UpA=m%Le}! zStHKB<%It&gfliA=l>fEE}#D4mg>)^Xi8F~%z<AjSgxE-ps7nRIk+yN<=TFw(EC8) zi;&-M;RFDbNd!2TDV2P_Jxcw-tGE81q6V*B-})`Eer)~N=j8JK*nLZ6o0kf?>t1Gy z`g<*y_OCFNI%LkHoY01%*lmSjdV2b?A!GWr_q3ZaWd5HU3?V0Lv907U7PPHsTt1SX zBK*aI^sKl<j7q;)Fi~Fqg*CA)p|zf51n)msuvXHM?r)gaD2@?b*yf9A&*E$#1)Ga_ z7_yf>vhZ;6nY2iLMTkn0Pc)ai0F1=kY+T~^H%;yB>nb7IQ2Us(p9#o`n1V2dk9WoX z=`DS0e0yrqui?kmu%j3-%IV6J$r8<=dIZhcENOobwvHksEXc=`J;TW}6HkRK(&-$_ zg-1Xvy8`<PZChJ`f#$Fp4vx_dRp;iQ8SeF5-@jl)_*f*d0I;04ez=&}u!?_238&l? zeyCN(iL|*XFW`+bJR;AxXZ%$-tA)T(*1A24meN|8qgZuBruZt6tZEEq<6$#lRB|H# zY<Gd<`T83a=ChKN)b_^;+b4jjVm7)`v8C-FuTNPu#YX}eTw39lDEqqXR3qfE*2J}w zWEXZz0T2yI2$KS-%=w!VQwwxlTt!ppDlWor=ig1M5Hz$;7tW{nhF5Co$Qkf}1q($c zuURx=(=)4dj!4lSL&GU$QK&JBa;kkYPH`q1nvwp+N3)Nk7%is=FBilEJt;Ue72yJU z0;fbc76=1@kOE69mYP;5LGFSwFf?7DNbOU=+i0J$v)B-VWQe!mY}y;nKW27_U<#a2 z5YZNBRzXsUztpb{Y0?UIFoI%>xFAoO`~WIVM5<5aNv8($2Lvq1C>tufd91vXj54}G zJ3<-+j37a`*9#+ynIWm}B`1$bgXs$==gik-4dv~Y43%w67&D_J%~ysKK>I$`RiG>V z17_Y^#+yVs*~791ihFDBRiJ%l>$Q~R4K;`7c}iM#VbD*>c!RhK>awN-lE=W)(;$1{ zjl$T{pk1WR$Y<GkTwJ6&{zBnZ&vS@a_SUk21Beidgx5|831dG|v?75@mI5Ny|3)Y4 z<pM27v{1$^T{xQzE`?>S5}pTx<@S-nxlVGXIQGt)(kbrn-luH8$kxwWZxb+fL|5{M zo}0}l2H9B&+p(OvEz(D*n0@0oEghvc5jwKbJGybWql<D<*7OE-P+oj}$31POc#|J| z$vB;U8{G!2i;TAEpfq(RxuK&*LQhZYGR8ehDa_3nZ+bjqJok3Rwa@#Bj7ZX3x<FoP zDc{4=h(nsUUGY<}+~%5ccl>-l;z2wm49~`<6-DXkt-MU~)Wt_U+gnk6y6(Xi{qm}6 ze>IU5<ovOJRSk)$;b@l9a*BeQIHTzm(D+tC(pr(VacH}BzVbKxd+;A<UdG5j!E^QD z&j}KSMzML^o-St{n*#K8kW-OZ?^p9RdS5NZo`D|(8LZgSVpEFd%FOa|vikjY*MKQe zg<C)F_B{r<<u(UL4IaEDRYl5ZrjsS7DF2jj6zO5owMWmPl9mdRJc_HT0W_(h(zVC4 zQ7POal#Y|@yMYcpQ!g!&TGaD&exM%U<J?jvlQapTXD-@`t*Zny-T7w7ju5Tc8QnyN zEt@}M^|^6lJ?q-oLyCVP-@eBoQ>ZnBZTf#8pNQ#yAYWERy0=4Lij<n}i`^|ts}^6Y zR`GjFP$iva&`ptRYxekc#txNVN##*VrF!L1Dm-Sf*HJ4<!qTw3Tzj@<8-=#o(J5hr zLh9QwLJ7PlN6^<v@Fz3^JKgTw)%~Z7XRNlJ-`{B8SClwwu2}o1>#DjsI#f}Rse1%E z?LHGPWfZbWawB2-AD=-TBDQZoM7Pw4G@G9i1|z!Px1X+-ENn7q>Vxn91p)D0akiDY z#3k8*QdB!qtwk6;*C@!n@}yQF)W!Prl#a&hFt|7(-1dKxa>eE)^q-odKV<j3EHg!L znZ`IDG%wPb%1P>S7+(_M@!9h7t(+=9&B1Y#Q$m2(E<STy0QGDTZvtJ;GtdLkZ<kVk z)zDi6{avcB)lh%mb#Sg$V%lAawMEPA>DZ48EA$`TS{mT4Lf2U68v?WQ_&3SQ2~yr| zh?Du6w?HT--<wxLaQX56x@!(zBhA4;`5=Qsq5}H{^LZxX{b@6VhUnV^lwsi2Qp2(; zb~a%5EYSg$?vven<nW~4;sG76PQ)_n3SRt<6F)>tE=T3G9Oqf+<wCY}eJ9P^`k4CJ ztA6h_F>9>dy*a~9$29pJh$WGx7UeQ^1HS#=<2L=R7Mno=FS<6Bv@4qgSh)Cd2)U%G zN><~)%H)vh8aOg*-70nEy0*)D%aGZ6MwYY>HZCxi|EkGis%mG!N84($8nrF}(H65B znpt6C*!{60RdK;mIKjv&%HDnK*>a2|d*i`f`J>3*!VUzqA+?hM<frEF3qz*IDGa#l zLFKx<<HPBTxlkM>RDP-fYBeMt?wanS3R>h9)KT3BtTS(u7!EfZeIm0&a>ghO$R$(- z3!N8F03cpqc>HcJOd-BeK-R}t1{+4RutTqM7*WV%hC(6L>H#60sRfx>7@NGU!O{Lq zTgRV)kq798WUNkmQv-^rNrc-bI;Qs0;IMa9qk(BqNf%0~BN?s$!Lzv=C37Y^{1@z_ zuM^1ysMs1frkDdY$|Sv*aRxFu!25SFjkY4anP>6(+~4b-aJqAww_H`7l(;<9yrnX8 zy;$e9mEsj|{_-wxEo<H3l(R(>vQ?WZ99i?e!h%v<k#ZXz$g4O-8}J=3+y)ZMX@3*a zFr9-I4)+j({Y(3pQ$fCDuGPl3JrqpNXH{i6tUSAHnd~}44cLMJ<QZF%!t1r@Zc-|a zq&Q)0%T5~>Rt`a8?r_jozy1DS8iyS0UY;Hj0KoS*2JL@A`<(xn+Wa5d_dmSP7%;~_ zEH?k~J|FVe%bqG40%Yr54dZp!#YV94hpck@#qT6PT?0s1;(=@yF-v>#y1(vrfU#dU zy6Yb*Hh$_hgkwMGa|*Xw;B)xThzgA~Z?JVI*3WK4FfYuS%rv`F!I*}X-ZN8NyuGdQ z*k$mds=l$UXmp!xAu$!SGh&>hrjMGXE_AvV@sKZj@02!3k%(2hg!qCV|7_H?k%yC0 zJMJR`52<g2kdP~hZwftQfCr9VDZo+F3X2;qa*F^OZiHYw2(0Iepj2Q<h_11fMT!pw zq5ww&Gi~Oap!za6gbV+(aAM|Zd~7SWg0KpU{lA<~j7xWV`&Z;Zy84K%t0h(32WK%9 zV8@i(5W*Ba>|OU0_<yV^n>r6lzm#17Gcn051p2jms17-XO~8BiGN}4jH%v(J7#!{z zOZ;dMmY^;q0wcax_>+zd20QOL(v9E+#NqP?lccE#X_cqbI&C!y6Sj4bJVp`Co2U&& ziM|)m(ZOPlI3hDLC24c@4fTb2CIhA-xFf5o?yKw0^dY_62>>$fM;~&)ImqC0Zi{dv zc~etvH4EH|cyi};XRUk_^YtrMFygX{vDn8!TwWz5;3syl@k12?2e=GHM)PzuL0gc( z;amA_r+EtKX*;#zwlhfCWdO=7jA3Dg<j_*S%&yBWA-Df(s5^po2Pao$D~D%N;Y<6K zRT1{}VdFw>7_NF79+tA5HV1Ax2KRR@$opr=qy#|;=X-T$r;Gbbjt*pw=+vlZe{N)v zY@302a7Lj<2#!aH`9f3><ya6ZPPrCLG@}iSkSN?!#UL<elp}p9c~fT@!k5AjVM{Fq zyP^RN1ab9Q^#d()^hF17%lm;~xyJ)jKqH2d(DF#qCPriAAYAd_NQp3k0IeIK{X9bW z1Xm@S9-qK>OSSI3sCWXbALD(({eXFeSkFJ^Y-xFyo4f{O9D&8R8U#@wg@ylAAY_o1 z3T8l6x6)a7Yx@b3l#W0)ms)YYK_oXfW+{q{G<5fJ{i!p9W6b7)m!LrWIL(1^L?pP_ zP==n<5{N0d(g*;h!FO9fA+9ymJLkIcM~IpO6hxH=My$1crEX6i!$>HY=k~~ST-dMy zELm0HGa*LEqTcfO8k=lXV0~!4t;tt_@i<5nO2;T1%5E`pFt}DX5v(T8jHSVT<rkM- z82A$*)+0=n`MD-Tju{_B9=t@H)P|`B)hVk3bMp4WFK31Xah9X1>}UxU19UCv+k*f( zkCTCh7(4PCMk5rYWHmQ#7BRWz0B>LKMhtc2`ts+hyB3f&&v+jEOSp#^?n%yf00_C* zO{}`l8<iS;Oxw8puuI9kCbE)0(ri1ODv8xZ*sg`X+`#mrYUW5>T4o60h3MKs;p)Wc ziYCcS-Ov%%MsfYMpET9~3#CrJbR5yZx*EdP#s@o<(ds+X+|V&z+~&4zc@rOOHK#X? zw*8)PU<<}#mluPD2lEfVr$}4<Waq>O`40bF+58w5H-*=HeSTkT#Ino^yX(NcK~|(M znfk=iJX+fAOro`z=~Z=R{JN}DP72NAN`Z}_1Q#a>^(-cWl-SY~7om`*2QcH&^+|6< zmqx2?cfo>h{HN&ov{8dR1<7I)<m=Kz!O=c}*BMX6Gmg+*y=>0(mg#O(*k)fl(`S^| zf8Cd?Y13J~x>T!qKv{ht>1o9@`nP=#_;WVtU(H|RgHmgcr-JHJWHnP5a|@UUwLC-` zSWFBFFHZ8RQj2M*Ob>A4qU+;=i*@+Hk32QU3zXPq06qR`KhunJpX7DE{+G{6r%CxB zl%lr+E&cyc_D<oUwOy8Wuw&b{ZQIF?ZQHhO+uE^h+qP}&IDg)+y6W$$zOL@7!?g~c zv-PZd&N1egYn))lXHVR@NuIZ~QJ$ej1u7HYFLetK<$S~2znZ(B9s^I}N3`n+Ta7Wh z$pVEa7YO$WV9PYd(Accfjh-UEU~)iK$U#@imcCQ$o=7rppC$oYbT(RdOUHB1FoVxB zo;+T!gk;Zj+Hix7p7u-ew>-KuQfO)%oKm^UW`sPUC&0FF9Al{ubNyQ#0RLVq$?2NL zwnpOE-l72UP8N4elL3ml&eYXaC;c#31U&6V-=U{M5-ByQ!9?Yk_n;tQ^ACfur9`CN ze9D;rJlasdUM*TwrPY>&P4&d8i3>lm-0>8blAlTT-dp@lz*C6QY5sGDP==_|pR8D$ zs<fto9pmzx@Q>0uLuhV%^VYun$%@XsXo=`NN^-JkT4g$Zl-Tbv+$BfgwdxmRleK=t zw{ce9NR2((J$j>Vy32xkH@#Y_b1Qla-F=MMZ9=O1O7k^uTcy^z%JraViOJ+np}9uR z;~C-m(~eqaww&O<`O`8|yn}y?89yX(F+sAW3vn`^{{vy~j~xf0fU72`CC)QA@M0X? z*g&%Egp#hFv^0){)it0DJJ35bdYk@#nX#3pmMsAOKA5Eq{l&IQAWWVI6GPv}&8+-I znQJjawmtSEv`%e8myq#12EdUMmHyR&<*q!Sb}D7o?Z(IiY3*pqyu_9*tqHRDv%Z0` zNOc4wMLvIU&TBZ%>B8Bjka1<50Rvn2ZxF_GGN(vJp{j=XF9=IdwcXZPj+CimvQ!^k zlz)%pvc~od)rXElQdEzRo(85agYjXhUC<W=Nm<7Z&Ic^3Q(HR9$H$gdvVVHt{lneQ z_>679JS7IWye{dc3~{^2`(d~^x`Y9CX^}{)Kv73V$NFfjw6eU@`lT6vB{&H#B-@B~ z+j~sy#Df5Kd8UNIESt*-)x?9~(-qa18^F(%9_)tQk(pTgX&6%wl>SoNE6Gc!(E>>< zgr-O~DD624JS|)e3Y(-Y>dETJM$+2~PGQf4QDs)>F#jZN4PC30BAQ%H+@Ay7{QLGm z&}k6(ALv4n^Bji*K)FnL*0%s3G(@=D+r;OGh69%Z)l{Hc;@^N=>mPJWz}&GbobEhf z!O#9NNvZqnrK`ViCThm(zPyRsNH~{k51dP4g`#N>#4D?Pnrr$c)Xq%ijR%4|>O^8| z=26+v5!o_nXf#KusjFdk7A?ZR)f1kY)~i>%k+qLb5>>pLn{<h+SYOLE!&AG%?^3{G zA0<_)R{Uf*HK{}gXi~m?V6yP|8`j62ePiEY{pZe7DuhNb@eg$+|4<j>|65~qGIz2v z)-}|(vNF&&wEVBuGv2v57v?yj!g3iV3(T2Ni^88K6DaGLh8{vn$=uzr*xh>Rt-Kdv zk2XGqOc6hpvna^(?N#hI?rQJOb8@!o)>r5jF86hh8*GOy9=Gp2NR<Kl4}A@+{zG3_ z9!)0bU8$I6h6J4*Aq?r#j}k&BU!$iz48#3(Y*G9#lgRBP)K!jcGz*-mKWn;^)Z983 zUCQwBD^yQQ<8Z7kNnJslMMR`|{s?$ARY7=AD-F`nj|{?<t-=n~&d)0$XSRjzDtc-{ z4R4~Eko)N?!x$x5M{^hn!${BRT`ufBOKkT(l)^Tl&&gDWhK6vmDMk09ClFzXjr_}b z))yqhrESw=2smrF@5XA4CI4p<Zg8>W&tBR(G!Tpu@3!{oyBnWpeN=?o8LlI@Fz8Q< z>7y_sRT(;x^P^V?S{rngv!fCp*i(Jay$;+%rN|oJQqcNs5{ayiFM$ZL*n(-SN!$_K z%aIG@j)9)n2eO=Ri4Rl*47ef!4Qq`s;PHqD6m4D{n^)zilR;TmN3)?7gLAd-qCJ+# zs~vP;mIdU1wz6sfjhYB*s}&P26YJt3QzNp0&b$xSwXwslaAR3I6H)hKRY;fqX1J;q zAU3Q{S__09t9@q7Z#|9G79q`Y?m%;HbzlH}`Gf`FBof@4x<qp8=g286&dpW~lpV=& z?`YYA0adk;s5N_9w47nZcAnj3<g}(L^?m&A8M6e9OYnt44B0d(?{w_aOjd{hYisoN z=e{8IFiyQf@^1x?KjoC5%kt^x7FrjV1)J0SvcjFe!*x#jkf}L|^J(y58T6ZB^!eo> zBle-&Zr~|Uaw>|x4CyIQ`=Ij%u@CMILt~(bf3F4p2B*G61S7J;0H+%M*;H;cSsOAS zY6wV+#(xQs4oaVwCiF|%9UN&NQf=ULY-)6|bsQZle!^lB(Lb!HWM~UZa4GfGG0hq0 z&27#k+YO)*W*IPX_1P~iboccm>_>Da12$n|NIo?|2fwaWgV0n-YB4P5$`xDL3%9bO z?VgMj2?s^f%L$dD<Qg7Fcgw+pA?mVrE06J*jxj^D-d3+CJ6!XM8%2@fr9Uh{4c|kU zFt|3;tgtxeybVj&f@`&v*Ucd%8Z+=WO)M`7$VLybX7GFj*TprGJb`hp;}r!yk4d9i zdAOr~@Sh<Ad{Q*;U`0Umpiz@6{;TB7Uf|<*K$*O>wGkLESE+8tP3X@}tOzFLaF<&r zBCaMmeUV0kkgmDx|EIZTD8Ev6X9VyBveJBNK4({G)3w}hyUx@x_s!uZj`9vy?8)ST zwDL*I-|&%EYXo;ggHN5*d~xv9;c9hsd^0tDEIO;8L~Jp-wnL;YbE2+6JVQNwOJq{S z{syho3bkaBiR0!Zp@IJNN@P-n^!Tbi?r5m9p|`aM%CqB1dYa3a!!gqRd&v=9I1z98 z5TyD(G{Eyh%I-U(AhyhXRR3RW<&5_KvsDNjln*pZS9|46pP#DdyGL^?%csGS@=tHe zDkrdBIR&wp20)!JHK~{YN^(t2P@PYj9Lw~#O-k`3nQ<!n<PlWhz3(iYpeA~_yD(LB zid<u=(l63G^3AymsoW#bPJB`qy2i(iWSOon+mlD=zXF{W%_)-^UE6<Daso2C2hre& z2<_OqU-9Iw(LR{I3J51uA4~+*CrYR%(&Xki463*bbTI2{<DMLUFHb0-CfD1;j*6;} z_AA(A1v(T`8_QE<p7?dH(s-gCT{-^N`GEabcdIhVoj|JQBDmNpJFx!IBS&tW$18Mr zONcYM;>h=7^~`+|3&}M?bI0SY?_u-^RvTfH5oTwhj{wOWVJz-Ny818@t694KP2?MN zCcqLo&~owISE}_bLFPsD*l(lETIW{rXvQhJ-)YLD>*JZA)TstLRlnZrPBG4=P={tB zMU|s@g68yL_UG&Aa~atzhI%!{uh#1A+E`jxStGhO7{T)C>iv6nR{c;Ww>!<jx}01e zR;G^7Z_JhEB^NOtG$d?ww)77=4K9Dv?H?;3JaqL?ME^Wak@RG1RG}cDqSU?qMSuz? z@A>XBy+kI_gizDD(zzEB-8HVr!1ZU;C(+^n@f<5+8QQOHNbL;&R`fxYpz>T<VYzMz zoK38eI3!5TBIC8>Nz6@BRGVpirx=98TAhnl?D#O{;z>^l4qQWf<+*_F946excwdCt z2G8kR(du8BJf!Lw(tWE+{sn74^RbvQEUh!H!YVbBv#+cA;K%y3&N$2UV`4jF3u_ZK zvY&r*koc?G-{xf2t>^Flwsj|jSH%Lg(0&44W-JfIhft6i4O-m6lbXVTz@`$IW*c&2 zN`JlUi3zLR)r8sm$&G1p$0Jr@7$<pF$O6-9DW?jQEZ20R`1gfQaLUvMbRiM9bNAG} z;D@bHd4JfdRXc-jCu$04b8AD!1-5iSRggvT>I(ZDB_sADh>)lHx)3nh@VWd@(!9CF zoRxd9gpfO)wPqT^HkVtXtv^9;{+T3jipP)a%D8Lv3}v#)IG-kVoM_WLarL{R)3Uu0 z$ub*^SdX-QElqFG1Q1~yTcj4S@&~T=%#sew3L+|Y#2Ste5Rj*WPc?|?C%|&atwFl~ z2)mi!elb`W(M1EhB(uTMA0@5O6>_3Fm}z}m`{~q$9UoYlX9c&&<<UWP?lsGNM$td6 zHVQ@J3d45e!>%fpGn!?=3gvP^LT@c2eLOLW`a<Tp5JK4_awYu$7epwzK5aK6LQL6w zRlwNl&?IDdmDetBOQ04EHhBlM5Sr0-36Rr+f#jyNDAhPawo?}k8>q0jRH1Y#BEpKG zAq{3=F;>DmG>t1URgQxME^)}zB7E2g;q6|y0DL-2VqeOl6w55Dpr^h8w?wpUr~E~c z>T+pzL)S$5@KKxPYdcM|!NL7g{Az}KsvJftR7Z-VdJ0hw<Cik5@vGcMZ--(_`h99a zm3+0tpB)2FSCAu&HrK)>3#mvhs1+<W3YNh=d5Be0j~11u80Gjj0d?ok>B&Oa6`5<9 z764Uw=-Z^16lUG!ilr&ZE{zJ&J{XM8!+JKZKEry}Ki^FMmANAPBZr1T0RYNy0RU+K z8_eZutLvn1U}fz1FW$OJ*LGN-hxg0fL+&5o=Y;2y&@{`;%`XBRzg0AQ@jNGQPAH3~ zAsUka9)J?tOINf*mhG2pJ_rhmV>jOQPnWf>DcYK$GRL`EuEyc9ZQjXloGpA_AUi!= z`Xn2XF+#yPnQ~dMk69P9ABfSW<dVHe53cN1*z-U5ar=8VT071;uG3|A->=0GCFfPw z^Bk#1SFq4nYIP}GAYJx7NluYL67h73Z;LspwP@jzBbF6lh7JmjDQ+no3SvYnA3oQ` z2`>>X(Oj#GLKXG_K=hxdTsr1&iW5Kz(G)c;(wraQ+VdOacjIrpG1ov3t&-smHBVfb z?WTE-M8(OX!8PGxePIZ#rxZlQizYU#C=ojNf5ydUAW1oQC>e@I?FFqT&kL5|Y||nF zZJ#LpWx%Z2Ec5{%9j&(p`-*bs8N3UdnGx)*ZTi_9{Z6^5AIWLDWpFByngLu%(L`ld zR#G=}2S1`<x$i*r%#qMvHN&4Jb@JgYJh;l6ssfCh>7QD$HUQc3#5FF(kWePqSzj*8 zl)3_i>q>-2>NbH|+dl%b7!9N<kDJ$z`ZIdwRGMj0Vq;@$t0cZ&t#%*wz6{vDR;f-) zq^1V5j1m#TCi70#sN9vI&7{>T)2viA(8W-ovvt3yUeA3Xvp+{LdVmvR&L4zI=8&pS zaiPLyaA_sXvm}PI9=TC7N$ad6Y%v(`4iYYk+&&MW^!q0x`%<+pojC#r9t-8TT-PSc zPw^vWoAy>ONdG{M01d26=r=LMs#ruJFD{}JbGi*ZKgv*)WPlf~p5v4LFF0{&1R*_Q z^VvW$G$s=zmo~qg!4*shmv_-CW~&ba3ML}K_0u>8^j`}32l2DR#mhKztIMxYU8wQI zQLU0#yAbWJSbM#h1<SGF5crE0cl-;0d^Z;Kzt&M&k)(dfTOtEshB3))u#jch?;vp! zn;RYry2<G77$a2{`olIe)JdU3)t&geo~w*8&M*$zylw9F6AA8=RP+`y8o60v7%NJZ zm5}OdLU_+53`-&Qy3K}&&ldW}1b<2#c=w4Vgkh{f3`h#09WF<88iy1TOafb_rI#F^ zQJh0u$|Mb-fIpIGKj$S>_(su)2IzRmky@1}ww+|B>)TcdC$E@6oeSLh#cvC{K;!Wv zzz1uf5d;p=J-WJ<j9{s;y?3<y&PVB0HSzMZ>5WouDS0mv)t;^X`#D`d+|thA9iLk^ z7Wa$6#ZmimYiM;s+$EKT^~cPg?b*tEbiJPRtS~*0yxGQjn(aQ>Rh;H}FL>;Fyu~rx zLU#ICRG;)<qcfeH?f&usaXy%dhw>OGcF2EcX9;*+?2b%pkL-tqlZvHE$HuSvC3cE! zMI~}te)JgE3LFDjvkn*G33mF{Lbt=`o2|_XN1jFh0z$b_EW(A%ar%0u>G_IEzLDAi z0sTZr?#h<8IUxm6tqojXA5Y~dRDCvn1(K93AldebHU8O|RMA!+?u~idCh|)6LMNK3 z8D7Co!?tcA>nWP#WG_Ce-BEvwmKvC2fL4NbwdNY}?s9Z<eFky;dAQNsqPLRO{H1iL zzEC=Y-!wn)2Hx}yXM0`x0gSzMyKmN=sgRPYcx<dSRfu80!B>!t<zOwQ!kSlkSgf^@ zyn)4Ua}unzk<5kl`}$vRI<WY4uKO%7j<R9MS2)3}_QyM*2#@~6wH>^zS8s0kF}iZ= zP9>Md`5yN9ML9Qqgz|A!#f8KjU=PUcj9-SH==XX%gxfug%u_p7*qYQwmNR;DE{)ei z-#BH|qu`1EMBhiHb!TwO6ow>XLI(%#1XoFMsvPj9EKbdLs-+WQg96hV_>|2M?2Yf0 zr9$%sA-}^{NRYbC$NW<9ZaocR=v8#Rm8!Cj;FDjCD%$6rN6cd!TbC_bR3Oi`ART*A z<wUbKn-99HFkD>5(a8{gKx8@WH;xyZ)|w{diwo~hiMJ>Y$94t*2#`tS3NhXY<pu-V zDK`!)ERsz6V{MxLK|OLUpwJ-}wG$EP@J@xn&SZ`TIrfq)BT-i7N6gSL7*VcKtT^K| z4?&fUx#D0KFVP7FG=!0zeG(vO06@23YT;<wZZq3=t!Dy3Y$<Pg*&yPFehr^O+w8O% z<)496*A{Kh-O#-!(sd>oh9AAN66>SQJx(dcmiC8qs1S=sS>{5_eop+mf<tdoEt>-C zR15sl;$XOFU-{R%jvYK$?4RTp*k<3j=ktCm6p~MV*zw}qey1@DQ9e~+n^taYRp)3B zWbWbq1&mC|@<!dtr14_4w!$VkvHUR@t%cvl<D-24W%iAK(wpQ6?56`k_}_}saQcrw zqOQ4-v5k}YPebD0{*4-IF$?s_-XS%uzXlrvNSTaFBmERu>*Usg;2n@!7!C&eT-GVV z(0GGQy94C*q*`4PXd9Dg19t%-WDx02aPf3^nExv9*+0lvJe=EOT|41!hK|hGZ1!vb zmF~OKO*e7hn4Fj_+i!1eJ#;<`fo1)^IQ(-06Ds8DHjPq$<DBD>AM@faXFle21<Glc zF>+B-<^G|@Q$*Z*QRgAd0?5=QxKnC1Yv+YviFpx$OS0(yQNCy9QAT3`^ARU5;!L#E zHEujoV26t5SJb&z_FMd_6cb(6xi^m)8#SKysdmW!_q>i_Mvdelc>y3%HQnZ8Z^Pf5 z?EFq#40LR?Z#ALe6qAev6RF!1X+R!g`F``Q2@RQ^c_P`Wy{x91B;aN|)l|vwi#0Yw z>is%PYRNc8_Uem0KFe+CJ0Q&P7KnK}82+ojhAe0IB7tNBjPnNs&Twt0mEL2BJTmV% z7;%+L7*f|p8G#8th9QGoM_rz|3LFkQ6s6(4F8gzYV8V$p>V=$$L>yk#<IQO<baKf+ zd!-0Ac5BI}dxeOP^Q$Y;gTE;U#F&m({lwwdIP(BYCAnO7T*echlJDb3u$>i!r<GUt zc*@o54K?`$+DvRo&0Ii0X-b4faV3LcTF`D3tJF7Di|^MM7@I8$%&Ca&a|^;D<n+Sg zMDNs331NkxN6XNTx4Uu;eOXZ3of!F`kFp(LxZxaBgoZhO0YzM6my;2%GrCpQd7`d* zW3oXSr7pDA2$ca=WWqW+9#5u)D7T}(XLO~fRA*JOX#!>Fwq|L-KAgGvq^~rsinqu) zXDT{+8alC&UpXmOiFmQ8C|PVWClE8kY7iU<Q0#!Q!N+qYm53e3xx+blN_LcEMB*T2 zBDD-`a5FD=5TXM@Van$19M2o~(dq$P%@C64GbERA*#6~^|Fid~Fuen-?uY53&UeAb zidCNn<U!tRle<QY{b#n=T+gr?dDFlH+`@FD)UM_g{gd-NBP<lInZewppF$0~R|w<< z%t?Ij?V!Vrq}?t=SRq(}@>T*`8?sz5Py?Cu3VY`o4SLdsVfqnV*fxd=Fqk&_S*?;e z+}i^5h*Ahle)jkH9ZMeLd$+w)mOoMh&M)H+z6aU$3wd4OzKu=LXDmw64@`De8T6rG z{V<)eV0QXAaJ+n)kO@3T=yW_manQwma>VGBV7kG@mGUB+Eh&@6t{FSG>H}e2Zu0oH zOsmfD=ho7L6Z2GNPjBv>=5~TW7m5=I2%w^MI~SbyO2mD%8Epb!$|>tTUO+_%GNO?J zxmO+S*qsfHj7W2H-eQJnHo@OSb?z7;2h&&z(D5tM8-}ut>dF$yrt2FnoX}-T=;0>q z8t?D3sl@1k2Phb6QuaFV3a7qNnxYV5=>u7gRKlnNx687gXNSK98i>^WMu1I051Kn( zpu~rjgx=}*1QpDE+@_-3`V3kf_Mns2>xK^;P-G8cmc|zhAq#m6GX3m*)K8=q)Ts~2 zmYw(yqFgMs*U?ZHbcPT6>!+8wr`+vpYG&^H*QvLPxoc{OPu7L$rWZOpla7aEBy4Dp zi#cNG@CLpP&J}V}S&!Q4(^l}dLTy}L@{MqT{=hbhk3*f}rWd%46##6fwQh3zGy=B2 z@d?`YS{H-!9Lctn`{L(4RytNVyi#VpJs-WF)HK*QM(&Z7u>T|pxXwX<z~Nr?IHltG z^ZYe~^Edv4N<nMZb9YxvA-}>TuF#ZdV;Ey8=5Fybe#+Bxzh<MZu^M+^q0l5Ys7rGk z_Z8@gTF)Y@CR`t0R6)8TSQ;mT2$r&O-lL<1!-dCdL8I+Jqf*^G-{Dy>Y-hW7-8cd% zHR<^*C7j8~;2qr5$TgD&)_M(v`wM&r*aJVdZ|0M)*VdACRD!Ll=p<-w>lkr8OuT|x z-wrZyUP8T+e7}iGJYy~CU`;V&+jsx*uUGx3#Ier<78nzenzdRNTzXg(bTnZ}6$zW{ z)ipFnM>J|S*fXk$4tNczguHn~NHpJjE3#br5GK@OFAFW4@B3{ykzu$5ZLc%)65A`A zlSOz?^bgJ!y`-;uXWS-S@A%4z*e2ssOQ`1=&IxFH=sqtv?Ik5A%(n1DUXw?RQ{bi% zX73PUvjEd+xtI`>1CT%AX{EX&>q7twZ6Y>qn{WxI@N}3%!uOMWFC-Q!2V;Pm<@1C< z3qX^{0S}FL^=AYr5cjV$(k`5a57*)4I(-ctvkbsFkkjQ_KtgcdIiQc$DYPmadK=A{ zvz<5|^YG9OQC#iTVeYW}SC5Pl1D(=py)MJ%PjxTqqTO;;HYirZG$sO)Zt+E`R2XiS z3$&ADUdD<IPoX3#R%`XE9ySTG!kL?G<}DDf>;Q^pvn7rA!~=r>>LI3)4Yu)=H;CVQ z!ypd2%uB)HNC0Ho<4~ql$5ZHKo)o!U=&q(8SZJ8iEAqtFU)_GK7EgB7PH8I{F*WK8 zjft`-#Z~niBEIBTWfE6*Czr?~9;nc815QsGdw0o^{-tfzpGt6AHK=B9n+5o3JX0zl ze9_LF<B+@k_qla}DER3jo9RGsq{Y&e&0kq7IaH^tpDz}uLzc4FgXp0L21;<TG9q<w zkLTMq4rZa!e|(<BH?h%X_ZsOE<YB5EV*vh!K}(-kws&|ID{O6TO!e{v@_urn@9Z|Y znXZ1%-u;Jd1ONcxzpUXS`M(s?qULVKMn3^t&ek^n`wl+1pCd46B3x0S0RXW0005Z( zyGIz>TIrgYTm3AT{a-4`x61}I^2oPN?!JK!Gl&71c|)-^BDpnKa5aq7`1qck2ePI_ zBWH8nQL}%8uN(5$F@+m)P7u|r*#4liH5<;x8md^r&F3lAt43YTIv!3o9<0wb&VXy6 zYUymp%kkqOeA1tit~K7p#=<`N-*tt{=NT?uC4P*1n`;Y=8ylKWE}BhSb*yexGB1mp zbKKXA*%hE{N!Oy9NzQCJO=L;vFRzt6#aVvrU6Q^JYcgVU){%;ls;`szkU=|~kfp9# z8k=C=f?BcnF*9OIDTGyNlkK3X88}0ktF$ZLu+VbK{Ay?9R+7U?1Bf7`v^dVF?mQ#e zGUa_?e>VR3R*f0T<m{OfIS^fzz2rI(d)W`mtn)NZtt`60oC9?cDUK9b)081tbMrEl zJK-i=<dphVj^MskM|z(}vd*73)T}KESp8N~9_T?7$SS~ave4xSD}V%khif@9GNWZa z7BtmM2@LoEY?<6m<SARR$nEEnr=e1cMO4kzVu%bEZMR;(#`Ws#=%B)CV!4!Fq}eit z)xBKNbPx(qAi+f=K}WyU>PpP>x-hr(eJJNr-0_e^gPA~Dv0TH?f(`=T*2o$>)~)BV z*v)%ayr@e#it|-qu-eMq=U!FN#x7DfKGftiZB||j;1iBCWg7(1d^XngN&Pm@9S9Z! z1Vb&87<$FE!{WB-s88DCXhDT-6S&!RgqcC;P6`gsv-)wqCPE6s=Jx}oI`q@ab?M^@ z)sW4Lf~oC(;aGuyow3%OO}e5+OJ)+>kBQe35IpqO6F9;Dj=+Snp@3IS8m&Gnv6ctU z#8h%2OcKgMSCFW(X6}I8^q0Yl6@`|u>R0_8*tKNx?mw4yOTxq<awYg}kXHxihRtsy za7v}XGYlyzj-&1$EO{D{#{20o-O*I3zpLWYdoueM$6kKqe2l?a>pcXc3@R<kG0Ae2 z-9Yb#n;54pN+X1$q3p!kz;TSGWP7%|Fo#*o<wJz{B|L3b{Zy)&gT9~Qs(2cZHQ+bK z7IBWNXo(VZQa!vU@+#zdNGZ3bMNC!lXD#KiBy!Kh06Vj{Yw?Za@Tx;^DzHU9)R|Xg z#<mcq9P!*&;`s5%9*?o3CGIRGLh1gK^9t*flrbDK!elaCDy1xSWP5#c+ixyt3%ENx zd+vy*%_noO>v*1_f~kS#g3MKtV#^q<>8z<Tz`DR&S79++){mc*GrT-#Ur1VNY8-@x z0rwjGdae>J)*#RiN*j{>nVNW(_arsL+^9R^xtcIt3yRS|BK#5zov7`cgg@CLw)zb0 zs{Lsc=O<UkbC_@gLt>t0SWJ4NVhk_J<ZiWD^s6u_V3r8|zoq1{Qzq(e$cc8CYYt&h z=qBuce_O>9X`u2e3&V$~*2@)i_lgfgnnV|?!&DRlzFI5XJm1F9<3x~v_{0axy3*@A zX10#EJ^AHrPO_MqDJN|YEj^PHgophRmUTt(pry6e3L#^_O^ZKt15n&Kl+L<_Jm9R; z69+VmMi4pba~%N_)9avjbNAs5BP8&EGKf{$dU%5HA;C6jri&7PkS8CwJw#+?tKXu4 z@RJR)CjD?{HUa7rO0d{t+hP8NRP6_}viN%=BQfqeX=_$Iw9TtOmpucnN{uEQ#GJoM zalt7}e>co2DTA=b6LzlfMyPEbDRk}yYtm7gQL(5lcx>VLZa$@BUnt2**RU+*C*A^+ zNvaZs%>IZ?(Ds~k+=FxvsD0m>WIXoh%uYxfZb?cB=lPx9B^&{3M2-!@z-faJnwC}x zxt2c0xquvXmjd5Vm8=~yP=W5;i_yYT+sWwgnI77s<C2hCCl-!O$#zXbsT-GW51*O~ zB68(G2==rdO#bE8?AHJtZ-HB=cgt%iGs_(jf4>SLdZ?BBh}8i2uT~|4K2Tbw+i|%t zHv@gQTJq2Xu8~3KS}LCmQjN|&@aByVAj%QcFYwH(K2x{8Yg?M;@T_w)?Oz|+mE#j4 z@u_8JFik+00|l#7PM6dPCMrjJl*fNs!G<U@gDIAzrvv}-4taM+{CJ1FbpG)U(W#)* zdCuOjFmmW79Zk|4_r01UC*%`$>-DxBH#Z~)yl*3arkt;^D$#<{RaEi39R9Cywppo= zSl3IgvWlk0Ixv{&_f(7KR%hp~d&zT8^32#gtK?!~b0~gRToPmR(EtUT(%-DrMB`Ur z<gOD6$BFlG(&@%E(&KOfJpk6mq{j$V%o@CN)3+;yve=Mxi=yXUT7jy<BYVLqZ=LNG ztY15poWq}_Q5jW96(znOO7W$6C8jT0p3>}JNgJPjbl0lSH_*AtMPd&o!s;{sE^l>l z7ijz=Z$*p!W*z^Lw;bLP;x>#4prqO!z{j)elSGQGc!3<cq<)-3C$axBZ{v=lQN%OS z8J)H2sEscZkxPv{cqu&J<(F9Rc@iSf@a=9)*9~Mr)S0wCS`*uH?`S+H@gittgxH?m zX51Bp83o1KiV*8+*BU3VEPrBgL)mnoZ@P5dbq84%QTMwtl5NU*yH2?#zn?WjEwErk z-%o^Q&1cKegbeNX$qBS)i&jx<>Kv)fu<GeWuE1i}ZvWE7u36;sdpQJp&Rt3AF`a3B znr8FL4tfO~%XcL24s*W?3wCazCbUoqqPGS~ypfg9s7(u_X?p(p(XUqDZbdd_P#AU| zGUvmBg*RpXaSrh?=>G%}-{957g%Nq}--gtYNInzmxi@h&)L{5GsL*f#i}WSh9U)&v zg-?nNgcSNb5`T5SQ75Q8|GD`+LAKXlQHdvfZwhn-w(&MKl8V9Jx*<jNju#UnqK*or zQuBbb4D7a1;RaVJv(owE=~t8fZ@N~coOh38Cq*5uSJzKC1MZ-TtCTLo&`#Mgp!J_8 z=2^7;aQm~;kT#PaT}!mRC{?aMos&hEK~C34=VN{dyDWL)&5g4tL;%K%CJbVJk&5TC zt#LBE^?^C;wfc4fdYH(I)lf*rng?dr7#F7DMV7&HTPg{f9tp%ze`+m}|48x5$z-cb ztn4*8v(L!^y5^FA>Fl0!q8H0a4P-{@;i$u)0l@Q9r%^+V))(=QT2my)Vw?C=40*!C zIluykb)^nvb&5%c+L#L@Qur;u(X%reBK42}Ap$)kDdT5Qojc*Nf#@E@u`+`JqZ}!< z0ct^ATI$*SHE{XI824B7KE{XpLd(tA7M!9Un?vbk4Uw+z=hz!otoXuAZXuopiNZrJ zIbF|7TuJf4jJ%`i-id7A$nam{ol?{7o=A0vpYpkQU2OV+WX;rMbtc@wWT~`x(e!Y^ zlyqT+>5Px*)hA8*doAr|<n_^f>~V<kj3L^GB$QVd$eUQkWV_RBZdurBV>PUQS04Sq z2ssOke+N0&0ZOMuCSl_uXq0<3GT2gEhSc{UhjWivxF6t}z*mz9-Ag8A0~vJlFojyH z<Vp5cAXG>zi@`106C%?ZhU1{xONhHfOk#f<*gM`{1ceJO`Bpfdvpd1ScfyXW_vVEN zR&C!WevTzE<|TPz7|91^9HCucfYBlhl%E>dsL%|3&R^VU*>LGP5Vk5r)Ho`VkaQ0l z7?$NQ8q9Fb0M<8UtD|BqnT(8=6uK1s3o(QjuJHw9KcpTmB|0z=qaUuk-}Z`x1GL3u z)0M;hp1iiqQeinL!(DpMW}GVaQ&xz{J5)jFaolxK79#DpIow~SQzU9wk64Tub?>a* zsWI@Yu1|R@t)NIG@Q6TxI1@xgD`!EvY6aLREQ7PfQLd_Z>{On3X0#l9U+=Gy9WM3> zyDkebTlcg(ZIr~a2sY6V93p8Eg()h19raOO*ahX<Z=wvFzqTb~{fpreHHVksYwRPA zhf#4y`E7csR(5Oh*e+Iy7xUoUySPSKyKKz4NEE_OkiVu0(asD*BCR)EYuA+NuLSvO z>~Td|=(DC`Wn6HsPxO}|MPyaacxUlrx-N0jQxDw7+}r78klt;Dw|iDW2wBlWHSzxZ zEFN0cscqa*6{KX43RKxA-bAOR9qRI!YD<(!Y0)0@=Zath958LantTTIb<0b?3AYU6 zfsEGZs%{RoITb|WMfIf^1be~w%!=b$`Tmbm1svd?I-^K7)zAAU&%&Jb|L(Q=Po;{X zqob~)xyQd--K|ykMUh8zYjO=Tc+bj-xx)$wORLwHU6k8fO|Ph?<Dls+M~l+KN1rcU zZ@LnL;Cubx@=hwDCI_;2Ha$%liG9y^vURexz8AQOe6@7F@TcT%__A{03-#1<smM~C zJ-jiMFVlt+jI*^d2T!Sv@YI&=*qK976o2ttycI5~0=teRQ0_J};vAtzM{}mIux>BC zM{(Z1RrBgaAYSU|eTRHpkJbj4rj<fk95MwC=Egt|T_-oYiC^-<5G#u1pQBoYH19jy zr2LxXVKmbHH4cliH@k#yb~L&Ryl#k^gkFSKdp$>7^B6ei$B~uMOh2G0)zjhxXYPE4 zv(B)`#{(Zz-0Glyz~(cPg|rs}EQjbK2i84tuA&rLRfO3l4TsmTp@1p8GJrjR@2B2W z8{PbVt;%}~n1x<q-p2>yuT32aBfJ5Ijs$~EYg1u1l5JKAbdPt&w0%(ltU&YjH}nwe zUL7DUZyoUO67dC^hghM4;iWZ^16#bmcM`^HWMlUSR=u8)PrN8F^hFGv<ywA(&cWbe zBs3!{AHvXy#<Kp0{sMvvyWgr!I$+U@S)!BBjEa_<kz?dXsP*>NoZoFq0enBvejNcv zafG!^I!{UUE5J5ROeO@6x!Lo;@yyPM`tyUzdCb)6A(v3|C4cKR-!LEprASyqU3OJl zUxq^6%YpPz+esb&iVB$pm;4pPhrBLhnX16(aFfjX0j{#zc5$^)`v+F|n!QS5_g0i? zefIrVzT<rWWk;-`XTPDS1+ljb5s>YHb>TL`beP@AsGSm*i&P^5`v>fJp>~i%8XD@z zQL|JrH)DJLMRVw;y!ZTGSJ~HA=aDqzVbKzyKRV)Ak3&r<jk=!X-?`kkVo@X@p3~j) zP`LJ4+fGwf7!slaDWzP5)x)=bf^>mA4MdW#f#RF_c$<|W(7_lDE2Q&yvvNhbJz4U$ z0iZvL;Zj@v?VTt3?L$NamBg~6gcDn|1Ky-M-wAebSbb2F{#*pk&hJIGjgD~_yiSD3 zUyFAA;89CRfU2K>>toZ#t0ykGtGyfg><p%vVSZ7<WfO;SLUH;@wE6jnz-j(Gd&=~e zK(t1D&`|>eo4a_T@JMkS0BB*gD=Tr%+iB9-?L%0DrGOx4hBptiun>xEKSE7k0Qx?; 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%0Dt5_~38B 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�F}fem0=#0$cYx{I1ddN47;QZRpoX4*I0mP7 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�I+=WKZ)QLNxTp1-N|H(CgGk}wXZZ0`mz)YGB#H|)ZD*nN3%_oIK z49Z7c@w8fuQlm{uLXV879M$Fm=9({&196@xRn-Gw7VSi=E2Dm)<>yeJk={zm2(ex7 z)rsEo>A}$0k?Ez^^zi)fzg0<na`{ZK<O&8~);u~S8Im~P)w*g0StJL85(TQwTq2>N zoov{o2cv#1CAPGS=r~*DG!-!*7iv7tT8OwsA{}U^^3K?lfV7topeqVSf!%?ysl$;~ zV}2n(cmg2(p&96*G{g1Dknnw=jZ8=vjTq4<#>!l7BjrejOo$j2o{;`R@hi+9he(gG zV4RjDH<mj4U6mZVs95PbtFZOcG?&H?<H<1AWO9$5P9>ObCZheN_wfLEaQSu<ZO-E8 z1+x4iV~ck(94(Xs`uFgsSRgsow-lR2tV(ftwC_f3DpxP^INQC6*39$2U@uV+BT>KV z%wwg{UfZ7Oq6>FBB^ryy8<Mvfv^EI3PYA>XgsW4*5JvJVe}cjd{}ED<0^uJD!rEZi z=tlQse2QV~1A7l+zR4I#0NfC=dQ0~dwX}j$tGAh|f5E!WAu4l{BowONy1I=(8b=~z zNq*B;`W~^)c^d&g5$uVPw8-g9a2WF=Zx`fRg=W42BFt=eI|%xRa#)S}7F0x=?xGW~ zw3Zu{96Aw*Z58v`(WgK4hz6Rit`_eCZ{arl;U4FA&+cL0b!N*HV&g3T2#RPw3&Wk* zs|PUZGaD@$BRov%h#BJ7KsRY6SVvP+cY)xvg48&x4@P9QNIp8;xgqFfCFR1(kx~&8 zlSzEO8P4}pPk|ie6Q<om%@o_j{DIs_EEAzM3CDRg&yZVlW{t;z0H?=4$0{yd0TDw6 zetA3sTO)%W&9k+z%++PuceWRW^TKwGsY-P|Kb1nn{2>PdO3OOG2{Z8p-GN8(E&WiX zvz?4kr3UqgSw}f^z{dbXnGIonVpd{dmQ1I{{A#ddV~LMl3{nMs2LGEOzb8@<5{qnw zPcS37a~BjcD1iY3W7sNdtQte}(mN<uyrCV*xs|Z9<r^VR|IE#NDqut;cZ2l`N*O*f zUs!0hGP1<-`DZ03A`mBoBqOFP8lIXa0j5_6$=6M4WcoyVI$e|rghOZe!&R2fcDMN^ z8dqqP0=JTY4C1%+!LE)Ls%z_F+M;$Q!jiajgX&<x!7jtY98NaWnX&qO+MP2*c8WUz zS)+D0q_W(2;^2vsD0na=K&7=?9|uYclE(TjNOLNu>sv2ndh>9n0?ObsaVvLQdQ?R! z!X?UFNcst~FKBbaw)}X0wa8its~w+{-x1#lY;g8+d5C|X&sP0*!MMe^`2J6ij%Jw` z=V(^Dpvv5tIc%Qwl>u$Tg63YC)h)o^c@F2_D@RM3DS{K!r&nZ_rWD5xjMSDvzVJcB zd~=s-nxa?ccz5$TnTw#Mg+%nU65JP<nT1Csv;``zL#ioM2rC=!2(&)lS&<>2j$OnL z%dJ}T&8msjFz5IvoG!vzn?I2L3Tx?#Y7tU|wZg+ZvB~|RWc>Rq$~NUYEUpD_f6dyO zZeFvZ2ABGb@pylh0vqQtraAPzA}pd;cWtHm<x;TXN8)~RLt|;;DbcZ45CE-r1bae^ z>{fj26Y)~g@RoSWdF*b!Hy=eq1N|tZ-o;%|fH-U!5vID6q{d!YYZ7vI1}cmXc;P4v z$P53Z9oR&KY5vKYi+aU?i^wDkI1CPy`12=-d2-)B6D`x1oL8BA4>50%;B9J@$p~HV zQ)BY9fymR^pigk_Giu!JG8q&WfOm$Ctw`5crR^i#1y|EXq*bdjEgr9)S+nP<5m@%) z!qRHu&a!E3&FsO3Lk#_l!pu=Gu}I55Rtw#}LT82*=iCY2$Iou<&t!8#JbonBJ@$@y z_fc2(;osTnbuAAaEviD%yOv)s>?95C{S!aapnsafhfK<gxdg4uO>*I1ORQ{tF06HL ztc2_BF!Zw8usfg_d{FLJes~k(@I{Wf$UbBz;sme6yL3&{hy-K-)=(Usxz8x^p+8Fv z!{@bnd~ER(vrR6lv2V|sSpMSa0t|jMLt4W=^(H!hLHk(B*O#hGj>@#bK`v*lwz+}o z+9zLz4BJFtxnVafXErQrHt9dTg}b*QqwS(yhippo9pj|dH<x|Td2)VvT<@5ZocoyL z9^}75_#ZO)<h1wyO4Qaj$Rz$EKfsH>#Y8`PL7r0t<Ckrn3nl9Ix6xi2h`01wijJXs zv$1&gsEfQV@Zg5`lYGVu7SndrL*6(doThYQy1mbr;!@#P1mAF_^rp!6vdjY4DM{4> z@d-ev_bTAIe}5evps}h6*`yn^-}1HtTRHVe>Ad%T3H;{c>0Qj_rDfuSLa~`bw5u(d zaOS$Vklw#l3m=jB3?Yf07~_<c15T}MaVwEGn8i01stH-Dw(ESf{oh4Lx*IL21yFPt zFoA#o70JKFMfyi{{G&GhC)MD?^`GpVf2i(_K3#bWcdTjleU%9Ay>bdSO9dW9h$x!b z*<mdA@7w+<Sa9HzoCa;(n`=jh<5Y_IrKBGj#036ztpV(3H+2uE<m|n@pI&<4bo<=f za2%sNHiY81z8;*%+z;sRHTf#L!TSi2V!m1pohQ7tObUt*9|DrJ{d(rU6U|jmlf1P) zUk06$(UB{@hl1)5ZVw0_97e~OlZU~@!4p4}r5K_LXfukjC$#t>+9ktEt5}ut<i=Sw z{IGI^3j>Bz1Q^r!l=>Q~AlGDuP5c+ikjk~@&|6fqj?#;89x6wpE?s<`jsU)+OGyfm zxwd?qpKOSyZ5XP8wY|pJOTLjkg<vO;r;&mTe99S&-<HQJ${%nx(-*)}6ZHvTg7a+7 zfLw!~%o<`cE+E%nr@(j)$TfI;v5ul|<8<oySwm(YsJvUMC7WsGd^K4L5LnJz%$@~5 z3qI>7wnBfZp?fB|VP$;k<PI`Ur160XbY~*GIO-UzGb+lyx>a;hC|0v&HPc|XAPLva z+Wn%*EBFPa7I#swP*rTK>fDndP#ksoQ%{!M%4@=wE}LEX#%gr`sxYyr(H6dicP)5^ z#0hgB^x|TGSpR5?2enV0s}L;FBcDI6<a*p;p+9d^OqH`x3}CVmO(!@Q-0HWc{2P>- zrSJy3819zi6l!aPt##vQ3kIOs$nTEFg*z>fm}lz4?hFh6V-6U8bB<0!r(wDCRv~s| zEY+&bHSw$62ucLXM;Q#3e=aOYnd<}^jkl|%@x0L3w4eXMWf|(VYWw$JWMVlJE&B&R zuGTPzF*WGdE(E{j5Og_6Gv<m0%Z&As8Zv(TI`|gL>BMuE6pqUFXthEdsy#PSp_tx- z9qlcy8@HxcJiSe5h`X;emmV63h^jr_1B_M>z-pKnmo4R<=3W}*1WE_J8w$I?E9lV4 zgUr{YSOECH$NDrqR$)hpxJ8g^#L_Cc&4NcG|A<HHi)DjC5$hC!avm8Yhno-{6+6xe zBBeR>bs*A7PER33mQzwP?qj9)Kab5=A3U20r{K)XrUf8=4{)EaB)#Rwa--Au%{t5a z?drL68uC$pI{|#$l=XgmjCG{ExS@uU34`KZyh82Q9LRYIN1;e2q)+gbJgXr*0vxTy z0-m5UA>%8bizj7|L)9P;CfXZ+s=6&_5#3zmzS>W+;NCdPgauV93w+NZwHJqBi=Q^K zg^S?ftv{vLoP&}vl*}#QmzYHL0xRe0H?vH(otPhE6)P4;YCEh{W=DHkrmlI}NDD@5 zHes5*{HIKGEbMWQs_{**>f@~|LVDK_PX2mNsn8z%wHK!JV>){7<tkhqt6=T@^KHL+ zmbi#;+U3tYGEur^Ok_9wf3V{P_Sxcp8FvsKVkb2>$3|ciJa4=^RJ<`;)=$S;2MuF_ z$mT##)gSaTfM8*P9L<gdg;NB*<$%{D3&KC^!E80HlT~$gbjQ?lO1X=syGcv!hUXdH ztj(3YM0ao(D>W5ZK3=}p%5T7)o_j&kGXRLDUoUIv(fiQf<2NZ{;Q#!}VS7gZn)WN8 zHz<uY?bGAk;k<F-8f|U|0~mrb|3d5=fC~z@2f3;R>1apn+k*?TUDv1p6*L5O3gzpE zxET&nzo`ns*Q-bGTYv+8m*;rF4TZAtF3|06`lT+3VeQc@!gyA{ta^^G2R)r;bo9<Y z;;J_Hk`s~v42q6Dbt~0gI6iR{_G$GJtCJ=j2Mu2!eUEzXQvn;FuLc-j&~$qEHGtWA zN8|>O3s)f{K+UXfopf8~tV2>PM+Y>6pp$P0e}e=vvgYw!=A8YK<Mi?B<m~BfYum|y zse9$~g;BT~idW-+Aa^rlm$+_H^*``<y46)adCyG$_Fr?JntURwP@C`dIVz`DbC}o6 z`p|*zfu<K|q}>cZ&;v$ba?_fcZ_Cjg5TlE5-@~9Kr*E?!zwQ>PWlp<Wv;S7nLl+6w z&Sl;$3nBQ=#U$YtBlACV^dW<Dw}i{S-6Bi6=VeHQte(H(v_RA{C$^b6cJ?A}ptbCQ zwV2SZ#pK+cBBy-cvpk{L_IqR`O_&vAd*jNdT6x9u#vCcm(;a#iEtuVU9&)gL*DqlG z^(S>3IMRd}RRC~fDwyd-r9J`VbUy^-_z*qZnBvKl{P=k*To3Q)$mX?@Md#`z>7_D2 zYMaRkOubD2Vwt{I=H^OU7jceL%R0bXVd&ZARAdae>P0I4oc8na9z58!<(dgO=CaVm z15%mdEll5Ef93Y_6xPGeSz@$CvGm(v^oXjXk6y@*XW_g0=N%5n(wFuR=$N~YE(xNd zZCP2Xx)-bEEDl%)r(PMP@G%tdA^}7(u~LVAeCl1vPp(1KGOoZFXp?v`xEFqEda(C@ zu-FPT(V_PR*VjuV>N2Ei*-koXG1@U~wpP_g1LNi}ajK@25T9L1$o+M~jI1V*M2-u? zy;awwN}b{_<#+Kz3BrGg!bi&!5XeIm&~Pp@V@*%|v9KK@m5IWsSW5~rpd^{+_R*Yl zSw#4I(=wgD_n~?@tx66Nx9$bWx>Q2ti{S~HtcBxlA4S}n^@Ai62Cfyryl}iqL;Wl9 z0Y}b9Ymn`Pks}}x(%mS{LkACV^6^8_9U%QDy6Sp{UCE=kKLHGV+r9{|ND`v|6!nqJ znF5;;GA+erTQX6g;gZJRWXYO9rK;OiY06?SR*V^MK2-EKzxMK|h;BsWBHAD>hw%a4 zBp`;P4L6r>bB9DnY)<q5KGzipW6~6L?lk*#DuRU1B96vkv-kMTW2bR)aGrDrEK*|& zefM;kv|##b{je=c*U1fiu{ppcbj50wmQUjS6ZyZ37F<mC*Abv-VNv_{VUGW#(fo_$ z_#a_3m$|yG3&I$q1rMq<^Yb2Q5TcDOkRvj;0mcxL{%7>#qQ4{TrWngko;L-$VKYG@ z_%6jPT7r9WKQ32gGY*6*?sxWFTVF~H#2mAUg$iF+GKse|k~3K19AB!8_1KvP;>ZPZ z*y7fx5UmqXJ}Zsy-~4+DR<!3>vJDX=-8RWXV}o==+rw+suQJVa4nKQR#2OG+e9IV7 zamLSZ@2Vy1C$oq7Mfj6Z!3(UYUp0P1bfQk|;WiNvIFU^V%+FwOm=Bk2VZue}{_YqA zGk$<5R#F#RkkKyD-ynr5wHkw!>gFGx{4koM;2iE6zTZkO62z~9;#zywS)1QYw2^9~ z_~9gdh}lE>h<^eJi_+PzzfD0wK9v&Qfz$E5m8eKJ*H-FK4BJ-(B+q7yb>gB2yX735 zYr$<ZC@@AugT-#aJX5gYWT9_$uL-Pu!#jL*IJ@b4DobW!>?!(YXHC}>IVT#@YpBkj zt}}?5<5k?)PI_)}|42BOh|dWFyt!%PNMH|{Nz<s%EeDcn>wJ>+E`XFs>k#Kl(c%4l znY>^4YrGW>M+39nc69`-dggB}J6HtO&$c3I4tOHMKT~J!#x?|Jpjw0kg&wob5avX@ z+}{JuvV2##h2`AA)8|V<sgO%npAMWh`a=iV)PIxvv-f+UsQW>ISGNLCYO3?dQ14-0 zV~c53?E$wEQ<yp|=-JVArh)yVR<hJUy1eibqitJ9Ts9(hr+huBzy>MvgA_?>iQD9G zZf2{;tUJ@&Qbgx^aUS#6R&H4gtJFO%nhhs4Ih2<2@G=*bX5}D^o34xcAa?qRW;T+D z{ZUtqV$aMNmK~3O-GzRf1rAw$sDLbE$&GI;sA|DL0ZsyRrxFa57I$fNNdqJ$Nuo=b z{*01tM&uAl3o7GH%I>I@(3~wASbX#-Q7T{PhQGSL8S2VIqrDjMgpP*lc4uPk2_HK; zNX|RATeW=W^<Hp!oP3<Lbljse>R7B?r5`ELk|xm|?^5bpG1~+%45V2KMYg(IOZck` z`kgt$Ky`VZ1D2aUSWBaIUN{fLk6SLB4rOf8i3pY_nXJuNQZ4;j$84mI9o%NnB~<5; z`mz>!>nTdf6?)mh@6V$Y$+btL$@Y&(1vo{j#fVxhBbAw%lF}()CYqdJthPRUa|5ph zDRATr=C7ap)W8J5hwS9VLAYSn1Ph&|;2PXz%9DTasV4!?oh|v+D>Lr6K&VioV`4t| z-2^>=0uaa@>Bf}cCtpK{W&4g9u1eA^!Xv=v=#?BS$kls3E;x0n`_}}`$QZnD?+SD} zp1%XS@0~#SuMG^q5X7sAuaEXhC2?A=U)Mudii7Ps<8~RTQV_MD;R4;QCdbtQ--TVs z1YQCI^WiuPee-8)I3Jlm?q$$0&t!>mcTb)<#4~Kbnny#B>EZaM-ankjvo5bsN_`x# zqZH7m;7na&#clY)PSC<m<i2;Ppcj7-B6|?87UaGGs32WF4JuH<Z4jqOs(zN8+gyDo z?LNY*71O>ws35+La{L=Wn75`GiRVDKH&x}!Qe*`SICpLKt?#&PqWgG$M{n|POibtP zT~4GQ8%36iy3uM!Sb+#s&WD=&6US5j&y%^X7J@PXXsLXwTk(5eMlb38aOIsn|AH3j zCyF-tZ8edtCTDGuV%M_ab7;@H82J{uLvL|U9WWKHS8n6YHZN|c9<Thiz~=Wn3K@o; zqym)~#m^08^DWHrgwS^QyDgxvJiBGx)qT;O+S#jn1v?>lViCBB5$hRQ=M;H*z*pv& zrhvMz4#YgxQA-rWtUmjt!nQ|zFMIEc;PQ>%{U?uxN*N<n(N=x`=a6r&pAIQg*`Xmq zPo`)b&b;r@$60?YD9+mZlK1<ExO_Q9vhZV@0ThGq<ZLkmx30rANIOU^GjwfIRNJnx z-(C2(BmD~ouVYvCaBjcHEFNv&yqbGXU@T2Ye$J>DeZg$q$B@JByKde>?)CU}w`ndQ zikPOo94IK@gtwTRJ#06z8tqL6C)t(0q4qusJHlUEad}nOq~rdC2MP)$4W_FI`&~R~ zlQ$4J4kB6WkZ&+y#8*2RK~P)Mz1~%@{EoIK<hIJ0a>M|;j!Oyclb1C+_+x)G-5zD) zt<Q=@Pw0DhgnQiY4E;$Yg0VCD*eqlDGBY*P4;(X)nNm{V;bp9+36=h$-=2eXRieED zRS+q~<(p)aJ8ZjOsn{@u8PYCF!G5TLwBk#t*+8bNLA3Il(T1!M8qtR6U^8QiFes+S z6t*D)fQRtRm_klSIdP>NuyV2=@}R1yOFluBFgDV4z*P+Y9N4vhs}h+oMQY_dGsF3T z&-}Z9w_){xxAAB(Masy2058Mbs4zwB6Ip?;MFM|P!&FvW3HT~UA@Et;9u;Fq%xH5q zRTSQ_!bp<Oxw1&3ERP22D7}Ru)Gs(Gb7#M%ve498ysV2)T9$DQL@COzG=$Z`H!;H{ z(RIIzpnSS|+TTWHVI|xl7!e;5nZ~fK6S7m4;buQ-nP*mJiLhC#u;FMhl*apZ{2G{T zW$<82p2Qz1eF_m+VQg^5NTO}><Hh1B{)7R{ilm8F?Gi%rr-#V)Sz&M`2;v4$#(~i6 zh^#<d-n#_~duQCa1oC3e8Puo4iyfq3RS6sz)FIa(;<nQ;{egT!abDkuQpEJai@qsW zUwy?0A=kkZOCPX_>vk6e34xjcwkss%fJ8N4sqq&S+sPs7Y&_@a+z|r8uw`UZ#I!i4 zhQVm$Cj~=<K622A!(%>_v-oktcq|c=9;D*_;8CKJF1T^5-!OcLVlrl)3h=8nfv)B1 zM7|7H1&FcYU!x*xqLx-wE*LD#;MI-$c@f=cS}?xI)qn6aYz9TX4W2r>WQR(qB|DFG zCznuxFAB5)gt)~T%tO*Wxf>1xOf8zJaM^Mu&kCz!vRTadQgg;n!1V?<8_a%q<^OL= z_J7Qkgrjn?4*+EmH4snv?|L~t(*N)&&HraYU-o|zDzy;6FNH4%5KHY-Ko?wy3Gtww zmz3=&u-xg%$K}BX11%}mdH#b?DQthPC7@GlCLVD9ge2I$CX|4*EC03+&Heg%H@J?a z1v&bnVa+om@<uZLr!kgdl;_<n_>d0sl4r(<xd9q8CpLfabMLu|_<~yn_K0>}HGlc1 z?uzwvx96E41(Ct^(wiFU+%o*V=F|*c#-y0In7YznlunW$2fg@gdSeH2og&c6L9KQu zvH%h);T1*Z3XP=;;15TD@}X5&*IKJa(Pyb21Kv-hJ6_rVH`=(sC+-hp`@ZVv248uE zTi1cydgE=PwN!f<0M6<!CSS!C{skna@T{~DoYkgulN)Je1Sm&s#YtTn7QpYqgdW1< zOe>Sc;+o&`1E#aT$sYO(7fOHl)~cZ3`<RI>_*?8G?E>r(CK0ynIhy?pI1i(RqT6vP z=1r1Mq2Dt&;a>hDM50(d(6^5jz<HLN_kXVTJvHKLM(Pd`w*l&*aa?JY+W92yaX>JJ zgK5lHg<HU9OeM~mP}%bL!SX#D2H)?fi{70n5_30UD;ez8#XJ2OqnjN-C&wP><ZOgE z5Ol@dqO`T`CNjDn$HDBB<Ie>_>n2`R%s*NAZuHk)`m1u5f&+{;WatF@gImGY)PECE zqwY69youdu(Q526eOq2U?@;y1nOXOV^c6EQ7`$7OhD)0Io|tFs!x|3@UpY5!-Gz@r zgRjAb6p{-1m${F(Ci7rBi>;s#<kxltk-#ik94RzI7VXhE6G!5l`bR>3z_Srr$q`pU z1oHvQ^8rG|ZV)*3+;Iq)g!2Y6g`2x?Py$6ES^;%|NkGAaA0#2%hI_ObK`fGrDet{L zF$R}Lqk{!v7bsOsxPaW?1&kNA)L5$s{+eKF3DNEuds0wfoIqySj<X$r8i&~p`Zov` z>#$VcH<o=OR1v56Qc=-7j=*;Bdx(Hv2Qs&UTPMoZd^OS2-jrYPdpQ{RTV#{p*GD>t z?tvlM%pl2J{lv{VDL#dWf?K{d>*CvCj2!8E2@9WRLo!doZ!so<5vRDV=L%`@!Ije8 z-;mUJ6V$*^-5k{@k?z%*wxws?o-daO{qQI%^p|<kPYD)1^9=Ik6!nc*WlG|@OtbMu zr=ZQ`3D^>HoG;G8m%y6aIOx%T_?Fo;;^bYQYXVqZXUjxTP-h2~9ks+K`6r_~R$U|E z?+bdT2ewRE;l}1z<>jWby6}1s(&w=A7T!h0YU)j6A_TC`GGm1%{AiftegI_n;G)i4 z=C@PURZk<!d2^MEO1x>S-Te>*g7<UF_Ap`ZDRPcw6z|g*&i^4&%1nDrw;2)DX=_d5 zm-QgBn2A+QHT3OzW9%HD`%E&cU*N+Vx4(L^GT07_r}{kn8J~QwV;ena2GrUbYt$!b zPfyx04EQ<APo1T+T<XnXpM(1I#%fOv`*p#Nv1~Wv_FhXm`KisA`?V>IU>67pQ)L}C zlo9jODmr^_<%@NpO7@mt(G=LcV-D7`3q_{r=W_kr={w%P_UJ{HeVq6SfY#CnYiJAT zyHg?B05LL0GJ0VLub~Io&?h#Ez1JSI6upVq%ut#h+BElTm8eowlg|8(k-vJ#Q;#T+ zO&lFd4#)9kZM?#`{bz_UxmQlJZ!P!K+0V<BZW87OJs<f#YJeEKyWJHk@Zgs=O43WL z8wWW3A-Drry_-M3FL}@*1;}I$NDV!x)+)r#3|bH$@B+x3Y_fMJ+F7IkS?NG002j<@ zhBLr&ia&qAX=sDk!OJ`~<saDFr6D{^zwzjmMk2?0`9`qk(8~Y8=uLPhxQVjD1xy;W zS@SHFg;=D!zi^<-tok`XJm{^LUhS+db145@&2KsTGc^!RbxnUW7AWn~=|a^f50@`N zkAnQKA`wy_yeBcoJtl@ZTpG!*L~=&!5+}j=?ry*PPzHi->U?;-w|L$12=!`U=|9U0 z(+Ub`p<+VhGc+PI+66gmVI8={e!ZUBc-(3%Zdz<#&OB@aqXs!exZcjoHM#}dmUV$q zgT!CkINicy4sd7aLgo;H%Q1`pxJ3xj)`-vnC;Z$qGc8}41(M2>+qJE^*zUNJuPvg6 zXPIBj_XgG4<xyLIZ#3hGp`5JfupjrYk&)bWh=6_bXQp#tEfe%>Aw7p@oKEm_RjzYY zomR3ABUD0CXscAaA&!E4*eK1-vjbPH$K&a}5(W{CHkm*m<>GPkieRHIPM~H5{p|k& zQc6;8##S`fLrf_C1El;VCXnd!%z|jHuV&y|s2SegO!TvQ3MlTt`Du2QT5SIpkg{+} zQK78mv{R!FVh|q;FXA}o$olZ+r$AWZ&p|LB=YQEn(;*c=h&RrYx1Hpu<m&mC$?I!S zZ$hx3t$>CEGod(B2ne@@p%kND&iOezwgD@tJWychZL+p1hJ<nHtSu3YUs$C1>g<$u zbIs&osQ2V))OBv;EFHkE>D4&?Z0T@@H81&8^<<yjjC*Ic7Pr~Zw${ljtuihbw`;>9 z)t%0yMsgFO8%8_bn$@Bu&y@{A(A^}JFA>S%D2xB5v$?eO-7-!j;f%M4VxE!~Nn&A{ zAcxvjPHtk!0^dDRT6BPWK0>ZE5iP!?zO|2gmN`*@S0d80*x#3|Wq{FsA9748vFx7a z3KngZt!e{hyCv%kCSFik5*Jf34rU&Rp(Gclgbn$gZhc&6COXjafR!)xgl26@TMu5+ zEvp_^Igtvb2AvmHTl(7OU?f2R2&3seCF5XklFg-0W{MY1fnO3VM#z8${TGN5hLEkO zP%-|785K^H48I0Lb#-U3fxP6SM&&iIhFeZA)e2brJAqoNFm1?cV6-GXgIO8@(iYN{ zD4A9ryEF$R<dPdxJT4xcFZ#qXB?tZc4v}hqk`FA}ig#*lw4M_tx9yxzQmzEeBO0WN z*IeP?e*Gt}8w3R3`M<}8kp4e5w`9$||CJ{4UnrFSEElYoks1JIhC~2a-@xs$|Lfk^ ze=auz#*+NkypU5DAn!XUa8MOyP#7mFFSUHfjM_TL1qu!7d6>E_C5k&E`Jg;_cT@Xi zDtwV$l5g>MTf%b1@|8~d%1_tV#?_B4hoY6ur)#CR$yiTI`O-tgecMiJoQloGhT>xE zn27n;LQ;F`vZp0x%G78<n)5j1xGPIj>QRMZloVCjv$mGj5qs5i4u@^lNQiZ(9`l6g zAu0FSR6{|5dRr`43TJZz1%cwClgc`27gF%(*(8o3JrwOHb0NdUB-AnIAAF*@-0t!S zxS1JDsNpksDlTVug!`Z@h2O=*6kZ>+O?Gcj0e>*gu@*m)Q8(~Kkd5zeJ5x#qfsPeN zcIg6Xe7o7&us|dUc%DggsBiEXB#|!?OMFAJ4dVfZ4o!*`Sq2Io+?nx!;4$-Xf=x-~ zQG5PkBebh<b{+l=`ppl<2>FqVNNBw-v>Q8rU05k=(?yUZobkP-)Mh!MTOK6Y*6+hQ zrKbJ0uNyEz;kSP?6`$3<Xj-6Pka({&n(|KEs6vBwy!zYHu;~|ia;ND75$K+jj*X@l z3C`Z?C}>=juSj1@);4&7Y}h%8vlD}>{>?FNB7Ql`Oy6gEs~k6+<jSBU#;igdZtU^y zGDx~A0rA_N*PyWsv8Bt{)2uw-q_`XIvm&S%A8~q-VMB=h@)b3FCm^q7)$|cVxw~%l zPVyTU;HUMXD>ZT+rfQ}WkYufkgjHPk;6M7pQq)FJOhg#=(2kavr9@rej0fi+xWheX zz^+0v2NEr^vSY1f*CMjApYOut1q0VJ5~nsQf<7W?1u|{M4d+oY<{HErrxQ#|RFV&e zf@Un)VCF<NKtySPgcgkzeuZXj6_2sS?gTDz1MQ7dGRyt?LepTlM5qEv&TU7QM1Xc6 zN{<`nnuZ`O0bx98(o2VWPJUy1hD1aTdWFChB}In@Dul8`$q4qsJ&$~bnpBe$!BtV{ zd7m35uR>7<UtSy%GuW?|Bu+3o*oHW`+!}(#509*S>ze4C<K&KCUnLKD;*yP1jwO}X zh^R_gr0?RcOc6gj1S!&AqX#I1OBgJ@gM@}e71aFg(Ey>I;JUY~=S_E#FawKSIMP{V zQ4wl{dHJ1NFIZUL#5ZH2ki5-HLL}2s=i7*b8&7M0R$*pdT3&Fllh$Kjg!1`-D-M-j z56E%0fA|AWonSUYtYo8b>0OG9#vzw_Rtl3TXMLFVCP8zy`l?=}w~P4H*$BXg@?<<f zxPadDH!Dj40T}BcpU&RfZ;3n)npB{akE0^qE;2Ydq^=;cBa=w+M%GLs`kq`L#bM$a z`l}S>b`_HLEL?pOUiW8Wo}*72QtazY3jk7U6DU*y`xZ3t_(6=kA&smtz%y2WNh8P& z(W6V|vXoxaHt>}h7gwxZYvjw&WZ~fgAqn>jF)I-|(@%dwFvU4Oq(8No^mFzpOPPvc z{s&|46sGIeZCQrR6}DH{w(VG9+qP}nwr$(CZLP3TvG>W!%s=a?s&o5Ye3$cWbId+^ zQ`OkR&02mGP6oLVY~>BYxxAfv*nPfay}Y?S$JdGij9Bvx>7~@hk>&kq&4%usCjgkx z07!=a0TrNHdx+k1RA0^wWfMT2H6Ys<&OYQDQ(@#zs$JXzCn(j8pP%&Ffkl}ngAAxp zAZ?B_3XkM%N@ap2+|9nU?#7J_?D4B>3R&~*wOv|c*p(37-CB~wmDcxo2h=o=rdr2` z<_R8@)ay*D4S#INF)q*fKQ?4HgIe>l#t!aYsM;8V6oEPpo3+?V1&YhKh~~7Y_Q{rD z1YA>(QO$bAo?z=5_X{p^Djt)KmFY_8>CPa-`-mgNAIk{p`|bzesj?M64cf=EtjYp3 zYx?!?i)+`SYZ@1Sdx-X<Z)@|W3_+EyKF9O>B^3!Yh%+aCFI}SWxe#@|?QO-rCW5k> zpz5hvGg6)($%q%KFtta^GLwwdp2vBkfY#)M54w9rxBWC?m(evX9uG|KeDV*V*vM*> zQ$>K3yZkg}!>YSsSWRu)yI{34n=YZ4E=e^~vmP|y5!ay`xJ<F;j05Ta44-(r>vJq0 znC}=OmAYEPZ^g1^v|k6Ut3It{)YPlSY~Bqr=?9+`Re$(|mc3Ao>ebp}lc-tR@~1GH zTtZ0GEzc!LWetA&cXxfD3lu2{49dg0_v-SS80rS6m>QA;iIzQJ8Gbcm*YDgi4?ELr zW3U-D=q?lP^VlKS1lXFbQYh{=h7I+O8GQ?v_1g=dI!_-y9fjPO*u{PWe>X}FKVmYl zCFr47N(ZmB6MxA}F#~~kxCB<J4N@V0tfbsUvH8(thDF8Vgmi6n&J0nfV+HX#LE+R| zBYF>(lgNbOH;`UQlkctR@%Ih3GaIF0oz&x!uT-#J+G!Ss60t}z(sRyp%)=Fy_(nFU z36H!AL(QsNAZT*}on63E@Bo^;J$v}kOGS1o`5fh!K-<{JlqFdV;l(qmDTK(oxBNh! zrQ>fx1tY2nwMl`_$V9x@-(%RMS(9ja#SA&Csf~V-UEgD@QDQA~Ht7Z6PZgVRWrka1 zSj_OjY_>VUaIaDk0DZn&tx9;?eQx|d2_-}RE{Lq+NHl*nCNp>h5wLP+uqLgJREq@m zR9QW^%sr1Ow7|*%Z}5%eryaG^(9TpKh-K6TN3(DPe!4P|7K21n*e&@6$Sd@s@Ag!K z^|K$x4#BGR<mjXD#Xs==*Q?V%I8fFYgMRme10+8z@c&iY@&Cku|5N6hZjmtmk4WsI zCiHPQdfwhijXIJtqFo!KPo9_kCot2(#0&|2`m)1)mIRb+)Yi(_Zsox4W^W%K{J{J- z)63Gir%B_~>G_j$@#|xM%MHoQZQw=08gp3fnQFB3G$>!Mk;haFOX7^1IdaS}Uv`}1 z0Jz|N41GNA4}IX_VthNbRh8X_qFK~N%OpV`i>6H)5h1<8(*5B{s`fH-L|c3-1FZ?} zoZO4z3UQjm&OW0dEIpdg@<@G7joIkU729GL-~RxEWmQ6`B<8})MP`nEV12&u;NZ-M zi~GU;g9gMp@@4Ac7+RR`?Hdb-f*9H)9GtH}>9S?wBsjB9k_MV<b`XqH7|F{WXrW@) zL-s)?e}VGWSVpoUvHoaP0n^c$5V#oj5E^Gi3~7{}$INK1Q{aE!pLk-*^;ZoCyFGe~ zD1m2|Q<8iWky&5?!eXgpxY=hOfOYoql_In%gLqIk%S+T>2qN)#M*?Ra@B}P;^?LTL zsW<9mUFIRsqrogCJ-+a_Ce|h~V{{Lr9pUD<Ci1>kn~05Q#&Pm?$|tKNClR6b3!|@( zaJOLt4))~dJ2X|Fl7Dlcnnd4AdxT2_^&dE%tB5Uy2labd(I0F&K|VV~#9o+u@r%xU zWTfu<PlC|38u}B`62rdh0iovOo&ghTz{$7J8lN~{>qX);Rh<r~>wzaYCs^$3x5Acm z{(u9_zu@3us&YTlTb$zEp8m5AoTF%;YR#@1+P;j(IsFXTbcFDDia*+eB0B&X^w5@; zngJ6QG3?(COzf%Cw}qHrTL{DUBuW8tvq7Iru#^AIM8&dBS6z^uK7O-H>K^rHC&<hH zC>4p0c}H8GS40t?ofzV|RPYE!JUI9z{>5xQL~#q=EVn&}UU;=>4rUFRiv~dQl<YbY z-NW3UvO#yFU)wPK@nmCpRaM|uqJp#(bD{&rgN!{)mE1q)$gENA{x5x`_fz_Qpgwzc zJK$fKwA$@vuH-761u4X%Qk!v+sp=Ms=eQ5EgwY3j8(=0YP5#HcKlrf6xce_Yz*a~H zo$RV@noYHEpkWtB>Y&G0L`ax<64Ib66i99YIxWR>Ml$NyvLFVQ%&)^Gdku@S+a*fa zye`d=?2W&dRsQe;zUt-bzx<Hzn`|y7*jy^=om8W4`Y%7|vG7xK%5a9T9n!>kBNQwz z{>u-_e}=kyS2Gpyrb>kWdBT!TkWfBWNlJ_ThaZCe<%gty_`&^W((x}poc-_ou*a#r z|GxfT{NS1sS@I7*&`rq8aIXq!iXG!r;d6%)=^$SC7h(E{>otrO-x!lsVrs9ld0%=i zHF&8mx*QKt{qxOk`utfeyW0f>n4koZL_^edgWVnb0?2R`(rQNb|6a2KTvFK78dC8n zeB&$hrAFl+aW@;X5R5wZu<Q%XPyZtJ$xr#(7>p9v38d7u8hSWw{Ms4+1?=ssGYd?G zAxg^X0M=vDQ+lww^fTxHqA~`?1*&oN;`+q*EusdH3<03B0aWDy(KUkZ9VY;&&;Yo$ z)W`yTF@)~rz6L?+JwU10RRVl&)h6|Aq6T<wm2%mo3vRQGE>iB#_)(R)En?}rfORY> zy#2!vL_Z8cTj;`XwEizcP(IvQQzn!*4&ePShWPlO3?b|M!w{_h!4O0#0`>pN5SEs( zdTzN_1P)^gUzqJ(Z&mk&wJ(`CI-C(SY+I=DMc@-ew%VSZLp*Fg0PRZuhGO1JD$ati zq+JrcT<Yil3B|C3Y~9sls9zn=D%sF!;dy`f<T?7qe$ke~U;67m<SC1dWJtW&h@BS{ zS}-~;hy9E>l5&LQC$_7Yqy8Xulm4SBqp$hWJFQaiEDYUdcs@b@p@`XkDPl&Qf;s}E z{{NjK?*E|(z5hWGjz1L9_QbVzYH_H9Ug2(sa!|*S)Aba#wf?e^S>L#xpz}P!h8Fs_ ztQJ+)M8|$sjcRIZxm45=0lasF34sUE?#gc)McatiHDfY~q?3`2T(2~D<!PYVIohzU z3z#5NtjKW;xsafm@m-dW(Z&5=ig5d(h}=Aa2&~^&+8uhR?)FyAO?Ej$%h!zsD?d|? zFJB%~K0N-#ej<NI<Sc*fA61!v{nxr?&Vr_GSRm8yP{-6xJ@Xs@Nb5wtGDPU%WMXrP zv%>b2!|99C=>>JFh_(B31{ur?qac+PWEw~)l?upjY7!VH&z1({K&%OH6;tqm;6=Oz z09vYc>d1-NNHH!J=f$OzZx$(R2@mqYF+~-1y?;@{4+H_ecLp5{6pCgAV6QB&7wV$X zpES^GNL!g3MN6;fUPuxB6rm2Qv`{I{Cqpc=&eBAF#ubHf#~{nV^lw9rx0EFD0Yja) z-CDO<U^nbHsXlKig!va?5eeK-y<6z1-#b(4+Dsz?g7FU!oexZK(Vo)YHLBhe%f|_| zzxL{HUt;(RgPnKwZ3bhM>puzofCQE2HHFSwby#A8eRq9WO4CoNH5qdlGl<zUM5er1 zRz3|^`=lN)rlT6OLniz>1M>aHVYJOIW~EH=p2g}n(0_u2CG?s$1QY<kFBSlRA06rc z|6IYy(9F@y+T_3Twi*9ps*qBGfE(P*cgbXhA4Ck?xW@woxk4*amn5`U7fJFX5&Jt` z?RnI1mL4$u^Fs6C+(b!!*Y1A*@G1VT(ZH|WxYJEAB`dqr$weU2SKp1Dt-5UX&NR-( z5CNXN<Z6OYP?PvQTOT}-$IithJln92SJjQ#Dw?ba*phTcHd4A%s;~YzEYmbo3cQka z?n^FF>+bgn^XfKL8&r~70%d;47%(WyELaC!q~R%a$pcILr%BEU8YMur9Vf-Zgjm;l zD%J~;>_<r{XcVB!$s7Q08lx7gAM4%Q-ejkL23`Q@z{YH)7i{vcht$mJjJ?^QKc|)Q zQrhmQ{>_5Ld?9***bg(@gS(&RwAV##DI7{yzD$H>0l5yLIT38`72gsa1Ya9^0$tVf zgdXpuR~BZWaW}`fk0N;hY`+6u>Nm@csht|AsoGvSC_ZF7j;&4<<7e&(lLWKEBW9hq zk?zWG_ZNaHJYGT6$Vt5UQo$d)s5$jWc*5C~3&tCn<~oXF6^XiJ2|f_qHs<<5fV0I6 zqBEOs+$Jk<?d2TqS#Wk$>&;I^#%q+3^RyY?^r~1q=Iv@M@#o*6HO^qv8CS9R=1JT? zuqk_23v-etHmu82*WJ}OA(y=KtZy++AzZg!E<$9keo(;h?}V4w6i6fx1<pCElRu0R zdd`^7N#sJMg;6J^wOp9)9^;yKu^sVkT<=Oc8;DAFeP2d-*`SCz4?F1lLUkIh>-)vm zmC7Hlmm}zh7v+i$nG)(>AOY4NCZ~`bZQU%Qh)^#o@4kK{3GW%zuE{_xwwz0f@@OfN z>oDr~L~6L%hO&?mMiK=d{~<-x7O$<YX98fV28o|fgP6^^P73<VJxlSfF-7f*#)$;# z2HsaIr0;=Dq~l#Y&Giz2ROZbg=Hs_rH9_tM9RSu^Qo7CawyJV(FAV{$-uA{wc$rX6 zaqQnXnbJnSKxdQ)r{;;mE>2@kFADJ#56!1EgZSs%TV059*>w^Z2vf6BE!Ofha*%Ua z{`JCK<=LahTHyS~SKlx>>DPJePyg`n_n2R5-=`MGxM@e3_Gf>BqIc~}vpGa%eQ$f2 z8Ha()=4jY~M2(_BQWOxw&C<z4dGN)L7Pc+{F@OkV#*?%f(!i|`l<L+Ir$cQ^jM>gT zE`Kzy>DWIG?m0s7wh<ty=y`rJ3Zto0{|RqAd(lVnkmvl5EJMX&GzzUX|Mm7%?{mDx z47w0lj@HP&0GWpiX#$eJtweO_B0?%1+k9elxzp@u1Y~2+{F>qBv8n(aQrO&ytE4OA zPrCe9@}OY9LT4T1+TxfMR!{`F&G_8tMhy9|%gI!cp4j~J7{sxzkiX<<5rN+?A_$Q4 z=zKd@R0;<|flFgSwjSQtdMnXPx#(1uMvikiWWr2Al{h+R0m4!#+0lE>=#5_eUivIa zsvOA~&d(f`n@qD_tXC;*Wo7wzc}|Tg%wNO6HVp0t8*B;N5Alb{lwiYoKtv4;i3J!6 zO^f7@#1h&mV1Z)MyY_I;1ZB7!<YvN{m~&0qy>ltk4~JCKa9812%%B%>9YdS)F+eFr zwXWQN>}?gqmM$TFcWDXh#zB-p55@~`ndRjQd%*{|O#5fNLq?Ri*lj|q5fY3dSo~&e zXZ^?&#xV*`!Qi?!wf!zdDMn-X30pS)VGIxU23u)PIEjY9M%}gAM}ceYmJ}^h!faon z-zhJ5lq?78)Rp)oy3ZxJqSKD?Xsx>_Nt4wB;9CxBES5x}@%FIyA?(VlK$?vJfzBM| zFl&NPElyy8Q^D_*WWXcKM9^;*BGfvnKx92w+yHdxjn7L?DDDC&fbVq{Kj?Q6?giRx zkWG963bxhk=FCoZ)D^T~>%%@W@*bLmaZkQ6RO`RH3q0zaOb`x~O(vzHl{P(Q;8Ei| z_*CncpxOJpy5mmWdtWE6GA2*C?fZ?9)9E9~5ht3!?di)smiFuG3wyqb?2f%*W>Dy4 zhK)*o-yb`5$ZbH9>aP27X>w)HuZ@NJ7%*7{pwbezwlN;81;CXJyw))p0G9@UYa4qP zG6>IEe;DMuVV$rXqoX6Tnnmm}n%wM9P8_(g*>t#H!E5q5U4EhdHZ68W(f4sH`PqUi zSmmT$jPk+v6czbyhbcHD=jFl0S)a`i?F+NiiR}Cl$PGT8EtV^|$_Qf%kg7UhZ6j>& z015zn3!rNw(C!?|KX_VgC7K29>I2#fdkw<a3+`atHvwdA+dU0HNeN(Wn{M5Qm~ylG z0%FpC(H76-dHs9~(q)+ZdnNuP8@-m=&Py+gk>~Xf<g|!cuU&BVmer9$(((%@Tg-(m zd-XuTJj;VpdV>kiIIlZ9oA!>ttxfGfQQvsc{M!?NL+>^`7u=ZZVm<Mid|4|$%{DTe zS;Xx1z(a3_7n@%8m=0fyd{@&oT1n3Rm4(&v63i}2bSgHLE27v~0LoKe5cTZThQFru z-42)55S6w?`$c8PL0fyrCgeEFKLIC2ij|ORGT$91&n5{TDte|OSpHj=*-L*gC- zf#1P_Hk{m|u?x!f#h*1lQZ|V%>#IR`g&;B<uBu+i$2%K;ZG(?hkU5LJPnf+S0GO-2 zMemPCGvI~0ACIk8jW230&U8NYsz$X9@K3;r3%n{bqIuug^W%sp3HY4a^O-FyHPZ_< zy5^Epvdg;@#$b&rb>szL#-zqmzh(9-xrAzJ<#1(+J{n_RgXZdNVa)`v^C0JTYdCiR zJB0m)0k)qkt@G|DF#Xq*(RJeG$H_*X`Qv0`qRi0KI3;qkw85`bmMLsp6Gmo!%JCK1 z9%^=zv3J#G8P%Bcn;kxbO#q&-&J@1ZNwdn^I;msUm@<6Lk=enXErAgeh5ikap!_fx zq$=?fZlcjlyI3Gb(~QqeqX0RCaGE0Y__5gb=@z<U2D2hfg~&^jX(w~yGA0H0i`ZE; z+YTE%0V(TXr)DB0bsCD<BhR`T1c@D11QOKng1K1(+(lJ{;Oekkzl`&b+!IEZ2!<uF z?fZZto(Lh>P<g)C*A0*zLIL*qSQq9svo2$UcosqEPWk(kqq3bgijMp-zC#o`p3I9- z`OK2!j#4_J3(`t`k&l%3ksxUy;7WXQq%vRf_itd{zu9S(A#x8Fw7oyiqa8}pmI0qv zpnb!Jm^fteL(Ff_@M&^@TAMpzN-;a)43vgmnF@R*-s54;D;;Zufw}5guTihFPWVQ$ zE1{D;xD&WJNPDq}1(E{b{;St`!^NO4Mn^$Q5tOw1PBP|G7XmK)O-LROs<+b|#Op4k z3meE$W4gNwq(FfhGi6R13f=P{m!r<TCX}X>ja7?{OCO5c{Qi6J(O)1MQ&tQMmwPW9 zH)e3y8W%ago5~PZ$73F=RV2b>X&%q=6ZAikvP*eUOb!$PKp7qYfa1S{l*TspR{!#3 zmx|TTo;bo6m-mp~Z9QbV<?L;J5h7i%tBF71E|R@L%kA-SpYuA(pwEdVsdS5g8X$pH zlvlUMbz6iNJ824D5BsSP2S;GZrwZ-f>1RR844kjy{>#8s0Gs!w4>oH1+>;D8UiWW4 zdy9!KwrrV_xd-RM2eRv)C<o5utyNWO1}ypsF?Vvi`iFUuc!%+uwz$Z)qTNZ(4@r{W z-0@}ocm2+nm4_hbYB8$b=G^-{hU`nh8`?%8SssH0V)B{3$MvF8)s0gW&_L3VY>Bvt z1|0kJ5)g;!@E#GK(q$$F(;!g{C`zPtcq7~WgMu7(Y=~d3qSGlT%6AW-Ige+2_P`&B z(UM~cY*cJ01}5<yJIuF}=s?~$z?F@|vD@r8@a?yJk&=e6#NqlM_b{2_lP{`XG;!jG z08c(O7I6v{nS)}5d5LE7>%uZ4jsgLRlYb-xWcp4kU4{qh!eV+9HD~e-1QkG@f_=gx zO{KrSe$AZx9sm7Djd{4xS{Rdc*%B#ODNZd9YIW1!M#jWIfI0If%?}sZ6DsO^%H1sh zCJ8rzyS9B_`wpl1iMDAbnF#LUDgy>N!%vsH|MJ8gFA#QY5adXY^^d&m)nF4>!eS~e zhO&ZpHk7dgdZ@hWj;X1i0Wc8jx7Z&%G1$NI`hmA^-pPLpMbV#JcUcHzI%}nNkg*pL zB#a_$Lz8ar+ragDDQJs!pI~`l;kpcH+9XLW_bYEBEijTgbyLMesKEo&)0EsP{YguW z9fUH=po)>H5#4)%X`;6P3i<%4(M!h(k(f$Rtn*KF%P7Wt$y1>+3eI7WDb5-)75At= z>%{i!AzNbVgUM0-%>2HJ(t~p+Qzh0!$S<7^Ud)3F$H!S#S#h{WK!~U_IrLY_PlT&j zkTn^Q`a&|nf31YH-cCC8KA5nxY6oL*plQ)mq702n(=*5(26D3UkZ3pTmN0wb{CT(5 z2^YsvbM3j>Kav3lOI)&Pc8f{@gf??l$Y@2$;dLx1mxs%e8C4Y%87^WXnTpkpxwJ&0 zB_lV`_PzI;kF?-@@K`dl(sAlo3NXbEM3l^V#lE`KBQb>DCqAs^o*B%6q1_@dtB4}{ zwAj?R*xhbtyS}<_O%X7kHqp;6KbmABO^5s=!SSPz=PRv(hQNaw$qY*<v~ly}gNV>D zA%=P;89RxHX-vngo*9iMZn{pgPOoCT6SRRts)kjLWRwK|yA7!POF4j5+%Bd#Sxsfq z+*(>_`;bVX#$jQ_e~%p!Bco)_Udt9bq@+kO-C_kjbM6Hns<p?%Kz^BR6k!Tw<hpz) z#=4HAYw|`{E4br=aZ{_w^@cMTe#NA<gJr;!WF+J}^B~J8_*t2u^WNumOKbo67GfJ` zOMUG2ngjb5Q3e)nGpuG}RM<k+B`bZo%T;<q3*6<oq}7Q}QY)gumj=lSzW%04;JF`) zA_$UOvUpWrGT-g(UD--F$GKV@IxFp6Tz^oT@E%NZqtoL@Nh;A^(!*Q`S!DwPWN~A5 zNP|x7B@{J!Qz0Qbnyp`2+G^?NRrg-L!V;pV>=UT6`ifv)U}EL7(#W-Ee&ndkr~5A4 zm7%l8HGE{t-3Bpka%q{AXhruIHu|ItKGp%pQr$Z!XVA&|w&%=Gt9Kj+*ES{2{oTnn zCNjLsw(=>%8t7RWu`v^I8!+l+{MosAVnL+nDyGJ$Jo9QmkbLf#eQDC`)!NEtCnlcX z0Y4jsCWePvto>|M{UDG=2fTu2WSeE;mW6Ft$Ppe-0Iwt{-keyVb$V(`<_3jx`b^*t z58iGAIqcW`JMe#=%Ua`eHBCQPeLhYA0LuT)x%|KB!ZSP^)<qC{zngi7l&==$u)<2B z3~m<T*W06Tii;B*IkF}RaBS;l5x4ZDHawrNvv7R@0gn+)u!*+}{<e73BsG?MI(%N2 z-<ouR^)OlQ2z<s&w6Ln^8d6<&?Ty!0W3BLu%uOCsRXCgY&c)R~57&bQ__33vZrW%> z?NmiywhK#&<*dy+78+#!RZ(1j{n9QH3=0_Pl1PyNDt8a|zHS&P*K?3nkTpK66@`VU zDGx4`RgmNY?hy3kH)^8QNUP5)YMt}|$Z1y+bZn))>IMl`f|XM!2fK)8X`&nQjh59| zveTZs579cO(_i1b<W+s!oM#SPB8-uU4&!YnSo*2(C_3qx(+gnIqVVO3vz{qJp&XSH z4#aL(Y{Bv05J1npm+$NTTOjdV9*NriOmy)Si}`cSzmY{MrAQX+_%MJMmm=A<v{MTc zE9ggo<|icHFyUsOehA}=$6pGSHV0t=-P>3SL*;?ISUBN%3^^v%%Pi2<x-E*AS2yfo zJ~Df6ddsH9c+NfAQXrVsjs@~7u@bBJ@L8JKCc5nlpkUj)cBuoNWJzL9DPNe_i%Q_o z)sDa`oN?5<w4W*H#ytsH;#<v=H+wq~Q3MEUy<l;LHxg0lkz2kN)7p=ClmG6K6s9hg z#tZqR1Esg6fF)`L=RlS~#o;r|QVcEdsl?kQO(f10<QggBX>5fbbm}Xvru22&{Y79m z-uhV$&a2uU|I2({w8%zMNrwLxqO<z~cL<sM=DJldX7>yt7y<EWXjsb6PPh)^;O1<W zjR7ts1k6-z(Qnaj0{0B?6crzdC7T5w<Qu5MOfDJc=2e%*E7ZFl$KBG6z+H!~Cd%D@ z2l3c*dK1yG1RuE51jRG6HHN7aErm0q3N(BQ>_Lo@Q!4Njhp<<$ftmafAK_Grk^!%Y zE;u~W0gDzSYNknkltp(n3WQ71s5_`z62}v(ItxEz6T|;uXLhE{6SJ^Drv5D8L1(Qe zMPLH=2rW;m-HZ3M>(x}6iZO=@E$&DKe}W+GR|m2xUFEU=QA}>DV!>;{zP|`<V<-kS zVpiV9xGel`;BWbvT<gtKTnm2HxkXMy=PuHn3+7+tN^~$Ue|ri&W8Ss)F$<KRkCBJ# zrLQ^6t>7Aqs&ge3p)f-$q|+(-7>bst{`}Mztdq=!^QySDBctlaw@zv+oU|^({B+68 ziA0v<#VF4)`m!qx#NiE?A-Zb8c?>@E8WF*?NG4$yZ?vL?mCyAby&d?nx8gFXagOdp zIJb;C%_mV+7BxI7k-BJ)Ow~seArPaDUJYrdtTVmv^~OH)+h=kqUS&(mc!G01tgQ>h zSbq>{?^c3kBQkL?X@6QRv9|{1Pq5wCGC#WYZ1oWZRlL9R0d5jFo&_+$a7<qBq834~ zf@oMO7|sHro702j7i0fEKrZfvWM(#{YlvC0b%O)N>GMlZJr@h|0w5=Wn-P<(h!xQV zhx4R(??yWYL*qchdaBh*BvsuI#CaHnY5t?hyU$M^t6)aNd?ow|=FWqnn#f^1bS`{s z>A24WQHgL`*o?GTEDXLkocU|9h(#HUuy178^%)}FE36yp)(I*8dA_f{rg1^S)C-so z5!irVsoSDIr?aMspn4adOlj=EOSG0#4yqW;3ypfK+a7+g5(WhWHnruFUeScfR3t#r z%|(QXD&vD3JA&DYFX_z1X}~5i0WD@!9AkV$*@YfcY@=8d8@#SuWEsM8iOAU%2M&ZQ zD#I!Dw9OE`!zDPGgQbLmp_@KFU7#rQTZS9Cu(3ot!|hzT0Ler<pBv<nbpD(sP9iT+ zOtx^v(aE*2n@^gwelgbOeK0KO01<MLKpp%+8NFT@^Na#7QZCYA`z9>_Y)D-u(>Y*Z z`nfc4{m;x1&*M@SQKA2BA9qGEX?V{FyR$k6wrqrYgM6d9QMh;-p5n1sfZ1k+lAWZn zGb%yhqN*%uU1B^#4XU5ElwYv2BrOQd6c}7Hf#g-v*rqYz>(KcjbZ89GRB_uxnBbmk zOD5?bPrP$mof%q2beZNb_uFe~rhp;<h4cQreg3L(M&AQF1XqN!tkq`|bKV=s)Eso4 zh&|a@#)bxW94c3r@4iV=XP@cKR3&CzHkbjAKK9lkX4?s@p)AN$or!Et0IErVNnRn} zAW+|u4d6~ft>fD=z}KWHR5|IW4kODZ;c`w2;F`z5$(c<{s#X$~C$hw;gUPbAog=1f zX?Kk3m?MmZgYM=9Cu5dft=+GE!McSN_5hn#-btsiOOg&`z@Nn^7rzt__UtyK-VaRQ zS1kb4WdN#6pxRb2T{|@2B4z;AV{cMG+#0}E;T~HMR|W$VO;p>6i${psPOx3nlrs-c z`(bWRv3%wJm9~UM_sWo%s^HVAW76mN9PaHR&V6^;40tJ-_2|aXnMEk>D=QL(BUaai z%t0m9sGnWyzx~>;7(5R2uLLsJjt*Eup0)ksx<#Je4m`auwJusQdiCxS4TNg+Ia`Ei z6%OE-n%p(bzDt~&1%G~I?#<>c?+2In7l*e^b#qE1At&*&&dM=wATrB00gRlv8Atw9 zEkCZUYD;4s<}Hintuv_&>SqumG{*%O)}y<NJjyP84iv=u>^hUcOAG$3TX2!x>dY)` z8;ZRO0(#_t8vMOC9`}82THdhy%*!e*H8hmDzhxyT=W=RaS@SmMUiTn#Hk<F8BQ4;o zO+hAKFE%U8Ny$R~YZ>kljX%p!QO&(Ao0<QN4VZwd5<{Dd8F{{B5<+QiQM>0eg(9=P zjAeAVWR>0H+F%UECa3hd<Y!EDK7Q7sUNo{8csJtlnn&1J5Ny(Fb9l2p$3`Gh%Gxw8 zSjrCMz;&AR66sKAuTQ1-P+9_7#x>LWJBCR~u<MQ8IDht>#C~mPL}H>Lk;B5U4#$GH zyd?PsZ!c84RsV9eHn*L~m@JyX`3>H(MF$<NGudprNm{q`_hRnpo6F0C&nMD%TTe3* z4^b*QA3BoqAoY`q{a(MC_jlV3!tnlXSU6ESVhwVb9H6+wAejr7;rXyZydI1%gnqT< zb!5oK>jM}4&nxC9ivPKZ=%UZx@rL4WFO6(H&3*seH`@322!pc(ptI)`2tFTFf$#a3 zSG1rUS&$hYKcl!2{bL<Wx^F^FONV%70x|C)h*zWjgO!*l__`F>Fxkiuys!)`u%0pW zmqCCR#EH$;XIQW<QsK@Rv171yT8yJ?<b57<BZhjfrP`+<`YS9rQys!|Znz6=mgrAO z%Sa`I6*TZ_TCApSsZsaJ)qdSaF`~ymb+#(*-BCdvc5LoLrr;MH=cPUHTs5&b8@vzN zrwL^|Buvw^VY)02N%JTXyT8LgODuNLY=41Usg?w*^cgC6*eGzL_+u%~x3F93{H=Fa z3q6=uN&`WJixXmHl$~Za2FD|$Av!XsEr?Eh6`UG&O@R>_HnMd{Bkj=-YQ~9(QHF9j zs_{J^yE*8BadzGCKyqa;5rGKN4ns>)z{y6u#C!Xla>XqyEP@B=X>-4Q12bFJ&(WhF z*aM|EZPHL;j8InfwH3MFQh?yauH7b3%=>YPMjp3#z3Y;r#Uxbc3<%r#&^oa}C8xsd z5D&Rtk9^-+fReLIe>ePaQuX~m=@$S1`~S$_690GT_di7N|731j14z<xumJ!>9sZjU z+@F8=zw<Z$rGU4g{87NaQ%VJy3M4do;R8~G@=thio3<$`jgE0lJy|&qTo;?MeQ`Rx zY*vgN+#>u6>Nf6ray914#+X^1-n;17ce=I9EJe!m>6W{oWS3byt?qT<E$s|#NYufL zi59idJ9~vsY4&q{Y&gAEqUw?xB91{LSr%nGkUEYNJM!|Rtdo;!(DZbFTuR9w#D(|* zpRi9p!dwLxC;W5E-WdLe#Jyt4T#@STQB$}MTe^PkPA$iMCW%UEFp6i|;5KP;=oV{# z>~<`HRW>?1RJObQmuz(OcHg*;kvvzF)0GNs?p}p{Cu)uTNZ@k{LzmXL#y;SKH*Fe> zJBqBLy6Ls&-Gijvw-5j#p0;)<>mXsof&%gphrH^uS@u?$_?Q!~4r);>Vb}zNygqgc zVMh2F0}82NF@dC{83ikXJKG+VYRU!evYRI-WmxTALczg7tQIgqf{<L2z+t)EYgf3) zEV72q)V=`n8bb~leH0*pYv!>8|5~Hw7`8g?g4mJ3&=Jg6FK_UAAiJ-kBtTFh<JcQ4 z6KM1hWOQll5#%CZxUo?i8#`B|A-P+nXc+~(Q-qE++E{}0c~k^MInMR<HPFd#G67{S zVOhhRqTc1N>%SeGAvF;`H$7W8$crU8VL_8enn`pdxu<i+J|{f`TR6Gl9$);&^zojA z!{RJ%B1W<)uY^QxA8c_g`pkdWtl7lOlsSHvc_by%-8ERI3F%i363+ZCCsP!Xqaj`M zH{57K4<E9J`3QLq6@v6<%(os&OC2wiE0IpM6D2UF+Q(00pY}+UsU|tp2gIorNd?|k zQ?&Gtdf}i{^82fn*+4(dLcgaCbq<i4tARec=>o!ds65K#pGH4(z1LT39BKt6jMIvj zib$wlVvj2eaES?6Dn?u{gj>R60|9db7HDe{<6F^%bo-vu!Rhm>L_6J*p^H|Dj(0iX zPDpA&R?)3{(m{84p)$0tkq}nSFW98NDV{lU(ohXRgOo!23A*lP!>eT6C>xcO4Y^G- zf(=y3jT#qBpW3=~*yK!KEuL-D#O@GY9EpKWKso5)t%H+Ill>7;&L^x#JU<8Q<JrW{ zVLafOtOzZ)p}FW6bJpn)xfFC`;3rg*a9V(Eb|`_$<Wh~Kl5f?9zu{ncz^0A@{+)r4 zxnbRE;%-Gm)o9ghvN2*K#ySOsyn|^YsF?~H7UHt>bdfpIoMiE^1YxSB=XJgry1uOa z8vqlJulD#X%>=_Nb^ADGd1V&`^XKmclOQt2TP-lWp&-xD1@s%;39e*eO*;FVm74(* z%s*-=pSUylQ?0I0%8i<|$iD6fCMNnhPUqdOSIoC`{kLzJmpIBLZ=5{{n)`O}>JPGc zH?l8Ex@edey#wrYR|i}fIYf2B@b7;eCQ>Sha*l7gZQpcS_Ie8OjOW@3-Bg9{2SPQ= zrgns6j4ATtLLljsZf1m>R3(2aMD%w}I=SEjoiT`~Te*OyT;*o4uPg;9*P8k?MOQhF z)p#F6%A?~NLS8_mC)FcUs;!o#7HQ;(e`+9Wt<7wi8nh6UZx)adzacPDy|e8-1!d;j z;16y6+#_n%I#!{CFDsBT{9in?NApW}g^VVNPR<B25crKT^r6%F;^8)+XjiDCZ*loI zEcRB=`LZTJ$wZZ&6~eSI`BzQ?D<VuJ7^`$iojH%)a9rNYdJGxfL)**n#e%rD8co;% zg2|nEAsj&e3e{;+)nmgj5KRzMBXb4JqDmYmVAQ%(Zc>X3M<f=OKlkpmVeB$imR|w? ztbj)+7|F=yN^X#K(?wK3jj77Gn(3sM0T$E>)bF_{(2Tts-NtzX2exG4+MBYGvlcwt zCC^MXN{ywam(X*2O*U-9TurcI(yp|je((B-0YxV^(@D$(p^o6fvO%7J%R3ewL#qNR z6^ely1U`J!qktd|5|2TpMso?~4)8n+ThLbqM<j<cGBa=OmrFexLj#LWaEwD>Sk$1I za<oA|WDqL(^I5dRg#I>n56!#{4gK;3JlzF-AY6}DY-w%OYJl@oR^p`}{B|Aux&hXw zz1L8hX9VE$mFckMe7-k4Tn$V-cypv8ov|e6%SCzOuvGICLRaisLadb|5_A@L_{{*S zA+V5SD!uPP#Q4c!Jl*7lc(Z*&_GtwyF>vEs0h*)N1-gu}9)R2r#4XDJdErKdy8CA` zB?05Bt09gzlEkng-|ySd=pCCGLTn*%3yA+luL{^~y=0=vgptrR#Cd8z)^NlV-y6w` z322@5FL!2E7GlHK3z6;O^Zb!#<y{w#`?+eC?M2na(n{5mbkt61aGxQ3iNEuaOXq9< zz2WXG2#FL8m&bR0bMmS|Mm@Nex~94Zp%LxO+9&6L+jx%I9>C?%k_hxq4&`w!>fIA2 zXGMuh%ZEYUZ4Jp|r-ad#JBxx?ac<!-b|%bq6$u<3TwgZy5z<q0VPxl~U<A0a>!syS zkhf@G9$KL=`8;ug&z~>`Zd#d`;5c^rpgf!9BD%CVwq&yi+dcrr#-QRORPB)OpE4z@ zix*HEMv1%8L*4>6Ge5{9)HWzbQ5;>XF%Q6VOav|cMChgk=k$#xE;x086cM}g=nLxX z%|)dut9qpA-QQEw=F%2ZQ|ar@P93wO&?bc03kXbtJl=5Q8doFtH~AQ;K@Xcxp@sMC zRKKW5yJ?Zfy|=KD*S7*&+I#q@(JEgWu+d=;1VH?kZ&NC1;!j}!l3dr~EIa`R=8wE{ zf~7^Is?65R931Ix?SNsnlq+cxef4X>VpjQ}ppUzoxlvfVhkUjB$dsr{kFR>oe}nwB zFZ%tV6^IQRFf?rpqZVV9+YIiiv~-7n<a=62@!YDQ@$f1P*r;rf&XNY}Uz-jH?5ot$ zg3ueup=`v>U&%BM!DkNW0MlNK$yzW}pZci!dd+>A#RvV?8XRNs#TJAP<;%B+@EL{E z7#?a%AQ5)|YtwN~;4ajMA%!F;h$4DCxjxZwjq%WU)aS`+o{}MSd0=medu=3o&)ylE zhe1J4LXVgyL!T;IIF+HYG@DOl?LiQ<a~6s+xZJ>q?8=!y11!sm-!uD&9UU?@pV2Om z5$DT=f}DpFGxS9=DSL^8SpJN<b+&}i8_fa+hm4AoZML0)iDdPYG8VG$3gM5Kw&**v zg~r7h$CK_(r0MHDz*AN_zAUbl0A)dwS$zY4gju-s?oMy_QktA@HIC|K3vQ@^L5#EJ zSs#Bwn7dh{jYNpxcDvCC;Qot+PFpmK901-(Q|n_2+nGeD+CVcV>lJkN^P!?l9->rm znFqA2r7*t3MlPoQ<!^J<Ui?zDA`}V>Sj+uH{w?%Y_5MYBnNO3V)PrWi%-MS?aEg)z z*IyPOsdJg%e7N{1!exk=V?gS8cQFpiUja~12SsDoa@xAphT}78>6LqUCzbflzZP7K zxYT|#kZPM6C;_TdjkIQ>S3uCgV8*p$H=Py4*iivH9aa$HvMCF$%QO4Ex5wrvFCm{1 zZ1t8Ew_~24ajev3N#6uifWG%nW4xRVg!fSqnOm{XetBADyf^XXG#D(PYq+~FRWM6u zEDT?Gw@&ZQ@f9iMJbpx*d`M29$i??dSg1&C8IArlin3{mwsFKS`E4{6j=uVuOh)cY zs%sTV^o6%i$X2mKZaRa0OQsJr&zx^g)*l+eV39OTh-Z_C@6w%0;rf%GQcHimt5$&+ zj#hHw4CS^RwR0T!YXM=_`Q5zP#}VJ~qwA&d#lqOHF(!cHhH`EiVeAyEO=m;D=By&g z7UT1J8NbmZO@~IT4Ix~ILd3E|a{+<lmjdHnD`4mbwm;$8b)p;KEDcoRSctLue;POH z*!>x{s@1JkBq-g4_xR?kxl}+;fIJChqz6{Y?zK_dSnr3h1?nhqTf*zx_l@u2=0%ax zTDtJh22FS0in`1lKJwl(K|#z@tVGaJ-gKFG^=CaC)u8hiDYRE*-wHU?uLCM<VwmR3 zl_*utRA*_=EHKEa`aS&tmFqGYftz2Z^yRV^o|1z%V&*8X0MS2&NOftYL<{N_Jq^fm zKVFLaL3kw#Xw$ex30WQmxvDm$zqvTh-R*K*3OGpP3g?w5(&c_RqVz$sjM77V;V&1> z)e`>xCBYK_2@P>ZMce+2oQCwuAPpGJYr+05jqd#Dq9&1g1CCSLdC?_!o0Y4uqQoQ( zH<9&3Grj&kOS6|V1(+ezYB{gPsY6u{k9rGn6(=?8M}`vZKhQ6vSzZufvAewI)shtU zb=tgqrrYnaYts1*Q8y56$FbKu2wQl1EAP`nXduvuP2*D%EKj3i-GI!{4tfr%Sjq3; z8y-IeZY3~>r2x}vYa;FxuhPhka)$p)>My&sow1FwEK3KK9HOUVxukcMvTTETZ$rLS zE#ppZ8mp?cGn<(lx_9FcZ-;(WZKU8ku&M>qat;L(1hC4D0d^9jtMP(!67}T??GiHO zI%<1yBw)LIrxIuPeaG>m(J5JMjvODHudAUH$_8P$0N*+Q1?nvu|FYQ;yfOOL4GP(z zWl>0(03-so5mGor%w$N+FX5R4;$U9Qm_vNxx7%XHD0Pmfm#X2~9c#r^R-cbKsM#fb z+vou&*QX^gfI3V;Lx!x<NZma3QeSt%66FCzas$e=oY`yz%D6qQc7Xvx(ge#fN?j4q zW30%`9tQ{+gf`QJ3dO<Nx;YI<dsU7Cl;MlMYRyV+J?=at_DhZBsBTGa4+-%JBa+bq zBGlUWvL$R3-Z-@8mXJyt*Utv;E6WCBEYPnIlYJ$4Qwhu2?D>`5<)<v<+=IP!T&rzV z@J^MLIF2X16ZKvJ%}oC_+S|YYEbyF!;6Pv^k-u(Gd$|lpR9Bl#${+42teovE5)9Mh z3>gCkxsat69e%6Mi@qbZ<!$LMM5_d@D+3-_Toaac%<=o|!GP0wLp^=;$=7~t?d-D& zkK8&Kc!6&hc5mS)=-`*7(Id6`bnU@=p}~Cu8xq>JUr(y)mM<<Y7Sy2Jod8*PK#Jpk zjiV6F1Rj&G;ihcYO;LaWGE@a>+(RBK7A;vVlES|O+n`Q1!PIF$0vE9%N^U5qxJ;Fa zQSz}h+;L{#ow%2oyv`A}Q8e`Bf#-_zS>{Cun6SBW$IOf6g5lJSJtL6uM>u+)Eig~) zf)RaPhL&9y^IX>hox--0BJ*k|BZ_aK`m4wuej#vsc;A91K6d_eRZ#{Mi2P;}5@!D^ zCjJ;c2(R=!>HNWe1hHXoHVsekr3lHbkNAA8kXfOYd~<$Y$MsVCYlkuG2C-_yKzR=k zw#C*C^fBQ#m}S0UAJ<hr$6zk|*v04yIEke{I8S9)sTN>mnBB#%ZgNT0Co3#J;ZyJI z((xXsfsfgvzp#F+&Lu4|3r<ZH&{zz*7HXWb`)_GRI5r~Wj9@vQJ}GqRx{O@PdM+}( zniCyqlK~DuZVc8kGfK<qnS4rQv|R>jo+5FF3tCu>^fsG*tt!1NI$D?P2bb&Tvfbp) zaAJQJv0hbH;Aq)h0JE&^kpaq;W@5?ckdPOWw-K`ei=p-`ySHc0kTsGsJo6|>3v`*B z+WBGJpmWhr)}TZ*eOXCT#K~V2r8ayorY{Dn=9UAl6rhM@LS^fMZ6~ooV`5e)UD(2u z_!Do}Zk^Zz;2$%AT`oK#$i_TPakn~DKF}4IpJ!tkUtkt89lDzcN!xQ{K*=B*nYkbF z(U7=KP-G{*diV0oO-m6o)#GNF@d4o($gfVs(@4LJsR4PFJYALXiyNr}CVB0IJ#^m; z_fD15P6clXYOhd9#cX;epWk-_TDqd1-Z{WI5a8;a{i#TK>af&|AA%QeC1|+`nZitQ z=iVeFtRk=SyjFENj*3S+kAUF*I0P3FG4pAiyAGtRfvCTTX2|<x;3sO3$sKaV+yaEM z*PE)iyjcV4R#Lg*Ap?U)-uNK@YW~a7!ISVD?uduL^!!G)Dpva;7-SFX1i?UNo<%D( zP3PF_Fq8u~Rjzjs8Nv(IcPEg}SB=Y5Zq+*h9SNn>K+KFa6S>l4^}Dqm=3|oc)7;7r zgBObeMnT0H>4wKjjw}~Y9Q-$n@vu|V{S=$s^wBK3Rs<2pi;Wii^FF$^A{>WGTho~1 zY$r5nhcYx*4!o~*tid+zFj3@m=_Ef&KA|n(0lLXw4ATHa<eUOSAl{w6rZP-KG7gHH zZgkuTBt6QrG^I*?-yI@+nHSPs;XV=$QlMIWZL{ex997lhLM<9qw1QTMLvlwj`d_Wj z#ssgyc<x2fg(hmmG_V1RtuN*`2~Ky^vx8!w_?nC@(kNfUeZfkFeI{e!wW|&Ys{{ zMWV&4ahhZeW6~aEH0<HL!ws;{_^)BGs{na+d-F|hUuiibxro_&qM|1^FN5CR0cOsE zc(K((PuzBc8Z!fMLvl93<<D;=wUWeI+Ti=-FM2r9VAs0r)B9rv<F|(DS77Xd)YT?@ zze7uT{+^M3US7Jm{o;ZGZUR$BbsLldbLAC**WGE2mZ8@@F-U!A1e6Cxtr0Y^C;#0! zF1@TCgM~Ms%(a+PJ|YukIv>N6$3YlbiGHcd@PZ(OF{9KxXq(XiN&)H>wNW)J_q8VK zY7GJhLnL4Lu68w{&n-!sJC;i}o$TonT@c7owHHz0eqD1??SA^b?d+-i!R{N^lG>7) zT`lS1R1KA4zeH)vT3B5Td^+D?b-x?cBL0*T!7}#UCVj`6ybMrgZMn^FC|3voA3~Tk zFRX!cf4^l*!#uqdV0BCZ<oHw!bz3U)#lK=0M7&P)=P~Qs<ouhl$-uhPO=tl?q1KEI zngvZg8w^YG+89ZN77enkW)0X<w!4LDpt)^uc%+;YVSo9#$;!u+!)X=a)(P4ykzC!7 z#|3#hhT^5fX+62fyDVEK2Cv4Bzm>ymZ67ax((#<kA{(EUJ<)!QHPEsZkqNo-JWn@m z))@VJ^k50JtpGdSwbx0<HcoNQ^8}S?0YLkwx^LTdk-SWYNlC}vriaI=gYk2SoVm?f zy;}Rg%I-$z-VcuTv&A25thtk@+V0a9$(W=(Ypy+|LQy5D8cx*GZqGH}`|4_dyyx@F z!)Op5{-&0fPK8r1^XQfw^O~X@dVNqLJ&povR2NI9Jv5a`VbxIyFOz$z<uMOrlPS1Q z9N&We=4KVpyIy5BupR3Wj1mEjcn(WU-$8kg1xeQs(Ni&HW!OrYR#kQC%Ae`ZnT-g& zg=w`9F+h{&Vg3uhGF63wrRjEJkpE(s6GSsY_XC<t{{ohHX-8$wo?nN%z#_;g;QiH9 za6zsG^nKB>jZ7<L!g?2=i!a=+fUm9Au}n32c}*cCM*@L(8b&W~4PVE!=)#+ZpXCqm znC52D)G)edG9dDr)}wDOw~Pw@CnXy=DENJ?EXSN|>DBVg_<{6*Qd^Cc2ER6XpO0q- z=4j{I37VyB#mcH>Abr(3*B}e@rvMm+0Xd5D;>~I}+G=hRM)kPJ=B}1gQv~yciv0NE z=0Z}C2Z0%pXA6x89E|JSdTBghEqc0=x~Tp<0hN2Gv@MTBf~TW76d(R%gL37pP|0FW zy#6V4L8O$0#sJ9{WVFXYGaX+TwF{kW7wpOnTt_aCB`G*;SE@DK`KP0!BCornv=$7) zvh;InhpOBCY6fS3>1oyi+HZU)5ACfThfY5&=UE51!4c1Smvp~^#k39)kkV5`db<au z`IQZf`QnCd*lD%LMjO}WX+zgNgxlb5?Mm*hKP#!$g{RJ6rOg8`aP-}Rk#$Xix7S)! zgYe+sO~5#+k8jt-_PS%sb}OhmfUJYk7i%h*%PE~NeOPM-X@j6)dMD%H6~X?0)f4a} z%vNESgDa6_87y(K<pzF5z^oVuM(;Y6LI!Vj{CW!1RWXJEZw!{Mpl+}tHJ<!rM*T`P zXmf|d5VHnL!dQ1);9?6gSwGFtwbF*c(!0Y1+u_XM-8E>@3@}|J?S6tqd#*yOTU_bs zSQz@#^7m&c2f9ggxD@<D1MFG(g(d_G?1763p*rvWO)Q^Xc-2!EAsE6295XeNcL*09 z1Qz(=3xgvm8chyn229WyYoE+NO;}zu%1ntBV{btRpHA0g><YHE5CU)0yo{*e*jV|) zL0xil&4}dTY=UPTY6m9B6(il0R<$<Ph?oK#MmkffC*a~R>V11wb%b?;zZG-;&D7R$ z0WxB^6(_kuFQv4yxhnP6o(X2VYyCdmy#)AKt6~Jw@YS;jvEe3pUA;nP_o;(aT^F1+ zMR~(fz?osEf7YG(*PEzo+>AzV8x+Tr5y2VXR~q<1<KC)5*q6mrbHn6%L}6E+WnCc1 zFjT)acLQF*hQi=%)HF_@D6bJ))W{leO}Xuu0W$g()Pl=ES`o5UH&dI#A5$b))8qyc zZqmhRX<=j8A+^@fzn=zdNbPyDe>OH^_C1i*Q;beaB@Iv4A)JMFav0Lns(?L4B0{?U z_+gv}jlVAYh*@rUf{<cQS_eZRufqrMMI(qEkyy*7`6mrLPyVS^K%*?s+R!(OmQ#7G zoKODLivTi~o<GILzAY`;c#@@bAB4yA73*#P5(EV<av%KW$G0qVC!;-}uL9YcBT^P@ z2F|*?tu{Xx>nqpNQ<&PR=$J7soP6TGCFUm|zyVJJiMk(EH#mNLP>iiNTXNWA5#&Vn z(8Hvelz+Jbce+~Oy&C`K@;2)M&!%C4&W^Epi*Yeah|#%UvsR{&<k*Joajo4k2Dy2p zn8?`!a3r1@{M#>fnEFeHM&p=E-_u+?bBRztFc*?<(X;-h@a!IL=WoXhvtyF(9WT4# zqLLRUMbAz3(?_p1CK!!unZix>>re~@!HLG?>G7pgUOag;wM}6m;&H5cWz5^z0|mRP zcQDzLzF{s2dOOH7mbK3x2+U?7xXmpZi%w&ykOPK#nzjuNP?WL2Sz$I^P$(HlWAYD~ zEP^!2NT-A7u3muY-5H2}=a(t0k0?GqIe@LJMOj9wzRz@Lyq<2$I|Z3NWoLUB-uKWO z@kA@|rc?Z0rUD}{4ga_oTeal~yT1oK+knuPl+<^t)Wrr{TXVDhdu+dUJbk{-Ae?lK zUjI}x@Jj{S0<jcGdfW2Gf5U3Mpct7ZWurJOE~$BYpc~x_;+6{@_L(YABlRc&PRX%^ z&q+k(43RLa5Ap%lva=ud>lI$Z?@>-|V``U%^+U(O#YAU!-cKWePZQKh9fSmF_No-} zuedB$sr-b=X)j07#E6Qo;h8rcQLc?m{7$!wZweJU*TTY-YaSl?qqiA)vL2m6Q}le2 zKEWzT&xU(npPgH$o*O0~SNHi2J1tVZ^lp-&xFsB$)FCi284n@<FUsC2NVIOt)=k^C zZQHrhwr$(CR$43Vm9}l$wr%U=Uln`Ti8>K=>psl4IY-Q=9&PmA+t;l5+lvGv2~QaH z;;;>n80Sf+#sFoAHD_1XnTE!!lW?L%g{D)2ud9CAcrD8TAil}Nr1^{7zQ~zj)i+kq zCtindd(`r(HMbc1OQb^J?SmcOM$QLMT)&0BBW!NOr<Z26l^%xi7uhk9N<L}K+M~A@ z@S}}*p1aLB+Sq5-oBONNS93Y*TJl`XJcnt_SD=S@#I5ut@mqp;vlzGZn&pOJbGvx8 z<cFKn4GsJ}fguW=Zi(uI*74aSDlSVfJ*g=kQIS=S;TNB*ONh2hJU;}ZCEre}*a!_V zY0Y@7j)}|SX~3D(S%SNiAl6%DZMDE141$=^<R?9?@RWm8d}1eZb|>S)s^0-A5F9&x z3xxe-T|Kr4N^50&Z+t@k*RJ3{)6$AeLHt=r002eo|Cwt2ulXkZ|2^xpv9SG_cXnc0 zI2EuxwEKY?aN#MBFW7R=)2U~SHf}apq?2tmapTE}5g1VS3IGh>u6<qmB=qc1ugb=5 zN`PF?wLkvqdaE<=w&*}6bo;%xE$6*etUGcU5q|M5z2~=YLAEEJ=zLlAnH8KZeeaNo z=1p!OPP{Lc&V=aDpFU~ono@WVX%@KVYb}Q#cM#8S=D;L3Xr76!=f-8XrsvkSDdTEA z!@z<fVOq$ue~N6zRwH@!rEV;WCa08x4R~VHV-@EJS3{69i_%hzxL?{U!WRnai^;#C zjVY&xop<Ar<UlM7OC^%Em4&^;E{YUIAtstKEtvi{o~nm#o&*xqYzXF80KrP>#z4wP z*n$DkxYDkSlRj$voIVaY4xYJfIL=StFCP0}O!&WqZ2pR)Z=ZGFU#aju`v-3Yx9_8u zm!mG<1?6n90fGDuv{KRys<~p41>Uv;0k`*qm#bd6{G6Q~Z5Mt?dxdG&bnnaPZf-;E zdbZKX`$q>&ejZP|X9r6yul8Q|<C`Hi8xEyv7R^n7I8YtGkClVd8Xn3;8KOUM6!o)k zmq0Zu0<LKy(I}^jEsT={#)t7t%?(868AyU(#)~jz$noT4gzh~01g-E{Gf21AgPsBG zQh=x#xY2;Q8WJton$V_WVvl3Of<_Fe5B}7;O@DSY4eKIq)gC6c9ujv@TFzkZanfw& zp`27AIGT^lZ!q!yGQwiCXp8)1D=vW$G?Dw;;Rs{eblfg2l+kS>g&d!+7g)G_aZQH* z!_1az>%6E`q!#TOCHDQJ{%Js$ot326G0HhIsRr-`=ey7wiQgwXj4B#EE^rAsgoz9n zr)T<4$<K%h>(Ge(Bzk=VR+E+lXgmoNUtnMVXm-t$WE5O51OC#?-l|@sbGkSB@tJ@q zI3Q{fOoK?O7YO8vXu<$IHB26(W_lb+0dW<UQc-l7mZ5{`K>}MdZM5fCne>2u?YLJ1 zOR^R5seWg*XJ)xJMV$~aI|J(**Q|Gx8FbVF(l1r0h}D}oMWlMw@`eBvHXd>886amb z9-_Ea6%4jA___0vAnn#kM8ep~Bl2^^*5__n53aDlnmq3*p>z{f)i5%a5Ry8!**S%5 zXzZ<m5V0%4Y3}S}A}kX$M{2oje}6$WF2}vP<^kX~CqTr!`>1e0(z6GEmtqQkwXx}8 z))5`q`Hn{6xx@t9R{UZbYJ?P;N!%%&(~(uOK=<wSTM42I{-BfJp<gV8oT*TrYiOyD zO&;0}D~R_RO$~11nK2JW$CqrRYpc1l4)9cMWemrZSrUun!POY?jL!IwF2a4eYAr_U zZNjKM0MH-)#5@U5FY<uFgI~@-vrXe+QE}yN{3taY$Bsz$t5(k4&|rr|R7~`yPTcqN z95C+=b=r7))#ln=sqc~CujLmBBR&KRF+l|TMN0~h6bsmhWgQ5@AISNE3{()d%3}p0 z(vsmwX%%{cg2|Y~b)$PR+9=IzE%tL|^}9AHi{UVanJ_AhtQqfIC1%5JV>PDr25A7~ zR^eHnwc55pd_*jP7|o;T@(A%*NRd=sF_>b>iL}9DK~q-2b5PI{pM?uc{aUk7@;}Lx z+&$Ici73BR7^r_=orc_GQ-FLc<q^nfE=6uRax7!a(%Xdc6T3jHBWmY0w1vFjE$8d0 zJgd}}`?0>wBs>qy!~WR(N48W4J+V<wJ}Uzg#Eg<p;>ZQ1a?=Is0&LXct9!k`InVZr z_z*Og_7d70_sP0+K+9uJI(r(@X;PPdWhKa^U<$M_A&0qZ=lnKB(<}+PkN+(peqeD1 zB-Nb%LQ*__2C%5Kyqo9}C1i6MGOv8C9l_gJMi`P1+5y^X`n|yegiI8E&6;J8uHari z_#xQz-KdgW!|XpEu)Fcpx8kQx7waFshTLM=GbqG2$3UO`!2`Qni%}lKRc7;6CFkfh zFfKhUyUWFtz@=`Qoeoj9hmew1f>ElQNo=i&=SS+osmwEGt30(^F=KV_uT?tZMPH^K zX>tGySj~I$irE5V%Fc})C7|iIam8g7oY4z9gRjMa^o|nj*6k3f0K=1ArtqE#?u;cQ z&Nwo%e?S(E%#}a44-nL%c<6(x0h6s9*!499=oAAm$*i|O12k9h=Rq|oc;}+_yeN~e z1$GcPvh)#qaQ!p{qGU~n<}~RPiVLiyI`6V7)GF<=3acR}wi4qGNUUkhWkvxl<BxsI zk>+_6B2F+<w*$CA+KD@ubDZ>)LbJSt)m>-(7W2lYL*k1}-Y51b@{@qr=;GP}{tyr7 zwYa&JaQf|$-tzZ)jMDngTTU`l&PiEyc&hNKWn?!@hL5JXjL=zoOaaYv9S5u1Zx-IN zPFy!-niwzryAJyZU~Rr{LaV(+L-8i{R2?N=@fBcU{F-Nq;af-2-SX~?4s_J5OyF2* zn;3rGjKH+&Hj$@8(u6$|W(a}ho$L}%3d;txepYmNRbTHiR(Ss0GOJ;3m&16*)Wl!5 z*LR*1k2^pbn}0u<LRrrOo-JV<g!TG7F2QuSx?c$}gs6o>gn=$#$ItVj+Ig6r`^n=b z&tx8H>t@8_>eVYzFn+%U9GlH6d+v};1+!!=P?fC!dM?_-hp||tuDOFOi}Ltvf4^G7 zD}8(8kEh?nTvO#+SshD3*|3!p->TyUOtt+|J3|>=Y>mc$L^?C6NOkHoF2n$Eo<}gw z%V=iCFg%%eRB(SKh_zBzd(pk;>#w9r(SA#h8;OktBDEK;^yU)}J;+KX&<=<c6fpD! zfN`u$&x5Ub$b7L~q+o+-qR^;VXl+RqU>8@eFrMkPSH3EqINWg8t}xbNv`nYr=PJA3 zeC?wuvBU?TU>$8@64M%^@Jxz-J2yZBqbz!EBX4Z(2a6Iv@FWv`MCYK>byVaM^o$3+ zlYXerNbH*tcA*6KJVd5^Z#92dgk1`AB0dH!Fk!j{*@}SM6G@VG%Du6Eq};$O56EDd zu)VXc%46nqL9SN{6MQNZ#F!4}M7v>RVS?vWUUj0x#*JKxEes6&l}^HAXl8`SL@h+O z(?o}|vk240k?nYc*vzA?`0InS8(9~Ewid@t&_CvGs8suRQJb>vNRlTlI)Qd<Db+O+ zakbH4!3Ry7pu0I=xV1(vS^_grAXUPw8uGz+fih=K>Q-GROLl<OrNoCs&$dy@_z)V< zS9tu~eqXZ*7U6nO!8ntFZioj<(3DGPW<Lu}wuk^w23lYw58J_Ot49TDs>Gi^gUE&4 z8<?Nq$T^ayi}4xPxtm#&sAYHFm-Xcxb$u3akD!UEIE~t@X6}VFybW<V^p6lt2@5Jj zRXbXrF!|u$mC%cFd6Vp4{{fDG0{&T@`;UFPM^ir)z#lisKhF<4;{O{Q@&77BIx|oF zC<q95F-kcg;D0Gey8l#<0G${XcIzBZ?S3IdFhCB{Ru`@TtCFVC+BWqW7WEPBn|%ym zN#d)KCKB-n995OyU9p99dKT!+^|YE2*L&^T1%9usMV}R&_rSImgE@Y8i*a0l?8m<5 ze1$;YcG-o#C{zjAtIU3=GxZ{D(FuXqG!W(`pFw03@U5masZz|*iHn)cIq9~>bf)4r z;eO}}9g-iTEc3c9?RH$%ZJk?e+)L&N<_RQ=NZEG>5zNTypwISa#hO^ONU2tMCzZX$ zsrGOT^jdQuE$D>%5ksHWQ1CBuUVdH$yq$AE+lK~YjTEyb2rj;UrI^)?9C!UN78XrF z7ND>t0L3(W95<ZvDFjd;qd|*=rWO-~E`M@NBd%$f^dE&wds!kmJ7%QsnGwK`IJLD3 zH?%<1fh8%=#~*L{i>HMzFZR_g$5%HuSBH1iwD9l%LH+h5Q~2o{@+E}&t&2pmpVk*Q z2f=gsxx2es@qCl_dM4bK`(xFfpV!*u+}6@uy<FKlx?a4UT#Gk-yV^gU{Y)&MGo|v1 z?1Eu;<abPX3Vh?Br2H&AqGl!uK+7%|s%F}Nx|k_6$$7L$@>GFf(YgQRH6qdl`XlVw zvU#@r;pUlz993lmuhen&)ZEJgb_c)lq^tp}58%%?V%9BGGWxV`bvNN$fu>C%mWs^; zzcP(xhKsZZ3zbq0jk;+nQE-Eq+fcBh0pa2lLW6Zrz<fKlmlP(GPK_U7A%rxHvrJ-~ zqPf(tYq!yvS54V+9T;bKH=vlNX7BtS-(cZ5DGCv+MY2P!4*O8@*vrk(Oi*eO;Toj; zmF$myE7x~CJ0I&&vg8g+Y0jfSVKg_0_mP2wS?V8_Xl?2BX%V)r+aB#bJtNZVHN)}8 zS5YGt<aOlyruG%amY27(TWx3Ps2LrpuV?Vip9QT*9{}hX;mAI45|{#p<JcskB>W-; zg|NU39YYuUO?jYzDKQ{IIX%4BFyq<6f=W$vPQj(hTW9ni4N2I{0Q*KZYZ?2aArJbY zqd}1B4+%<1OfOw6fXi+EKw{5e{b)$SxYcL|mhvABSr}#QFab#zTU@;TTg;gM!>TtC z6(tz*&<Sydg>{aMC6o-?bcjupW2|<!2fV>`1o*^bx_$zlyfolqEzyiXfP|XdDWj7V zZbs(~0kN$O3R6Dc7T>@79rQ-@&11%Y!;EEg&5Oi`@HD1fp>GbzAbf6Pe<L-fLWd~) zIS4aru<NxQU3aEO2ZUu`NKkCmu>OlK7S{AS;uTSg%Zo%+?WOkJH5KU+cjjzO40Y0K z!bB)l=#g`mlb9&<i8#+y0OJA53o3R?9c-qbFMAh3E*L0|AI~7Z{f}_N<lQ0F&fR(l zC%P$q%L<6~6K@+mUy$Ri6%)B3HM2`11w^Pq$12WYwYjx#+<U0ks@p1PJTLLWZyx%? zq9p@R`7@aw@;+$90e&(jh{V7h)xSKNVuiut@eYraC@5)+gzGd<1ELCEQP9JeWY}9K zqvXaYyY4hmkYon|aA$vJJ6SFs8ca?A$WaHRzk!X+!5>ibAO~86eFFm_7NJVZUW^7f z%Cf8pcmgtC;PPsKELC2>3!BXBKAXaL^7**%zI+)Zg3P&5!_^+039GNs1HVh;DXY0{ z!|XUGSVb4a!gle+ar<s+7l<qJY~41FLr(Z<*uIqt;Avk4cx>QvxkD~4lq>300;ax| z<qcVuBH%ps8hsWJ#G7iexb9%xzbV9&I%dFy#@BFIRY=xf;MTbX3Et=#4(}(2{)|(; z8lT_=Q!hIB7f()_TjVz4WX2jx0ulYC{NXt1%G}CWr#=FxXe~=6x`YA6xCV+SX8!0% z_A}Cugp?N0)wdg@KDkMRz4!R3)@TZERzp7I%kH`|G*?1rkZJAopSgGa<Pk`C31?V2 zm^RG-HEiA9<YWSXZdBu0A@%xSt9BA*@{Wmz2b?Nm<h-Cfvxt~nsu+W`n6c!uBHq5j z!xt;XsG>au*8)Qw!w}tdV7k;iH(ljgl<^Vlm9_~?JstmXeK+R$(rd_b@T_bV!V45S z|EmT6<dq_Vj^{NhRmK~4BDG7Yt632M!a)M!sJ(TP$kX7lbI?8nwX!8o%pV<@6sY@Y z8Nf;Ie^gp-Zw_mrYVFBM3drGQ$qiY|+)nBt!1(G->(TxR0EF-CsXmjevHi26aYkic zT)ZP`T1<|9c^rT!sJk<h)C$KHX?TB(Q`IW!!iW@vaEI-Nh!zne$U1|oLEb4uS~R*{ zc{ZW{Jz%rP9`a-dA~yq$3##U&<)?m6(m|bjNo%o|!LRe(?NT|E*87!)%BiH#H0C*C zR#O-S+wohy9+PCz7LJl`-p5Txl_yM#Kbp=$R7_R}n%Ip8uOY@D_ne$Q30K>aMuE*^ zcQ7AakX8L-HZE1@fz9YFs4pyrSz)x1vpnApWvC@A8dD`OE#`Ddb~h+(ngC?k%q|fp z-?ne<YD$-9>ibO?8xO%Py$t?(Ef#k~RdnNX>+m7%vIn%TOQzif277_{xSer;)&=r7 z8r$9D`-s>Mrn2HBoEV;a|E`UqpUyPY@<krJ=_A1>s$vnMZpovnNB1S$3_a@Ck84}f z$AHU1S=j;Tq3jkA&R~hJ@d=^|*5l6LWqlIx@9rUCN+d#NM|F5bWv8BE$;s}aI8HdC zxe96eIAy}<kCI#zmT|Z#_0}#ElN<vTV1v!6P`Pgswa<~!xs7wbB^qMoar(%0&)HQa z^@LMh4p#qoIVr%fEoqz<yZzI_Y#3}MUkd>-;nhR1ZjP}ABt;)#h2ORj)C)#>u01sv z1X3oLzb7H815<FvU_$mZBzQ}rGB{#W_c5z5<#tY9kZbwDk-JRt6t5QyMM}aeDRF<# z0Uea2XvP~iwCoV{IWxT=`#T+<;U6){Bz8s!b&yu#rez&51}Ju>Nb@j9F7)KIdQ$GQ z9nuQO?lNe8GT{ew9V~Y1i$Twn>(8t5fnqCr*e9duN$<NveWGZ+`Rkg^AdWWz{g+g} zoX?PZ3BDV}iW4msE>yXiqOc%Qv=LriR4G0K@h{iY0MYq}{v`5MPH=pO{$5g%k(_$3 zZOB|w)pOhMNW{&|u|dr;$-@xo)iM*%J}p4i!%BudF4eB5A@huz5nqJ#{6JU|SCAy) z#_6cp?{9^&E*A>BG+89t-o_)Iw<B=CO>0f=aEc>HT$C=_d5AQ)-*m!ZKB!N#C|t{+ zbusfb=9o}O?*{Uyts_P<6Vq8L+B#$gMo&2eo4ZpdQ_kMH5~;-O>%!|^VN%MMuS3&S zdt*>PIBRG&`dZ6X$7y?U4bK{vsI_Ejb-I%CUlW^?U@2`lUs!5&IYJqBpXmQI82@Q5 z{;TZ>06_fTOd9_aBwfkK(azf1#PR=vr2q5zwGfk2FbDv^%#S8z{vR~yzdtvyxA<>7 z)JE0+LQn`;BSnvAfM{U>Qin?blc@&pNF5HP4iQHLT{e^>d}q}sK8Wm_i08^g`?&o; zC<f(_wsE?-v%R^zAgjskWOpz6qvjKh^ns`N`FM`Jc`%zJ#b$5#j_J3V^jn=C36IAQ znKb!+H>BN<dS$oQxert_Q@O-DCy=rm(o5N1401wAOn0{YBJaV+-&q!=6{T5B?jM8Q zC=&(Sv>m|FZQHqpnA66HvR!Dgz6l0|_k~jN0Sp=pU)9D=WrIV(HQo9A{fBB0hf@OM z0IYtN&5#o3a}ugSAtc7ka92+BVV?8(E6Wj-%!nxyM5#wgVF`4oW6>S^Top9bA9rg( z6HHLfgLO!r?075G<G$0ZtOAm%hGOqQFJHM2e-}xLw-VC+02k+Tl`VH0gBx;NKaDyJ zSStzzK5tHn_>B1F%D}O2l~^{qY?JK(x)z}_NszG2gZQX$Ek!di##LWi-S@Upus)KG zMry=|;RFBcu<hfUVS#JJ!_rwH_f>2Alc$a$&c@E}S}Kc;l=XvviRHZfv!Yb7*tyXU zV0)x5W218sc6KvJ#_~POGj<hihTIk6qSszsug<IU=ryE;XE|CTK1l~`3)t_*o#XdL z(fXelms1<2{e@ReE^MRFBVJV`Sc@!+8a0zeiK30#r<P2&ZQwAx)|?vcRq<-*6qQTI z{O$8Yz72f1FnjxjHQ#PT-%sEB4dv7nT=W5ETD9DRa0&KHsD7c>BF(stBCtHFKp2By zG3(O8arhj*ygm2%DK^^RM&cA!5k^=v2Bmw|?q#FUV>9wkTsUyfEEqC_)NQ$`61&5R zZTmG4gDh!^>n{|9SsGf1vTRKX1py;OXD~Xkm54o-l^Xamd$rDq6B8{;ouZbav5*i< zL(mX3BomP7a#Up*PGYxGTPO)ld?}$Au<L*ll7N~b3MftFSx!ZR6az^V^PnPlHSA7# zB!fI_VSVOboXDr>imxliqF2vZ)AXpx@Px^a?i3qPmQ)m#ObYTbeQ)mKn{kB<ffSij z2{~De9N~t#*C-Flv^BI_e@ilsJc;h@!kZu{f1uWd%8T9up)?n~sgLhzY%FcQt8N)P zOCjpDJJwb|lpx<_j(vRHgv{R&E%%R4$xKUvBBdAMa)Z-_IdW4?&j_N{19*HL{Ru{! z%2O4dyu31hZs9;^y*)=g_o`qj<r2VnR?VBGPO8bGv0TVDMwG`dZ(06)1i1N%adqow zp3hIBR=uLmYDbw=NilBQH5Bgo8OpM@C^on$d(XpXKR&i8KHi``<{&f`M6^)$5qWEn z)Sh%<p&UA3zD^^gbReh}<+^g`*FSE?w&v2!o#wpM#@L=NM1oE_9bauk<)VIGm6R+t z6eUh-Ofvzu?HcML{Z9I$4_c%Pl8%^d?i&R<2{hS*#3>y?qS)XHy(kKaO&Z-XUY%@C zIDu1)?rPcp;;f4gf35h<!ypAp5`I~PFVBq<ZHsLiGw={F@lkRK7U8j+Q)yMVH8bBW z`C$W{lfnP*nh5b9H8BB_L5TMUr}G=;f5tZayQuvawxLn&H0B?kPAAWxzJL}<dXm(h zIki5tA!!UMt<X)eBXaZY-b$~lC&ca51jn%>aX^#g9w*=QA?EeV-NobR-sh^4dzbqw z(9{;6hl3}OHOBC@ZO*{0HDfu3TmI}Mhwob?;CKf;-oUMG^N-P-*ogghPbTwKdov=d zndw&HOo^?Ng>3C%Zk7X?XYhHJ13eqK6n?N+(UzQsaSi%1?CWQH@6ocaW98ld1tH<L z7Wqfv!}%^Rm_v_(q8|wLLU8MZdQK7^2^BLzCS)S#b~pwl3={QIV%H$$^Gma0pNQs* z`($$==57HPxi@_$(mW;<T_8m`?=&>&ki#G$<}tivFszjq@-YSo-<yhNRQ7~KX#C48 zaT>b$Pc4hQO^s4^RE$uH&oBu969c)qd9LeylU*sk!E{Y~Fg$_E4hPSjoVwd1^d@9B zYN)T}sI9y4Nt}L7QBwwsJeL_|A30OXk|9H%;BdQrEmm9+cD`Cc*$vwH?vY!+`R=b= zlR1iDm4tk6UXkIglaEuet%g%fOyVT_@HDPnf)8>jMW&C&(+-;^acDS1lfD5Xvv;xg zE~+ZoKhMhf$+iq{9cz2O0Ibm}P^dLy$C}!A>dMKOBLhln<PJvIZsW!h@xA7rO&gUk zwdu@kURac_2=O6yrlN7|q!rom4mgLWce$n`deO+)z8xzBk2?)6^3_<M78+4(74dY* zY+VS4$-5x4CRfVgZSjNmA(+)<Q`l&Q)Jm144Fah+_`8SC8WDi%#spYel&UQ;Oqo3? z2qVrY1e#Sd_Orpr@bVfNLrDiz`=`l%4lqn8IU{eOh7GN4UuKwmRN&<IIY=rWa!;Y| z{1%Y5K%8g4K5Ywqr2yd7`x~ZP4OP)y@FncQ2QlQMvw{l62rQLV-wsvaAZS4HDzIyP z7Fa<L-6Kc?m$y<O0kUJF2gA95B(2!$42<p05nkuI<hfK;Pv`|w3A)7J!(t|YWZ6P< z+`V#PS|vMU>;-?dS9G8h1UyN*q7~4X1@uoS981*!Mm7Pg4_OA(su)2+d%XejC<Rii zVUffvwV~zqMvuO+o`M4^DqFaviy0(pEM(ki5#%UAzvVut2`ju{8d!{|cQS3#BB;TA zB6mB<LUSlkobP<6p8!;F9#ea!9OR~%DjA+fkOQ^QB2kWodx3PHWwbQwV=%H5<J;M{ zR~bmKa@BllHx?fk0CI&-fm>yh$XeoUA?Usdf}vX;3`ufau(k+NNKjQ>u2^Bz{=sDm z-C3V<N8Z307z$~fQTym_l#*!xRy6y(^<WtLLurbFGB_@9tKs&77a?1b!HXE9WpeYF zS<t+)re72)H%T8EHHgqwlH&EcAu#i1^Bjt&P=oL^{*PR<E6r-KcBdjqr>8K-u1j<| z5>W=T>LTbP^e?d`__EV)RuG$(eYV?OLx0KtE^Ogp@pU=Kc`u6YfVZ;ScrChp(ko|~ z%*U+5@171$rT%F^m#BC=wHun!o5;k6%jC~t+m24pnMkv2nK8mC0N(caz#=xwD04Wt za3h3fCusX>_0;|?h051gY0q`^7%jKg^&VaoXZ>~{7Bo<?UceE<`4^zk&wu}>i6SM& zt`@_pg)=^v=u<Ko-BIIlRQCCHl@g{_;Z`Qblq9eD$dtNd(B6`wyFp~7vPPI(sg|aq zSK`o9)kXT`k9sxVJFysQGj=VH+xS__a*3PRaKS8vGZ)ugM>f2$bl5;!dDA*X<_kt5 z%R^LD#_xSD{!T1A^q0TXpt#95)qQIJQl|e|g{gcF{g-~EWgj#E0PFuoT3Q=8nwjWX zI_Wvtxi}h`{0HBxQPtyzZ-(;i<sBI&C=VhtMyYQxs6Z0R@uMvfgp#ql+2~|(tcx{5 zUaok!E#~VSBx+P5?mw>f&B)P*?XqS0aQK6c6Mx`lFPn*}VsZhG`!AoD#ST2#zcZq_ zXLn3-_`N3mO{S9J_gkvYOS*6^>ch$H_9qU{WUaH}OQV93t(^&P8)id-NQCK5eBusH zINWdfd`k~3M-+89XtcL0rHp5MVbl7R&{^<=(jAOuVX4`#x6Kg1c_q<udULUuGA#Dz z#sWwTz;vhMMl<Od$e@BIcD!58Yj<M4%%E(PbEA&E4@rqV8^$_)$+P-q|6q^@pxz`M z7xj_Yy7I)jScUZJpW9i|2Gz(ps0_)IkY|T^JOzm{(T}R=E1=BNixIY>M}QuAY9{o@ ztJ%MJZSD9BUx0Xra3#XMHyu#&1q&^QriR^2wqqvdV8<#EOEsV0B~-f$o8-FJmb?Tu zxt1;!_Vco*u<81i&Quf>nGh@DV|<7C*2;YIvox|gCSX;fq<1fNo{FJi)s<czX3tn8 zEA>{3gnIgHW~hmr71DVw@01^Ns5<~>zQ+U-dVe@$gge>fg8NFrf!jkcwQ}e3cenZC zvgLzEYb&d=o%f2xvAg=-KvuDib%h)+{edebHcItUqi?+Qdelr^*b?Qgm!aaT3G1<i z1v{i{pS@xUjo6}LGv;1uHOs~(mus5%vFOfr3<~Au>6lSjf84>jUehf$SO*ZMS=542 zhDx_soKr(LA~=dXfRVS*h%*QK;?-$FrSf{)=X^X?(At%?Gzzm-C#8eI{TUUh_p2#= zG5wPV?*^{s(-mE1BafIE(}UAhmr-CuWyW_OB!?fM9z&MapoQBY-KfW@Y_*dV-zrV2 zMgVP(>GmLi&~*V#^4uznXe?f>ch<)ow?0>pn+#;o6l!9EOHnDMK_gyV1qFzsYuz4a z9-7EXl;{jd3Mx}kDG0l7>$uZe<q#68IT$blViNp^)w>jeJ~xiiV>8@^N${FYgOZ-2 z4=FDtNoH^oDB$=Yp+5Im#@wu6g&CpOSZ6GWx(@ZlCfT%y7E*!AQil?dIe1vg7fMx) zOa#%p#(d;nRL{aWl28&#pIA_5mmM||A_mnlDtpYzwnoY~BJ_ynSS0em-Y9Wr3A_*m zf~FS2MLp5v&#P)~$-4m4IuSl^`?7s;=<=B%QmU8ConlqZ?j=@{l}_yH7lX3_9wmO+ zfsj0bFq{7FdjHdr*I!uBgVYRNw7HbXY7O}&W}Jw1yz;4+)Z*XSmMVv!8-<Bf@A2;E zJbRb-;cipJTbl@{HhnKmcr$&&Y-=$yX&w)Va~Cmfo0}iFsB^O;;^Vx=iYkLw9hf+u zV0zPm=XiBn5AL2Kt^N4DkFjyd`j35j0B3SD4>U>HK?VGPvtXQ`#1WL(W^>O&Cb%UU zIjzjE@Xug=7Im~}WXVub_NiE;9i8M7bzWGnQRvvbyQ+T)o~;UwwT#6LWgkgSogUQ1 zPS_f~MQk?9xNk|!#k-LXi!#^r^Aml%y?-HVV0DeOS_P0SQ$MH=^Ll<u?!rY%vs27@ zxX=xNRJ<1m0OQG~x~}c0mb)CQ=Yb?dO<p`dBh+!jdqZDhOYAlAaRb+X<~H-we{O_8 zKe_#@Q2wNm{I@GS`TwR++WZj34gP(R|9|@cH2?cU{>eQ1_euX*w_#RJf~SiC0Kln% z09gKip2Wn;z(D8h?p&xN;da4=sM}wC(hoHS7y~|<uws&Z%!z|0yO+v#Y8!^v@~}Ux zq?oLoaM=af6L@gw+GwLuwp(6Z_Qm_Aqj8loe&^<g`T5w~{d#`lc6$BA@wU0-tvR)I zVF!Qctvh*PS0^6a(7loJ80+{nJbT#jYR2nTDLP4CkmbNj?Z^JMj=$+<{A3inSfR0^ zXFDcw>Z@R3i1a>g@u@gz_2q5*?XEYyeUACDsOzFlKOSpo>qpO&+zOw$Tz%N#tyh~_ z<Htvt8vW^^L3jLk9`?Cdl0UMsy)#$-v_JP*ny!*~RA1MPuUbD?sJX5uNaUvH#!y|h z3X<K0O1+U&Zu%9&-fTu+Z@!U#!jii7Rkta9<_8vAxRDq;&ffMnaUy|8;-sr=aE|ZN z+F5Jz_^~dn`kSN8-ABh~2~|&X-*ftGaK)#0*Yb@sdmlH0N3B%L-?Hfl8vDICOG0Cs z+O0ln+H>jStT6UrlA?Xq9k||cOsKTI{Ks=MtZV-$Y2}yaCiW({3rvT8vj&{D;A0q3 z-pyORy}hZGBDtrvmEKu>HcApVvN3MAHJ*m7F_|h$AQ${z<>k)WT~#Je<R&-Y^PWC0 zG<CN6j)cxn|J&i(+E2HS&zN!p{ob>-!jz(^;^<+>*i_M*)8r@K=I<iJ7VCw{%IKrn z4X$lH4*NZO$EsIL<siT6V)YY0Qe~t4_HBXgm*!-_WkTEMowm%DWJhyZVE=(HYgoa< zN(=g`^in}a8P?}lm-bS14Xo=K>4%91T{(Y)UI@FV>eTYfl<x4N)qaX9Z*-(sQ1M=8 zdOgS$#yk77Xa@R<`4c;#arS<*%-CZ-+|tU-r>gTy)9&N6{Fh`-Y$WgLq3?qC0J1kT zy_I(Ht+k-tVFw463Hp%E7dVY{F4~3`pFgj{e&9w6^114DtgDx?;{5v;1}^QzHabma zD|pTaQ?<Rpw65OKqt>Br;|A8@x=1@t?|j}F2krUcN@t*H%raBN*hZsorS5RS`I*xr zQ>mVYbW3?<N;&1#qN8lAo0+Sasoo5j9a(QtVSB(`WwwelNs83-z@BZPoWy<ap}tz* zRD~JMsqJU&hnddgZD#-BMwIllm?e9`BfP3!tCY$k2>X!NAz#+@s}{G#k&3+;7JGkw zJ}##hZacSfGqF#~ExuT44ZYbSk+wk4d6zDYq+9LZw3g~t2|2OVO0T10OU>K)gBI4I zLu-vaF}Y=D!2(AfJhysJjm}+Py&B^)HYL!duqFHE55Z$sYJQwj+6LKq%d4pg8BQA@ z>V#dXv|YM_XnN3#vaf^#P93P}CAdGFZgn9N8?3hJi;g@*mDkDxmn~SkdUiYfehbz6 zTX>V8UHf3tzrCU>_o$K-AZ-h8aqwb9j5|8Q7U9=emtRLI+Qn?5UF{|nL3PamQ-^V# zn5+2sr8YLG7TfIoDwcAY$P(=%lC`2(H#lq>JY=Y?p;TH_I0K*2w4v4DWoHUqbGWTc z$KB*JTO6P7j7hGY^-vGNa*BP+XMHQSH>SP8pE7%g-?Wnp?$3r#^g*w=YtGGMdWtai z$9tpSbEib_NG`L$8t|I+t+&e-fxbO>3kFw^p9}W#?7O?F`BQ0<^Gw}sQb;xUd43HO zca{gqcmkmvSEkkFY86I}dcJ9-mQ)`}vB120nia+vZ$BdR@d~hdY3(a~aJT(Besd*} zjf~cm+j;uaokz%BOOKqonc08p6ew2T%%#r#Rwuzszm2s)b`wnyQq3`X>fBWu-p8x% zm*k#$$nUUxh5lUdKp|4V;6Z=9>tb&flW|tmN9y<4^SFgq6r1+$@&m%ZlWU3QjA~`~ ztM>(@7LdHV#Faa9a%G@uV&d_ccSO>bCc9dkDEI4AYi(xJn~5x3&V7@)X=^$<95=Vq zoF-l*Qd&bN&F(uyQb`2T%FeISqdC46Vb(0={A2nMLT(HaGcYTzyI=4@;a5ovE|4&q zmY1H%;=X|LCliQvz!Hz62&meyGx^9#d-7INiYuvAT8U@8oHH}bVlWVim$%$2)!thi z`bCR{YrNi|S`w`VENab)(oHdDa+adgm8p61g7<~z2NcO&@(@GpNRcBp*re67X{tG0 zp?RgH<QU&OFmZyNeu&iQRCdF$S#^ZJm`(~)wF_^RGJ{lcM4@${5x{2L6`5ohzhgnb z8(H-n-G!586cGmZQM2=jMoF1UYFlO`4@%!~!ENfNd=Yo*6*0)fBK@r%4`oB<%;iKo zOU$3H<^U4E4>WnRbu|vjgL)QY)W|y)%Rm9ZTIWemPD6GxL67Eg$OmBejGQvL<r%mw z0TwAz*p7rl=N%K|D2pz6FJ!vy#_JGKtri7Zg0pdqYE7aXU-Ner^h&bEL~17PhAS(c zr}|5S{zXdp0Lo77-tAopI!M#<9KF3re?OHuW%dfP%r9U(M$9#Im^}3_0k7V0xz&vm zEA2cc5APV?k=YH}JnUb2(u0f%dCOD29odrL)H~~w2{}veCZ8KHGr{20J)r7a`;NsI z$EbV;%q}eKU)8VoSJmjbqLe}zejKBQUWGGmyc(YX)Z;*$lp_gGlb{?OE%Vt?W;6V+ zal&~ZwsHtg-yNYNKX6dslq2m{ZtT=uCvjzgM}AcV=frxcTfM&`bYZS6mUTfMtxt$w z)kTSMZQ`sxyM=qx)ZXRD?k+~p6^}T=;PDobBnFKy_gCC_y&*W&Xbo0AnKhNwqNZUy zHzuE5Lf<e~ZzhjuJm{eWi)TgYE(@^;A)|hKpH{#1K3n-fZBCTSM(zTg-}uL4cUCMK z;u9Yoe^>EiyhY+jX6?DECo6sNw3XEeCBujGLKx=$-C?q={nG9BZ`Y`ok12*kHwNE& zYeybQB*7jMYY^ysQjMp3K^306a43A<Y}PnFZ>1`5D`$+c7-O^v<rE<$2h(nDHzvUP z<#un`n60p&G1&>oJ%KMaSSyHb&q!?cR+Ij%*{StG(V`Usj=F`67k>v@ZH?b4U#j<N ziB{DC_nYOjt;c*sI~v6{5&I_e?_|ZXj)n5gIHS(3zOEd#a!r~n1f*6c$WEl6`%Tr& z#<HDVVx;tyE!fpu+C}>eSu{ZHzNx67hr&*KS84B-uaJM=4^>2v9GT)#R*eQK0`Jv{ z*N0Ni7lfz;euqMpqCK?z7e4v?sy>c^ebCJQb(LxL))1NEF87}<mOL*D<Kg8aP<jI2 z5qqWH$f-@m*bB($20AK-<C||}T~^V%>*V*tKAhhJuy2Q`>YJuRh8WHMvX!YPm2#uS zs1_-a^f(9w4x8wU<N(ReSOR$+v7eNzB7FumQTIDJ7@6h$<P0dmvXU@iM`)8y-J0-c z3i<6%XeIS57Q|TZ_oHopugLD!<GGl3H^G@o(0J`#wt6Z#N@-|sZ0#&tIvt%gdqbfP znC2!~Pv}1|ICf8v|B{*1`?Psh_MacVXitfmHp`0_!3<-5I0SF?g#F1^1*Eu0WLzP3 z;AK+7ir=*4<f1PQpvku?XAd;7O_>C*3Rjq#ct)=gPysuEZ<8;7W_$xxG^IS<;6jmi z=R5u)?M&UudxGoVAgcLR50NVF%(=cDdKKgC7kLi71Y^S(0V=~9*=1L?hy6J7`y^1? zD|E*>9L_h}nPV~N#&0ry$4A2{yU|*h6vscIms3vv3xbSn=~h#>-nU7u4>6cHupCsv zCS_8q=C}EAgZA`mGy1MFiLgU}3clv4YTG&II`&{{raytu(!mKjFU~0co`#w6ZptyC z%PL0bo1~B$HDc;57cNB7&Ax7*;+Co%Cqn6S6FK`Ylw417JH4N#n;<WycWSE4vFN6o z9c@a(X3rP$iEq|*Or3Cl@zu|A<WBK$65LKGjVXo>z6#LA3Fy`DIU;~0k<oc=Kj5Az zq>e<$lWQu5aa$8b`G&C7p3<TE2Bps4cayBsE=YeAAA>cOZ=-TkLO>MnAKVuB9FfyA z7}HJb0ehxD%ee5wyYuGEZIHQY9M(rsntLHhTt7z}-6<?Us7`lm>eUFjWE3nW<f>)j zoZW<pP8a)B?kI_xd+w5nb1bMWeK-AZGVI3o%(u)hrliCX6r+ytx(*ugaTI%yIa{8A zz?Q}{HkC%5DZZac7Ub$<Y*kzYL6*`@`i7hbBhos=UGL}TY~@~qFRpL0hfu&G60yCk z*P$fI-T4dsq|(D<an1e7)pXBqR{jkrN`Ud0#F@2v0wD2nx11#Zn}<|Ah>q!A?sNAJ znm=BR*G{nENSlGj>2P^qlz~lQbedLrI9O|07XU0Zc{XN`pk=-*Fb&^*W`mW=lh{^6 z>kY`+8u3tIuW$Jnu;1nBJ7&7W!7l!mD3Ev~X(Gj<THO<2yqPF&XImNIq`u1G)hGEm zd<3A54}8>ml+u~i2&Sz-0*bmt+cWgx*LeM!aq!LgNd;^~o0(b;V;OAZx_49Qf%peD z6eCKby%^M_f0{i?$3YKyZ{3dvzXMi_ftrzW4U~jreY)saTNOL42Tx$6zrCGnHD#A} zn&7?j#7uo(L6sVDf~~}3j`Xmd1IQjKHR-6mk@<J9H{O#16}_ovkY~@tb6k3@uH@43 zofmy>85GeYn|ifAr%yCPz~RVcuK<>^;?Q4NkhBJ$6~9V*l7YCndLaN&_y<L%2N%U{ z_a6o0f3i>wF}h{WLg5}-(&7?40-YP%CfHsriPrqyqnBe&LqI>eK!TMbEIkha=g%D( z8|~5YcoNflXW|FvIY9d{WA-mFk=P@%U^BMDFTy6c{0A)VBOrsR9oQ7*0vQ6})puuo zTg`!HH>!tQe(AX|x?<ignV`50vOl&z$SX)7qJ|bjzPytGk!T2oN=LH=1RLrHLI=M7 zEpNVYfVP_(w;1;F4z!MPmki~RkwAf})>pL`W#Et*4eGYp>QA0M7<`*pTKVLmbQQZ( zZ4fkjEl$O9v?&*uaR=5%cGC&+C3_M(OG#-sGk!zvQxgyK{Beu<;FWgntzVf2oI(G_ z)Q7w(hfoLRY2CT_<-Va%jvvT<D>o*nagA?>VZ9lG;f*X36K1bFlo?GezJ^j9xk^G4 zu!I<BqD<8=3@Xp2=qS2H4!}S=6!5zc$4KOQ^PVhbcWFVEG2B*ATB_v)3TF<%wOut% zp{<DbL9>&!-kcC+YbW3P{uRLyGg>_1dPmkm5Od1nahAYT{WEdTDT8MtxgP=cLdcPd znnNQvbEz;i`<{FRgzV&Z$CQDQ$eJdp?)lttZ2an8m1n$N^n?KdzU;Wj^tK8m-kRQ+ zWnj192&16dr^Jt8p$SJQPboML{|u8eCvKA@sur|2e^n9tHUJ<trhqz)dMr7hER#J- z;FmlM5HudMhcemRo|$Z5!a<J<Gnpt=(CO;4x&Z~u*I#!$)%j9AIa(-#KU2u!6rTKt zE9dE$c`0D3H*NY2nI<#1_;Tg!&im(}W&8wakE@V*xsZlqpF`Z=@I#)xmf=Z7$P12k zb|3>&J%j@0_gKaQp&g=<<_}n|xOCla{4t;)HK`9}rg?V@g|b_cGtv7~hgWlz@m<rz zAn~O4RZl!2G!gHRYU5AF=%%I;f@cPT9E)f@%4`<V%OEt55)2^YhI5HlJ2s2B&dy?b z0-Blb0o^J1`y4cLA?zI`b@Zmc@><#AlvY$*4t0Cxbwgz%RWl`XQ%?-?vS3aG+Qlz1 zs`sJ{l57`~!+3g%TvELPdxY>vlhD-z`#B+VW?H8G#kh(WhOL-=9Hip$fU*<e<6;%} zHd<Mj4w@ovloSziks=@4BS#7knr5|flH6y-e3&GgWs*Eh^D3}efxo^^w>-cgW?Ds! z?YESDx<{QUeAZDBS)CKG@3+0yPyXs?b*=}Bqmp?j|MfwdN1}Z$Z-(*~Sos^!K(Y)E za2d1gt(hr25ssB#8-+`&wW~YJU%4pa6RBIip7Vmiep98lvzocd>6*LS21Q@lK`wUl zp2GiE3#-oSy$rq}Z)=@e@HT##r$9L@q}lhX8cW!_EbW+km83S2j*czi!@KZ^RzKsM zgW@T`jgVuxm&xLnx%oB|QxDP&+#h^oaf2TIORMWJXD^bfC<tOR#sMa@{Zi(j%mn4Q zkVWY?13*N=#xOKDVTL`2B;Kba)Nu(vzj{>NQ&SBU_bH?Trum37pi!XZ8X`xNb9$>h zlL|ofznj?hcS6JjP&x-eF@WQizm!e4?3uU+Or!0blf;Z_mxKb1Gv_;zdw}?8LO*6` zWNrvv<Xx~)IQCekmIbJN&8IoGDDcAS)#QI6L_TR`pQu~~^w$We8)(Kj4EMTO;EVS- zWJ!Ys*V{u|H`Cp6wm7_I^%n5dYI4MlZUVDJIrt@7jnp6T8w3jOMbLarbZ@{r^Ezdb z8Z(>b^^HQz`c``X1+X;}Ws~cr3<rWu`2kbYGefxo%1}5;7BAE1t^*;W7C*#TwMaSl z!v{#F;iFXg8eq!A8<9s4I{BCQP9e$2!1%K#A*sOo=bGph9@o)CDC(H$B9nm{AH7{H z(-c*jUSig5@czoN(VFlF#!MNdh$|%`7lBGX4#EZwI59G%#%HP56Z}wf6Z~WtlZ$?T zbU|g@0I2IfSOPJ4u2j2u+-SsG!~|g~Iq~N;F6eRGYmKF$V@%bR(Oar5r(ii8dg^&i z6Jz?Ct~L@1_=<RbC7=^K6F`2htPM*FLE(Z#NOeQJM+V-QNABf;L+iWN`~>Qn8mlZR z;IiioR_sS-#!W(P5ui?>`kfoB|B7ilj8i#1zHYe}unI4!CqT8w7{vgU0<~(c&>Ju- zNt)4zZ8-kZOBtsbP0B~|40NyHNW!K|EoghBw`e9=OeXiR?I`~l4icwYq(yJ69+$=L zWY}-BEEWnQZUO`J2W#V_<#if5c~$Dzoy<rUnM_z4xB4P|At7MO?{&2ibbn(NPart) zfy;I5qgrK^laNf;h7TFFfWaO`!JaJpxR;+PHjTiI|Dh{-#1cve_0&RudD_PmnzZY! z)=JIp<_{PyFiI+qK6MJ0vcT_9P7>oOC6I|u&^$G8iK4h;jB|&8;%F{Hw-rX=CU$zq zO=UnfU+V?6Lzwsm#CM&B1Rszmdtu)25kimx-jcTRv*3-jUhU;OyL`Le?QCi%Gu0Cx zQPw2`K9vE#VD#D5e>`76F5NkSyOIv5T^JC`Y%sLR8)jC93lFPElr~cUY1ysD&pR(b zp}?0z9kfQSK%rRf!Y82cPk%4cuRgD6338W-&jH_NI0cZz-0KTNQ_DgUMCm4JbQ1{c z)QAb<emdBDb{lI*IkyO!)-+Zm`K=1VgxT(3tlyz_&?OWE#wXPsT+5s`zpK7Cor>-V zGf|_Fcv81A6Oc*T*A}C=QY<$3OqrjSgmOF?Q9OMU;f-M;XP`VGbOi-(1(V5fvPy?X z*syqopT*P&02Q3PTS@)=Mt$937jUJi1SWov(UiDA8-sIOD@S0?^xPsdo=Vmsf=mFj zxORNGksZjam{~%|<q&FqGYTbS66`dL06+{oW9mT4xJ~ODN?(5sj%qP&aSZZd;>t{A z8zp$JY5bxQ1=1J-bkeadaH;y(C=g#zd?{rE*9$OH3wDRy^>-cByh4Q_2oS&KW|Y!O zoGoZ%k5L@%h52<DQKNf@n_{jI*hBmCPU@V$FqeH`daN#zh{zEU-gd1Gb^6Xd2^Ut? zj8MMga$FKWJ+urM9~7rii5FuFC4Jnf%^JNxS&~%DAFZ=b5E2wNZC|3kN85gtOG2># zl?T94$DNUgq?%7Y!k^h}(NFlnOs6CV+?Oi)BNiATdlqlxNz`x|rp1Y>z!=xtAXAhf zHw^OQWpV46Uo{T{6c@F{IM~Z*<k>tobRU5B#A>mX|Bk%Zb$*xMiqhu&Zj0%gClDEd z+#ABe1N+_uX4(qaI*LMLLeac->FUFQjxdZog<s)I5;5{f=@z*RO9qORa_&T&U~tl@ z0lpVF*AiY*f7Lsb`#L_!fE_|@P%Ym^isFYq@Xd;lVxi1mf24;PS8N=Qx}A>zfXE%Q zs|!d|95T`~cWfXT5yGT8W)O0i(uG|_e&kg;B7JPYsu@N@=3j5-i}z|3=&}~{<AQ|K zE$NKkDwsGZ{Az?MBuNJ=2jX6crPf+<CHX@*C<GGR5mc3X8J<iAFjkD7t^`ICka325 z0f>OtE;-KYqYJ}@mL5r{yX%maCVmrN?r@F1YT2M`Pg{ZYgtB)5fP*iLa*jS0wyMeJ z54v^SD<U)JKtd02FJS-dsmud!qDb-Rz}Yl=M}D~bWiidaxN`~gry?H&C<+NUJspHc zKsF&i+@~I1m9)%JzZ7Q@r^BK7*OWs(dlzk<vNL~y6J)>>Ra}Ahk+bA%4`s*Q9JpOr z3VDl~_ploKp97FC%w;F#5~_w2g*>S7oh1z~liMAIa~Q`fPK$w~M^<l4DmY^S%n9!f zl2{wWHMxegS!c_w0QUCZQrt15B$(5W)3K<5L$S1j2Jk(M3`gepJ9^y&z(<gzBc%jb z*_Xf$tiyn3=y1g#lggwT3@w+WsB}jX-x3-~?D3Po+TTCSLK5g&vma`0(6b9tmv)Yu zGD2041h!-AtPqbgG=3A&$wO76X2~LLBrX?NFBg#2%ZodzMgLWLf<UZbIT4rB4nNTA zKY6wvXH)8Y5x$Y(lj;KFKF~6m32gx)(910S267rf{sk#`-i2h{6TYkA3IoTq`O2*x z`w}nC+6(LY>QU^ujile@5a}p6lPLDMFu`w62sr4KBs|f>Q*<*S=6ZQnoWivwij(*2 zjIp+E{6_j$jM<$zV>2X3%4i4uW9Z+TWDEq*o%1tt9%TVZA4@P@`Q{1+N`LDaRp44_ zav5L6Dqq6&8sev&KWG<pV2ViBwO5L&j-V<R*go)OJ$`h<k341D2t??R%Z6Y;P}{+a zrdNikQ?jv?T`B|C4S6rum7-wJ2k@UiHoR1NvPJGvK6o@<t?c)D0h5joGw1T5_o>91 z*vQb6)|C%`jXhxk!^{LqZvf49?=eUO_1;+sV}@Y6aZ<U8*hoW!*3pX89Jd4MK&zdI zTdDP=S4@y!ucg+b{dvlGh{<+;8|v`@$*HEG^6$Q(q+m5sb$SdA({~dX1$@9py$o|s zXeq{umw;9ff(DJnny-4%<B&R1QV|Tv3U|kv<$qgFZr3W0c!Yw;6y14o6DW1%TH|(2 zf>3cgRdF4~p4)b3*Q;@;oO6C$eSpQC-5sc}%-GOT!}Ak%vWz~)l_wW?w7w`z@<5|7 z;wzay)dj{D+eE?VE)SSziL4|T*pZ9<{4X5!Vukx*mQWq*X*pPMYIOjwsKh+wDi(vH zsZ?F_C=!wK=@)4GyQehas0ZEp2}e?byYkQuX0n|F>L~I9)=18QKG}vxmGsUA82tr! zHW<X8LMR_BGzG$_n#8|>F~WN(j;#9qK$I*Tjif4xcz(D_LeSbD7xFN9O#Z!IHOTQl zyuQsRWI(3aLHPtabQ`A(@%RmZccC2e{#R@?GQ*|qeUiRtkZ<huBK<)ziiE+*&?+63 zy!Q;Qdb%4o>C#-Hdk@Tk0JN#3LUP?D5T1aC1<P+w+^wLS1q?rA6`5%tvs@f=y?AIP zk#TBc@*6|*Ekj*}S9EC9FSP#yPC&80@oE1_WuE8y*;WKF&dn0a7nsg4qI8?gp-CC1 zse;c_QUEkjht!?fXzNQ@H4pk!Q04MF<sJ+)ol*nQWG)kO8OznAt&6tq8zmjG^uNo6 z=Ljnw1VQnkPh}O_z~$QDltnNkgfE=&87AVm7(Dng$G7$lcZ&c1Hm`mxFi*S((Bb#$ z4{|BGNt)wkjUMtnK)dopM-@0MCw()DGAeG-5>vnZ(}LD!>ka-Kb`=0dYTko(LNSFA z^xFWswxiF0G@gHvrp|qPs<*Z8gVVUE%qFl?{WJPa?p^$P*=5&3ETrT>%upoZ#U8-W z;GIHutt(D>1)opb16=uBpd}@d*-O+<LOoYgLwrk$)EayZcj5*JUFm;SzQ&vc*W?bD zof>`|!u_YaGOPt)G0&y|1H+xdrl?E=JYWBu7gVcWdDrxM+`Lg-1-2HKaP<-{D<Lg2 z-%$o&HRNGJ&~hgSm0W>Y0vC<-s=fi2P1In#pOddo{j551pGiOyan_rKjBnNz5tJU( z=}27_120}B0kQOK)gu2#xwUY5=+IM}5?EaVB5<XBi##yhdNBA>S!mlX=M)0l>gjxN z<rKBqD(!B^2P&7pfa{33P<{fNOAhEUB_j8#UmTmjp-IAeE*7Qld-wO~8^{RTh(LDR z_OV>yfmi?n@MXb4A#&nfdI6>V$&e@LTU*p~P@LSnhYIxY72nM3(J5%QPz+zp)P7kf zrZOO<@tp$DdjkI#h#7n_O^2|2nuCvaOvoJoDD?>HI#ytlC!yihNl=fs?(pRyxt)u) zj*3)$AWMBzP=UeIyp!j;TWpQeD>D@9=!_ImgKA|0YXGlsj2PjggdSE~YG{M%$eGy( zqe3)2y$>L(<Q#P%BHA#&Q>}QZx3L8nGt^m1#+{|CHTJY8TWFj8RI6*x?R)Lz?JfZ< z6(=e#Y-T~_@zVN}=>I+(zEY1ic4Ou<3u$_LZY|+9i9G}F?dw|1TpQ0Jd&gD1cx_<! zP@|kDXk3tgKlhuP#J8F0l#*;I@Zm1S*ElnjSheatMniYO=A;MG+t`KmVU~eh=E+Xz zu-L*wJb8!m6dDud<i<207D$mzdTFAHI*X{~dT8$&u37K$=r6@NVChAt{)Hu_4>|D@ zzLn8_4#izJ#ZVdvV5rvL?C}D&^D9u~$^Ts9m>Wf%vG6hGuSAQq>wGfQ9MR|&-1Zn_ zHKvYQx=1$l<0S(3J?Qt3k`i1C4A!;qAnY>i^M?<$1ekT*aakllGW~9#EJ@mEGR1U{ zFHBN^4HXPx1p=9O56Tuw0MaJ{zK^4HM-Ovx0WiP>muFpHK#5|BYMRPkZ08~HdBeNI zSQJ|00dPnUMpcy>a@gtD$CVgyPk>5Nw%Wl9*k>g%vfpn}5H#F+DTk|HJc_7+4jMJq zV<Clq{<NV|)yXlPz<J7#@DrbKyMY+lC(tIS?OLUoNQsxi@)wps2e^jN#HZQ_krDL5 zYEaF8npo}!OQpmjgOiDm^z!1HTtd+=m0&`Ts3_(a{vVjS+2VS~@)=Zw?9snimKyI6 z?mMX(_uF={<w43mpAI6AxO|2y<^+^}EB5YLf_4aPsv97@)1p5LU`Kf#&g>1^-Yo(# zNi<4G?{#}oU+V*)?IjFn2Vw=cvyI4wIlxZxJK!BW1$WEy3}0$033LDzMrthM={%s= zX}{2hlt7)3v2A22gUSaMIVNgc6^~Rb+Q*?pmUucL#BV;IckN5ewQaJ7>@o1}qRyOI z8aHM*gbh|xDF-Cgzn8!kS=K#A``}r@Qle54xr&PjSujV%4_u8dW{`oumTp#o8P#|$ z$KWFSdY_4BMnLn5E{7nLmF%>3TcPjgk3L(=rHg^6FY@&rR_|?o5iu^Y3m6w(_t%$- zno_VN^^tU?C*+NNf*mAsU7APLMl7biX;?>GlU<;(%Y*#CW=aU(Zl-+gwp9d&U3Ob^ zx(;iYm9ee7sa+Ai<H9PtZsiAyrT9QlB2KsjJ!~SNseJ^8uncvjg=0^REPQ~lmmWY` zl89WLBja0pzuC=$4+XVZ*who!yl1HItOHgCTETn!K&5KC)*zsoLwI5~D&<^y;&`Xz zs(`mB29gJY8eBkuc_*$nKr7i0A;FRHWV1EFNi)jyNeY9Q?iWbuxQ^u-7?I>z+x%AY zMMW4S1lvuzTz1OuuG6DYzC#IC+xC^kM8Xkuw<G$Uc>vrP?F!s%{Z=CK2dyk@9+JN! z#RrD3Am#?Qtv`@Zq_ri(o}Vn2u?nGV<qB%MXa_u)GXTfs#?n-m_;dg29S81-@TkG+ zUCT|a7WoTA*qogk8aORw%mz=M5XrsenEYHg*m%cq)wA@!$YVouA>SJ@V*DqNZp}9B z6hSQD@qE<*J|FZkyl1@u4&*P;QCrt-FjSZm1#Chvh|Qlz2Ht%2Yt(WjRZb)Ilai1{ zYSCQEcD7x!3Ilb}y<nXsQ_d)OypbwoG*o$?^0UQaS*vP&+aQ#IZ002~B37{WvAfmw zq^R5NiRvH$PHZ3H61X@g{wjx!hs07S?f&1x93fFJ;ql>3aF$*Jv$*(1Cjjq>j=|{z zBaIe&io{3-d-8UJyDyc`F?lxSr#rTeK&k~^c?C6cbkBjL?lwqbg7S^L1>zdfyTOu< zuH$!w#j@6bw%~*7^NcN5jz`5+>Jt*dt}l{^pTO9k6U#5KXJ)@~fS{<wp@jIo%P}!c zp}SIgZw74)bsws+NF6<Yco-zUKsULsaRO0b0JgTC2rkAizu;2oL?tpTGhrFwi!Ld9 z<J;owLCh;oL>usjGLjF)KUSW@4N=$fSE_9)^mlnWqQLzI&jLK5B@sq^pHR!RNA<F^ z{sfdR5L4aCYC9+byI?>;_9>UN1~P36RC50Io0e8aHoos?6sBz~A2olG5Jt-3GI*g9 zZZ7Sqg%d25hQTI>ML61rg;MenEO8nizl74$Pgo5K1hoEnMiuI~(Jroip9_kuWCjk$ zrsLteRoE;GdyVd}niOM6@Wn$Lg09QM+HQb%ih1WBK9@;(gVn#FF0X-hy@6b(hWxsL z8+FUo>-=l~T66=2Q}_R8*1fybUuGtSqDD&#kFbzpmpM3J|BcO5ME*nPkMcUGw1ADc zIg=*P`SPv(sUtj|7XvAW9Wk&;brJ+Cq;_60|GS?7UGscn)Ihj1K~bEUN_49Ji)t02 zvlbLsj`1s7HEpR1#ecJQns(QE)>0dP%xK%3ixWUV3+f-b3WS7btf4DNK1!ieInZm@ z<&4`la=2r?jR0=B;$%c9flmR*&${i)fbksw=lUQTWyM0OOTOL#9gU@rDPa58Kb?l5 zb+{iNn#nK7<Jh70ul=H77Bv`bt>1791{0Q`t84zf&SQ@2#u|npEZ?>@(;FJ42tuIW zY)MY11SSPmX0dsQg^$wWYG;5flYA((DLh>nHec1r|DIYz>P|BxcnEC;qUS>vy6u1N zDZp)KHCwWGkZeGujHH^xSGZ`0`M7HUW!m1b?@ZwzuUpvpSOD$lMt)fuDvV+zm{FB? ztVn{8^fudY=}rgU1JFs-3N(L&9c2c)7q}RMmBiN4-fu%RBx-Tju__Wn!6%nRD#?Oc zHw=?7KtswOlBmx%OOkWFpr$GJt~Lb#^a<9{-GjTSdek%)&q#6qLSe%X+H(qSRrhF( zEaxlzY$_FholV*v*m>6G6(S+xRZ@rVhMIEaz(vp6<T!sCGZ$?!$AN{NDd(MC+7!`u zutJGQ^f^3wpiJC`)Jf=DvVe*jr0-Poe_H0=!go+s51NCIdKF$uM}46W+dAyr(-PUH z1X9EfoRYd*5hd|1I|c?f@(!WW3w(w^h_Gls_=vj^U!*Ws?^*b)1Ejz^mrH#tTY8V1 z_vf)CZQmvx=YmDa_i5T9{kC7%X};&DcQFReg1N_s@lkz9{{+Ri#lE1xyKX)sA<=29 zuwzr;V6yQ=*d9rOsd+3WgX#~Do0A@eQt)EK#fmoABn3|J4j9BVta4-t)uL}So6`N1 zmO>vEyRv|$edT>6a(9hNrT3cOf{#<to>gqEbJom!#zAQ+2mG~y2(bQp_=>ZngNh!u z?tTKmXIt$MillxZh$kfZqG4@ZZ#gDluncYoFx1^PIm#~dcf%7fuGE!h71P_{5pz6h z@Yt_SARv4k2Z@F5D9S7F60!#q!s{$3v9(9#!x_-r)Rh!W$$|RsIB}9_$kVbj?kF`> zk;CPRfshI?JuW<KXj?x(8BG#;Ml7hQr*9b-=}9m+LtVIJ3oXx<qz(wP+=i#kj*|^m z-VMR*^n9K9+QoA))!F^PcFj|2ct<O1LsfUw06!}p`?U}*sp?xZ(wq_u#UT(k@pMR* z$hk3Vx$p^OqWEbzlBUb3VNnFZ;5a$9INs%oZt^U>f?~2FO6IVn^sHyHb8`%>Zq)&l zq>wp>tUG|5pTT>^1F#FK#}BmdC2R^>G^GQb8(i4bmU?s>*X|V8;9h;*2*XX};5w(R z#n{_ri*c}@9tcp`*1U=A4<zG=SW#L3@q-0K!VY9GhS32!GVk=rWvP@L@U`zx^op1; zR4VBw`K`v*FhDVA2h^Foxho!^<S1?p$bxy;a_pvbMMS=$qKH8T7V=dM<(N>W<(OdE zW7~&ntBWSHqzuDSdR{-g0qS>$&VxYP^lSA&8+2<8CxHA$nGa8ZVrk{1!B>fE>vT?y zoGw=tSOJSnG=UUu7RU}x%W%BmU48>`a1^4kOj{>Kg%FmzL$BiyAT6`6ht!cwh(=ZW zv4}LH*AkHWbKWFo8(pP3Wm9c!!HlpZsfH;M(!<6R>-SJ={1<{h;X8+4v?m@<0U>J^ zQBl{H0bbx)I%rQM_r~^10UO_mJ?U*ofQvz%E6YoQsb1D$p3LL`Ch<Y<3K4qTYuUAv z0`hgzZ`CK;@j131JlWbs>#YMH<9lb1y_6pin|f~=Zyf?#*(W>)vZl4Tcn3i_WtMK3 z93Tm?hbLSRtV}t<^BhX_uT3-zlBH4#@+RHpu+MrQ5?54Gw1ze6KV*SU4eZ=F&$pXG zbLbr&Ng7C?@r6AV4_~`77bAHbhn6f9Hb`uBz8`*?LYdoU556Fn8QOg_2hSD_<xyKa z{=BzDuT4CH=UIaLeU?NmkXedSi`1gbmfhlp$t|_L-xh-fHMzf(xAEN;RSF?xG`*We zur%LpWvXJso+{a~1$_SJB#cxEk2dS@8B79ICYwSsm3Gm0ZW3yX2b28knFN@O=K|u( z#s=nXb-vn8Xp-Su6<#?fN1rGOFT}To=;{`4_runnhnMk)Ox?!Svj(hy&#&dzVqp5b zB2U;ZSkr;|uLNY4_wsM#s0gThf=HMswODq3WF9PSbOY1{cp=k`JB3=Q<*{wv`Un#r zdY@_!G+Nt}1Zqh)<%U@vYsl9VhGqy;w>|XxoskeDV7IZC3QrQGj&d_L7EMvKCPb%M z`V6ZU8vq2I1-;joXdC=+*n52r4oC5gji+<6N()jD;F}<o-sKegn@&>>6bxy<9A&?N zB-K$GmT$5k(WdHOejyzDtc^5}<RJhNN!a*+<qFz;wTA*}?+P$RQB5q1P;v$4^mp1I zT|=HQ-=b*wvl>B!^cJoLaWE!TODUW{h5#S!%A+~YprNBDGZaEEqn5&t3Yx}0>tPqu z5bdHvvfLAAmV~@PChgFW9z0hM2A6QVH2!=>2cWDFV*9LTG~DT_u<fAq-~ij4tna7W z#(1)Q|FbJdr{{yO*90TPJNUz$hUDzQ&<J58+u|Zh=GAjF+6o|$H0qGULing~9^5An zAiDFT50&mB-z=r5!CBeqF?5>S)Q{p?4i?dzD~ZZR9soBhF3bi1%NS3(nuT3mFT^8t zwd+sjMM(G3M(G{&QV2-keWMJLCdusj`RF_iMHS9aFvQ9t8I?ft%qz%{{=nN!08vSY z$dObra}9SeC7x1?3GUiPp?lhMx`15=>M4*Ec$Di7iyx8?y4cW=3Zg{cx5CrjY;_iC zR45*c!cLYdXj;H~I8|t`fP&D&EL0jSq0j`sV!FL_mvF7af~J$<eYK;AtX@WwW{a|@ zk1lMuuPFjWLW!ieu#pcU6fgs#=!ZJ=yf@=!VI!PQ(&$D&<CzQHVL-BM8b&Ujc1q_U zGoVhtGKvK?4tp!7gcZ_#>w92Q=r)|-&$kV?`c$AJpr)v&UISHESs1jkBvPu)lF{Uc z3_O(+4+7Zz%7U`(p4BOY$~9<|Z}%uD(l!&&mZLh%!>yvozUILfg!ztb_lXGj*n_lj zaa0U$+f;K^a<7+FqM^&&mzYkGnzri&8Ps=d3<X@MoAkeCokHUfQe$sxU$z2^>S=}g zDDKP6V(98j;2_ywY%ZGO{tVopaBeh<WMl=(c!s47W0K+v0%SqZu*VE|qEt};&-=@r zoe6G+z>Se;44;Ru%YOs{=(B#Tsci89XC7LtQt0ocfT_dT-IBb%e<8?Zo3i#B{}A=| zv}L6~l&w#i0qT<sD)~%%Bh<^4Lqunu6!ZO9hFWEnv$%-uSVBF|w!vrndmTkWZuTy< z6+=CJO1(MY;K?lX8CU@Gk#Ml4c*vmu-K(Sf6b|`$7D1mZm~~2=4p(n&lS1SEl_N)% z$_aLk+a@UpBO;zL3y`n7g!712)g86ZnkLRc&#ikC_O)h788(-=1+i(_HkZiAo_7|5 zEa2Z8LQ2o;e^GY60KK;1k?8eJ$mgP|3gCrb=ii;;1c?(m9MG_S-Kk8|fNMq#zE}#0 zSS47QmP}2-a#n1fqfv+?u1S6({j_EMqr)PMTUjQJd)>P+T=sjBO=V$hrZ%%w78I6u zd-*=9OPCE~zSWl(TmX-6M0vbB0SS)7EUtKEA>qlDJmnUpwjd!bezruCn<JN$XF?Cz zKtyQzWrD5(fU7}pgIg-KA8C9Cu}ktDHxdoZ32KXLKa9~p+lH_;CVyP}R&-IIP!s?F za`hE|+|Z_ctLz&rI|aD{9Qf=ffE!qW4r6fZpJ?T58BI=|Yd%54TV%28u*sCH3n53> z<OAKxGk`GCxLp`aWgVdXsafHMeb7+VbEAIB6e_68apfuz5OMLEDmBndjt4-qh~P1- zi*CuE@x$tFe!ymrUxt)%7U^(}xsGE{RQatW5Vl-K_lJH+IR;25YQHHUDYa=F5kwSz zK0l?WsS`8Uhy2D2*)FNuSfR5y56l(v2YGx1OPO}WWw^bLvU{jY7;JRssto;5(oTE$ z)HZkjuNp#t;^jVGtY8n)Yk<o1Krweg-6-ssLoU4~wV3EIMZzL^%ajPW<&7o2T~n8u ze}P^KBm~<{pS2+L;oN2?uXT4=0E^NW!V!eXwe@pwP6^EM_zq2`D2kvfV5ijN43Gu! znDiroLPcW^FNuSaz`7`g2KeKe624_iQ}iQ2#g6<weX=OLJB;~~8=5VZX-I_+^<gOd zh`aI^V6akW*q3VIyY>thID-F0$wt^foqiT3F<HLpD5;Ec2c1;oNpTBAE;)3TRNhW; z?u^I2mitK1?r%&*#{~|{EE=txLiSAbDBaFeX$PZ*q?PC59#R$Qa8+PIY*ZTxb;~@@ zED!EX|Gd)!FnA*(!hJPia;1TR8{Nj$EU10{rlVj|0UNvJ&4&^u9`AV!W}PO2g4@#@ z=THz8c(MjxDu!t+!zWMsDJ>So96m%OomR274o?j`xjJjfSDhls3?Rp%gJH5*PI~;; zDoUwb7RO-bzLz>LwCH33&xs_cVM<Kgd$li%iOTg`O(U_~fXFef@s*u`a;Z9{O)QI$ z$GmA#TTf5@Z&=QSR#ZjtFE_5gUuJRxg+ax3*5PBYyl%C4$b1$M5eR={0}pOG4ZqJ} zm;Z{`3e}VJs|8^cItDOyt|fPP@C9(it=Oo`O^R0dA1fQ5blS(>+Ln2DS$}*ii??I+ zsjbF*3E>Z>?Vw8yXD?YIkNKmAZ7t3@C?5Hw2R&0G{E=^PRS{sz0gBr-oNnUJ`_63k zerYeie!KuB0wJz@NL*(_9sBS8eDmkvYof}!-L|dvi3ITW*|*hxuUFGRrdun{Q@jpy z-zA$fv@A!sbNy@i0@zF^ZEk?@ufKQhjA7<;;BX{3*PtJ0s>H*evljLEq)_u#TtIu9 ztkdj+CDXQlStr$TXGg&9q!F2v#j>_PCB;NPXu@|6q2f34fGWv7dEK@uZKti^LC;k* z&wzzQOe5NQt^Ns0mUM5%x%NOr1_?4EciP0|r1s6(6BB7(mMnsb3qQk|6!uMV3bp(N zIw$k@^{>vHv#4S>AWj=T%Uhu9$q@EqDIIgwxQ&*8W?P*J!YpNQhr=I3MhFOKJRg8( zIE}|5Y0`Edk7<56F#XM@A%e=&T48c~+iHXO0R{AV+>vZ8;Lj`;)zEd4>bGjkHwfm2 zEG(M0Sd#Dd1dh=Hv$yC@^*2c>=oq%M)&J$zA%CJt+WnPJWzaOY^Qr~do%}naK~&m~ zO6*LcFCg-Imc1M`3#u@Q>kWasxNjWCjIlrrqbcfS!H&hP-U1t+b@DGPX4)}Llnlcn zIGeOl1Lf}&4?F;XvW~_CUTd)8`|?XAtTLXd*$#7Dl`hBU9NEHzArXuDd5AS2H(Y9V z0@+b>{}bvEDS~IW9BhAW5=m(0fAh!vOrfxu_nmmM?48#C<4;TP__TLL0G)xpZyQdW zj~6CWstTyzs4oi?TV0tJR%U^afYr%WYA6aCs^X`Cv0MKv<3i>WJJ0<oV_tM1VLV8_ zgk_|AwC~XUnr{1A>#bkFb?a{1+>clND5JK59u`p-X}>uWc*yOO!IyQ1Nhs}0+2E9f z*UBOe7(*1cJfTRx-h;Ux|4mAWvqCNdo$C<UVkyDhlL-HWb@Gj)6CODqh{%Y<vja=J z!T_W&{eT!YzlTITwmhZU?bNb<`!O+OG1?A2Od#}g2~uv>!vZ>D>X(b@YT;*}1J~1h zOS$DfO!{aE96soA6x%**=K6LL!R@{3j_u8I;Jgnz7s59l@oVl~DA2^2-mFIPHlCq7 zW69h<8aq1_m$6{mrMfqaW8WMBYe9v0G>Zvx99}RH)4)xY9;;V|iPM3IY(o;1oxKxM zn&zAj2nC9`Bd#w-I<eEVc6;L>Sx&V~`A*fdf?jz?vX48nsE((MKU5_dGN>9T<OT*D zAkw`F-WT&ZH7=3qkYSNYH*~r6X|!!~Wv40r941gSxz2`e@Mb!71iNAvY8J#`5uBp* z3n;^78SzK7#a6iqRUnabwPj3`Ki6k4zdDU0JC+k6L%=)Pey$p_-}}v1mG1`e&!F<8 zZFE`aFw4g>T#`gO7NUMUZQzp1kXXesDu^(4?2(y!U|J>{ynm^EKb*LE;!y#P$Ep50 zEe@kDd_~H7(#GYmfe|PJUw+U{D-y47@fMjUu?@!|+spdn_X6RRistD3@nG96K1<sm zWM_%7RK|yaSYOoD^A?K5)oDJ|&`8mcYe#MAR&)aWPi=1CraauffM!jU-t}|UvlG`x zv9I9qP(CA9%eOq_KDArod1NltVB}a7;b8ENT|7tudU(o)A5pb?fY~R+_SK?i=V;5` zvHj(mb2r{y8lF)RNKu;k#?KGpMswTd9@_fn8(1z>V17)^i`z+|zAcd0OFPgROQtb# zV7nz`Wrx5K(@gpdWGEF~Pw`UdQwuQQ`QWmvJT%EW4OM=pIrMAft|$C)(T-winYT{h zP8|T_M)KgfKt{IR|GU#UpYv^KJr)CwEJr({CU?Z=6dqDYbDoI}k(yHR1TyxzPay4B zoXMCb$8y?tz@`*7oDv@=r%%a%`=bn+ma?4<L6xEM2=d)}h}ETZ(pu_B*&oYCP#gIM z??tEal)GD+MRuRw0&G|eExOLaITTa_Ie|q%u<Hh5|Ga-Tbk3~FaAxdQ3I}&D-4OU| z(dD<EK{AzE&;ljrIq#7{X{7SC^Jl%XbT$QAGn$|EF>$q({#Es}?^n>?rMSsE6^ty3 zMg}$w5ug1?aA^LUwY@;2hoi)gli<>tBio_l<f~5i)cx&YO=v2^a4yl7C;wg5CUteX zpFmy^sHw5dGd6bURm-y|rJH{NUxIA%r=_zYKO0WeO%ak}ST1WjVNlJrFQ?4!&<gNW zITpfNKhGLtv@_SfTi$0ZfPY*A3!|iT^301E08%!T3sb%FvFE7l*5$9bUyotxVA>Yu z^XH2;cd?#z32pm19H+f(Am}qKuceBcp`U<Z5_g5KXMzbF;oH*T9MY3^DtrQ*prlh^ zz(OXRenHmzhyBgnN1`@1pmQY6s7~>r!YRgg)?VzYFsIETX{V1B=ZJ4?$Z?+a`weSq z0=#-#dv@9wzLb1PupB~#+k(aNuA(?>JT_%JFUUdi0*i|PiSKnlIspbvdZSzSJ``-H z8%&7G)J{HySWR`RK3NRk>zd;1LvrWu3$O?e34T%Zd7>dKpxVYCv4)DuQ<3*09hO8t z)}iqI$;IN)kHg!0T{#*#3z~LnYL}LJ2F_NxZ+>!BqUcTFNR8<M>CT@3a8Y}r3&65u z+L>g=M%F+=d_VcJ{gO^;U)8=LG3CX8!=%rOexsZ~G7l;};xRvW&@D$_W&Kx^3VuM} zLBEwx6O)JtGG;lN{6F{2)o<skzkB2$Nr~pvw*bL66cL+^M`ImlN5Ee61x{|lM;)dQ z{|NcS*A<Za!gW{VN?G8WTV$Q($51|zM_Pzwu!sa6tvf*32)hNC(7_@GBgJMOrdF{u z^bGc5(NB}<3^BNW02`M_VPJYVp`kV%WtF8tA2L6C@6$Jl$f49~V{oEdL>8YPHI}Pf z@7Bq(2pVfRVV#gv8&@>fpI@bYXW;n<weO+blY;NpPrS02jE73_s5X_r9roK8vSf$; zblAd?`(UEet2`XJ#!`yA!OkKE)J3)f10Z#WA<KfAU}L-`pG3JV?!gYG;m!_Z2&MZc zq|3tA2YWDYxj5H7lMA?BFln<h5qD1kbLmVDA|r&9F~4}HX;UF7P_evSssoA41IO#A z7qe?_g|7E4yyD2H<T-hS)~I-j$FH8^At2MwNPQqh>6=MgUtj$lU)h#C!uCqcZeuA- zw?U556J`8Syi<EX;Yx>E%Tqg&<BCSVaKAuHUe!?^iDkkq(VHU-+1qbS(RagB*le=f ze3zb&iu)plnOMqnD2CVk-ZHpuGSrer3$jH3&h!kKhV6JPLR5ssD0r?G<vbjeu$S+; zY5jfIMR-!b_mHUE1d8pFp^ww{s3svx3=~E#qlS<yK#+sKpQ&#~V-jB<2=8IO3Lk<{ z82Dt>C0L$H>(wOOb0H8bh`$h<HVL~ze3^#O0-Y6jxp7DNopc|DIP_Q^ET=oi`Lc3^ z8u~8@6o4+djAc!Xr@zvGpd)z)`Md0UMGBh0TDWW(b@sf>AoM#GgPL5XOgHOP$6tvn z=w#aMg~F0q(BYjXBF&LJbgu58CctnyE098J$_nC=W!#(hE(3mPueUo3Qm+@#yJ6$~ z3-CF!=QPGVSV*?+7&V|S{qVTw?4H0u?g-Cv+$5uI($uD4@3Vo5CP<3$@!=lKPXJu1 zlY)~_{CUmAE8WIhxxf+|o@~fs#<vE8_cf-*qZ8k+3y36l#pZ!RZnjF$YlR#FKi<Kd zfPzlHlWT%JRy&-z+p9_0dfyFAQz0#iN8k;xQ*Prxprq2BCS@#^w@NTXUoLEw@PX;X zz$}HOu5go`X?h1KWLVC1oC#(zi5qNDhK;S=L#LW!VE%j&=Wnhp@PN1X1f>gEJcWYA zRFDnnx|8=XYD3>-Lq2HXxlNSZK7ek;2s=ECveO85U>U<TZup&W3Vz^P+Whue)^8uC z+p%wc2qLKk4LRp)HPmKLdterw2H%Q~3+pum6hrWz_H*Ap$1Ms&+bOY`x}QZo$^*<4 zs{z>)!T)n;dpFR}-o>`Q4V!Nw!41mJi$ieN@^4olYDK{5!Vj_M3c?!&2l6-_fFU74 z)K;jp)H#174RlEU#(XPHaX@AH@VJ3mc2*+48U|o%u$j^llZ<v1Y}|8B5wMJBGPMm5 zIA3fFjyE!4(1&37o!bTO3viFGWy`N%i8P+=vO6z7P*%g(_`59X6T?zjOL_0%FOS-S zwZ+%TFO6{T5ryu%b-+V#sUgl6un0{DZV?ARFbX_7sVR=A{~6sYz9j43#A|W^^SC7S zPPK~sC6dAhb-z^2v~7jd4&r!Beo|ZG5|fnJd87OzI#agTO>S~dwB{~bTs?VUr^p@W z1L3PSo$L(gw}~(9fd6HKfQ<>u&A6E!l{MvZP_G%(H-IA3gpqT4pgZdw9*S<~I2I(I zYF>JRTHQ_n(s#o;%H;7IzJzDOrfRkl^jo}9ZA3d|yEhF`K_o8z>#|=6((xU<`4Gq# z#A}#|_LH7IL`{EcKAO&`oFaoT@*AhbsCL8@^IXQbu_W}ZI7q@4lPpHjlRcwR{p6n5 z8Ht1BYZu*6-Rr9*C3Kq2Jeq4jkMiM+j7cIsgEwrb_a7;?XZJpmOg&>QPJ<m7s4hL$ z-ISmUYtYrT1w7p`_yRIv7kR7nSSI)2pO+xO86v&QLECOT_=|vf%S7ObG#hahm&o_& zg|@Hl?uuAnC-4sSgY39+EZSm`Z4H3Cy6wXd9dVXW?O2XJo&eMMeW)=FM089Ec(O+V z(_tn}B3=f|P{WVeYS9vMe2*tRz#E}2;$~1xTF9Zuh&!tW5@^%m%5go4fdM1jt0nk+ zrz5kav3lJGlfAf(Fc8T-&SjI1ek=$L-Yp&=dAO+?sUb`kh_apCkV_zc_kbw4X;!^a z-6x{44<obnEqX0=3*dsM6)NLP0dD%C=u?4Roh-9A;>O%38oB`=ZYp9oM6HGI!iphG zmFT2{a`NX*RNZj82ACVy5^8RDlVK;_WIiqZ(SeAI0*e2?+YJ{wb}+!rrENe4)ZNaS zEYeOw9(PED2gZi;+2;I(@stL~BP8sGHqkD)x9YIZZedwL*Y#;#DlbQTijja&MDjSC z{vhS2;uJP(5_fiF*&>|e-R(Rj6l!edkA$M6PL>UtA)mSelCO#?23bP;)`R1i;haLj zDc3;<0>*byp*@3kDh21_lw8EO?rr6XFDIXM<9cI&=J=EMmZ!uFvXlM1PY+gTLDWhi zLkcX5WgSfOV)5b|zMST#)(~^q1xw`=|E?A>Z7S2CDZ^RDEF$6wzubN2QbNt(O|qfp z&v<;dUc3V4*=Y`R4Yz2nIc>;Ng-7D>)j;~QCFLarqf3E=?+t`JKJM|gZK2XT6(RR5 zMc_P~hFP~$lFq;x!ast$61`{R`>?IMUAxW&WC^d*4O?C$)HJ7jb>Be5NQ*itvB}yB zV#n5#ZhMd;xdj}B4$8oCR2Dxk@gd%T7C|O=7m6O_RoG>krSjM!99O^m;-dIgg&ZUs zJS-uo_N@A(-07IwblyXAciB?2LJ`SL^%xrV3~tGTtUq1RH_K72p#?lURdphTN~8@3 zR1i`}{xX$HfTmGuppl;O-E<cVcp;qx>r;M2e4+kB8N7;h%RDceQZ(o!^pmPacEP!Q za86gW?DxeMHuhwmGYe8HzqPN#t9%AGhf}oaRLYFoS5#hwxJ#KUOGn(y$2Qb1!D$Sx z_dhc**mFyC7#u7l+G#T}y)#jCa(Cc0hmR%63yxuxtsJVSpHpTd1`_zN3%K;U+Yl;O z)FEuAn%PMvG}DfA)4|u!aMBN8mi4ABp4vv3w|c`Xbbr5?cX-)_glOqoJxq*j=VEpS z>s=SefF`NI&aTGK!Luncyfy`d87Q!RGpRr@?W7(LecXOxTMu8Qea3DeoJDO#PTl_> zivMtS9nEbuNAR!UXdhg)IUJdD&b&bsEW#!U86+*kzuxmOvzVR5g9y1?<@B);9yUzq z>AoD~>nMb97-89wk@gY}M4du&C9Kj%&P7RKh`m0c#ki+;V6<(um3PKuc0PnmJF#RP z+N<P*OfiFGnML*qFY`9+Ma`_7uFxXCXJp=1aa1n$H1K@Vx$aM1!lErOYAm)dJotBA zDE8%M3>I8Uo0><-Z@Z0h7rtz0=BRkWUb2rK;tiEUS>cgkBr;92+E8mmkas5fHAYNx zq;|mTs1zYcbK7n~0aA$}UIr~%NW-^!o^mq)-TN>$CXx(uY}LV{SKgTH`l$L;=iB|n zNdQg)f+sKii=jv`Vi0@b=naP&V^VRAVs4I+lD1#tAHv1ULw(^(tI!-%NhIc9kQsl$ zJ5vpzoR7N$5kJMatAf;rSIkmTgG~#fOV0LbZ{?&UhILA=!!GR0C=3`FrnxdN%}q_x z$+FfUBTO@I$5p$7xu&%4EsrD&b6c&QWSn(<T!dVR1B)^reVve83WAWq5YNhccqEKy z)85QyyK~*$W)yDBMcd%$ZTRyi7Ajn^s{SsX0L8D}PL@GdRxu>W-)2-QQ!(YPUbq~m zoLBrh<hA(?ChUvD{pWvQ>Az)&*Y|u+StKh8CP%O~Y1Vn6>T{R6a#H%Tx|g%&(F_ry zb#9Db&$8xhuu?R|8%<`E`;csy8@uL)$X52Vcw1T(wC)iZ&cuJh(3zAFCm3L66?%f4 z>{&An%Wu!rMTb?LP7+U(FeK2x$6L_`MQ!>nEK18o#f*t^7r~YRQtBOUbrNTX>gx+4 z)5mz3jH(bA<$SHm_3Rj9GV9U^znSb^ioLh4R*G(-ak=H+%K}&a%Z~|gEe{E4uxesl zQ}7X9$q32gLug!4JLnKPrsh1aw}dpYKF**lPtn!WgqD!=)(a&L#yEC6SZWWRrUw{~ z;VY=d;hhBy4+s#TCf=B#KjcFo4Ebd)JikDomU%O0q;&S7k6_Kn$PDW;JA_D`l@wEF zOsbswxNw29xJkQKeTIQ~NjGMHQUpPhPR`V17shGD!p7KdN8hbzd+ZSzr8&<OQL9cN zH$e)640p|zYhr145HBqg^%#cv_%lfVwiQQXtm0dtf;ehckN!zh6LYBX(K$Il#E@29 zjEA6i!adLkG&5EzRH*qByHNV2a&&%x3&F_5gi&!J&iT@8POVH#f~Lo)gxUMBno>QF zz}7#*Be}b>>OaqXIM+UG+H39mdph&CS9Hj{)75=9{6V+lW!@j8EzhB$z-ihGZ;Rlb z)EqVSF*p!mQ0Y02|0((sTlSu;AeqG?a8|NIi1105xOG}kt!to@wN>f1*A0c|wzkSx zdTQ{Vl5Pd;h<nrjo0&30f_;|>uqR%q)MPh-#p(N2uZdWO{656S{o4eOEg$fLWdX$+ zl&Cra2M7EUStvd4)b9_B?4C0;*YjUgIi?tw&QIbKGR7*N$tp1$<U%jx3m3f{!etz> zq@Wogn}*3}=S3xlF^00u32Vj`lv8m@3X6e-vw{ckEhZw!Ta3F})G!%D!R|W*?;{+M zpTIGNk0badJY*OO`vK^cHpu9`Xjl6UnhAUzf0Ljfqz3LrWAX!tD(01|pR^P{DG)>Q zL5iN;Me9FKoQ$+3L7j54oOB3SF7%o4e`-pF^WHTIJq#j!+-iJvA4(Es2yPFUcxv7L z5WHA*#Wb!A-uq~m22L1R4EM$qnf-f+bV|7E?O9%NC_7tSpwmTJv&d0}tI+dwo#Xt2 zD)OY_r<C)7^-gMxFHXN?fA;MgW!}y^w`}dlKqB#eqxg~eKQ|hNG|$XRf)l?42AN&g zp=0pSl}9}UxHgskIxmM;p%(O%dJ6lKMM=ixkR7wTYEWkSwWMV@V~r84Q$~5kG+@ak zzSDb<OE-foj1%01?N8_d{KQ$2XbiKs`0ovsiJq~<F)CKL0T!ZZNtg_?O=7h_ECCH1 zb-6XbVVo=UU~)hlz7)BTXtnR<t1_6BxL!x|#xdF9y<-mMQ*8Ug3=Bop;b~0l-@i{v zG;5OSVMQ<&Gwu1kIjgIw#~$V~ZbiYLL6~Tl-0Eal3iojv>@`=;LouG_>tErVkp}k1 z`T(2=>LiO%MCcu1zKPl3!o=OhL|Roppte_|G@Xu(D(q(19HeW#TuWsn5$vGOFvVkh zL|Ri&sERjBGIk6sVa)KE!bmzcyWGKx0T0HIn%wxGlcuneRrac<mC8`hhZPI8p^CJ7 zR6Kaih|t`Hw<8K)u7RVNj?9wG5<`gz1+;bgcArnAo|ZR&1MJ0w4a3qB`(|tMb5Ui! z3$WNWLn-Xb;4YLDXxOw<ZFi1*={}(q`KSSJdjd%S38hZSmianvfuv>n+L#JnN8_nL zr*!w}sqB*Ppo^rL!(4+5GZ4r_0v<IPKc#&ottuF1Q9g^}4xaIbBW>Y$`1i?6S-3US zv0`b}OS+2}gLLM3z@<VEEe1Ch2Yq;MdDDCFN9tirM>K;0tf+Ua=3KzFntM7ijE!VS z4_gD84UN;1x5?z5j4_gS)R-#vo0Bpvqc2D~pQ)#e%7uR4yv?z>gc&BYM)h8+q!w4Y zbfmu2mz~Yb8mlmAHd?G@;&o7|FVRb;xC~K7LYj5Mx6<zX?WsWYix>D&NfB*Y4C}JZ z!S$zm$#LXbM<N%nOH7%I2T{>cjq#+~Qy9@dCdJr&AI9n3MQB_73=O2(_C{;q<7JE- z|D2P}Of{?^kptgaQgI{0{K;1OlUZ7LG3sHySB??b)5ynAwn#WxI_%QF8kK3Za5|H7 zMBXQF+3yj%t`#s#t;@~H3~}&^Ik4oGfJj3UX5d*JqgtKsXTzkrHdwkbm+<8b+q?@P z4VXenn%t3p(PVA3F`EA4Jv$BvFn*`Y>(*^SY@T{^&FpzrzA>vh0<{8vr=;l|0|O_F zxFWGMhHB$_KQHkp7)s6BhTU-LFX0kcBhb!RtXb%Jo;>}0UeHC1jXtf63Ua2<3`$Y$ z{IT^m#np8=tqM7>tE^F}6PJN@c))SS%b><cc56EPRpP?rl3U>u!FWT$C54pvNg~i) zOL#Z5Bznd*f>S38XZano3&(+B9!`yN6sNt+<iPYnSDw1-F_dMfXFxFuBp#^hsOAk% zl5v4*D^r>{9WD%^4k9eT$M8qi4Df;x`vC8Yi4okX+BmkH=fB227S`Q~cu}f_&LkGV zuQ8c_)54|wXDQXk1Ii?2AqY@(xcz{0usLVX^%g`ShPyQtOye$jTXN!ih^M5_x_pJ` zqUt~ol~2d(&H{cvGX=N?RWvLb$}Mr?ZQ6k$7}>#OoGU*ZjR=lt{M|rwzhnOBHqcZn z?x_7k>ZrioN=J)!F3A}y#)a~YMO3m4XP>@Mf?vp($ToW=T_1j@!$7&OnGEm}MDYd~ zwN*#OwbH|ud5B`lnqgV6Ht)D;a+{!>_z>84l0gPZH}gL9P>6BO|7q0RBdtJqcfpZE zKguU@z1$;Rt}JB0AXAh4mn2>`@*_}6C=i*xLW#A;T4B;B*HKV88rjumpp&yyn=pey ztPl%F)_!iLZW-vMM#E+yq+FzKK;E{xZVU{?N}(~o*v^{+bC;HB%M6XQuSEChEZ!E0 zbgqIiCW$is301Do(>CyXrF|1)a#8XtDt@Eq(U8gtUavnm2)kPe-t@`v1489r6jgYq zg{mK;O7G!i*c@QNTVuIo-oWrzo{VZH`mH~PQd;0Xb`2oD$IlO_1W}J|^lMB5Ea?bF zbuvfj70$8Ngdp@^nH|uySc3}#ui^P2SIg%xz%t+TVz`7c#0Z|!<J^X35Di&%cjbW> zlyHU>Ed*dDzb@JDUjc_D-7oXf7>=C?5_QA>*vywu{f#XRk}<h)$2w%GZ4>j?Qps?@ zD_R8Qa)*_T+(c;T@20g_j_@j)l&{Dfl&v4V2`=-PdyO%L9wXlP)I%zCmHMBtv&CZu zLz4f{ibzJK-b>cuDw#jInVb`UaF9Hm+m_SHP){@1qZb~bB5A*HlvW&dE->wYbkNXD zdJ8Dhxp#j!IejaYlXA9=nJ?ptb!c&I=F#e{j_b8!+PNNv(oZscW<or&+kugN-^z6{ z&Z}nrtYa)7^v-WWksz)*HN56_G_F}})bHeb;MyrUgUcvWHv)G%#yP|&$VPRZ87(!0 zLY?WXRk^*jTQp$D8hi|M_^`-qoI*cxj>wMkHqxkJlqUvw;r-93ArYgnP-FlW;VL1a za%i8X<AK|ha~TXH8u1Xbg3r=7fH(3ziiC_ywg2zZ7=854{Fy(RChf@k;TzO#-&=ov zn}hB<%7bdfoA=86T@2Ri-{fY2G>VEt&~%8jM!2V=>c7~6;f+x!zOckgVbsDxJ$C)k zTd+*~#su_@CM9+v#K}i~U5`zzi@I;uoRKeObN1m&{WeXrv!?|Qiw4J%OxE`6san7n z4m+G2#l35x+8=Go>lj4B%S3#fKb|WN5zRsB64_yWl`)O4{`ur5w%ocr>MX2ig=(rr ze<OKf8hp1Ab1Y_oGa@P^xtD_vdTJv~qB<vzt3K0B#^RYYM(qZ6zub*`gS4H$E;{OH z$S{65mA-M;=5*lq|1`mkG)XlbHvK^xOwMh?o?%4t`rgq`Fq)heCCsaIIPjZ>O5>k3 zswl2MjfBa<McN^ynf}l^wxRXi<mK;}-&{e@J_r>lMv(+@7Xi+%Vx~*LD|*v*-xx^M zTRMu*VQ2n)r~apPD@5ZNohh5bKct}Z#zOY6Wmer)N#XN+9};y6zo*LHgr2fH<0#;o zkPgOnnMZdiWZg1k7-j^$adSd3^<xCS#YSv(j2LIzL-lCkKnO2tNR1TuiSxDpI(}M_ zJ|xEiw6$oIu_<VpvKUW($`8HhioJ8RfUDpX`XG_ZtpXM39-}*}40`)y)|m^27l=(# zeKdOgiR97J!u^ES%4ZEp7+(&bW+F3Ja9gqHbPdSGbYoa`l&REYQ$OESQ}KEDPP)Nz zL@r>VOxEccs|!c|9b?pA(-M(&VSHkHi5j#}Q+_Fj5Dsnl8z3g<l}SS;_fd><SUD!U z6j;}@`g_*Ps@<DI%E|Y|MA@^tg-D@2{IlNbM-GKz)oE%`c=&G`=l8)nCWO=|T;H9A z&5-)Qs0N@nsQf{-ks6aK`=4Vv?oS~F)em0uw;7RnVbVMl9U>3*42tM!72n7x#cWdP zs(z56YJU;AbIcemGu<-~D8ktfr<0uXVT{3lFqw+@NU3bS==d_i()iqTC@Q-<T@ruf zMNq{cM-REtVm}C1V9%!|zl%|{7(SkxaboS2cFh6IsKC>=ZHQ@N2psoUm?-*rJfN}Z zcObA%;#y)9O}qT~F_RK#F~p?Tl45}u$y8kEbkavnE#=Bz4bqkC+rmaG_8Fn0zXbNl zD<w=k7^H>Cxl|_d=*8Z<P_!Wr=LJivOvh@U^B?8`MqBo-tc4r*%pGjMC}<cAaxC#K zYL_?he&BA*3R!x_<8u1^Mirq#XtWBy0Jmuv5-N!ony30j<&v0kib7h3VUgJowJQs0 zO?8vzn@qc|aH)!OW{v)kO)=&s_GM%)4B*LkaXtEAj9;D*WTa8`Jtc*4L(ECFu^c1Y znN6k{blhayA9S0AHZV=7p)LWwo3X8O7sDEBbe{0KiYLHJGR>Sj197x+zQ4wtos-b2 z_NyML@vKQHnOpNt_bO*%##1pz*mR%9Gm^*SUIim!t50w_p_=0ZgmZcK&pPPFU=sqq zfKY?H4i}We(u58JNOkr*{33-$^F*kS;R^mb?=)7mYR3>7QZdiCwKHI2DdvR+)xU?O z8a5rHOHtNY&a5!ZupUCAwRvnWfC1;_6bJ*Y@G2U<)3BFKd42nEc$uELJ=DIAHU?3P zV@%(?%(Q3%+Vep^HB3d4(7>`=wZpFUu(XR@4}5>|WFzuB|2d`)_&y<-Cg-#My18X6 zF*9Dqf_it<Y4jXB&K4PvrD3Tgm>qaH^f%n^4k@QdUx#kBA2d@QqvX6ZK(kG9G2brE zfw0U~F-o7kkH!0tsOq<uQB6iZfT~Zp&P}hHQMOT=W)+hhtVv6>X-1N-#<%f{<OOFN zf)@mK#`x9*baP6xT#sFE<It>EcQ-DS0D$b3<S5gfzlB1EX{VnU9;rIk(G#fR@-iy? z`@B<_)8b}yN!0oeQJnZ4uf_d=I}6LzJO*Q^1Z#uFI^pd3Ag>nhR{W%%ERVZtKV=GZ zF=`doKaRX+t@(<RX+rc_G)oyFohW%+k(8LTbCkL~O@NQzF^}L;{Iw@U^tSrN7Y0u_ z-jX3-ITozm8i)lp;H}a!nGi`fT*43JIL#IyzjzD0j0@SwJb?O}<v}xv3T-`M6O!-A z&*Cy<cH&pmW8)*fGX*hBvEIsOgLoU)9GWy#)gJvDqbSb0f=gbBsUgN>D!9(Dn)f^b ziV*6|>;c=vu8e}PI(^VZj!lIi<;Wzt3V?+}SZr@ny+~Of(i+EaFl5JDB5*daG&rf! z7s>|9JjF>zjB1r#g3Hb~Vl|A$#R6B~-xp>iRK3aCCfz?uV2J(<p<XlBmgb^kJUhyW z!1iszJ7PaTPjSyPKdA;4XBSvpW&VWfpbzd2I0@?&h)hWAc#Pcn_Yu~8!b7R1ollxG zJY+h_hQ-exT`OEte=MV^O;nXN@8%+BIPRLqx2<&~qjVi~Ny^Gbz5}*{=Qe7MGpvOp zHAxQqCX54Sx_0Gl9I*s|`6`~MbhqB8J?Oux<)#v2UCA+qQWyW&z#HD=6{k2+^GDqZ zYgr0Dsh}I#0R{%_F^rHmgq1EV!K6d@O_381wFd!;Ecz?zB2Z&-dZ8fL<flvG7kr(c z&&OFaPaak%(iVjCXeiD3x9vVEk}c(lNtJ5$uxR`vwlk92kN?NAOS+5>fWn_l%Qm~) z{K~bhZiX6Gfq?Btq0kRneTl}MxogTmi*H2!&OE;tyYdsWhy=#*)2fQO#W6=^_1k23 zQFtEGa)P&>pe)4ET>qIXx{MKw4o(d=J5t8wl6yMi==291tUf6fvTcB;u%(Hz{bT(3 zS_3g)?25s{R`RgxcAxk^^Q429qw}eFL0!TsC>(O@yf?kne3Ru+G7ZR+(8&?-uE?nz zmeUdZTaDDUAqtfjOJd?&c4BaeVMYuClIO-dk>YJ!we7O4+x+`5i$O%?pmVkjIgC+` zHqPh;QW4^eFP4#Y?n}P0k&+ow9bu~@Z(T3x=rJ~waXwbWD@X4=Pz}Pd63u)DHb)bC z1Us8u6r^|tB^HpZ=h9QkA+soB1z2!{Ajxf-CN97`^-Y~vrPza77&3XCz3-#1SQ1K| zr@f2$Rd%Gk>jnp|eLD-taI>gEbB0;?2{{-<j)Ab)sUCDrBsJKQi}wWLOw4FM##rk} zTJwNI4OtQZW4+#Oe-7!dX|8C7dcg=~Dl|z~x_j7DzLkw)cwjSk_R%>sk8t2)SOA@? zZ^J3B)x&whHXDhr8>t%fGHmUQQZ_Dg_l6-f)H8eiIc_eekR7h7Qf6gPW*tSLGOlx? zJic88x+o5g-&#we6q65qqb-&w&>f?9)--pMGme*a1u+Xk7xpZ^|0?=1XR&iFaeUb_ z$d-d}Oa~zkD&`bZBaqLyCbyr^HMiSs@112)cn0Ds`20J}WPBFd8Knq{0vd{42lH;& z8x;RWRW(q2WfJL`yfxv^O@xs4biEAJ>d1p9BGupbdyo`zU{hlfPrk~rst11prb$NR zDGbYaz`cE+3Hu=9omta@NLz#JjP*(R*6ze-wsZe`8{JB<&gKVlHyUxi{+k;fg%iZl z(@r{ZYsuk&fmAXV`sdpo$bVZ#xIHj}!lC!)*^m|)G)#+ZQ#{MuIjT`!nyR0(_`h-5 zvbF$CK(fDI1qsYCubXljn-aa1a0U~f{^OawTqlM4tz7nA1bd82r7MTM0=BW-i;rNP zBd4SomTCBLQacwPLG?Fm+TIJ&TE+U`ZwrsF*%Xg>w*z#X*qA>vwz2^yvcTU<qu>@q zRnnnjyPgVWSej9kl(J7=b8(&l7Q4k=_(Lbs2YyBGa|$deUt=73bid35Uog558fi?% z_%gr^*>w4p_CKfi7*8`quJ=I*8!<GLsg&oXs0Pl19QeZc+qX{3?6U?(w$32IQR<ba z`yv+JZZ(^h_=HoUTX!Q4Uk{C0o4L&(txiwE3Cy<GFS?4>De1$1J$@-(Z7KNRB{`L0 zy17-hNB<bTe^R(>RF5_~V@>0u^!YZSYNU&{Z?QQ`B!WT>VGDy3kM2Mu64%`(yWL#P z@I(H#&eidYEaoJe^wL}(BRv&HaO)pUhZGR(`0at)^`eK$s8AVG5wWFIsv=#=Tqs}| zMmdyA7gmxt$?4vh)h%wRPA;O=-R^YL{MU~rGoic;mr(;R8<U7O@~ydSyyEakSiqk8 zdtlvZVQs}I&GjKJ9me1?j(q)?{rsr^9NS^#`oDUmDI}GhGQDAyw+n_IZKxN#QIyg? zu-b7AaYcajt){IXnzKQ^GlGoI7%aSuMkTBMT<mvcoYH;an-6pgzSYvE*}EKizkB2n z6>MUZW7+4FzczS*S4ddWg~X$EEY&gO#FVibl&fFpVKT)LKn)?!2FvD(l@OHlY`r7d z-O~*0m^;adWRPYL_ev}%$98_45k{)}T)hlGsP^X02mbcY0?UBa8&sncvk@m|W8m%; zS88h%H67rd#iWk9qzTydSE)BSpd*yXf~=Wv6AxkdN8`2p`AtBO0yK|NS<ZLYAHoQo zVRDIpL=4(SKZFSCk%Q>#x<An=&a-dBQA1U;*<%RubNEsNG85P;j?qp!AH<#1yBp(z z`;I3PI#nXS(gff8z+w?~{{DSLVnGXGkB4{#yt5w4JfpD;GX$z>O_AK_WE?JS|4|mL zu;G>!pYwD*$lEPli?Ocd$~<>9VO+~DGO4hF6rtNCzLbY;8JDZij0{vJm{9rx_A>8O zrgZ9ez{u&hFvY&tTTn$#vMa{0B*-{d;}<*@d^CDR4pQpDXyeGf3?><+R>h#HF4mEt zz!P~DnUg`<^{k{=p)~DyoXBKSwF<_&-s_SEr8>IzNTg?8nUtkjD1#{a7=6<9_^s#^ zS_KJT({o~&W8Hnh8oY=X19xe@rr6s=Ri~#e*Qx2|8yT{JjU*_Jj0zYvV|@hA%wM#B zI#v0TypAr(LN$QKpSk^NBGucOxWJ%9LTbaeHif<Fxb??LPLVP&FAk|rZB7h*L?5*2 zoprXk*nfZGsU)dt(c&NU)i<)H-s5~Vj%cCNCVtH4a~>_%(;3&cFHfFcMs$ZHFb_TQ zU*(gza_^;Yh28L!qBiUWSRq_Zjb3gXSmVtaIx#kT(hwUix{U8+`Q$MV`1}Qo<{A-- zzzfa%y)NdFxAg&B?}i8w&9Rsx1<l`wZBp5ZDmWI#V@P5JR-_T)Gx4RAKZ7^!DemOV zb0|&fyB~JpUj8xyb_z*^^PiEAk#lnk*>CPqHDb}b(l&+6d$HXfq2!S^RNGl$ut5m% z4w++hoM5_g*Ky=ggXr#}rX~03gGx?l$}@z66<XatM$~1{uobt|vhD?AOVYEzVm<RB zU%(S3wZ!R<*?(JHsI|h0sQQ8ZKz9fgJM-t=J*Q%0)(d-<2+`T*uYcWC^zuIE1Sj@X z+sn6Lv2ECFu0~}s2y-=rn{0?r59apcc^1|sjMIt-VI-aZ8rqwAD|{WeJFRK<`lWCX z%iIt|P1>zF+v2oYB!u<2v2`Yd_2}KMB&t&+;cyXjGeP_C!3&R1Mma&PWp{~gve-5) z21Zqa2lU?{I7ey-mYuJ7&bh{gW_<N-Mw;#xVuusMA$Em{oQu^mGCC^hB*=)=+{IU~ z6hj^RGpJSSwaHjcXP(h)_#P@|gS%@YN~JWby7>Zq!pW<UagE+(+o(n|OfPyh<;|{# zvlpC~xPh**J;<D(38bM~zz1<{KFc$@cJR}0>$Qw{v|A!RpNu-aVY=5%7UdI0Io7+D z#tGUxmA@wPI^%f+g$5i8W7A})iwO1@qXOLkPtCKsOM9^CBj3&yCbp}6^s%@MyeX`x zF<iSp;a9DZIO_ibRFp>6UPWi4=xj5HWp2h)@%d5iai5jz&2gMn_<cTDUg~K	BZO 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 z%0D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%0Dfh7^`tGj}s<!(j1_Awf(-xf&H++oNSTIEI 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�^tyk~S<QXm7<^7$dMPfEb<t4v@@lhA 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�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%0A>VqhSqlFdmK|;4-CpBa{E{9ik%Ii;%5uD9A z7)eL29?^X`ucsxO;$th180A|+R2?xHDAcAYDbD5<Zl)ytYD@Ws<t}yf0+?B|99#Ir zQ;}t$HdkDdA-tr>62orst~k@e#@|@Twl#)E#iGPp8q_*gdVIZV!R_DoHEN^0tFw1x z6L*z1@CDCOxP@Tc<E<Yr#`E*?;eZj{iSMOm*3FN&r;O;%>p-7g9O>_^H(NBa<z(_n zk?O&$vY;=D_HtPYt!EcOQbYjwF;9y)VN<hQU4^%5h6+>)>HzNw?_A)J6M+=SCrUZ5 z${-X-$RZ>}Y#SEh=c9-c1(L%Otil%T0pDA`Je1rP{<_@eP_l_`txMO+l4!S5=qQTd zq`)I_ZRX}}*IF}-EM5)vfiaA!PY6*7YBxBc<|#Zj9vtv~iJjVQ(*ACV(ErTBv%HY4 zh+Hl9(uD6TNI#m92aBUS?yj(_p4q!A(|5!(wk$)fT#A@p7rl@4!T6gMx@zQQMJh4B z?ci7y+dx`etu~cFJTxp~{H8~?T(~+hkJL^^d-HsJM79-TV2$<}_-e2|BBSeR{`ijf z+^Ol*43JgUqd)PVDR~rh+ya#ic;OePG|i&4vPvqRP<_|h{xEqv!GXZO8I;P<uO%7V znv?#Ze@7nO=@0v;{4zO_pwdA$3@a5u>^pj4kmdDKHMd^+P@7;slHDGr8_Nnq?mv(y z^F?0B(qP_ncgXq<Y##Usn3GkEvgk;FvKgML!XapgSQfHYv3wHBL=6W;+ePbWw%Zo3 z8i+x2dj4RC!-&r5?6W{}um)s7zjXYjn;yKw+z@zLl}9)Q>2Bczn~48qv6Z|Bgn}RU zs@rb>B;xKXE_SNJinGgzlwJG;%$CH?qN=}r|FCIWa~Dy)s!;suF%splw^DDlKj>A1 zNS19`XqYCffcSRt@85bi9y<RfZ1rF@g?gY_w#qCpb|hOctnPdVHZ;-VtAFsB55d&h z7hX-�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	UK} zMf{n!+_9z-OdA$V8y27q3q>1LB47T-3r!p5iZ(1XZKz?Z!l^FJ{bSCPGt;@IdbwBy z;*fjkFXHzi#t%9+{vw!H2<neAhlL+4(c;-4Lw^hYB=)eys}TU{ImicR$>K$s=fwiE zfX688SAer%Hn>Pu5XR8-9IT4@@>B7IrfYwO6-xvCghe*_lVXN*zY9R|*h~AMgODq1 zl0`;?U2kMSg`z`56SuU54tJP!CK{o#Lr!UueUua70aL`8A;A+A>osNQ@t6lEIcECG zs*1fs|4Ho7ioJ6P9tj=}Tu|up^LZjTJ)6^fMIf}CnS`bT$9|#+St>+KoveDG*&CTM z{#q^KVNA8;kmZ;lebb)wxx%Qr{4cLKumWQvPU%}6FZ&aTeHJv`@Ge$9T_vBNtyas` zPAo&co>+UxXe}jiPnL@frk+pS>@e`&7m&2CNs4>5__$bpUUV@vF}1N%bRT)UW3#Gu zy+@E+FXt>uC84nt39}$|wfu~gfX=t8p=zO;U#rB{P{~X)F7>Krb(kO>Eu=sXYSvd> zuNDTdu%bJvP&!FuW>9`KgW?VciLUM%29w2Kq)<Sy5UMI#gsf*g&*wI3R!^6r7?m{P z5GSs)<p~Q&sPAdnyamd@^CkNOD4!7-7FCL{k8NV7O&eGMtgI7SJ*Pp!b5CZXkKM_3 zTg}&6<tNGM){;{s_xIM<b`kZBw=OnbLl1TS^DaWJx|0MYFvm$v0Yo2-PfsKIH3+At zalYL)RvSG-k*06{=ANQYP93UT7bT=jb<Fh4)%5fmL=^>hyu_sj%d>Q)fCl!_;MSs= z5;dZ0#Gg?MQ>k&%AUzTjF{w_(gz0yBki~gO-;dK?kAC;|qArG($cb)N7IbV8!Fxs3 z#XNTxx~9~c+v?x2#2edCm<IeQu){1^f+mpY5Neu0od4>?!P1Q6hL&yvMgPr?ZB;Q# ztkbKr<K~e?GHG-5Z}=y!t9e$Kz8vQsB~q60%i0ZOOzsQJGLLIfQ3b-hPOn$?Mfrmy z&&9dD3D2B<@7*@JwUa6zoj0^BN6T`<vNf{H6YGTB>F-P&o=z*4CKl6pp!mVCnPrsQ z(?oH5x#0sfFq#-?WM6b?a&duD1$&p{++Al7{jdVekxhjMoZQC)=1n|c=J0^`a%)^+ zE77TM(W5K(5FIIo5@}u(Nj`wsOODX``|IOmLj59?jaBY4Zx(##;tawfkh=IA)dEpJ z+z6#Ja$YTG1;m3w+d4%JiWOSyCNw%3ngrDx5W)1{Bc=sb2E0D}T0zOGO!hLc9Vl^4 zxNEjZz?xAKk(xN(ED>vYG$K`NERTpFVAes|`i>jXS=J}`$QDBIpuTVH_j?Nu+WXZT zdjFL^8r!RgmBxKF@B9Is7yF*)pA1hOw6Px@bA~T?as(ZnWNRfCasnL2xT8=Nv_nlU z{CxI&DI$Uv=z%l1sT-q)fyv8HG%|*aG%3jbx}r9%BJL-eg|xu>zHI67lA1{aKdtA# zzDO1*V0uRZFOg&9_U;tBMx`H#O|NNZRcD~xO`SnXl#w3x`hq-|&>q(?-%?0r`*pZA zN!m2De#D{&JNo%@3C8631(v@Ua{^Sx+zC!Sr=WUH_Ew-Wq#=Kc))1JRB#<At>WJW> zk#&{dI3{?|zHkt{ckNgd{DaN-NGT}sl?DANo2*slkbAS~0Z8)BNVKQrWN<^mJyv8X z;d(?6=1o%hAypuyP`p6u4aLijBki`8Y&+oLC=12LO#{@R5M1sFwx&BIl{b7&QRVYY zjiw~jAD653hNpGpCywN0Y7{gnr!=DZG@2^uXBm%z0+FbxICv+{QkjUTL53|_<fo8F z)Em3ysj%d*@#2_cbU5-06-HqtG>u$+kz{w?n1hOxIS3Y7C^$>fuW^<cqfk}m5WCtL z3_$0OKrG@ia=_SI89d)wv*_Al11eg^^%3@fi$bg!GtYTuy+tp9^H>{&3bP|@h(j_0 z!;5$q0^$WY68Vv|2(T3XJ0nbD>iU$>z<*0C9PHvR7v)ACGLAM08?ba{@~~Hr#S}Oz zZ9wc&IWps09hG@;(2zK6fIUVA#CB%ORlb%Heg9zCgc~%#=)gl~q6V#mUkPJ9Dp||! zu9k+h)L)n>a1Lv*G1o|s_4SE3I(di|+CrV7;_m8)HpQk_yDrLX(6dDz-BF!MlZ;W$ za~x+U>NHT8vyWAilL-#il7TO1f%kfRU~*CXs6$y?3KZ2KS^s%`x}J=GHD$3|F*sXe zri#cNXah<}iv_I^xGsi8f#-hUM8$K9=dLo_mqAP0^vQ7?P%Cn+uo;_iNtNC;DnOnJ zL7pySd!-4*>N}P*Yps1P{&=PI_*=n5=3t|mc}Oa|)@#7_DT%{l)N!IIEv;9{Vse#C zioyEt#cC;+33?U{2YvU>ULXGL%nN7<JzuWo$>t3!uKU)SI$my)8I)#RnNjSDId>`= zJ8b$pZ8NY^AGxSxDSA0MIM3!6o9kn7m>~0zdbL!p^%POsa*RzYyz{4IR!$Zmf}7<9 zMQa)i`xOLRSUC(QmjwjFtYbSo8M`cTDi48*C$@;LJV6B~?YuF@F(9c_P+j{xWM<{} zeS0Zl3Uir)D{{&l6Tp;7@&C0lJBHzYy3DSq%b%~333oj@@~%h>yi)Y~H`7>s8=Vb? z)9zM{t?d|(vegp%Cr*^(5+oiLfq<SNSVDdc%jSYWiC~6{oIhdxz9G?sU{+FHs>8A< zprl4>P%X7-UQ?U80tjLmBb80{xFi=5G=0;?_UYME*|2l7TkA%V!KQAO2$~I>LM<y3 zyygoO0&X*?ciB&v2{uRjcj85ACzFHDJKhb5wfIynuh!E1H?%NS%?@5SqxOHMNq5cV z8J&$0fy8Cs+s6U!@&32;mnSOqE3bBIreHndHo)fl0z*_l(yLH>jVup%$nX(m*o6qr zd$en$47-ocJ_{7D%d1~Ro5e3P*nQ-6>DU^3lU12}vSN>%ioGxF>cqOf3s@5zf$PT5 zL`M2rsUe?Y)=!snB_H>E+ma$!1~cqOvwb}UXS9t^0h`46$&B|_Z{GvA3R8;4{<|c+ z-I2h21Wf3zA9;`POA2<+<GL;5?;=85f)l=s{P}JyLP2MV{n29u{sFMZlfBJyIZM%$ ztJ4021tnxvdra^c01^(Gxwo0w0g3_6>;i#ohFLK#zj&edoU+Fp{dWpTXLg{m06!vD zb?)dT4zRJyKId>ykeK$8Hr@4A3VyCX3Mizt48Sn^1Q183e(3#zDh}eBtPVH*p?|=c z%uNn+lRUJO&oPYga_fo&FnwX6VJyrZ^QdNVX46O=JEPcM&slx%l1aG$`K^FoaUGsa zv4s}?IQ~Kl4rhyzrS6lN)t55xJJ<CDtESRd%dA+hG2M~q=X#nA(ooc4J*sTTj;;{_ z`};cf#T`vYiYIOg!Q3gsQJq9{-bF1cT1u0hOJgvzgwfqnaD)>wJz9b}llcBke=H#5 z1yNQaZ<x%efaU^6O#h9gSKnKv=S8;hc8ua}kR%IL12C*Ws)Ax1(1R+FSx~YStIC(? z+JKojiXjxSRU(vH^!V7;l0d+dR=Ee))+;!VY*m-+FJs|zX&V+^3Pqk0H{6M(1P5~n zY{pHdNz?tgk|E?(9GteL;Z)vYp~Uu7cf^YxSjMAoSPE~rNfM3=Az(18$C7kY#xCO> z*a#6*i=Pqw9E?Ju=Q}e2o(b>_;2HM>84M?A2!=KCCm_7%@gy>5k|m!>6yjum#%DSt z*qxl7obMK=@eN5B!aTTIlrTUDM^xs{Fx(k!14iSs3HOz?-@kQLcPHZ3&Q1o>V+ndw zl2?&n;<%q-ez;cm5ULp#Y0NB=ie~Ffmbo>UWdh8C5m8^1u#>Yb>yG4jNGpSLz=iJ< zoN_S|ox1hMC#CpCYC5pcdGCh;=QMKyXD(>yN220S`TD?A=mjI<eFe)z3G2!r=NN<@ zvo-P0L>}8fD~8eM@?&UOmm6NENis<NORFo�t4tU|NRW`dKzzdI3%`7*pAntzSVZ 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	@ObJtpwBy}TCQ(**f|Rni!-dYnKXOC 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�v(k^pNA>|g(Q5>E-&LIH@JrWZ#Q4tEIi-7Njq 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�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≷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 bFlY=kvty}2=QHc5tT~4`NVL9H@VEZ~xYs_j literal 0 HcmV?d00001 diff --git a/src/warden-server/contrib/wardenweb/datatables/Readme.txt b/src/warden-server/contrib/wardenweb/datatables/Readme.txt new file mode 100644 index 0000000..96a47cb --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/Readme.txt @@ -0,0 +1,11 @@ +This DataTables plugin (v1.9.x) for jQuery was developed out of the desire to allow highly configurable access to HTML tables with advanced access features. + +For detailed installation, usage and API instructions, please refer to the DataTables web-pages: http://www.datatables.net + +Questions, feature requests and bug reports (etc) can all be asked on the DataTables forums: http://www.datatables.net/forums/ + +The DataTables source can be found in the media/js/ directory of this archive. + +DataTables is released with dual licensing, using the GPL v2 (license-gpl2.txt) and an BSD style license (license-bsd.txt). You may select which of the two licenses you wish to use DataTables under. Please see the corresponding license file for details of these licenses. You are free to use, modify and distribute this software, but all copyright information must remain. + +If you discover any bugs in DataTables, have any suggestions for improvements or even if you just like using it, please free to get in touch with me: www.datatables.net/contact \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/demo_table.css b/src/warden-server/contrib/wardenweb/datatables/demo_table.css new file mode 100644 index 0000000..5fad8e6 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/demo_table.css @@ -0,0 +1,575 @@ +/* + * File: demo_table.css + * CVS: $Id$ + * Description: CSS descriptions for DataTables demo pages + * Author: Allan Jardine + * Created: Tue May 12 06:47:22 BST 2009 + * Modified: $Date$ by $Author$ + * Language: CSS + * Project: DataTables + * + * Copyright 2009 Allan Jardine. All Rights Reserved. + * + * *************************************************************************** + * DESCRIPTION + * + * The styles given here are suitable for the demos that are used with the standard DataTables + * distribution (see www.datatables.net). You will most likely wish to modify these styles to + * meet the layout requirements of your site. + * + * Common issues: + * 'full_numbers' pagination - I use an extra selector on the body tag to ensure that there is + * no conflict between the two pagination types. If you want to use full_numbers pagination + * ensure that you either have "example_alt_pagination" as a body class name, or better yet, + * modify that selector. + * Note that the path used for Images is relative. All images are by default located in + * ../images/ - relative to this CSS file. + */ + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * DataTables features + */ + +.dataTables_wrapper { + position: relative; + clear: both; + zoom: 1; /* Feeling sorry for IE */ +} + +.dataTables_processing { + position: absolute; + top: 50%; + left: 50%; + width: 250px; + height: 30px; + margin-left: -125px; + margin-top: -15px; + padding: 14px 0 2px 0; + border: 1px solid #ddd; + text-align: center; + color: #999; + font-size: 14px; + background-color: white; +} + +.dataTables_length { + width: 40%; + float: left; +} + +.dataTables_filter { + width: 50%; + float: right; + text-align: right; +} + +.dataTables_info { + width: 60%; + float: left; +} + +.dataTables_paginate { + float: right; + text-align: right; +} + +/* Pagination nested */ +.paginate_disabled_previous, .paginate_enabled_previous, +.paginate_disabled_next, .paginate_enabled_next { + height: 19px; + float: left; + cursor: pointer; + *cursor: hand; + color: #111 !important; +} +.paginate_disabled_previous:hover, .paginate_enabled_previous:hover, +.paginate_disabled_next:hover, .paginate_enabled_next:hover { + text-decoration: none !important; +} +.paginate_disabled_previous:active, .paginate_enabled_previous:active, +.paginate_disabled_next:active, .paginate_enabled_next:active { + outline: none; +} + +.paginate_disabled_previous, +.paginate_disabled_next { + color: #666 !important; +} +.paginate_disabled_previous, .paginate_enabled_previous { + padding-left: 23px; +} +.paginate_disabled_next, .paginate_enabled_next { + padding-right: 23px; + margin-left: 10px; +} + +.paginate_disabled_previous { + background: url('../images/back_disabled.png') no-repeat top left; +} + +.paginate_enabled_previous { + background: url('../images/back_enabled.png') no-repeat top left; +} +.paginate_enabled_previous:hover { + background: url('../images/back_enabled_hover.png') no-repeat top left; +} + +.paginate_disabled_next { + background: url('../images/forward_disabled.png') no-repeat top right; +} + +.paginate_enabled_next { + background: url('../images/forward_enabled.png') no-repeat top right; +} +.paginate_enabled_next:hover { + background: url('../images/forward_enabled_hover.png') no-repeat top right; +} + + + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * DataTables display + */ +table.display { + margin: 0 auto; + clear: both; + width: 100%; + + /* Note Firefox 3.5 and before have a bug with border-collapse + * ( https://bugzilla.mozilla.org/show%5Fbug.cgi?id=155955 ) + * border-spacing: 0; is one possible option. Conditional-css.com is + * useful for this kind of thing + * + * Further note IE 6/7 has problems when calculating widths with border width. + * It subtracts one px relative to the other browsers from the first column, and + * adds one to the end... + * + * If you want that effect I'd suggest setting a border-top/left on th/td's and + * then filling in the gaps with other borders. + */ +} + +table.display thead th { + padding: 3px 18px 3px 10px; + border-bottom: 1px solid black; + font-weight: bold; + cursor: pointer; + * cursor: hand; +} + +table.display tfoot th { + padding: 3px 18px 3px 10px; + border-top: 1px solid black; + font-weight: bold; +} + +table.display tr.heading2 td { + border-bottom: 1px solid #aaa; +} + +table.display td { + padding: 3px 10px; +} + +table.display td.center { + text-align: center; +} + + + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * DataTables sorting + */ + +.sorting_asc { + background: url('../images/sort_asc.png') no-repeat center right; +} + +.sorting_desc { + background: url('../images/sort_desc.png') no-repeat center right; +} + +.sorting { + background: url('../images/sort_both.png') no-repeat center right; +} + +.sorting_asc_disabled { + background: url('../images/sort_asc_disabled.png') no-repeat center right; +} + +.sorting_desc_disabled { + background: url('../images/sort_desc_disabled.png') no-repeat center right; +} + +th:active { + outline: none; +} + + + + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * DataTables row classes + */ +table.display tr.odd.gradeA { + background-color: #ddffdd; +} + +table.display tr.even.gradeA { + background-color: #eeffee; +} + +table.display tr.odd.gradeC { + background-color: #ddddff; +} + +table.display tr.even.gradeC { + background-color: #eeeeff; +} + +table.display tr.odd.gradeX { + background-color: #ffdddd; +} + +table.display tr.even.gradeX { + background-color: #ffeeee; +} + +table.display tr.odd.gradeU { + background-color: #ddd; +} + +table.display tr.even.gradeU { + background-color: #eee; +} + + +tr.odd { + background-color: #E2E4FF; +} + +tr.even { + background-color: white; +} + + + + + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Misc + */ +.dataTables_scroll { + clear: both; +} + +.dataTables_scrollBody { + *margin-top: -1px; +} + +.top, .bottom { + padding: 15px; + background-color: #F5F5F5; + border: 1px solid #CCCCCC; +} + +.top .dataTables_info { + float: none; +} + +.clear { + clear: both; +} + +.dataTables_empty { + text-align: center; +} + +tfoot input { + margin: 0.5em 0; + width: 100%; + color: #444; +} + +tfoot input.search_init { + color: #999; +} + +td.group { + background-color: #d1cfd0; + border-bottom: 2px solid #A19B9E; + border-top: 2px solid #A19B9E; +} + +td.details { + background-color: #d1cfd0; + border: 2px solid #A19B9E; +} + + +.example_alt_pagination div.dataTables_info { + width: 40%; +} + +.paging_full_numbers { + width: 400px; + height: 22px; + line-height: 22px; +} + +.paging_full_numbers a:active { + outline: none +} + +.paging_full_numbers a:hover { + text-decoration: none; +} + +.paging_full_numbers a.paginate_button, + .paging_full_numbers a.paginate_active { + border: 1px solid #aaa; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + padding: 2px 5px; + margin: 0 3px; + cursor: pointer; + *cursor: hand; + color: #333 !important; +} + +.paging_full_numbers a.paginate_button { + background-color: #ddd; +} + +.paging_full_numbers a.paginate_button:hover { + background-color: #ccc; + text-decoration: none !important; +} + +.paging_full_numbers a.paginate_active { + background-color: #99B3FF; +} + +table.display tr.even.row_selected td { + background-color: #B0BED9; +} + +table.display tr.odd.row_selected td { + background-color: #9FAFD1; +} + + +/* + * Sorting classes for columns + */ +/* For the standard odd/even */ +tr.odd td.sorting_1 { + background-color: #D3D6FF; +} + +tr.odd td.sorting_2 { + background-color: #DADCFF; +} + +tr.odd td.sorting_3 { + background-color: #E0E2FF; +} + +tr.even td.sorting_1 { + background-color: #EAEBFF; +} + +tr.even td.sorting_2 { + background-color: #F2F3FF; +} + +tr.even td.sorting_3 { + background-color: #F9F9FF; +} + + +/* For the Conditional-CSS grading rows */ +/* + Colour calculations (based off the main row colours) + Level 1: + dd > c4 + ee > d5 + Level 2: + dd > d1 + ee > e2 + */ +tr.odd.gradeA td.sorting_1 { + background-color: #c4ffc4; +} + +tr.odd.gradeA td.sorting_2 { + background-color: #d1ffd1; +} + +tr.odd.gradeA td.sorting_3 { + background-color: #d1ffd1; +} + +tr.even.gradeA td.sorting_1 { + background-color: #d5ffd5; +} + +tr.even.gradeA td.sorting_2 { + background-color: #e2ffe2; +} + +tr.even.gradeA td.sorting_3 { + background-color: #e2ffe2; +} + +tr.odd.gradeC td.sorting_1 { + background-color: #c4c4ff; +} + +tr.odd.gradeC td.sorting_2 { + background-color: #d1d1ff; +} + +tr.odd.gradeC td.sorting_3 { + background-color: #d1d1ff; +} + +tr.even.gradeC td.sorting_1 { + background-color: #d5d5ff; +} + +tr.even.gradeC td.sorting_2 { + background-color: #e2e2ff; +} + +tr.even.gradeC td.sorting_3 { + background-color: #e2e2ff; +} + +tr.odd.gradeX td.sorting_1 { + background-color: #ffc4c4; +} + +tr.odd.gradeX td.sorting_2 { + background-color: #ffd1d1; +} + +tr.odd.gradeX td.sorting_3 { + background-color: #ffd1d1; +} + +tr.even.gradeX td.sorting_1 { + background-color: #ffd5d5; +} + +tr.even.gradeX td.sorting_2 { + background-color: #ffe2e2; +} + +tr.even.gradeX td.sorting_3 { + background-color: #ffe2e2; +} + +tr.odd.gradeU td.sorting_1 { + background-color: #c4c4c4; +} + +tr.odd.gradeU td.sorting_2 { + background-color: #d1d1d1; +} + +tr.odd.gradeU td.sorting_3 { + background-color: #d1d1d1; +} + +tr.even.gradeU td.sorting_1 { + background-color: #d5d5d5; +} + +tr.even.gradeU td.sorting_2 { + background-color: #e2e2e2; +} + +tr.even.gradeU td.sorting_3 { + background-color: #e2e2e2; +} + + +/* + * Row highlighting example + */ +.ex_highlight #example tbody tr.even:hover, #example tbody tr.even td.highlighted { + background-color: #ECFFB3; +} + +.ex_highlight #example tbody tr.odd:hover, #example tbody tr.odd td.highlighted { + background-color: #E6FF99; +} + +.ex_highlight_row #example tr.even:hover { + background-color: #ECFFB3; +} + +.ex_highlight_row #example tr.even:hover td.sorting_1 { + background-color: #DDFF75; +} + +.ex_highlight_row #example tr.even:hover td.sorting_2 { + background-color: #E7FF9E; +} + +.ex_highlight_row #example tr.even:hover td.sorting_3 { + background-color: #E2FF89; +} + +.ex_highlight_row #example tr.odd:hover { + background-color: #E6FF99; +} + +.ex_highlight_row #example tr.odd:hover td.sorting_1 { + background-color: #D6FF5C; +} + +.ex_highlight_row #example tr.odd:hover td.sorting_2 { + background-color: #E0FF84; +} + +.ex_highlight_row #example tr.odd:hover td.sorting_3 { + background-color: #DBFF70; +} + + +/* + * KeyTable + */ +table.KeyTable td { + border: 3px solid transparent; +} + +table.KeyTable td.focus { + border: 3px solid #3366FF; +} + +table.display tr.gradeA { + background-color: #eeffee; +} + +table.display tr.gradeC { + background-color: #ddddff; +} + +table.display tr.gradeX { + background-color: #ffdddd; +} + +table.display tr.gradeU { + background-color: #ddd; +} + +div.box { + height: 100px; + padding: 10px; + overflow: auto; + border: 1px solid #8080FF; + background-color: #E5E5FF; +} diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/column_render.html b/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/column_render.html new file mode 100644 index 0000000..2c493be --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/column_render.html @@ -0,0 +1,619 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + $('#example').dataTable( { + "aoColumnDefs": [ + { + "fnRender": function ( oObj, sVal ) { + return sVal +' '+ oObj.aData[3]; + }, + "aTargets": [ 0 ] + }, + { "bVisible": false, "aTargets": [ 3 ] }, + { "sClass": "center", "aTargets": [ 4 ] } + ] + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables with column rendering + </div> + + <h1>Preamble</h1> + <p>You may specify a function for each column to render the available data in a specific manner which will be called when the table is drawn. In this example I've appended the rendering engine version to the rendering engine name in the first column, and hidden the version column.</p> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td>Internet Explorer 4.0</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + $('#example').dataTable( { + "aoColumnDefs": [ + { + "fnRender": function ( oObj, sVal ) { + return sVal +' '+ oObj.aData[3]; + }, + "aTargets": [ 0 ] + }, + { "bVisible": false, "aTargets": [ 3 ] }, + { "sClass": "center", "aTargets": [ 4 ] } + ] + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/complex_header.html b/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/complex_header.html new file mode 100644 index 0000000..6bd0425 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/complex_header.html @@ -0,0 +1,616 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + $('#example').dataTable( { + "aoColumnDefs": [ + { "bVisible": false, "aTargets": [2] } + ] + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables complex header example (rowspan and colspan) + </div> + + <h1>Preamble</h1> + <p>Complex headers (using colspan / rowspan) can be used to group columns of similar information in DataTables, creating a very powerful visual effect. In addition to the basic behaviour, DataTables can also take colspan and rowspans into account when working with hidden columns. The colspan and rowspan attributes for each cell are automatically calculated and rendered on the page for you. This also allows <a href="http://datatables.net/extras/colvis/">the ColVis extra</a> for DataTables to work great with hidden columns.</p> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th rowspan="2">Rendering engine</th> + <th rowspan="2">Browser</th> + <th colspan="3">Details</th> + </tr> + <tr> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tfoot> + <tr> + <th rowspan="2">Rendering engine</th> + <th rowspan="2">Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + <tr> + <th colspan="3">Details</th> + </tr> + </tfoot> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + $('#example').dataTable( { + "aoColumnDefs": [ + { "bVisible": false, "aTargets": [2] } + ] + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/defaults.html b/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/defaults.html new file mode 100644 index 0000000..6c22ac5 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/defaults.html @@ -0,0 +1,613 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + $.extend( $.fn.dataTable.defaults, { + "bFilter": false, + "bSort": false + } ); + + $('#example').dataTable(); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables - setting defaults example + </div> + + <h1>Preamble</h1> + <p>When working with DataTables over multiple pages it is often useful to set the initialisation defaults to common values (for example you might want to set <i>sDom</i> to a common value so all tables get the same layout). This can be done using the <i>$.fn.dataTable.defaults</i> object. This object will take all the same parameters as the DataTables initialisation object, but in this case you are setting the default for all future initialisations of DataTables.</p> + + <p>This example shows the filtering and sorting features of DataTables being disabled by default, which is reflected in the table when it is initialised, as can be seen below.</p> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="odd gradeX"> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center"> 4</td> + <td class="center">X</td> + </tr> + <tr class="even gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="odd gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="even gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="odd gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="even gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + $.extend( $.fn.dataTable.defaults, { + "bFilter": false, + "bSort": false + } ); + + $('#example').dataTable(); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/dom_multiple_elements.html b/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/dom_multiple_elements.html new file mode 100644 index 0000000..ad399e0 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/dom_multiple_elements.html @@ -0,0 +1,612 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + div.dataTables_info { + padding-bottom: 10px; + } + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + $('#example').dataTable( { + "sDom": '<"top"iflp<"clear">>rt<"bottom"iflp<"clear">>' + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables DOM positioning - multiple instances example + </div> + + <h1>Preamble</h1> + <p>As is described by the basic <a href="../basic_init/dom.html">DOM positioning example</a> you can use the sDom initialisation parameter to move DataTables features around the table to where you want them. However you can also use sDom to create multiple instances of these table controls. Simply include the feature's identification letter where you want it to appear, as many times as you wish, and the controls will all sync up.</p> + <p>This is shown in the demo below where for four key build-in features are duplicated above and below the table. Note that obviously the table ('t') should be included only once.</p> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td> + Internet + Explorer + 4.0 + </td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + $('#example').dataTable( { + "sDom": '<"top"iflp<"clear">>rt<"bottom"iflp<"clear">>' + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/dom_toolbar.html b/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/dom_toolbar.html new file mode 100644 index 0000000..f1ffa4b --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/dom_toolbar.html @@ -0,0 +1,617 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + div.dataTables_info { + padding-bottom: 10px; + } + .toolbar { + float: left; + } + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + $('#example').dataTable( { + "sDom": '<"toolbar">frtip' + } ); + $("div.toolbar").html('<b>Custom tool bar! Text/images etc.</b>'); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables Custom DOM additions + </div> + + <h1>Preamble</h1> + <p>DataTables inserts DOM elements around the table to control DataTables features, and you can make use of this mechanism as well to insert your own custom elements. In this example a DIV with a class of 'toolbar' is created using sDom, and then HTML is inserted into the created DIV once the table has been initialised. You could put whatever HTML you want into the toolbar and add event handlers etc.</p> + <p>For more complex DOM manipulation around the table, you might want to consider making use of DataTables <a href="/development/features">feature plug-in API</a>, which is used for <a href="/release-datatables/extras/TableTools/">TableTools</a> and other DataTables plug-ins.</p> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td> + Internet + Explorer + 4.0 + </td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + $('#example').dataTable( { + "sDom": '<"toolbar">frtip' + } ); + $("div.toolbar").html('<b>Custom tool bar! Text/images etc.</b>'); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/dt_events.html b/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/dt_events.html new file mode 100644 index 0000000..1d1640c --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/dt_events.html @@ -0,0 +1,623 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + function eventFired( type ) { + var n = document.getElementById('demo_info'); + n.innerHTML += '<div>'+type+' event - '+new Date().getTime()+'</div>'; + n.scrollTop = n.scrollHeight; + } + + $(document).ready(function() { + $('#example') + .bind('sort', function () { eventFired( 'Sort' ); }) + .bind('filter', function () { eventFired( 'Filter' ); }) + .bind('page', function () { eventFired( 'Page' ); }) + .dataTable(); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables | events example + </div> + + <h1>Preamble</h1> + <p>DataTables can fire a number of custom events which you can bind to, allowing your code to perform custom actions when the events occured. This example shows the use of the <i>sort</i>, <i>filter</i> and <i>page</i> events and will add a nitofication that the event fired to an element on the page to show that they have indeed fired.</p> + + <h1>Live example</h1> + <div id="demo_info"></div> + + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example" width="100%"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="odd gradeX"> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center"> 4</td> + <td class="center">X</td> + </tr> + <tr class="even gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="odd gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="even gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="odd gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="even gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">function eventFired( type ) { + var n = document.getElementById('demo_info'); + n.innerHTML += '<:div>:'+type+' event - '+new Date().getTime()+'<:/div>:'; + n.scrollTop = n.scrollHeight; +} + +$(document).ready(function() { + $('#example') + .bind('sort', function () { eventFired( 'Sort' ); }) + .bind('filter', function () { eventFired( 'Filter' ); }) + .bind('page', function () { eventFired( 'Page' ); }) + .dataTable(); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/events_live.html b/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/events_live.html new file mode 100644 index 0000000..c031d24 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/events_live.html @@ -0,0 +1,645 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + @import "../examples_support/jquery.tooltip.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" language="javascript" src="../examples_support/jquery.tooltip.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + /* Init DataTables */ + $('#example').dataTable(); + + /* Add events */ + $('#example tbody tr').live('click', function () { + var sTitle; + var nTds = $('td', this); + var sBrowser = $(nTds[1]).text(); + var sGrade = $(nTds[4]).text(); + + if ( sGrade == "A" ) + sTitle = sBrowser+' will provide a first class (A) level of CSS support.'; + else if ( sGrade == "C" ) + sTitle = sBrowser+' will provide a core (C) level of CSS support.'; + else if ( sGrade == "X" ) + sTitle = sBrowser+' does not provide CSS support or has a broken implementation. Block CSS.'; + else + sTitle = sBrowser+' will provide an undefined level of CSS support.'; + + alert( sTitle ) + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables - live events example + </div> + + <h1>Preamble</h1> + <p>Events assigned to the table can be exceptionally useful for user interaction, however you must be aware that DataTables will add and remove rows from the DOM as they are needed (i.e. when paging only the visible elements are actually available in the DOM). As such, this can lead to the odd hiccup when working with events. One of the best ways of dealing with this is through the use of live events, as shown in this example.</p> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td>Internet + Explorer + 4.0 + </td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + /* Init DataTables */ + $('#example').dataTable(); + + /* Add events */ + $('#example tbody tr').live('click', function () { + var sTitle; + var nTds = $('td', this); + var sBrowser = $(nTds[1]).text(); + var sGrade = $(nTds[4]).text(); + + if ( sGrade == "A" ) + sTitle = sBrowser+' will provide a first class (A) level of CSS support.'; + else if ( sGrade == "C" ) + sTitle = sBrowser+' will provide a core (C) level of CSS support.'; + else if ( sGrade == "X" ) + sTitle = sBrowser+' does not provide CSS support or has a broken implementation. Block CSS.'; + else + sTitle = sBrowser+' will provide an undefined level of CSS support.'; + + alert( sTitle ) + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/events_post_init.html b/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/events_post_init.html new file mode 100644 index 0000000..00cbac4 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/events_post_init.html @@ -0,0 +1,668 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + @import "../examples_support/jquery.tooltip.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" language="javascript" src="../examples_support/jquery.tooltip.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + /* + * First step is to create title attributes for the rows in the table + * This isn't needed if the required 'title' attribute is already set in the HTML in the + * DOM + */ + $('#example tbody tr').each( function() { + var sTitle; + var nTds = $('td', this); + var sBrowser = $(nTds[1]).text(); + var sGrade = $(nTds[4]).text(); + + if ( sGrade == "A" ) + sTitle = sBrowser+' will provide a first class (A) level of CSS support.'; + else if ( sGrade == "C" ) + sTitle = sBrowser+' will provide a core (C) level of CSS support.'; + else if ( sGrade == "X" ) + sTitle = sBrowser+' does not provide CSS support or has a broken implementation. Block CSS.'; + else + sTitle = sBrowser+' will provide an undefined level of CSS support.'; + + this.setAttribute( 'title', sTitle ); + } ); + + /* Init DataTables */ + var oTable = $('#example').dataTable(); + + /* Apply the tooltips */ + oTable.$('tr').tooltip( { + "delay": 0, + "track": true, + "fade": 250 + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables events (post-initialisation) example + </div> + + <h1>Preamble</h1> + <p>Events which are assigned to the table elements are retained by DataTables such that they will still work as you would expect, even after changing the sort order etc. (no need to reapply the event handlers). You can do this at any time, although if you apply the handlers after the table has been initialised there is an extra set. Rather then querying the DOM to get all rows (since they aren't there) you can use the '$' API method that DataTables provides which does a jQuery selector on the whole table and returns a jQuery object.</p> + <p>This example shows the tooltip plug-in being applied to the table after initialisation.</p> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td>Internet + Explorer + 4.0 + </td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + /* + * First step is to create title attributes for the rows in the table + * This isn't needed if the required 'title' attribute is already set in the HTML in the + * DOM + */ + $('#example tbody tr').each( function() { + var sTitle; + var nTds = $('td', this); + var sBrowser = $(nTds[1]).text(); + var sGrade = $(nTds[4]).text(); + + if ( sGrade == "A" ) + sTitle = sBrowser+' will provide a first class (A) level of CSS support.'; + else if ( sGrade == "C" ) + sTitle = sBrowser+' will provide a core (C) level of CSS support.'; + else if ( sGrade == "X" ) + sTitle = sBrowser+' does not provide CSS support or has a broken implementation. Block CSS.'; + else + sTitle = sBrowser+' will provide an undefined level of CSS support.'; + + this.setAttribute( 'title', sTitle ); + } ); + + /* Init DataTables */ + var oTable = $('#example').dataTable(); + + /* Apply the tooltips */ + oTable.$('tr').tooltip( { + "delay": 0, + "track": true, + "fade": 250 + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/events_pre_init.html b/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/events_pre_init.html new file mode 100644 index 0000000..68fdb55 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/events_pre_init.html @@ -0,0 +1,667 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + @import "../examples_support/jquery.tooltip.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" language="javascript" src="../examples_support/jquery.tooltip.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + /* + * First step is to create title attributes for the rows in the table + * This isn't needed if the required 'title' attribute is already set in the HTML in the + * DOM + */ + $('#example tbody tr').each( function() { + var sTitle; + var nTds = $('td', this); + var sBrowser = $(nTds[1]).text(); + var sGrade = $(nTds[4]).text(); + + if ( sGrade == "A" ) + sTitle = sBrowser+' will provide a first class (A) level of CSS support.'; + else if ( sGrade == "C" ) + sTitle = sBrowser+' will provide a core (C) level of CSS support.'; + else if ( sGrade == "X" ) + sTitle = sBrowser+' does not provide CSS support or has a broken implementation. Block CSS.'; + else + sTitle = sBrowser+' will provide an undefined level of CSS support.'; + + this.setAttribute( 'title', sTitle ); + } ); + + /* Apply the tooltips */ + $('#example tbody tr[title]').tooltip( { + "delay": 0, + "track": true, + "fade": 250 + } ); + + /* Init DataTables */ + $('#example').dataTable(); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables events (pre-initialisation) example + </div> + + <h1>Preamble</h1> + <p>Events which are assigned to the table elements are retained by DataTables such that they will still work as you would expect, even after changing the sort order etc. (no need to reapply the event handlers). If you apply the event handlers before you initialise DataTables, you just do this in the normal way. This is shown in this example where the call <b>$('#example tbody tr[title]').tooltip();</b> is made before the table is initialised.</p> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td>Internet + Explorer + 4.0 + </td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + /* + * First step is to create title attributes for the rows in the table + * This isn't needed if the required 'title' attribute is already set in the HTML in the + * DOM + */ + $('#example tbody tr').each( function() { + var sTitle; + var nTds = $('td', this); + var sBrowser = $(nTds[1]).text(); + var sGrade = $(nTds[4]).text(); + + if ( sGrade == "A" ) + sTitle = sBrowser+' will provide a first class (A) level of CSS support.'; + else if ( sGrade == "C" ) + sTitle = sBrowser+' will provide a core (C) level of CSS support.'; + else if ( sGrade == "X" ) + sTitle = sBrowser+' does not provide CSS support or has a broken implementation. Block CSS.'; + else + sTitle = sBrowser+' will provide an undefined level of CSS support.'; + + this.setAttribute( 'title', sTitle ); + } ); + + /* Apply the tooltips */ + $('#example tbody tr[title]').tooltip( { + "delay": 0, + "track": true, + "fade": 250 + } ); + + /* Init DataTables */ + $('#example').dataTable(); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/footer_callback.html b/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/footer_callback.html new file mode 100644 index 0000000..b0924ba --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/footer_callback.html @@ -0,0 +1,651 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + $('#example').dataTable( { + "fnFooterCallback": function ( nRow, aaData, iStart, iEnd, aiDisplay ) { + /* + * Calculate the total market share for all browsers in this table (ie inc. outside + * the pagination) + */ + var iTotalMarket = 0; + for ( var i=0 ; i<aaData.length ; i++ ) + { + iTotalMarket += aaData[i][4]*1; + } + + /* Calculate the market share for browsers on this page */ + var iPageMarket = 0; + for ( var i=iStart ; i<iEnd ; i++ ) + { + iPageMarket += aaData[ aiDisplay[i] ][4]*1; + } + + /* Modify the footer row to match what we want */ + var nCells = nRow.getElementsByTagName('th'); + nCells[1].innerHTML = parseInt(iPageMarket * 100)/100 + + '% ('+ parseInt(iTotalMarket * 100)/100 +'% total)'; + } + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables footer callback example + </div> + + <h1>Preamble</h1> + <p>DataTables using the header and footer callback manipulation functions (fnHeaderCallback() and fnFooterCallback()) you can perform some powerful and useful data manipulation. The example given below shows how a callback function can be used to total up visible (and hidden) data, taking into account all of DataTable's features (pagination, filtering etc).</p> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Engine version</th> + <th>CSS grade</th> + <th style="width: 150px">Market share (%)</th> + </tr> + </thead> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td> + Internet + Explorer + 4.0 + </td> + <td class="center">4</td> + <td class="center">X</td> + <td class="center">0.01</td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td class="center">5</td> + <td class="center">C</td> + <td class="center">0.1</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td class="center">5.5</td> + <td class="center">A</td> + <td class="center">0.5</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td class="center">6</td> + <td class="center">A</td> + <td class="center">36</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td class="center">7</td> + <td class="center">A</td> + <td class="center">41</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td class="center">6</td> + <td class="center">A</td> + <td class="center">1</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td class="center">1.7</td> + <td class="center">A</td> + <td class="center">0.1</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td class="center">1.8</td> + <td class="center">A</td> + <td class="center">0.5</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td class="center">1.8</td> + <td class="center">A</td> + <td class="center">7</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td class="center">1.9</td> + <td class="center">A</td> + <td class="center">9</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td class="center">1.8</td> + <td class="center">A</td> + <td class="center">0.01</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td class="center">1.8</td> + <td class="center">A</td> + <td class="center">0.01</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + <td class="center">0.01</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td class="center">1.7</td> + <td class="center">A</td> + <td class="center">0.01</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td class="center">1.8</td> + <td class="center">A</td> + <td class="center">0.01</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td class="center">1</td> + <td class="center">A</td> + <td class="center">0.01</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td class="center">1.1</td> + <td class="center">A</td> + <td class="center">0.01</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td class="center">1.2</td> + <td class="center">A</td> + <td class="center">0.01</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td class="center">1.3</td> + <td class="center">A</td> + <td class="center">0.01</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td class="center">1.4</td> + <td class="center">A</td> + <td class="center">0.01</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td class="center">1.5</td> + <td class="center">A</td> + <td class="center">0.01</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td class="center">1.6</td> + <td class="center">A</td> + <td class="center">0.01</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td class="center">1.7</td> + <td class="center">A</td> + <td class="center">0.01</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td class="center">1.8</td> + <td class="center">A</td> + <td class="center">0.01</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td class="center">1.8</td> + <td class="center">A</td> + <td class="center">0.01</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td class="center">1.8</td> + <td class="center">A</td> + <td class="center">0.01</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td class="center">125.5</td> + <td class="center">A</td> + <td class="center">0.01</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + <td class="center">0.01</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td class="center">419.3</td> + <td class="center">A</td> + <td class="center">1</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td class="center">522.1</td> + <td class="center">A</td> + <td class="center">2.2</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td class="center">420</td> + <td class="center">A</td> + <td class="center">0.01</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td class="center">420.1</td> + <td class="center">A</td> + <td class="center">0.05</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + <td class="center">0.01</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td class="center">-</td> + <td class="center">A</td> + <td class="center">0.01</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td class="center">-</td> + <td class="center">A</td> + <td class="center">0.01</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td class="center">-</td> + <td class="center">A</td> + <td class="center">0.01</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td class="center">-</td> + <td class="center">A</td> + <td class="center">0.01</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td class="center">-</td> + <td class="center">A</td> + <td class="center">0.1</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td class="center">-</td> + <td class="center">A</td> + <td class="center">0.2</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td class="center">-</td> + <td class="center">A</td> + <td class="center">0.8</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td class="center">-</td> + <td class="center">A</td> + <td class="center">0.01</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td class="center">-</td> + <td class="center">A</td> + <td class="center">0.01</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + <td class="center">0.01</td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + <td class="center">0.01</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + <td class="center">0.01</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + <td class="center">0.01</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td class="center">-</td> + <td class="center">X</td> + <td class="center">0.01</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td class="center">1</td> + <td class="center">C</td> + <td class="center">0.01</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td class="center">1</td> + <td class="center">C</td> + <td class="center">0.01</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td class="center">-</td> + <td class="center">C</td> + <td class="center">0.01</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td class="center">-</td> + <td class="center">A</td> + <td class="center">0.01</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td class="center">-</td> + <td class="center">X</td> + <td class="center">0.01</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td class="center">-</td> + <td class="center">X</td> + <td class="center">0.01</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td class="center">-</td> + <td class="center">X</td> + <td class="center">0.01</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td class="center">-</td> + <td class="center">C</td> + <td class="center">0.01</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td class="center">-</td> + <td class="center">C</td> + <td class="center">0.01</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td class="center">-</td> + <td class="center">U</td> + <td class="center">0.04</td> + </tr> + </tbody> + <tfoot> + <tr> + <th style="text-align:right" colspan="4">Total:</th> + <th></th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + <p class="space">Warning! The market share information given in this table is <b>fabricated</b> using a combination of (mild) judgement, the <a href="http://www.mail-archive.com/backstage@lists.bbc.co.uk/msg03899.html">BBC Browser Statistics</a> information and statistics from <a href="http://www.thecounter.com/stats/2008/August/browser.php">TheCounter.com</a>. THe lowest usage given to anyone browser is 0.01 for reasons of this example.</p> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + $('#example').dataTable( { + "fnFooterCallback": function ( nRow, aaData, iStart, iEnd, aiDisplay ) { + /* + * Calculate the total market share for all browsers in this table (ie inc. outside + * the pagination) + */ + var iTotalMarket = 0; + for ( var i=0 ; i<aaData.length ; i++ ) + { + iTotalMarket += aaData[i][4]*1; + } + + /* Calculate the market share for browsers on this page */ + var iPageMarket = 0; + for ( var i=iStart ; i<iEnd ; i++ ) + { + iPageMarket += aaData[ aiDisplay[i] ][4]*1; + } + + /* Modify the footer row to match what we want */ + var nCells = nRow.getElementsByTagName('th'); + nCells[1].innerHTML = parseInt(iPageMarket * 100)/100 + + '% ('+ parseInt(iTotalMarket * 100)/100 +'% total)'; + } + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/highlight.html b/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/highlight.html new file mode 100644 index 0000000..df4ccee --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/highlight.html @@ -0,0 +1,644 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + $('#example').dataTable(); + } ); + </script> + </head> + <body id="dt_example" class="ex_highlight_row"> + <div id="container"> + <div class="full_width big"> + DataTables highlighting via CSS example + </div> + + <h1>Preamble</h1> + <p>When highlighting rows using CSS :hover, you need to be aware of the sorting class which is applied to elements in the column currently being sorted (assuming it is enabled - it is by default). This example shows how to consider this in CSS, with highlighting for each row, and a little tint for the sorting column to maintain it's visibility as the column currently being sorted upon.</p> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <p>Javascript:</p> + <pre class="brush: js;">$(document).ready(function() { + $('#example').dataTable(); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + <p>CSS (note that for this example the selector ".ex_highlight" is used to limit the CSS here to just this example.</p> + <pre>.ex_highlight #example tbody tr.even:hover, #example tbody tr.even td.highlighted { + background-color: #ECFFB3; +} + +.ex_highlight #example tbody tr.odd:hover, #example tbody tr.odd td.highlighted { + background-color: #E6FF99; +} + +.ex_highlight_row #example tr.even:hover { + background-color: #ECFFB3; +} + +.ex_highlight_row #example tr.even:hover td.sorting_1 { + background-color: #DDFF75; +} + +.ex_highlight_row #example tr.even:hover td.sorting_2 { + background-color: #E7FF9E; +} + +.ex_highlight_row #example tr.even:hover td.sorting_3 { + background-color: #E2FF89; +} + +.ex_highlight_row #example tr.odd:hover { + background-color: #E6FF99; +} + +.ex_highlight_row #example tr.odd:hover td.sorting_1 { + background-color: #D6FF5C; +} + +.ex_highlight_row #example tr.odd:hover td.sorting_2 { + background-color: #E0FF84; +} + +.ex_highlight_row #example tr.odd:hover td.sorting_3 { + background-color: #DBFF70; +} +</pre> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/html_sort.html b/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/html_sort.html new file mode 100644 index 0000000..daa6d54 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/html_sort.html @@ -0,0 +1,198 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + $('#example').dataTable(); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables HTML sorting example + </div> + + <h1>Preamble</h1> + <p>DataTables will attempt to automatically detect the data types that your table contains, allowing it to accurately sort and filter this data. This example shows automatic type detection of HTML information - note that the sorting is correct on the second column for the visible information. Additional data types can be added through <a href="http://datatables.net/plug-ins/">plug-ins</a>. + <p>Note that prior to DataTables 1.7 the HTML type was not automatically detected, and it was necessary to specify the sType for the column - this is now not needed as seen in this example. If you do want to be able to sort and filter on the HTML information you can specify the sType for the column as 'string'.</p> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Reflection</th> + <th class="html">Link</th> + </tr> + </thead> + <tbody> + <tr> + <td>DataTables</td> + <td><a href="http://www.sprymedia.co.uk/article/DataTables">DataTables</a></td> + </tr> + <tr> + <td>Integrity</td> + <td><a href="http://www.sprymedia.co.uk/article/Integrity">A link to Integrity</a></td> + </tr> + <tr> + <td>Integrity</td> + <td><a href="http://www.sprymedia.co.uk/article/Integrity">Integrity</a></td> + </tr> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + $('#example').dataTable(); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/language_file.html b/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/language_file.html new file mode 100644 index 0000000..76dd348 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/language_file.html @@ -0,0 +1,609 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + $('#example').dataTable( { + "oLanguage": { + "sUrl": "../examples_support/de_DE.txt" + } + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables language file example + </div> + + <h1>Preamble</h1> + <p>As well as being able to pass language information to DataTables through the initialisation object, you can also store the language information in a file, which DataTables will then read. Useful if you are using server-side processes to switch language. The following example shows DataTables reading a German language file.</p> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + $('#example').dataTable( { + "oLanguage": { + "sUrl": "media/language/de_DE.txt" + } + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/length_menu.html b/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/length_menu.html new file mode 100644 index 0000000..275a232 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/length_menu.html @@ -0,0 +1,605 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + $('#example').dataTable( { + "aLengthMenu": [[10, 25, 50, -1], [10, 25, 50, "All"]] + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables defining the length menu example + </div> + + <h1>Preamble</h1> + <p>It is possible to easily customise the options shown in the length menu (by default at the top left of the table) using the aLengthMenu initialisation option. This parameter is either a 1D array of options which will be used for both the displayed option and the value, or a 2D array (shown in this example) which will use the array in the first position as the value, and the array in the second position as the displayed options (useful for language strings such as 'All').</p> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + $('#example').dataTable( { + "aLengthMenu": [[10, 25, 50, -1], [10, 25, 50, "All"]] + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/localstorage.html b/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/localstorage.html new file mode 100644 index 0000000..808d2d1 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/localstorage.html @@ -0,0 +1,613 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + $('#example').dataTable( { + "bStateSave": true, + "fnStateSave": function (oSettings, oData) { + localStorage.setItem( 'DataTables_'+window.location.pathname, JSON.stringify(oData) ); + }, + "fnStateLoad": function (oSettings) { + var data = localStorage.getItem('DataTables_'+window.location.pathname); + return JSON.parse(data); + } + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables - state saving with localStorage + </div> + + <h1>Preamble</h1> + <p>The state saving storage method that is built into DataTables makes use of cookies for compatibility with all browsers. However, cookies have a number of disadvantagies such as requiring increased HTTP bandwidth and a 4K limit. The W3C Web Storage specification defines <a href="https://developer.mozilla.org/en/DOM/Storage">localStorage</a> as a local storage method which we can use in DataTables to store state without the inherent issues in using cookies.</p> + <p>This example shows the use of <i>fnStateSave</i> and <i>fnStateLoad</i> to very simply store the table state in localStorage and then load it back again when needed.</p> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + $('#example').dataTable( { + "bStateSave": true + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/row_callback.html b/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/row_callback.html new file mode 100644 index 0000000..53447f8 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/row_callback.html @@ -0,0 +1,625 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + $('#example').dataTable( { + "fnRowCallback": function( nRow, aData, iDisplayIndex ) { + /* Append the grade to the default row class name */ + if ( aData[4] == "A" ) + { + $('td:eq(4)', nRow).html( '<b>A</b>' ); + } + }, + "aoColumnDefs": [ { + "sClass": "center", + "aTargets": [ -1, -2 ] + } ] + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables example with row callback + </div> + + <h1>Preamble</h1> + <p>The following example shows how a callback function can be used to format a particular row at draw time. For each row that is generated for display, the <b>fnRowCallback()</b> function is called. It is passed the row node which can then be modified. In this case a trivial example of making the 'grade' column bold if the grade is 'A' is shown (note that this could also be performed using the <b>fnRender()</b> function, but this is just for example).</p> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + $('#example').dataTable( { + "fnRowCallback": function( nRow, aData, iDisplayIndex ) { + /* Append the grade to the default row class name */ + if ( aData[4] == "A" ) + { + $('td:eq(4)', nRow).html( '<b>A</b>' ); + } + }, + "aoColumnDefs": [ { + "sClass": "center", + "aTargets": [ -1, -2 ] + } ] + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/row_grouping.html b/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/row_grouping.html new file mode 100644 index 0000000..49e6f46 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/row_grouping.html @@ -0,0 +1,662 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + div.giveHeight { + /* Stop the controls at the bottom bouncing around */ + min-height: 380px; + } + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + oTable = $('#example').dataTable({ + "fnDrawCallback": function ( oSettings ) { + if ( oSettings.aiDisplay.length == 0 ) + { + return; + } + + var nTrs = $('tbody tr', oSettings.nTable); + var iColspan = nTrs[0].getElementsByTagName('td').length; + var sLastGroup = ""; + for ( var i=0 ; i<nTrs.length ; i++ ) + { + var iDisplayIndex = oSettings._iDisplayStart + i; + var sGroup = oSettings.aoData[ oSettings.aiDisplay[iDisplayIndex] ]._aData[0]; + if ( sGroup != sLastGroup ) + { + var nGroup = document.createElement( 'tr' ); + var nCell = document.createElement( 'td' ); + nCell.colSpan = iColspan; + nCell.className = "group"; + nCell.innerHTML = sGroup; + nGroup.appendChild( nCell ); + nTrs[i].parentNode.insertBefore( nGroup, nTrs[i] ); + sLastGroup = sGroup; + } + } + }, + "aoColumnDefs": [ + { "bVisible": false, "aTargets": [ 0 ] } + ], + "aaSortingFixed": [[ 0, 'asc' ]], + "aaSorting": [[ 1, 'asc' ]], + "sDom": 'lfr<"giveHeight"t>ip' + }); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables row grouping example + </div> + + <h1>Preamble</h1> + <p>Although DataTables doesn't have row grouping built-in (picking one of the many methods available would overly limit the plug-in it was felt), it is most certainly possible to give the look and feel of row grouping. In the example below the 'group' is the browser engine, which is based on the information in the first column (set to hidden). The grouping indicator is added by the fnDrawCallback function, which will parse through the rows which are displayed, and enter a TR element where a new group is found.</p> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + oTable = $('#example').dataTable({ + "fnDrawCallback": function ( oSettings ) { + if ( oSettings.aiDisplay.length == 0 ) + { + return; + } + + var nTrs = $('#example tbody tr'); + var iColspan = nTrs[0].getElementsByTagName('td').length; + var sLastGroup = ""; + for ( var i=0 ; i<nTrs.length ; i++ ) + { + var iDisplayIndex = oSettings._iDisplayStart + i; + var sGroup = oSettings.aoData[ oSettings.aiDisplay[iDisplayIndex] ]._aData[0]; + if ( sGroup != sLastGroup ) + { + var nGroup = document.createElement( 'tr' ); + var nCell = document.createElement( 'td' ); + nCell.colSpan = iColspan; + nCell.className = "group"; + nCell.innerHTML = sGroup; + nGroup.appendChild( nCell ); + nTrs[i].parentNode.insertBefore( nGroup, nTrs[i] ); + sLastGroup = sGroup; + } + } + }, + "aoColumnDefs": [ + { "bVisible": false, "aTargets": [ 0 ] } + ], + "aaSortingFixed": [[ 0, 'asc' ]], + "aaSorting": [[ 1, 'asc' ]], + "sDom": 'lfr<"giveHeight"t>ip' + }); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/sorting_control.html b/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/sorting_control.html new file mode 100644 index 0000000..acd559e --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/advanced_init/sorting_control.html @@ -0,0 +1,626 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + $('#example').dataTable( { + "aoColumns": [ + null, + { "asSorting": [ "asc" ] }, + { "asSorting": [ "desc", "asc", "asc" ] }, + { "asSorting": [ "desc" ] }, + null + ] + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables sorting direction control example + </div> + + <h1>Preamble</h1> + <p>At times you may wish to change the default sorting direction for columns (all or some of them) to be 'descending' rather than DataTables' default ascending. This can be done through the use of the aoColumns[].asSorting initialisation parameter. This parameter also allows you to limit the sorting to a single direction, or you could add complex behaviour to the sorting interaction.</p> + <p>The example below shows:</p> + <ul> + <li>Column 1 - default sorting</li> + <li>Column 2 - ascending sorting only</li> + <li>Column 3 - descending sorting, followed by ascending and then ascending again</li> + <li>Column 4 - descending sorting only</li> + <li>Column 5 - default sorting</li> + </ul> + <p>It's worth noting that I don't have a good use case for when you might what to use the complex behaviour that is possible with this, but it is there should you want to use it!</p> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + $('#example').dataTable( { + "aoColumns": [ + null, + { "asSorting": [ "asc" ] }, + { "asSorting": [ "desc", "asc", "asc" ] }, + { "asSorting": [ "desc" ] }, + null + ] + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/ajax/ajax.html b/src/warden-server/contrib/wardenweb/datatables/examples/ajax/ajax.html new file mode 100644 index 0000000..3d3ef22 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/ajax/ajax.html @@ -0,0 +1,209 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + var oTable = $('#example').dataTable( { + "bProcessing": true, + "sAjaxSource": "sources/arrays.txt" + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables AJAX source example + </div> + + <h1>Preamble</h1> + <p>Although DataTables is built from the principle of progressive enhancement, it is often useful to be able to construct a table from an AJAX source. This can be done in one of two ways - either using the <b>aData</b> initialisation parameter which takes an array of data, or using the <b>sAjaxSource</b> initialisation parameter which will have DataTables go to that source with an XHR call and load data from there. This example shows the latter method in action. DataTables expects an object with an array called "aaData" with the data source.</p> + + <h1>Live example</h1> + <div id="dynamic"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th width="20%">Rendering engine</th> + <th width="25%">Browser</th> + <th width="25%">Platform(s)</th> + <th width="15%">Engine version</th> + <th width="15%">CSS grade</th> + </tr> + </thead> + <tbody> + + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + $('#example').dataTable( { + "bProcessing": true, + "sAjaxSource": "sources/arrays.txt" + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + <h1>Server response</h1> + <p>The code below shows the latest JSON data that has been returned from the server in response to the Ajax request made by DataTables. This will update as further requests are made.</p> + <pre id="latest_xhr" class="brush: js;"></pre> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/ajax/custom_data_property.html b/src/warden-server/contrib/wardenweb/datatables/examples/ajax/custom_data_property.html new file mode 100644 index 0000000..30c467e --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/ajax/custom_data_property.html @@ -0,0 +1,211 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + var oTable = $('#example').dataTable( { + "bProcessing": true, + "sAjaxSource": "sources/custom_prop.txt", + "sAjaxDataProp": "demo" + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables AJAX source example - reading an arbitrary data source property + </div> + + <h1>Preamble</h1> + <p>By default DataTables will read the data to show in the table from the <i>aaData</i> property of the object returned from the server. By using the initialisation option <b>sAjaxDataProp</b> you can customise this to whatever you wish. This examples shows it being set to 'demo'. Note that this option will also work with server-side processing. Additionally, it is possible to set <b>sAjaxDataProp</b> to be an empty string, which results in DataTables treating the given data source as the table data array (rather than as property of an object).</p> + + <h1>Live example</h1> + <div id="dynamic"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th width="20%">Rendering engine</th> + <th width="25%">Browser</th> + <th width="25%">Platform(s)</th> + <th width="15%">Engine version</th> + <th width="15%">CSS grade</th> + </tr> + </thead> + <tbody> + + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + $('#example').dataTable( { + "bProcessing": true, + "sAjaxSource": "sources/custom_prop.txt", + "sAjaxDataProp": "demo" + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + <h1>Server response</h1> + <p>The code below shows the latest JSON data that has been returned from the server in response to the Ajax request made by DataTables. This will update as further requests are made.</p> + <pre id="latest_xhr" class="brush: js;"></pre> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/ajax/deep.html b/src/warden-server/contrib/wardenweb/datatables/examples/ajax/deep.html new file mode 100644 index 0000000..a8e24bd --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/ajax/deep.html @@ -0,0 +1,223 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + var oTable = $('#example').dataTable( { + "bProcessing": true, + "sAjaxSource": "sources/deep.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform.inner" }, + { "mDataProp": "platform.details.0" }, + { "mDataProp": "platform.details.1" } + ] + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables AJAX source example - deep property reading for a data source + </div> + + <h1>Preamble</h1> + <p>The ability of DataTables to read arbitrary object properties as a column data source is extended to <i>n</i> levels of objects, through the use of standard Javascript dotted object notation. For example in this example "platform.details.0" refers to the first element of the array "details", of the object "platform", for each column. Any level of 'dots' can be used.</p> + + <h1>Live example</h1> + <div id="dynamic"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th width="20%">Rendering engine</th> + <th width="25%">Browser</th> + <th width="25%">Platform(s)</th> + <th width="15%">Engine version</th> + <th width="15%">CSS grade</th> + </tr> + </thead> + <tbody> + + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + var oTable = $('#example').dataTable( { + "bProcessing": true, + "sAjaxSource": "sources/deep.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform.inner" }, + { "mDataProp": "platform.details.0" }, + { "mDataProp": "platform.details.1" } + ] + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + <h1>Server response</h1> + <p>The code below shows the latest JSON data that has been returned from the server in response to the Ajax request made by DataTables. This will update as further requests are made.</p> + <pre id="latest_xhr" class="brush: js;"></pre> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/ajax/defer_render.html b/src/warden-server/contrib/wardenweb/datatables/examples/ajax/defer_render.html new file mode 100644 index 0000000..29aadd8 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/ajax/defer_render.html @@ -0,0 +1,211 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + var oTable = $('#example').dataTable( { + "bProcessing": true, + "sAjaxSource": "sources/arrays.txt", + "bDeferRender": true + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables AJAX source example - with deferred rendering + </div> + + <h1>Preamble</h1> + <p>When working with large data sources, you might seek to improve the speed at which DataTables runs. One method to do this is to make use of the build in deferred rendering. Rather than have DataTables create all TR and TD nodes required for the table when the data is loaded, when deferred rendering is enabled, DataTables will only create the nodes required for each individual display - these nodes are then retained incase they are needed again. This can give a significant performance increase, since a lot less work is done at initialisation time.</p> + + <h1>Live example</h1> + <div id="dynamic"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th width="20%">Rendering engine</th> + <th width="25%">Browser</th> + <th width="25%">Platform(s)</th> + <th width="15%">Engine version</th> + <th width="15%">CSS grade</th> + </tr> + </thead> + <tbody> + + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + $('#example').dataTable( { + "bProcessing": true, + "sAjaxSource": "sources/arrays.txt", + "bDeferRender": true + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + <h1>Server response</h1> + <p>The code below shows the latest JSON data that has been returned from the server in response to the Ajax request made by DataTables. This will update as further requests are made.</p> + <pre id="latest_xhr" class="brush: js;"></pre> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/ajax/null_data_source.html b/src/warden-server/contrib/wardenweb/datatables/examples/ajax/null_data_source.html new file mode 100644 index 0000000..64f11a8 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/ajax/null_data_source.html @@ -0,0 +1,215 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + var oTable = $('#example').dataTable( { + "bProcessing": true, + "sAjaxSource": "sources/arrays.txt", + "aoColumns": [ + null, + null, + null, + null, + null, + { "mDataProp": null } + ] + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables AJAX source example - null data source for a column + </div> + + <h1>Preamble</h1> + <p>In some tables it can be useful to not need to specify any data source for a column, as it's content is automatically generated (for example using fnRender). This is fairly common with add, edit and delete columns for a CRUD interface. You can now use the <b>mDataProp</b> set to <i>null</i> to specify that the column has no data source. DataTables will render this column as empty.</p> + + <h1>Live example</h1> + <div id="dynamic"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th width="20%">Rendering engine</th> + <th width="25%">Browser</th> + <th width="25%">Platform(s)</th> + <th width="15%">Engine version</th> + <th width="10%">CSS grade</th> + <th width="5%">Empty!</th> + </tr> + </thead> + <tbody></tbody> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + var oTable = $('#example').dataTable( { + "bProcessing": true, + "sAjaxSource": "sources/arrays.txt", + "aoColumns": [ + null, + null, + null, + null, + null, + { "mDataProp": null } + ] + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + <h1>Server response</h1> + <p>The code below shows the latest JSON data that has been returned from the server in response to the Ajax request made by DataTables. This will update as further requests are made.</p> + <pre id="latest_xhr" class="brush: js;"></pre> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/ajax/objects.html b/src/warden-server/contrib/wardenweb/datatables/examples/ajax/objects.html new file mode 100644 index 0000000..f80c3d7 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/ajax/objects.html @@ -0,0 +1,223 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + var oTable = $('#example').dataTable( { + "bProcessing": true, + "sAjaxSource": "sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables AJAX source example - array of objects as a data source + </div> + + <h1>Preamble</h1> + <p>By default, DataTables will expect an array of arrays for its data source, with each cell in the table being exactly described in the data source. However, this can often be quite limiting, or not suitable for a particular data source, so it is possible to specify which property of a source object that DataTables should read for each column. In this example the Ajax source returns an array of objects (one object for each row), and will then read the required property for each column.</p> + + <h1>Live example</h1> + <div id="dynamic"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th width="20%">Rendering engine</th> + <th width="25%">Browser</th> + <th width="25%">Platform(s)</th> + <th width="15%">Engine version</th> + <th width="15%">CSS grade</th> + </tr> + </thead> + <tbody> + + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + var oTable = $('#example').dataTable( { + "bProcessing": true, + "sAjaxSource": "sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + <h1>Server response</h1> + <p>The code below shows the latest JSON data that has been returned from the server in response to the Ajax request made by DataTables. This will update as further requests are made.</p> + <pre id="latest_xhr" class="brush: js;"></pre> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/ajax/objects_subarrays.html b/src/warden-server/contrib/wardenweb/datatables/examples/ajax/objects_subarrays.html new file mode 100644 index 0000000..9fc3cdd --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/ajax/objects_subarrays.html @@ -0,0 +1,223 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + var oTable = $('#example').dataTable( { + "bProcessing": true, + "sAjaxSource": "sources/objects_subarrays.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "details.0" }, + { "mDataProp": "details.1" } + ] + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables AJAX source example - array of objects with sub-arrays as a data source + </div> + + <h1>Preamble</h1> + <p>While the ability of DataTables to read arbitrary objects properties as a data source for any column is very powerful, it actually goes further than single level object properties; it is possible to read a data source for a column from a deeply nested array or property. This is specified in typical Javascript dotted object notation. For example "details.0" (used in this example) refers to the first property in an array called "details". "details.1" refers to the second property, etc. Object properties can also be used - for example "details.version" is perfectly valid, if that property is available in your data source.</p> + + <h1>Live example</h1> + <div id="dynamic"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th width="20%">Rendering engine</th> + <th width="25%">Browser</th> + <th width="25%">Platform(s)</th> + <th width="15%">Engine version</th> + <th width="15%">CSS grade</th> + </tr> + </thead> + <tbody> + + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + var oTable = $('#example').dataTable( { + "bProcessing": true, + "sAjaxSource": "sources/objects_subarrays.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "details.0" }, + { "mDataProp": "details.1" } + ] + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + <h1>Server response</h1> + <p>The code below shows the latest JSON data that has been returned from the server in response to the Ajax request made by DataTables. This will update as further requests are made.</p> + <pre id="latest_xhr" class="brush: js;"></pre> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/ajax/sources/array_only.txt b/src/warden-server/contrib/wardenweb/datatables/examples/ajax/sources/array_only.txt new file mode 100644 index 0000000..a8b16d7 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/ajax/sources/array_only.txt @@ -0,0 +1,59 @@ +[ + ["Trident","Internet Explorer 4.0","Win 95+","4","X"], + ["Trident","Internet Explorer 5.0","Win 95+","5","C"], + ["Trident","Internet Explorer 5.5","Win 95+","5.5","A"], + ["Trident","Internet Explorer 6","Win 98+","6","A"], + ["Trident","Internet Explorer 7","Win XP SP2+","7","A"], + ["Trident","AOL browser (AOL desktop)","Win XP","6","A"], + ["Gecko","Firefox 1.0","Win 98+ / OSX.2+","1.7","A"], + ["Gecko","Firefox 1.5","Win 98+ / OSX.2+","1.8","A"], + ["Gecko","Firefox 2.0","Win 98+ / OSX.2+","1.8","A"], + ["Gecko","Firefox 3.0","Win 2k+ / OSX.3+","1.9","A"], + ["Gecko","Camino 1.0","OSX.2+","1.8","A"], + ["Gecko","Camino 1.5","OSX.3+","1.8","A"], + ["Gecko","Netscape 7.2","Win 95+ / Mac OS 8.6-9.2","1.7","A"], + ["Gecko","Netscape Browser 8","Win 98SE+","1.7","A"], + ["Gecko","Netscape Navigator 9","Win 98+ / OSX.2+","1.8","A"], + ["Gecko","Mozilla 1.0","Win 95+ / OSX.1+",1,"A"], + ["Gecko","Mozilla 1.1","Win 95+ / OSX.1+",1.1,"A"], + ["Gecko","Mozilla 1.2","Win 95+ / OSX.1+",1.2,"A"], + ["Gecko","Mozilla 1.3","Win 95+ / OSX.1+",1.3,"A"], + ["Gecko","Mozilla 1.4","Win 95+ / OSX.1+",1.4,"A"], + ["Gecko","Mozilla 1.5","Win 95+ / OSX.1+",1.5,"A"], + ["Gecko","Mozilla 1.6","Win 95+ / OSX.1+",1.6,"A"], + ["Gecko","Mozilla 1.7","Win 98+ / OSX.1+",1.7,"A"], + ["Gecko","Mozilla 1.8","Win 98+ / OSX.1+",1.8,"A"], + ["Gecko","Seamonkey 1.1","Win 98+ / OSX.2+","1.8","A"], + ["Gecko","Epiphany 2.20","Gnome","1.8","A"], + ["Webkit","Safari 1.2","OSX.3","125.5","A"], + ["Webkit","Safari 1.3","OSX.3","312.8","A"], + ["Webkit","Safari 2.0","OSX.4+","419.3","A"], + ["Webkit","Safari 3.0","OSX.4+","522.1","A"], + ["Webkit","OmniWeb 5.5","OSX.4+","420","A"], + ["Webkit","iPod Touch / iPhone","iPod","420.1","A"], + ["Webkit","S60","S60","413","A"], + ["Presto","Opera 7.0","Win 95+ / OSX.1+","-","A"], + ["Presto","Opera 7.5","Win 95+ / OSX.2+","-","A"], + ["Presto","Opera 8.0","Win 95+ / OSX.2+","-","A"], + ["Presto","Opera 8.5","Win 95+ / OSX.2+","-","A"], + ["Presto","Opera 9.0","Win 95+ / OSX.3+","-","A"], + ["Presto","Opera 9.2","Win 88+ / OSX.3+","-","A"], + ["Presto","Opera 9.5","Win 88+ / OSX.3+","-","A"], + ["Presto","Opera for Wii","Wii","-","A"], + ["Presto","Nokia N800","N800","-","A"], + ["Presto","Nintendo DS browser","Nintendo DS","8.5","C/A<sup>1</sup>"], + ["KHTML","Konqureror 3.1","KDE 3.1","3.1","C"], + ["KHTML","Konqureror 3.3","KDE 3.3","3.3","A"], + ["KHTML","Konqureror 3.5","KDE 3.5","3.5","A"], + ["Tasman","Internet Explorer 4.5","Mac OS 8-9","-","X"], + ["Tasman","Internet Explorer 5.1","Mac OS 7.6-9","1","C"], + ["Tasman","Internet Explorer 5.2","Mac OS 8-X","1","C"], + ["Misc","NetFront 3.1","Embedded devices","-","C"], + ["Misc","NetFront 3.4","Embedded devices","-","A"], + ["Misc","Dillo 0.8","Embedded devices","-","X"], + ["Misc","Links","Text only","-","X"], + ["Misc","Lynx","Text only","-","X"], + ["Misc","IE Mobile","Windows Mobile 6","-","C"], + ["Misc","PSP browser","PSP","-","C"], + ["Other browsers","All others","-","-","U"] +] \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/ajax/sources/arrays.txt b/src/warden-server/contrib/wardenweb/datatables/examples/ajax/sources/arrays.txt new file mode 100644 index 0000000..fcbe36e --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/ajax/sources/arrays.txt @@ -0,0 +1,59 @@ +{ "aaData": [ + ["Trident","Internet Explorer 4.0","Win 95+","4","X"], + ["Trident","Internet Explorer 5.0","Win 95+","5","C"], + ["Trident","Internet Explorer 5.5","Win 95+","5.5","A"], + ["Trident","Internet Explorer 6","Win 98+","6","A"], + ["Trident","Internet Explorer 7","Win XP SP2+","7","A"], + ["Trident","AOL browser (AOL desktop)","Win XP","6","A"], + ["Gecko","Firefox 1.0","Win 98+ / OSX.2+","1.7","A"], + ["Gecko","Firefox 1.5","Win 98+ / OSX.2+","1.8","A"], + ["Gecko","Firefox 2.0","Win 98+ / OSX.2+","1.8","A"], + ["Gecko","Firefox 3.0","Win 2k+ / OSX.3+","1.9","A"], + ["Gecko","Camino 1.0","OSX.2+","1.8","A"], + ["Gecko","Camino 1.5","OSX.3+","1.8","A"], + ["Gecko","Netscape 7.2","Win 95+ / Mac OS 8.6-9.2","1.7","A"], + ["Gecko","Netscape Browser 8","Win 98SE+","1.7","A"], + ["Gecko","Netscape Navigator 9","Win 98+ / OSX.2+","1.8","A"], + ["Gecko","Mozilla 1.0","Win 95+ / OSX.1+",1,"A"], + ["Gecko","Mozilla 1.1","Win 95+ / OSX.1+",1.1,"A"], + ["Gecko","Mozilla 1.2","Win 95+ / OSX.1+",1.2,"A"], + ["Gecko","Mozilla 1.3","Win 95+ / OSX.1+",1.3,"A"], + ["Gecko","Mozilla 1.4","Win 95+ / OSX.1+",1.4,"A"], + ["Gecko","Mozilla 1.5","Win 95+ / OSX.1+",1.5,"A"], + ["Gecko","Mozilla 1.6","Win 95+ / OSX.1+",1.6,"A"], + ["Gecko","Mozilla 1.7","Win 98+ / OSX.1+",1.7,"A"], + ["Gecko","Mozilla 1.8","Win 98+ / OSX.1+",1.8,"A"], + ["Gecko","Seamonkey 1.1","Win 98+ / OSX.2+","1.8","A"], + ["Gecko","Epiphany 2.20","Gnome","1.8","A"], + ["Webkit","Safari 1.2","OSX.3","125.5","A"], + ["Webkit","Safari 1.3","OSX.3","312.8","A"], + ["Webkit","Safari 2.0","OSX.4+","419.3","A"], + ["Webkit","Safari 3.0","OSX.4+","522.1","A"], + ["Webkit","OmniWeb 5.5","OSX.4+","420","A"], + ["Webkit","iPod Touch / iPhone","iPod","420.1","A"], + ["Webkit","S60","S60","413","A"], + ["Presto","Opera 7.0","Win 95+ / OSX.1+","-","A"], + ["Presto","Opera 7.5","Win 95+ / OSX.2+","-","A"], + ["Presto","Opera 8.0","Win 95+ / OSX.2+","-","A"], + ["Presto","Opera 8.5","Win 95+ / OSX.2+","-","A"], + ["Presto","Opera 9.0","Win 95+ / OSX.3+","-","A"], + ["Presto","Opera 9.2","Win 88+ / OSX.3+","-","A"], + ["Presto","Opera 9.5","Win 88+ / OSX.3+","-","A"], + ["Presto","Opera for Wii","Wii","-","A"], + ["Presto","Nokia N800","N800","-","A"], + ["Presto","Nintendo DS browser","Nintendo DS","8.5","C/A<sup>1</sup>"], + ["KHTML","Konqureror 3.1","KDE 3.1","3.1","C"], + ["KHTML","Konqureror 3.3","KDE 3.3","3.3","A"], + ["KHTML","Konqureror 3.5","KDE 3.5","3.5","A"], + ["Tasman","Internet Explorer 4.5","Mac OS 8-9","-","X"], + ["Tasman","Internet Explorer 5.1","Mac OS 7.6-9","1","C"], + ["Tasman","Internet Explorer 5.2","Mac OS 8-X","1","C"], + ["Misc","NetFront 3.1","Embedded devices","-","C"], + ["Misc","NetFront 3.4","Embedded devices","-","A"], + ["Misc","Dillo 0.8","Embedded devices","-","X"], + ["Misc","Links","Text only","-","X"], + ["Misc","Lynx","Text only","-","X"], + ["Misc","IE Mobile","Windows Mobile 6","-","C"], + ["Misc","PSP browser","PSP","-","C"], + ["Other browsers","All others","-","-","U"] +] } \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/ajax/sources/arrays_subobjects.txt b/src/warden-server/contrib/wardenweb/datatables/examples/ajax/sources/arrays_subobjects.txt new file mode 100644 index 0000000..46d66d7 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/ajax/sources/arrays_subobjects.txt @@ -0,0 +1,515 @@ +{ "aaData": [ + [ + "Trident", + "Internet Explorer 4.0", + "Win 95+", + { + "version": "4", + "grade": "X" + } + ], + [ + "Trident", + "Internet Explorer 5.0", + "Win 95+", + { + "version": "5", + "grade": "C" + } + ], + [ + "Trident", + "Internet Explorer 5.5", + "Win 95+", + { + "version": "5.5", + "grade": "A" + } + ], + [ + "Trident", + "Internet Explorer 6", + "Win 98+", + { + "version": "6", + "grade": "A" + } + ], + [ + "Trident", + "Internet Explorer 7", + "Win XP SP2+", + { + "version": "7", + "grade": "A" + } + ], + [ + "Trident", + "AOL browser (AOL desktop)", + "Win XP", + { + "version": "6", + "grade": "A" + } + ], + [ + "Gecko", + "Firefox 1.0", + "Win 98+ / OSX.2+", + { + "version": "1.7", + "grade": "A" + } + ], + [ + "Gecko", + "Firefox 1.5", + "Win 98+ / OSX.2+", + { + "version": "1.8", + "grade": "A" + } + ], + [ + "Gecko", + "Firefox 2.0", + "Win 98+ / OSX.2+", + { + "version": "1.8", + "grade": "A" + } + ], + [ + "Gecko", + "Firefox 3.0", + "Win 2k+ / OSX.3+", + { + "version": "1.9", + "grade": "A" + } + ], + [ + "Gecko", + "Camino 1.0", + "OSX.2+", + { + "version": "1.8", + "grade": "A" + } + ], + [ + "Gecko", + "Camino 1.5", + "OSX.3+", + { + "version": "1.8", + "grade": "A" + } + ], + [ + "Gecko", + "Netscape 7.2", + "Win 95+ / Mac OS 8.6-9.2", + { + "version": "1.7", + "grade": "A" + } + ], + [ + "Gecko", + "Netscape Browser 8", + "Win 98SE+", + { + "version": "1.7", + "grade": "A" + } + ], + [ + "Gecko", + "Netscape Navigator 9", + "Win 98+ / OSX.2+", + { + "version": "1.8", + "grade": "A" + } + ], + [ + "Gecko", + "Mozilla 1.0", + "Win 95+ / OSX.1+", + { + "version": "1", + "grade": "A" + } + ], + [ + "Gecko", + "Mozilla 1.1", + "Win 95+ / OSX.1+", + { + "version": "1.1", + "grade": "A" + } + ], + [ + "Gecko", + "Mozilla 1.2", + "Win 95+ / OSX.1+", + { + "version": "1.2", + "grade": "A" + } + ], + [ + "Gecko", + "Mozilla 1.3", + "Win 95+ / OSX.1+", + { + "version": "1.3", + "grade": "A" + } + ], + [ + "Gecko", + "Mozilla 1.4", + "Win 95+ / OSX.1+", + { + "version": "1.4", + "grade": "A" + } + ], + [ + "Gecko", + "Mozilla 1.5", + "Win 95+ / OSX.1+", + { + "version": "1.5", + "grade": "A" + } + ], + [ + "Gecko", + "Mozilla 1.6", + "Win 95+ / OSX.1+", + { + "version": "1.6", + "grade": "A" + } + ], + [ + "Gecko", + "Mozilla 1.7", + "Win 98+ / OSX.1+", + { + "version": "1.7", + "grade": "A" + } + ], + [ + "Gecko", + "Mozilla 1.8", + "Win 98+ / OSX.1+", + { + "version": "1.8", + "grade": "A" + } + ], + [ + "Gecko", + "Seamonkey 1.1", + "Win 98+ / OSX.2+", + { + "version": "1.8", + "grade": "A" + } + ], + [ + "Gecko", + "Epiphany 2.20", + "Gnome", + { + "version": "1.8", + "grade": "A" + } + ], + [ + "Webkit", + "Safari 1.2", + "OSX.3", + { + "version": "125.5", + "grade": "A" + } + ], + [ + "Webkit", + "Safari 1.3", + "OSX.3", + { + "version": "312.8", + "grade": "A" + } + ], + [ + "Webkit", + "Safari 2.0", + "OSX.4+", + { + "version": "419.3", + "grade": "A" + } + ], + [ + "Webkit", + "Safari 3.0", + "OSX.4+", + { + "version": "522.1", + "grade": "A" + } + ], + [ + "Webkit", + "OmniWeb 5.5", + "OSX.4+", + { + "version": "420", + "grade": "A" + } + ], + [ + "Webkit", + "iPod Touch / iPhone", + "iPod", + { + "version": "420.1", + "grade": "A" + } + ], + [ + "Webkit", + "S60", + "S60", + { + "version": "413", + "grade": "A" + } + ], + [ + "Presto", + "Opera 7.0", + "Win 95+ / OSX.1+", + { + "version": "-", + "grade": "A" + } + ], + [ + "Presto", + "Opera 7.5", + "Win 95+ / OSX.2+", + { + "version": "-", + "grade": "A" + } + ], + [ + "Presto", + "Opera 8.0", + "Win 95+ / OSX.2+", + { + "version": "-", + "grade": "A" + } + ], + [ + "Presto", + "Opera 8.5", + "Win 95+ / OSX.2+", + { + "version": "-", + "grade": "A" + } + ], + [ + "Presto", + "Opera 9.0", + "Win 95+ / OSX.3+", + { + "version": "-", + "grade": "A" + } + ], + [ + "Presto", + "Opera 9.2", + "Win 88+ / OSX.3+", + { + "version": "-", + "grade": "A" + } + ], + [ + "Presto", + "Opera 9.5", + "Win 88+ / OSX.3+", + { + "version": "-", + "grade": "A" + } + ], + [ + "Presto", + "Opera for Wii", + "Wii", + { + "version": "-", + "grade": "A" + } + ], + [ + "Presto", + "Nokia N800", + "N800", + { + "version": "-", + "grade": "A" + } + ], + [ + "Presto", + "Nintendo DS browser", + "Nintendo DS", + { + "version": "8.5", + "grade": "C/A<sup>1</sup>" + } + ], + [ + "KHTML", + "Konqureror 3.1", + "KDE 3.1", + { + "version": "3.1", + "grade": "C" + } + ], + [ + "KHTML", + "Konqureror 3.3", + "KDE 3.3", + { + "version": "3.3", + "grade": "A" + } + ], + [ + "KHTML", + "Konqureror 3.5", + "KDE 3.5", + { + "version": "3.5", + "grade": "A" + } + ], + [ + "Tasman", + "Internet Explorer 4.5", + "Mac OS 8-9", + { + "version": "-", + "grade": "X" + } + ], + [ + "Tasman", + "Internet Explorer 5.1", + "Mac OS 7.6-9", + { + "version": "1", + "grade": "C" + } + ], + [ + "Tasman", + "Internet Explorer 5.2", + "Mac OS 8-X", + { + "version": "1", + "grade": "C" + } + ], + [ + "Misc", + "NetFront 3.1", + "Embedded devices", + { + "version": "-", + "grade": "C" + } + ], + [ + "Misc", + "NetFront 3.4", + "Embedded devices", + { + "version": "-", + "grade": "A" + } + ], + [ + "Misc", + "Dillo 0.8", + "Embedded devices", + { + "version": "-", + "grade": "X" + } + ], + [ + "Misc", + "Links", + "Text only", + { + "version": "-", + "grade": "X" + } + ], + [ + "Misc", + "Lynx", + "Text only", + { + "version": "-", + "grade": "X" + } + ], + [ + "Misc", + "IE Mobile", + "Windows Mobile 6", + { + "version": "-", + "grade": "C" + } + ], + [ + "Misc", + "PSP browser", + "PSP", + { + "version": "-", + "grade": "C" + } + ], + [ + "Other browsers", + "All others", + "-", + { + "version": "-", + "grade": "U" + } + ] +] } \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/ajax/sources/custom_prop.txt b/src/warden-server/contrib/wardenweb/datatables/examples/ajax/sources/custom_prop.txt new file mode 100644 index 0000000..a65fcf7 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/ajax/sources/custom_prop.txt @@ -0,0 +1,59 @@ +{ "demo": [ + ["Trident","Internet Explorer 4.0","Win 95+","4","X"], + ["Trident","Internet Explorer 5.0","Win 95+","5","C"], + ["Trident","Internet Explorer 5.5","Win 95+","5.5","A"], + ["Trident","Internet Explorer 6","Win 98+","6","A"], + ["Trident","Internet Explorer 7","Win XP SP2+","7","A"], + ["Trident","AOL browser (AOL desktop)","Win XP","6","A"], + ["Gecko","Firefox 1.0","Win 98+ / OSX.2+","1.7","A"], + ["Gecko","Firefox 1.5","Win 98+ / OSX.2+","1.8","A"], + ["Gecko","Firefox 2.0","Win 98+ / OSX.2+","1.8","A"], + ["Gecko","Firefox 3.0","Win 2k+ / OSX.3+","1.9","A"], + ["Gecko","Camino 1.0","OSX.2+","1.8","A"], + ["Gecko","Camino 1.5","OSX.3+","1.8","A"], + ["Gecko","Netscape 7.2","Win 95+ / Mac OS 8.6-9.2","1.7","A"], + ["Gecko","Netscape Browser 8","Win 98SE+","1.7","A"], + ["Gecko","Netscape Navigator 9","Win 98+ / OSX.2+","1.8","A"], + ["Gecko","Mozilla 1.0","Win 95+ / OSX.1+",1,"A"], + ["Gecko","Mozilla 1.1","Win 95+ / OSX.1+",1.1,"A"], + ["Gecko","Mozilla 1.2","Win 95+ / OSX.1+",1.2,"A"], + ["Gecko","Mozilla 1.3","Win 95+ / OSX.1+",1.3,"A"], + ["Gecko","Mozilla 1.4","Win 95+ / OSX.1+",1.4,"A"], + ["Gecko","Mozilla 1.5","Win 95+ / OSX.1+",1.5,"A"], + ["Gecko","Mozilla 1.6","Win 95+ / OSX.1+",1.6,"A"], + ["Gecko","Mozilla 1.7","Win 98+ / OSX.1+",1.7,"A"], + ["Gecko","Mozilla 1.8","Win 98+ / OSX.1+",1.8,"A"], + ["Gecko","Seamonkey 1.1","Win 98+ / OSX.2+","1.8","A"], + ["Gecko","Epiphany 2.20","Gnome","1.8","A"], + ["Webkit","Safari 1.2","OSX.3","125.5","A"], + ["Webkit","Safari 1.3","OSX.3","312.8","A"], + ["Webkit","Safari 2.0","OSX.4+","419.3","A"], + ["Webkit","Safari 3.0","OSX.4+","522.1","A"], + ["Webkit","OmniWeb 5.5","OSX.4+","420","A"], + ["Webkit","iPod Touch / iPhone","iPod","420.1","A"], + ["Webkit","S60","S60","413","A"], + ["Presto","Opera 7.0","Win 95+ / OSX.1+","-","A"], + ["Presto","Opera 7.5","Win 95+ / OSX.2+","-","A"], + ["Presto","Opera 8.0","Win 95+ / OSX.2+","-","A"], + ["Presto","Opera 8.5","Win 95+ / OSX.2+","-","A"], + ["Presto","Opera 9.0","Win 95+ / OSX.3+","-","A"], + ["Presto","Opera 9.2","Win 88+ / OSX.3+","-","A"], + ["Presto","Opera 9.5","Win 88+ / OSX.3+","-","A"], + ["Presto","Opera for Wii","Wii","-","A"], + ["Presto","Nokia N800","N800","-","A"], + ["Presto","Nintendo DS browser","Nintendo DS","8.5","C/A<sup>1</sup>"], + ["KHTML","Konqureror 3.1","KDE 3.1","3.1","C"], + ["KHTML","Konqureror 3.3","KDE 3.3","3.3","A"], + ["KHTML","Konqureror 3.5","KDE 3.5","3.5","A"], + ["Tasman","Internet Explorer 4.5","Mac OS 8-9","-","X"], + ["Tasman","Internet Explorer 5.1","Mac OS 7.6-9","1","C"], + ["Tasman","Internet Explorer 5.2","Mac OS 8-X","1","C"], + ["Misc","NetFront 3.1","Embedded devices","-","C"], + ["Misc","NetFront 3.4","Embedded devices","-","A"], + ["Misc","Dillo 0.8","Embedded devices","-","X"], + ["Misc","Links","Text only","-","X"], + ["Misc","Lynx","Text only","-","X"], + ["Misc","IE Mobile","Windows Mobile 6","-","C"], + ["Misc","PSP browser","PSP","-","C"], + ["Other browsers","All others","-","-","U"] +] } \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/ajax/sources/deep.txt b/src/warden-server/contrib/wardenweb/datatables/examples/ajax/sources/deep.txt new file mode 100644 index 0000000..7a3124b --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/ajax/sources/deep.txt @@ -0,0 +1,629 @@ +{ "aaData": [ + { + "engine": "Trident", + "browser": "Internet Explorer 4.0", + "platform": { + "inner": "Win 95+", + "details": [ + "4", + "X" + ] + } + }, + { + "engine": "Trident", + "browser": "Internet Explorer 5.0", + "platform": { + "inner": "Win 95+", + "details": [ + "5", + "C" + ] + } + }, + { + "engine": "Trident", + "browser": "Internet Explorer 5.5", + "platform": { + "inner": "Win 95+", + "details": [ + "5.5", + "A" + ] + } + }, + { + "engine": "Trident", + "browser": "Internet Explorer 6", + "platform": { + "inner": "Win 98+", + "details": [ + "6", + "A" + ] + } + }, + { + "engine": "Trident", + "browser": "Internet Explorer 7", + "platform": { + "inner": "Win XP SP2+", + "details": [ + "7", + "A" + ] + } + }, + { + "engine": "Trident", + "browser": "AOL browser (AOL desktop)", + "platform": { + "inner": "Win XP", + "details": [ + "6", + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Firefox 1.0", + "platform": { + "inner": "Win 98+ / OSX.2+", + "details": [ + "1.7", + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Firefox 1.5", + "platform": { + "inner": "Win 98+ / OSX.2+", + "details": [ + "1.8", + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Firefox 2.0", + "platform": { + "inner": "Win 98+ / OSX.2+", + "details": [ + "1.8", + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Firefox 3.0", + "platform": { + "inner": "Win 2k+ / OSX.3+", + "details": [ + "1.9", + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Camino 1.0", + "platform": { + "inner": "OSX.2+", + "details": [ + "1.8", + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Camino 1.5", + "platform": { + "inner": "OSX.3+", + "details": [ + "1.8", + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Netscape 7.2", + "platform": { + "inner": "Win 95+ / Mac OS 8.6-9.2", + "details": [ + "1.7", + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Netscape Browser 8", + "platform": { + "inner": "Win 98SE+", + "details": [ + "1.7", + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Netscape Navigator 9", + "platform": { + "inner": "Win 98+ / OSX.2+", + "details": [ + "1.8", + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.0", + "platform": { + "inner": "Win 95+ / OSX.1+", + "details": [ + 1, + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.1", + "platform": { + "inner": "Win 95+ / OSX.1+", + "details": [ + 1.1, + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.2", + "platform": { + "inner": "Win 95+ / OSX.1+", + "details": [ + 1.2, + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.3", + "platform": { + "inner": "Win 95+ / OSX.1+", + "details": [ + 1.3, + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.4", + "platform": { + "inner": "Win 95+ / OSX.1+", + "details": [ + 1.4, + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.5", + "platform": { + "inner": "Win 95+ / OSX.1+", + "details": [ + 1.5, + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.6", + "platform": { + "inner": "Win 95+ / OSX.1+", + "details": [ + 1.6, + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.7", + "platform": { + "inner": "Win 98+ / OSX.1+", + "details": [ + 1.7, + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.8", + "platform": { + "inner": "Win 98+ / OSX.1+", + "details": [ + 1.8, + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Seamonkey 1.1", + "platform": { + "inner": "Win 98+ / OSX.2+", + "details": [ + "1.8", + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Epiphany 2.20", + "platform": { + "inner": "Gnome", + "details": [ + "1.8", + "A" + ] + } + }, + { + "engine": "Webkit", + "browser": "Safari 1.2", + "platform": { + "inner": "OSX.3", + "details": [ + "125.5", + "A" + ] + } + }, + { + "engine": "Webkit", + "browser": "Safari 1.3", + "platform": { + "inner": "OSX.3", + "details": [ + "312.8", + "A" + ] + } + }, + { + "engine": "Webkit", + "browser": "Safari 2.0", + "platform": { + "inner": "OSX.4+", + "details": [ + "419.3", + "A" + ] + } + }, + { + "engine": "Webkit", + "browser": "Safari 3.0", + "platform": { + "inner": "OSX.4+", + "details": [ + "522.1", + "A" + ] + } + }, + { + "engine": "Webkit", + "browser": "OmniWeb 5.5", + "platform": { + "inner": "OSX.4+", + "details": [ + "420", + "A" + ] + } + }, + { + "engine": "Webkit", + "browser": "iPod Touch / iPhone", + "platform": { + "inner": "iPod", + "details": [ + "420.1", + "A" + ] + } + }, + { + "engine": "Webkit", + "browser": "S60", + "platform": { + "inner": "S60", + "details": [ + "413", + "A" + ] + } + }, + { + "engine": "Presto", + "browser": "Opera 7.0", + "platform": { + "inner": "Win 95+ / OSX.1+", + "details": [ + "-", + "A" + ] + } + }, + { + "engine": "Presto", + "browser": "Opera 7.5", + "platform": { + "inner": "Win 95+ / OSX.2+", + "details": [ + "-", + "A" + ] + } + }, + { + "engine": "Presto", + "browser": "Opera 8.0", + "platform": { + "inner": "Win 95+ / OSX.2+", + "details": [ + "-", + "A" + ] + } + }, + { + "engine": "Presto", + "browser": "Opera 8.5", + "platform": { + "inner": "Win 95+ / OSX.2+", + "details": [ + "-", + "A" + ] + } + }, + { + "engine": "Presto", + "browser": "Opera 9.0", + "platform": { + "inner": "Win 95+ / OSX.3+", + "details": [ + "-", + "A" + ] + } + }, + { + "engine": "Presto", + "browser": "Opera 9.2", + "platform": { + "inner": "Win 88+ / OSX.3+", + "details": [ + "-", + "A" + ] + } + }, + { + "engine": "Presto", + "browser": "Opera 9.5", + "platform": { + "inner": "Win 88+ / OSX.3+", + "details": [ + "-", + "A" + ] + } + }, + { + "engine": "Presto", + "browser": "Opera for Wii", + "platform": { + "inner": "Wii", + "details": [ + "-", + "A" + ] + } + }, + { + "engine": "Presto", + "browser": "Nokia N800", + "platform": { + "inner": "N800", + "details": [ + "-", + "A" + ] + } + }, + { + "engine": "Presto", + "browser": "Nintendo DS browser", + "platform": { + "inner": "Nintendo DS", + "details": [ + "8.5", + "C/A<sup>1</sup>" + ] + } + }, + { + "engine": "KHTML", + "browser": "Konqureror 3.1", + "platform": { + "inner": "KDE 3.1", + "details": [ + "3.1", + "C" + ] + } + }, + { + "engine": "KHTML", + "browser": "Konqureror 3.3", + "platform": { + "inner": "KDE 3.3", + "details": [ + "3.3", + "A" + ] + } + }, + { + "engine": "KHTML", + "browser": "Konqureror 3.5", + "platform": { + "inner": "KDE 3.5", + "details": [ + "3.5", + "A" + ] + } + }, + { + "engine": "Tasman", + "browser": "Internet Explorer 4.5", + "platform": { + "inner": "Mac OS 8-9", + "details": [ + "-", + "X" + ] + } + }, + { + "engine": "Tasman", + "browser": "Internet Explorer 5.1", + "platform": { + "inner": "Mac OS 7.6-9", + "details": [ + "1", + "C" + ] + } + }, + { + "engine": "Tasman", + "browser": "Internet Explorer 5.2", + "platform": { + "inner": "Mac OS 8-X", + "details": [ + "1", + "C" + ] + } + }, + { + "engine": "Misc", + "browser": "NetFront 3.1", + "platform": { + "inner": "Embedded devices", + "details": [ + "-", + "C" + ] + } + }, + { + "engine": "Misc", + "browser": "NetFront 3.4", + "platform": { + "inner": "Embedded devices", + "details": [ + "-", + "A" + ] + } + }, + { + "engine": "Misc", + "browser": "Dillo 0.8", + "platform": { + "inner": "Embedded devices", + "details": [ + "-", + "X" + ] + } + }, + { + "engine": "Misc", + "browser": "Links", + "platform": { + "inner": "Text only", + "details": [ + "-", + "X" + ] + } + }, + { + "engine": "Misc", + "browser": "Lynx", + "platform": { + "inner": "Text only", + "details": [ + "-", + "X" + ] + } + }, + { + "engine": "Misc", + "browser": "IE Mobile", + "platform": { + "inner": "Windows Mobile 6", + "details": [ + "-", + "C" + ] + } + }, + { + "engine": "Misc", + "browser": "PSP browser", + "platform": { + "inner": "PSP", + "details": [ + "-", + "C" + ] + } + }, + { + "engine": "Other browsers", + "browser": "All others", + "platform": { + "inner": "-", + "details": [ + "-", + "U" + ] + } + } +] } \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/ajax/sources/objects.txt b/src/warden-server/contrib/wardenweb/datatables/examples/ajax/sources/objects.txt new file mode 100644 index 0000000..1c3f870 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/ajax/sources/objects.txt @@ -0,0 +1,401 @@ +{ "aaData": [ + { + "engine": "Trident", + "browser": "Internet Explorer 4.0", + "platform": "Win 95+", + "version": "4", + "grade": "X" + }, + { + "engine": "Trident", + "browser": "Internet Explorer 5.0", + "platform": "Win 95+", + "version": "5", + "grade": "C" + }, + { + "engine": "Trident", + "browser": "Internet Explorer 5.5", + "platform": "Win 95+", + "version": "5.5", + "grade": "A" + }, + { + "engine": "Trident", + "browser": "Internet Explorer 6", + "platform": "Win 98+", + "version": "6", + "grade": "A" + }, + { + "engine": "Trident", + "browser": "Internet Explorer 7", + "platform": "Win XP SP2+", + "version": "7", + "grade": "A" + }, + { + "engine": "Trident", + "browser": "AOL browser (AOL desktop)", + "platform": "Win XP", + "version": "6", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Firefox 1.0", + "platform": "Win 98+ / OSX.2+", + "version": "1.7", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Firefox 1.5", + "platform": "Win 98+ / OSX.2+", + "version": "1.8", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Firefox 2.0", + "platform": "Win 98+ / OSX.2+", + "version": "1.8", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Firefox 3.0", + "platform": "Win 2k+ / OSX.3+", + "version": "1.9", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Camino 1.0", + "platform": "OSX.2+", + "version": "1.8", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Camino 1.5", + "platform": "OSX.3+", + "version": "1.8", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Netscape 7.2", + "platform": "Win 95+ / Mac OS 8.6-9.2", + "version": "1.7", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Netscape Browser 8", + "platform": "Win 98SE+", + "version": "1.7", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Netscape Navigator 9", + "platform": "Win 98+ / OSX.2+", + "version": "1.8", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.0", + "platform": "Win 95+ / OSX.1+", + "version": "1", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.1", + "platform": "Win 95+ / OSX.1+", + "version": "1.1", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.2", + "platform": "Win 95+ / OSX.1+", + "version": "1.2", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.3", + "platform": "Win 95+ / OSX.1+", + "version": "1.3", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.4", + "platform": "Win 95+ / OSX.1+", + "version": "1.4", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.5", + "platform": "Win 95+ / OSX.1+", + "version": "1.5", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.6", + "platform": "Win 95+ / OSX.1+", + "version": "1.6", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.7", + "platform": "Win 98+ / OSX.1+", + "version": "1.7", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.8", + "platform": "Win 98+ / OSX.1+", + "version": "1.8", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Seamonkey 1.1", + "platform": "Win 98+ / OSX.2+", + "version": "1.8", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Epiphany 2.20", + "platform": "Gnome", + "version": "1.8", + "grade": "A" + }, + { + "engine": "Webkit", + "browser": "Safari 1.2", + "platform": "OSX.3", + "version": "125.5", + "grade": "A" + }, + { + "engine": "Webkit", + "browser": "Safari 1.3", + "platform": "OSX.3", + "version": "312.8", + "grade": "A" + }, + { + "engine": "Webkit", + "browser": "Safari 2.0", + "platform": "OSX.4+", + "version": "419.3", + "grade": "A" + }, + { + "engine": "Webkit", + "browser": "Safari 3.0", + "platform": "OSX.4+", + "version": "522.1", + "grade": "A" + }, + { + "engine": "Webkit", + "browser": "OmniWeb 5.5", + "platform": "OSX.4+", + "version": "420", + "grade": "A" + }, + { + "engine": "Webkit", + "browser": "iPod Touch / iPhone", + "platform": "iPod", + "version": "420.1", + "grade": "A" + }, + { + "engine": "Webkit", + "browser": "S60", + "platform": "S60", + "version": "413", + "grade": "A" + }, + { + "engine": "Presto", + "browser": "Opera 7.0", + "platform": "Win 95+ / OSX.1+", + "version": "-", + "grade": "A" + }, + { + "engine": "Presto", + "browser": "Opera 7.5", + "platform": "Win 95+ / OSX.2+", + "version": "-", + "grade": "A" + }, + { + "engine": "Presto", + "browser": "Opera 8.0", + "platform": "Win 95+ / OSX.2+", + "version": "-", + "grade": "A" + }, + { + "engine": "Presto", + "browser": "Opera 8.5", + "platform": "Win 95+ / OSX.2+", + "version": "-", + "grade": "A" + }, + { + "engine": "Presto", + "browser": "Opera 9.0", + "platform": "Win 95+ / OSX.3+", + "version": "-", + "grade": "A" + }, + { + "engine": "Presto", + "browser": "Opera 9.2", + "platform": "Win 88+ / OSX.3+", + "version": "-", + "grade": "A" + }, + { + "engine": "Presto", + "browser": "Opera 9.5", + "platform": "Win 88+ / OSX.3+", + "version": "-", + "grade": "A" + }, + { + "engine": "Presto", + "browser": "Opera for Wii", + "platform": "Wii", + "version": "-", + "grade": "A" + }, + { + "engine": "Presto", + "browser": "Nokia N800", + "platform": "N800", + "version": "-", + "grade": "A" + }, + { + "engine": "Presto", + "browser": "Nintendo DS browser", + "platform": "Nintendo DS", + "version": "8.5", + "grade": "C/A<sup>1</sup>" + }, + { + "engine": "KHTML", + "browser": "Konqureror 3.1", + "platform": "KDE 3.1", + "version": "3.1", + "grade": "C" + }, + { + "engine": "KHTML", + "browser": "Konqureror 3.3", + "platform": "KDE 3.3", + "version": "3.3", + "grade": "A" + }, + { + "engine": "KHTML", + "browser": "Konqureror 3.5", + "platform": "KDE 3.5", + "version": "3.5", + "grade": "A" + }, + { + "engine": "Tasman", + "browser": "Internet Explorer 4.5", + "platform": "Mac OS 8-9", + "version": "-", + "grade": "X" + }, + { + "engine": "Tasman", + "browser": "Internet Explorer 5.1", + "platform": "Mac OS 7.6-9", + "version": "1", + "grade": "C" + }, + { + "engine": "Tasman", + "browser": "Internet Explorer 5.2", + "platform": "Mac OS 8-X", + "version": "1", + "grade": "C" + }, + { + "engine": "Misc", + "browser": "NetFront 3.1", + "platform": "Embedded devices", + "version": "-", + "grade": "C" + }, + { + "engine": "Misc", + "browser": "NetFront 3.4", + "platform": "Embedded devices", + "version": "-", + "grade": "A" + }, + { + "engine": "Misc", + "browser": "Dillo 0.8", + "platform": "Embedded devices", + "version": "-", + "grade": "X" + }, + { + "engine": "Misc", + "browser": "Links", + "platform": "Text only", + "version": "-", + "grade": "X" + }, + { + "engine": "Misc", + "browser": "Lynx", + "platform": "Text only", + "version": "-", + "grade": "X" + }, + { + "engine": "Misc", + "browser": "IE Mobile", + "platform": "Windows Mobile 6", + "version": "-", + "grade": "C" + }, + { + "engine": "Misc", + "browser": "PSP browser", + "platform": "PSP", + "version": "-", + "grade": "C" + }, + { + "engine": "Other browsers", + "browser": "All others", + "platform": "-", + "version": "-", + "grade": "U" + } +] } \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/ajax/sources/objects_subarrays.txt b/src/warden-server/contrib/wardenweb/datatables/examples/ajax/sources/objects_subarrays.txt new file mode 100644 index 0000000..3b6da56 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/ajax/sources/objects_subarrays.txt @@ -0,0 +1,515 @@ +{ "aaData": [ + { + "engine": "Trident", + "browser": "Internet Explorer 4.0", + "platform": "Win 95+", + "details": [ + "4", + "X" + ] + }, + { + "engine": "Trident", + "browser": "Internet Explorer 5.0", + "platform": "Win 95+", + "details": [ + "5", + "C" + ] + }, + { + "engine": "Trident", + "browser": "Internet Explorer 5.5", + "platform": "Win 95+", + "details": [ + "5.5", + "A" + ] + }, + { + "engine": "Trident", + "browser": "Internet Explorer 6", + "platform": "Win 98+", + "details": [ + "6", + "A" + ] + }, + { + "engine": "Trident", + "browser": "Internet Explorer 7", + "platform": "Win XP SP2+", + "details": [ + "7", + "A" + ] + }, + { + "engine": "Trident", + "browser": "AOL browser (AOL desktop)", + "platform": "Win XP", + "details": [ + "6", + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Firefox 1.0", + "platform": "Win 98+ / OSX.2+", + "details": [ + "1.7", + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Firefox 1.5", + "platform": "Win 98+ / OSX.2+", + "details": [ + "1.8", + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Firefox 2.0", + "platform": "Win 98+ / OSX.2+", + "details": [ + "1.8", + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Firefox 3.0", + "platform": "Win 2k+ / OSX.3+", + "details": [ + "1.9", + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Camino 1.0", + "platform": "OSX.2+", + "details": [ + "1.8", + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Camino 1.5", + "platform": "OSX.3+", + "details": [ + "1.8", + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Netscape 7.2", + "platform": "Win 95+ / Mac OS 8.6-9.2", + "details": [ + "1.7", + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Netscape Browser 8", + "platform": "Win 98SE+", + "details": [ + "1.7", + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Netscape Navigator 9", + "platform": "Win 98+ / OSX.2+", + "details": [ + "1.8", + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.0", + "platform": "Win 95+ / OSX.1+", + "details": [ + 1, + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.1", + "platform": "Win 95+ / OSX.1+", + "details": [ + 1.1, + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.2", + "platform": "Win 95+ / OSX.1+", + "details": [ + 1.2, + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.3", + "platform": "Win 95+ / OSX.1+", + "details": [ + 1.3, + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.4", + "platform": "Win 95+ / OSX.1+", + "details": [ + 1.4, + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.5", + "platform": "Win 95+ / OSX.1+", + "details": [ + 1.5, + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.6", + "platform": "Win 95+ / OSX.1+", + "details": [ + 1.6, + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.7", + "platform": "Win 98+ / OSX.1+", + "details": [ + 1.7, + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.8", + "platform": "Win 98+ / OSX.1+", + "details": [ + 1.8, + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Seamonkey 1.1", + "platform": "Win 98+ / OSX.2+", + "details": [ + "1.8", + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Epiphany 2.20", + "platform": "Gnome", + "details": [ + "1.8", + "A" + ] + }, + { + "engine": "Webkit", + "browser": "Safari 1.2", + "platform": "OSX.3", + "details": [ + "125.5", + "A" + ] + }, + { + "engine": "Webkit", + "browser": "Safari 1.3", + "platform": "OSX.3", + "details": [ + "312.8", + "A" + ] + }, + { + "engine": "Webkit", + "browser": "Safari 2.0", + "platform": "OSX.4+", + "details": [ + "419.3", + "A" + ] + }, + { + "engine": "Webkit", + "browser": "Safari 3.0", + "platform": "OSX.4+", + "details": [ + "522.1", + "A" + ] + }, + { + "engine": "Webkit", + "browser": "OmniWeb 5.5", + "platform": "OSX.4+", + "details": [ + "420", + "A" + ] + }, + { + "engine": "Webkit", + "browser": "iPod Touch / iPhone", + "platform": "iPod", + "details": [ + "420.1", + "A" + ] + }, + { + "engine": "Webkit", + "browser": "S60", + "platform": "S60", + "details": [ + "413", + "A" + ] + }, + { + "engine": "Presto", + "browser": "Opera 7.0", + "platform": "Win 95+ / OSX.1+", + "details": [ + "-", + "A" + ] + }, + { + "engine": "Presto", + "browser": "Opera 7.5", + "platform": "Win 95+ / OSX.2+", + "details": [ + "-", + "A" + ] + }, + { + "engine": "Presto", + "browser": "Opera 8.0", + "platform": "Win 95+ / OSX.2+", + "details": [ + "-", + "A" + ] + }, + { + "engine": "Presto", + "browser": "Opera 8.5", + "platform": "Win 95+ / OSX.2+", + "details": [ + "-", + "A" + ] + }, + { + "engine": "Presto", + "browser": "Opera 9.0", + "platform": "Win 95+ / OSX.3+", + "details": [ + "-", + "A" + ] + }, + { + "engine": "Presto", + "browser": "Opera 9.2", + "platform": "Win 88+ / OSX.3+", + "details": [ + "-", + "A" + ] + }, + { + "engine": "Presto", + "browser": "Opera 9.5", + "platform": "Win 88+ / OSX.3+", + "details": [ + "-", + "A" + ] + }, + { + "engine": "Presto", + "browser": "Opera for Wii", + "platform": "Wii", + "details": [ + "-", + "A" + ] + }, + { + "engine": "Presto", + "browser": "Nokia N800", + "platform": "N800", + "details": [ + "-", + "A" + ] + }, + { + "engine": "Presto", + "browser": "Nintendo DS browser", + "platform": "Nintendo DS", + "details": [ + "8.5", + "C/A<sup>1</sup>" + ] + }, + { + "engine": "KHTML", + "browser": "Konqureror 3.1", + "platform": "KDE 3.1", + "details": [ + "3.1", + "C" + ] + }, + { + "engine": "KHTML", + "browser": "Konqureror 3.3", + "platform": "KDE 3.3", + "details": [ + "3.3", + "A" + ] + }, + { + "engine": "KHTML", + "browser": "Konqureror 3.5", + "platform": "KDE 3.5", + "details": [ + "3.5", + "A" + ] + }, + { + "engine": "Tasman", + "browser": "Internet Explorer 4.5", + "platform": "Mac OS 8-9", + "details": [ + "-", + "X" + ] + }, + { + "engine": "Tasman", + "browser": "Internet Explorer 5.1", + "platform": "Mac OS 7.6-9", + "details": [ + "1", + "C" + ] + }, + { + "engine": "Tasman", + "browser": "Internet Explorer 5.2", + "platform": "Mac OS 8-X", + "details": [ + "1", + "C" + ] + }, + { + "engine": "Misc", + "browser": "NetFront 3.1", + "platform": "Embedded devices", + "details": [ + "-", + "C" + ] + }, + { + "engine": "Misc", + "browser": "NetFront 3.4", + "platform": "Embedded devices", + "details": [ + "-", + "A" + ] + }, + { + "engine": "Misc", + "browser": "Dillo 0.8", + "platform": "Embedded devices", + "details": [ + "-", + "X" + ] + }, + { + "engine": "Misc", + "browser": "Links", + "platform": "Text only", + "details": [ + "-", + "X" + ] + }, + { + "engine": "Misc", + "browser": "Lynx", + "platform": "Text only", + "details": [ + "-", + "X" + ] + }, + { + "engine": "Misc", + "browser": "IE Mobile", + "platform": "Windows Mobile 6", + "details": [ + "-", + "C" + ] + }, + { + "engine": "Misc", + "browser": "PSP browser", + "platform": "PSP", + "details": [ + "-", + "C" + ] + }, + { + "engine": "Other browsers", + "browser": "All others", + "platform": "-", + "details": [ + "-", + "U" + ] + } +] } \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/api/add_row.html b/src/warden-server/contrib/wardenweb/datatables/examples/api/add_row.html new file mode 100644 index 0000000..ae00252 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/api/add_row.html @@ -0,0 +1,222 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + /* Global var for counter */ + var giCount = 1; + + $(document).ready(function() { + $('#example').dataTable(); + } ); + + function fnClickAddRow() { + $('#example').dataTable().fnAddData( [ + giCount+".1", + giCount+".2", + giCount+".3", + giCount+".4" ] ); + + giCount++; + } + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables add row example + </div> + + <h1>Preamble</h1> + <p>DataTables adding rows in DataTables is done by assigning the DataTables jQuery object to a variable when initialising it, and then using it's API methods to add a new row. Deleting rows can be done in a similar manner.</p> + + <h1>Live example</h1> + <p><a href="javascript:void(0);" onclick="fnClickAddRow();">Click to add a new row</a></p> + + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Column 1</th> + <th>Column 2</th> + <th>Column 3</th> + <th>Column 4</th> + </tr> + </thead> + <tbody> + <tr> + <td>allan</td> + <td>allan</td> + <td>allan</td> + <td>allan</td> + </tr> + </tbody> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">/* Global var for counter */ +var giCount = 1; + +$(document).ready(function() { + $('#example').dataTable(); +} ); + +function fnClickAddRow() { + $('#example').dataTable().fnAddData( [ + giCount+".1", + giCount+".2", + giCount+".3", + giCount+".4" ] ); + + giCount++; +}</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/api/api_in_init.html b/src/warden-server/contrib/wardenweb/datatables/examples/api/api_in_init.html new file mode 100644 index 0000000..8f5476b --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/api/api_in_init.html @@ -0,0 +1,616 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + $('#example').dataTable( { + "fnInitComplete": function () { + var that = this; + this.$('td').click( function () { + that.fnFilter( this.innerHTML ); + } ); + } + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables using the DataTables object in the initialiser example + </div> + + <h1>Preamble</h1> + <p>There are times when you may wish to call API functions inside the DataTables callback functions (for example fnInitComplete, fnRowCallback etc). The complicating issue with this is that the object hasn't fully initialised, so you can't assign the result to something like oTable and then use oTable in the callback. However, this is catered for by the execution scope of the callback function. Here <i>this</i> is the DataTables object that is created for the table.</p> + <p>In this example you will be able to see that <i>this.$()</i> is used to get all nodes in the table's body and then act on them (in this case added a click event). Note also the value of <i>this</i> stored in the variable <i>that</i> so it can be used inside the jQuery click function, where the execution scope has been changed to the td element!). The action here is to apply the filter with the value of what is in each cell.</p> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="odd gradeX"> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="odd gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="odd gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="odd gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="odd gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="odd gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + $('#example').dataTable( { + "fnInitComplete": function () { + var that = this; + this.$('td').click( function () { + that.fnFilter( this.innerHTML ); + } ); + } + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/api/counter_column.html b/src/warden-server/contrib/wardenweb/datatables/examples/api/counter_column.html new file mode 100644 index 0000000..b6254b4 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/api/counter_column.html @@ -0,0 +1,691 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + $('#example').dataTable( { + "fnDrawCallback": function ( oSettings ) { + /* Need to redo the counters if filtered or sorted */ + if ( oSettings.bSorted || oSettings.bFiltered ) + { + for ( var i=0, iLen=oSettings.aiDisplay.length ; i<iLen ; i++ ) + { + $('td:eq(0)', oSettings.aoData[ oSettings.aiDisplay[i] ].nTr ).html( i+1 ); + } + } + }, + "aoColumnDefs": [ + { "bSortable": false, "aTargets": [ 0 ] } + ], + "aaSorting": [[ 1, 'asc' ]] + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables row numbers example + </div> + + <h1>Preamble</h1> + <p>A fairly common requirement for highly interactive tables which are displayed on the web is to have a column which with a 'counter' for the row number. This column should not be sortable, and change dynamically as the sorting and filtering applied to the table is altered by the end user.</p> + <p>This example shows how this can be achieved with DataTables, where the first column is the counter column, and is updated when sorting or filtering occurs. Also the first column is marked as un-sortable and initial sorting is applied only on the second column.</p> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Index</th> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="gradeX"> + <td class="center">1</td> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td class="center">2</td> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td class="center">3</td> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td class="center">4</td> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td class="center">5</td> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td class="center">6</td> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td class="center">7</td> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td class="center">8</td> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td class="center">9</td> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td class="center">10</td> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td class="center">11</td> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td class="center">12</td> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td class="center">13</td> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td class="center">14</td> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td class="center">15</td> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td class="center">16</td> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td class="center">17</td> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td class="center">18</td> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td class="center">19</td> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td class="center">20</td> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td class="center">21</td> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td class="center">22</td> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td class="center">23</td> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td class="center">24</td> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td class="center">25</td> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td class="center">26</td> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td class="center">27</td> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td class="center">28</td> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td class="center">29</td> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td class="center">30</td> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td class="center">31</td> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td class="center">32</td> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td class="center">33</td> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td class="center">34</td> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td class="center">35</td> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td class="center">36</td> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td class="center">37</td> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td class="center">38</td> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td class="center">39</td> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td class="center">40</td> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td class="center">41</td> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td class="center">42</td> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td class="center">43</td> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td class="center">44</td> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td class="center">45</td> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td class="center">46</td> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td class="center">47</td> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td class="center">48</td> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td class="center">49</td> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td class="center">50</td> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td class="center">51</td> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td class="center">52</td> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td class="center">53</td> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td class="center">54</td> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td class="center">55</td> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td class="center">56</td> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td class="center">57</td> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Index</th> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + $('#example').dataTable( { + "fnDrawCallback": function ( oSettings ) { + /* Need to redo the counters if filtered or sorted */ + if ( oSettings.bSorted || oSettings.bFiltered ) + { + for ( var i=0, iLen=oSettings.aiDisplay.length ; i<iLen ; i++ ) + { + $('td:eq(0)', oSettings.aoData[ oSettings.aiDisplay[i] ].nTr ).html( i+1 ); + } + } + }, + "aoColumnDefs": [ + { "bSortable": false, "aTargets": [ 0 ] } + ], + "aaSorting": [[ 1, 'asc' ]] + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/api/editable.html b/src/warden-server/contrib/wardenweb/datatables/examples/api/editable.html new file mode 100644 index 0000000..93d1259 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/api/editable.html @@ -0,0 +1,640 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../examples_support/jquery.jeditable.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + /* Init DataTables */ + var oTable = $('#example').dataTable(); + + /* Apply the jEditable handlers to the table */ + oTable.$('td').editable( '../examples_support/editable_ajax.php', { + "callback": function( sValue, y ) { + var aPos = oTable.fnGetPosition( this ); + oTable.fnUpdate( sValue, aPos[0], aPos[1] ); + }, + "submitdata": function ( value, settings ) { + return { + "row_id": this.parentNode.getAttribute('id'), + "column": oTable.fnGetPosition( this )[2] + }; + }, + "height": "14px", + "width": "100%" + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables editing example + </div> + + <h1>Preamble</h1> + <p>Using DataTables in-combination with the excellent <a href="http://www.appelsiini.net/projects/jeditable">jEditable</a> plugin for jQuery allows you to produce a table which can have individual cells edited. The table can then be updated such that filtering, sorting etc. will all work as expected. This is showing in the demo below.</p> + <p>The example shows how a table element can be edited (you could limit to a particular column if you wish using the selector), posted to the server (for saving in a database or whatever) and then placed back into the DataTable. The server's processing in this example simply appends the string '(server updated)' to indicate that something has happened on the server.</p> + <p>Note also that this example makes use of the information in the 'ID' attribute of the TR element. This is useful in order to tell the server what row is being updated - this can readily be expended to include column information as required. Further to this, it is worth noting that to use this type of example with DataTables' server-side processing option, you must use <a href="http://datatables.net/usage/callbacks#fnDrawCallback">fnDrawCallback</a> to apply the event listeners on each draw.</p> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr id="1" class="gradeX"> + <td>Trident</td> + <td>Internet + Explorer + 4.0 + </td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr id="2" class="gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr id="3" class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr id="4" class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr id="5" class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr id="6" class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr id="7" class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr id="8" class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr id="9" class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr id="10" class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr id="11" class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr id="12" class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr id="13" class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr id="14" class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr id="15" class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr id="16" class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr id="17" class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr id="18" class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr id="19" class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr id="20" class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr id="21" class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr id="22" class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr id="23" class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr id="24" class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr id="25" class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr id="26" class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr id="27" class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr id="28" class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr id="29" class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr id="30" class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr id="31" class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr id="32" class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr id="33" class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr id="34" class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr id="35" class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr id="36" class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr id="37" class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr id="38" class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr id="39" class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr id="40" class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr id="41" class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr id="42" class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr id="43" class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr id="44" class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr id="45" class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr id="46" class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr id="47" class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr id="48" class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr id="49" class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr id="50" class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr id="51" class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr id="52" class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr id="53" class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr id="54" class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr id="55" class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr id="56" class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr id="57" class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + /* Init DataTables */ + var oTable = $('#example').dataTable(); + + /* Apply the jEditable handlers to the table */ + oTable.$('td').editable( '../examples_support/editable_ajax.php', { + "callback": function( sValue, y ) { + var aPos = oTable.fnGetPosition( this ); + oTable.fnUpdate( sValue, aPos[0], aPos[1] ); + }, + "submitdata": function ( value, settings ) { + return { + "row_id": this.parentNode.getAttribute('id'), + "column": oTable.fnGetPosition( this )[2] + }; + }, + "height": "14px", + "width": "100%" + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/api/form.html b/src/warden-server/contrib/wardenweb/datatables/examples/api/form.html new file mode 100644 index 0000000..989e463 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/api/form.html @@ -0,0 +1,681 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + var oTable; + + $(document).ready(function() { + $('#form').submit( function() { + var sData = oTable.$('input').serialize(); + alert( "The following data would have been submitted to the server: \n\n"+sData ); + return false; + } ); + + oTable = $('#example').dataTable(); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables with form elements example + </div> + + <h1>Preamble</h1> + <p>The following example shows how form elements can be used within a DataTables enhanced table. The trick here is that DataTables does not include the DOM elements which are not currently being displayed, therefore you need to add a submit event handler to gather together all of the input elements from the table, and then use the handy jQuery <b>serialize()</b> function to string together the data. It can then be posted to the server as you wish.</p> + + <h1>Live example</h1> + <div id="demo"> + <form id="form"> + <div style="text-align:right; padding-bottom:1em;"> + <button type="submit">Submit form</button> + </div> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + <th>Check</th> + </tr> + </thead> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + <td class="center"><input type="checkbox" name="check1" value="1"></td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + <td class="center"><input type="checkbox" name="check2" value="2"></td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + <td class="center"><input type="checkbox" name="check3" value="3"></td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + <td class="center"><input type="checkbox" name="check4" value="4"></td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + <td class="center"><input type="checkbox" name="check5" value="5"></td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + <td class="center"><input type="checkbox" name="check6" value="6"></td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + <td class="center"><input type="checkbox" name="check7" value="7"></td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + <td class="center"><input type="checkbox" name="check8" value="8"></td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + <td class="center"><input type="checkbox" name="check9" value="9"></td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + <td class="center"><input type="checkbox" name="check10" value="10"></td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + <td class="center"><input type="checkbox" name="check11" value="11"></td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + <td class="center"><input type="checkbox" name="check12" value="12"></td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + <td class="center"><input type="checkbox" name="check13" value="13"></td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + <td class="center"><input type="checkbox" name="check14" value="14"></td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + <td class="center"><input type="checkbox" name="check15" value="15"></td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + <td class="center"><input type="checkbox" name="check16" value="16"></td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + <td class="center"><input type="checkbox" name="check17" value="17"></td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + <td class="center"><input type="checkbox" name="check18" value="18"></td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + <td class="center"><input type="checkbox" name="check19" value="19"></td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + <td class="center"><input type="checkbox" name="check20" value="20"></td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + <td class="center"><input type="checkbox" name="check21" value="21"></td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + <td class="center"><input type="checkbox" name="check22" value="22"></td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + <td class="center"><input type="checkbox" name="check23" value="23"></td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + <td class="center"><input type="checkbox" name="check24" value="24"></td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + <td class="center"><input type="checkbox" name="check25" value="25"></td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + <td class="center"><input type="checkbox" name="check26" value="26"></td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + <td class="center"><input type="checkbox" name="check27" value="27"></td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + <td class="center"><input type="checkbox" name="check28" value="28"></td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + <td class="center"><input type="checkbox" name="check29" value="29"></td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + <td class="center"><input type="checkbox" name="check30" value="30"></td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + <td class="center"><input type="checkbox" name="check31" value="31"></td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + <td class="center"><input type="checkbox" name="check32" value="32"></td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + <td class="center"><input type="checkbox" name="check33" value="33"></td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + <td class="center"><input type="checkbox" name="check34" value="34"></td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + <td class="center"><input type="checkbox" name="check35" value="35"></td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + <td class="center"><input type="checkbox" name="check36" value="36"></td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + <td class="center"><input type="checkbox" name="check37" value="37"></td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + <td class="center"><input type="checkbox" name="check38" value="38"></td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + <td class="center"><input type="checkbox" name="check39" value="39"></td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + <td class="center"><input type="checkbox" name="check40" value="40"></td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + <td class="center"><input type="checkbox" name="check41" value="41"></td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + <td class="center"><input type="checkbox" name="check42" value="42"></td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + <td class="center"><input type="checkbox" name="check43" value="43"></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + <td class="center"><input type="checkbox" name="check44" value="44"></td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + <td class="center"><input type="checkbox" name="check45" value="45"></td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + <td class="center"><input type="checkbox" name="check46" value="46"></td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + <td class="center"><input type="checkbox" name="check47" value="47"></td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + <td class="center"><input type="checkbox" name="check48" value="48"></td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + <td class="center"><input type="checkbox" name="check49" value="49"></td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + <td class="center"><input type="checkbox" name="check50" value="50"></td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + <td class="center"><input type="checkbox" name="check51" value="51"></td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + <td class="center"><input type="checkbox" name="check52" value="52"></td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + <td class="center"><input type="checkbox" name="check53" value="53"></td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + <td class="center"><input type="checkbox" name="check54" value="54"></td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + <td class="center"><input type="checkbox" name="check55" value="55"></td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + <td class="center"><input type="checkbox" name="check56" value="56"></td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + <td class="center"><input type="checkbox" name="check57" value="57"></td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + <th>Check</th> + </tr> + </tfoot> +</table> + </form> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">var oTable; + +$(document).ready(function() { + $('#form').submit( function() { + var sData = oTable.$('input').serialize(); + alert( "The following data would have been submitted to the server: \n\n"+sData ); + return false; + } ); + + oTable = $('#example').dataTable(); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/api/highlight.html b/src/warden-server/contrib/wardenweb/datatables/examples/api/highlight.html new file mode 100644 index 0000000..081f0d0 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/api/highlight.html @@ -0,0 +1,619 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + var oTable = $('#example').dataTable( { + "bSortClasses": false + } ); + + oTable.$('td').hover( function() { + var iCol = $('td', this.parentNode).index(this) % 5; + $('td:nth-child('+(iCol+1)+')', oTable.$('tr')).addClass( 'highlighted' ); + }, function() { + oTable.$('td.highlighted').removeClass('highlighted'); + } ); + } ); + </script> + </head> + <body id="dt_example" class="ex_highlight"> + <div id="container"> + <div class="full_width big"> + DataTables highlighting example + </div> + + <h1>Preamble</h1> + <p>The highlighting of rows and columns have be quite useful for attracting attention to where the user's cursor is in the data array. Of course the highlighting of a row is easy enough using CSS, but for column highlighting, you need to use a little bit of Javascript. This example shows that in action on a DataTables enhanced table - this type of effect would be particularly effective on tables with dense information.</p> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + var oTable = $('#example').dataTable( { + "bSortClasses": false + } ); + + oTable.$('td').hover( function() { + var iCol = $('td', this.parentNode).index(this) % 5; + $('td:nth-child('+(iCol+1)+')', oTable.$('tr')).addClass( 'highlighted' ); + }, function() { + oTable.$('td.highlighted').removeClass('highlighted'); + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/api/multi_filter.html b/src/warden-server/contrib/wardenweb/datatables/examples/api/multi_filter.html new file mode 100644 index 0000000..e75fc1a --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/api/multi_filter.html @@ -0,0 +1,677 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + var asInitVals = new Array(); + + $(document).ready(function() { + var oTable = $('#example').dataTable( { + "oLanguage": { + "sSearch": "Search all columns:" + } + } ); + + $("tfoot input").keyup( function () { + /* Filter on the column (the index) of this element */ + oTable.fnFilter( this.value, $("tfoot input").index(this) ); + } ); + + + + /* + * Support functions to provide a little bit of 'user friendlyness' to the textboxes in + * the footer + */ + $("tfoot input").each( function (i) { + asInitVals[i] = this.value; + } ); + + $("tfoot input").focus( function () { + if ( this.className == "search_init" ) + { + this.className = ""; + this.value = ""; + } + } ); + + $("tfoot input").blur( function (i) { + if ( this.value == "" ) + { + this.className = "search_init"; + this.value = asInitVals[$("tfoot input").index(this)]; + } + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables individual column filtering example + </div> + + <h1>Preamble</h1> + <p>The filtering functionality that is provided by DataTables is very useful for quickly search through the information in the table - however the search is global, and you (or the end user) may wish to filter only on a particular column of data. To met this need the DataTables <b>fnFilter()</b> API function allow you to specify a column to limit to search to. Note that this works in-combination with the global search filter. Further note that because the input elements are outside of the control of DataTables, with state saving enabled, stored values are not automatically restored - please see <a href="http://datatables.net/forums/comments.php?DiscussionID=2864#Item_3">this post in the forum</a> for how to do this.</p> + <p>The example below shows a table which has a text input box for each column in the footer element of the table. This allows the data in each column to be quickly filtered upon by the end user.</p> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> + <tfoot> + <tr> + <th><input type="text" name="search_engine" value="Search engines" class="search_init" /></th> + <th><input type="text" name="search_browser" value="Search browsers" class="search_init" /></th> + <th><input type="text" name="search_platform" value="Search platforms" class="search_init" /></th> + <th><input type="text" name="search_version" value="Search versions" class="search_init" /></th> + <th><input type="text" name="search_grade" value="Search grades" class="search_init" /></th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">var asInitVals = new Array(); + +$(document).ready(function() { + var oTable = $('#example').dataTable( { + "oLanguage": { + "sSearch": "Search all columns:" + } + } ); + + $("tfoot input").keyup( function () { + /* Filter on the column (the index) of this element */ + oTable.fnFilter( this.value, $("tfoot input").index(this) ); + } ); + + + + /* + * Support functions to provide a little bit of 'user friendlyness' to the textboxes in + * the footer + */ + $("tfoot input").each( function (i) { + asInitVals[i] = this.value; + } ); + + $("tfoot input").focus( function () { + if ( this.className == "search_init" ) + { + this.className = ""; + this.value = ""; + } + } ); + + $("tfoot input").blur( function (i) { + if ( this.value == "" ) + { + this.className = "search_init"; + this.value = asInitVals[$("tfoot input").index(this)]; + } + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + <p>Note that in the above code, the support functions are provided to ensure that the end user knows what data is being filtered upon. <b>fnFilter()</b> is the function of primary import here.</p> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/api/multi_filter_select.html b/src/warden-server/contrib/wardenweb/datatables/examples/api/multi_filter_select.html new file mode 100644 index 0000000..4e252a9 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/api/multi_filter_select.html @@ -0,0 +1,760 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + (function($) { + /* + * Function: fnGetColumnData + * Purpose: Return an array of table values from a particular column. + * Returns: array string: 1d data array + * Inputs: object:oSettings - dataTable settings object. This is always the last argument past to the function + * int:iColumn - the id of the column to extract the data from + * bool:bUnique - optional - if set to false duplicated values are not filtered out + * bool:bFiltered - optional - if set to false all the table data is used (not only the filtered) + * bool:bIgnoreEmpty - optional - if set to false empty values are not filtered from the result array + * Author: Benedikt Forchhammer <b.forchhammer /AT\ mind2.de> + */ + $.fn.dataTableExt.oApi.fnGetColumnData = function ( oSettings, iColumn, bUnique, bFiltered, bIgnoreEmpty ) { + // check that we have a column id + if ( typeof iColumn == "undefined" ) return new Array(); + + // by default we only wany unique data + if ( typeof bUnique == "undefined" ) bUnique = true; + + // by default we do want to only look at filtered data + if ( typeof bFiltered == "undefined" ) bFiltered = true; + + // by default we do not wany to include empty values + if ( typeof bIgnoreEmpty == "undefined" ) bIgnoreEmpty = true; + + // list of rows which we're going to loop through + var aiRows; + + // use only filtered rows + if (bFiltered == true) aiRows = oSettings.aiDisplay; + // use all rows + else aiRows = oSettings.aiDisplayMaster; // all row numbers + + // set up data array + var asResultData = new Array(); + + for (var i=0,c=aiRows.length; i<c; i++) { + iRow = aiRows[i]; + var aData = this.fnGetData(iRow); + var sValue = aData[iColumn]; + + // ignore empty values? + if (bIgnoreEmpty == true && sValue.length == 0) continue; + + // ignore unique values? + else if (bUnique == true && jQuery.inArray(sValue, asResultData) > -1) continue; + + // else push the value onto the result data array + else asResultData.push(sValue); + } + + return asResultData; + }}(jQuery)); + + + function fnCreateSelect( aData ) + { + var r='<select><option value=""></option>', i, iLen=aData.length; + for ( i=0 ; i<iLen ; i++ ) + { + r += '<option value="'+aData[i]+'">'+aData[i]+'</option>'; + } + return r+'</select>'; + } + + + $(document).ready(function() { + /* Initialise the DataTable */ + var oTable = $('#example').dataTable( { + "oLanguage": { + "sSearch": "Search all columns:" + } + } ); + + /* Add a select menu for each TH element in the table footer */ + $("tfoot th").each( function ( i ) { + this.innerHTML = fnCreateSelect( oTable.fnGetColumnData(i) ); + $('select', this).change( function () { + oTable.fnFilter( $(this).val(), i ); + } ); + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables individual column filtering example (using select menus) + </div> + + <h1>Preamble</h1> + <p>This example is almost identical to <a href="multi_filter.html">individual column example</a> and provides the same functionality, but using <select> menus rather than input elements. The API plug-in function fnGetColumnData from Benedikt Forchhammer provides much of the logic processing required, and integration with a table is almost trivial.</p> + <p>One possible interaction chance would be to make use of fnGetColumnData's ability to get filtered data, so you could have the possible filtering values in the select menus to update to only those in the table, rather than all values.</p> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> + <tfoot> + <tr> + <th></th> + <th></th> + <th></th> + <th></th> + <th></th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">(function($) { +/* + * Function: fnGetColumnData + * Purpose: Return an array of table values from a particular column. + * Returns: array string: 1d data array + * Inputs: object:oSettings - dataTable settings object. This is always the last argument past to the function + * int:iColumn - the id of the column to extract the data from + * bool:bUnique - optional - if set to false duplicated values are not filtered out + * bool:bFiltered - optional - if set to false all the table data is used (not only the filtered) + * bool:bIgnoreEmpty - optional - if set to false empty values are not filtered from the result array + * Author: Benedikt Forchhammer <b.forchhammer /AT\ mind2.de> + */ +$.fn.dataTableExt.oApi.fnGetColumnData = function ( oSettings, iColumn, bUnique, bFiltered, bIgnoreEmpty ) { + // check that we have a column id + if ( typeof iColumn == "undefined" ) return new Array(); + + // by default we only wany unique data + if ( typeof bUnique == "undefined" ) bUnique = true; + + // by default we do want to only look at filtered data + if ( typeof bFiltered == "undefined" ) bFiltered = true; + + // by default we do not wany to include empty values + if ( typeof bIgnoreEmpty == "undefined" ) bIgnoreEmpty = true; + + // list of rows which we're going to loop through + var aiRows; + + // use only filtered rows + if (bFiltered == true) aiRows = oSettings.aiDisplay; + // use all rows + else aiRows = oSettings.aiDisplayMaster; // all row numbers + + // set up data array + var asResultData = new Array(); + + for (var i=0,c=aiRows.length; i<c; i++) { + iRow = aiRows[i]; + var aData = this.fnGetData(iRow); + var sValue = aData[iColumn]; + + // ignore empty values? + if (bIgnoreEmpty == true && sValue.length == 0) continue; + + // ignore unique values? + else if (bUnique == true && jQuery.inArray(sValue, asResultData) > -1) continue; + + // else push the value onto the result data array + else asResultData.push(sValue); + } + + return asResultData; +}}(jQuery)); + + +function fnCreateSelect( aData ) +{ + var r='<select><option value=""></option>', i, iLen=aData.length; + for ( i=0 ; i<iLen ; i++ ) + { + r += '<option value="'+aData[i]+'">'+aData[i]+'</option>'; + } + return r+'</select>'; +} + + +$(document).ready(function() { + /* Initialise the DataTable */ + var oTable = $('#example').dataTable( { + "oLanguage": { + "sSearch": "Search all columns:" + } + } ); + + /* Add a select menu for each TH element in the table footer */ + $("tfoot th").each( function ( i ) { + this.innerHTML = fnCreateSelect( oTable.fnGetColumnData(i) ); + $('select', this).change( function () { + oTable.fnFilter( $(this).val(), i ); + } ); + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/api/regex.html b/src/warden-server/contrib/wardenweb/datatables/examples/api/regex.html new file mode 100644 index 0000000..3d90a7b --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/api/regex.html @@ -0,0 +1,727 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + function fnFilterGlobal () + { + $('#example').dataTable().fnFilter( + $("#global_filter").val(), + null, + $("#global_regex")[0].checked, + $("#global_smart")[0].checked + ); + } + + function fnFilterColumn ( i ) + { + $('#example').dataTable().fnFilter( + $("#col"+(i+1)+"_filter").val(), + i, + $("#col"+(i+1)+"_regex")[0].checked, + $("#col"+(i+1)+"_smart")[0].checked + ); + } + + $(document).ready(function() { + $('#example').dataTable(); + + $("#global_filter").keyup( fnFilterGlobal ); + $("#global_regex").click( fnFilterGlobal ); + $("#global_smart").click( fnFilterGlobal ); + + $("#col1_filter").keyup( function() { fnFilterColumn( 0 ); } ); + $("#col1_regex").click( function() { fnFilterColumn( 0 ); } ); + $("#col1_smart").click( function() { fnFilterColumn( 0 ); } ); + + $("#col2_filter").keyup( function() { fnFilterColumn( 1 ); } ); + $("#col2_regex").click( function() { fnFilterColumn( 1 ); } ); + $("#col2_smart").click( function() { fnFilterColumn( 1 ); } ); + + $("#col3_filter").keyup( function() { fnFilterColumn( 2 ); } ); + $("#col3_regex").click( function() { fnFilterColumn( 2 ); } ); + $("#col3_smart").click( function() { fnFilterColumn( 2 ); } ); + + $("#col4_filter").keyup( function() { fnFilterColumn( 3 ); } ); + $("#col4_regex").click( function() { fnFilterColumn( 3 ); } ); + $("#col4_smart").click( function() { fnFilterColumn( 3 ); } ); + + $("#col5_filter").keyup( function() { fnFilterColumn( 4 ); } ); + $("#col5_regex").click( function() { fnFilterColumn( 4 ); } ); + $("#col5_smart").click( function() { fnFilterColumn( 4 ); } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables filtering API example + </div> + + <h1>Preamble</h1> + <p>Filtering a table is one of the most common user interactions with a DataTables table, and DataTables provides a number of methods for you to control this interaction. There is a global filter, and a filter for each individual column. The global filter acts on each column.</p> + <p>Each filter (global or column) can be marked as a regular expression (allowing you to create very complex interactions) and as a smart filter or not. When smart filtering is enabled on a particular filter, DataTables will modify the user input string to a complex regular expression which can make filtering more intuitive.</p> + <p>This example allows you to "play" with the various filtering options that DataTables provides.</p> + + <h1>Live example</h1> + + <table cellpadding="0" cellspacing="0" border="0" class="display"> + <thead> + <tr> + <th>Target</th> + <th>Filter text</th> + <th>Treat as regex</th> + <th>Use smart filter</th> + </tr> + </thead> + <tbody> + <tr id="filter_global"> + <td align="center">Global filtering</td> + <td align="center"><input type="text" name="global_filter" id="global_filter"></td> + <td align="center"><input type="checkbox" name="global_regex" id="global_regex" ></td> + <td align="center"><input type="checkbox" name="global_smart" id="global_smart" checked></td> + </tr> + <tr id="filter_col1"> + <td align="center">Column 1</td> + <td align="center"><input type="text" name="col1_filter" id="col1_filter"></td> + <td align="center"><input type="checkbox" name="col1_regex" id="col1_regex"></td> + <td align="center"><input type="checkbox" name="col1_smart" id="col1_smart" checked></td> + </tr> + <tr id="filter_col2"> + <td align="center">Column 2</td> + <td align="center"><input type="text" name="col2_filter" id="col2_filter"></td> + <td align="center"><input type="checkbox" name="col2_regex" id="col2_regex"></td> + <td align="center"><input type="checkbox" name="col2_smart" id="col2_smart" checked></td> + </tr> + <tr id="filter_col3"> + <td align="center">Column 3</td> + <td align="center"><input type="text" name="col3_filter" id="col3_filter"></td> + <td align="center"><input type="checkbox" name="col3_regex" id="col3_regex"></td> + <td align="center"><input type="checkbox" name="col3_smart" id="col3_smart" checked></td> + </tr> + <tr id="filter_col4"> + <td align="center">Column 4</td> + <td align="center"><input type="text" name="col4_filter" id="col4_filter"></td> + <td align="center"><input type="checkbox" name="col4_regex" id="col4_regex"></td> + <td align="center"><input type="checkbox" name="col4_smart" id="col4_smart" checked></td> + </tr> + <tr id="filter_col5"> + <td align="center">Column 5</td> + <td align="center"><input type="text" name="col5_filter" id="col5_filter"></td> + <td align="center"><input type="checkbox" name="col5_regex" id="col5_regex"></td> + <td align="center"><input type="checkbox" name="col5_smart" id="col5_smart" checked></td> + </tr> + </tbody> + </table> + + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5,5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1,7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1,8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1,8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1,9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1,8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1,8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1,7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1,8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1,1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1,2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1,3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1,4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1,5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1,6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1,7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1,8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1,8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1,8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125,5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312,8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419,3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522,1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420,1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8,5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3,1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3,3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3,5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">function fnFilterGlobal () +{ + $('#example').dataTable().fnFilter( + $("#global_filter").val(), + null, + $("#global_regex")[0].checked, + $("#global_smart")[0].checked + ); +} + +function fnFilterColumn ( i ) +{ + $('#example').dataTable().fnFilter( + $("#col"+(i+1)+"_filter").val(), + i, + $("#col"+(i+1)+"_regex")[0].checked, + $("#col"+(i+1)+"_smart")[0].checked + ); +} + +$(document).ready(function() { + $('#example').dataTable(); + + $("#global_filter").keyup( fnFilterGlobal ); + $("#global_regex").click( fnFilterGlobal ); + $("#global_smart").click( fnFilterGlobal ); + + $("#col1_filter").keyup( function() { fnFilterColumn( 0 ); } ); + $("#col1_regex").click( function() { fnFilterColumn( 0 ); } ); + $("#col1_smart").click( function() { fnFilterColumn( 0 ); } ); + + // ... etc for the other four columns +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/api/row_details.html b/src/warden-server/contrib/wardenweb/datatables/examples/api/row_details.html new file mode 100644 index 0000000..b97b891 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/api/row_details.html @@ -0,0 +1,706 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + /* Formating function for row details */ + function fnFormatDetails ( oTable, nTr ) + { + var aData = oTable.fnGetData( nTr ); + var sOut = '<table cellpadding="5" cellspacing="0" border="0" style="padding-left:50px;">'; + sOut += '<tr><td>Rendering engine:</td><td>'+aData[1]+' '+aData[4]+'</td></tr>'; + sOut += '<tr><td>Link to source:</td><td>Could provide a link here</td></tr>'; + sOut += '<tr><td>Extra info:</td><td>And any further details here (images etc)</td></tr>'; + sOut += '</table>'; + + return sOut; + } + + $(document).ready(function() { + /* + * Insert a 'details' column to the table + */ + var nCloneTh = document.createElement( 'th' ); + var nCloneTd = document.createElement( 'td' ); + nCloneTd.innerHTML = '<img src="../examples_support/details_open.png">'; + nCloneTd.className = "center"; + + $('#example thead tr').each( function () { + this.insertBefore( nCloneTh, this.childNodes[0] ); + } ); + + $('#example tbody tr').each( function () { + this.insertBefore( nCloneTd.cloneNode( true ), this.childNodes[0] ); + } ); + + /* + * Initialse DataTables, with no sorting on the 'details' column + */ + var oTable = $('#example').dataTable( { + "aoColumnDefs": [ + { "bSortable": false, "aTargets": [ 0 ] } + ], + "aaSorting": [[1, 'asc']] + }); + + /* Add event listener for opening and closing details + * Note that the indicator for showing which row is open is not controlled by DataTables, + * rather it is done here + */ + $('#example tbody td img').live('click', function () { + var nTr = $(this).parents('tr')[0]; + if ( oTable.fnIsOpen(nTr) ) + { + /* This row is already open - close it */ + this.src = "../examples_support/details_open.png"; + oTable.fnClose( nTr ); + } + else + { + /* Open this row */ + this.src = "../examples_support/details_close.png"; + oTable.fnOpen( nTr, fnFormatDetails(oTable, nTr), 'details' ); + } + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables hidden row details example + </div> + + <h1>Preamble</h1> + <p>DataTables has most features enabled by default, so all you need to do to use it with one of your own tables is to call the construction function (as shown below).</p> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">/* Formating function for row details */ +function fnFormatDetails ( oTable, nTr ) +{ + var aData = oTable.fnGetData( nTr ); + var sOut = '<table cellpadding="5" cellspacing="0" border="0" style="padding-left:50px;">'; + sOut += '<tr><td>Rendering engine:</td><td>'+aData[1]+' '+aData[4]+'</td></tr>'; + sOut += '<tr><td>Link to source:</td><td>Could provide a link here</td></tr>'; + sOut += '<tr><td>Extra info:</td><td>And any further details here (images etc)</td></tr>'; + sOut += '</table>'; + + return sOut; +} + +$(document).ready(function() { + /* + * Insert a 'details' column to the table + */ + var nCloneTh = document.createElement( 'th' ); + var nCloneTd = document.createElement( 'td' ); + nCloneTd.innerHTML = '<img src="../examples_support/details_open.png">'; + nCloneTd.className = "center"; + + $('#example thead tr').each( function () { + this.insertBefore( nCloneTh, this.childNodes[0] ); + } ); + + $('#example tbody tr').each( function () { + this.insertBefore( nCloneTd.cloneNode( true ), this.childNodes[0] ); + } ); + + /* + * Initialse DataTables, with no sorting on the 'details' column + */ + var oTable = $('#example').dataTable( { + "aoColumnDefs": [ + { "bSortable": false, "aTargets": [ 0 ] } + ], + "aaSorting": [[1, 'asc']] + }); + + /* Add event listener for opening and closing details + * Note that the indicator for showing which row is open is not controlled by DataTables, + * rather it is done here + */ + $('#example tbody td img').live('click', function () { + var nTr = $(this).parents('tr')[0]; + if ( oTable.fnIsOpen(nTr) ) + { + /* This row is already open - close it */ + this.src = "../examples_support/details_open.png"; + oTable.fnClose( nTr ); + } + else + { + /* Open this row */ + this.src = "../examples_support/details_close.png"; + oTable.fnOpen( nTr, fnFormatDetails(oTable, nTr), 'details' ); + } + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/api/select_row.html b/src/warden-server/contrib/wardenweb/datatables/examples/api/select_row.html new file mode 100644 index 0000000..ed99e25 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/api/select_row.html @@ -0,0 +1,631 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + /* Add/remove class to a row when clicked on */ + $('#example tr').click( function() { + $(this).toggleClass('row_selected'); + } ); + + /* Init the table */ + var oTable = $('#example').dataTable( ); + } ); + + /* + * I don't actually use this here, but it is provided as it might be useful and demonstrates + * getting the TR nodes from DataTables + */ + function fnGetSelected( oTableLocal ) + { + return oTableLocal.$('tr.row_selected'); + } + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables row select example + </div> + + <h1>Preamble</h1> + <p>It can be quite useful at times to provide the user with the option to select rows in a DataTable. This can be done by simply using a click event to add/remove a class on the table rows. The the selected rows are then provided through the custom function <b>fnGetSelected()</b> for later processing.</p> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + /* Add/remove class to a row when clicked on */ + $('#example tr').click( function() { + $(this).toggleClass('row_selected'); + } ); + + /* Init the table */ + var oTable = $('#example').dataTable( ); +} ); + +/* + * I don't actually use this here, but it is provided as it might be useful and demonstrates + * getting the TR nodes from DataTables + */ +function fnGetSelected( oTableLocal ) +{ + return oTableLocal.$('tr.row_selected'); +}</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/api/select_single_row.html b/src/warden-server/contrib/wardenweb/datatables/examples/api/select_single_row.html new file mode 100644 index 0000000..a5d74e0 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/api/select_single_row.html @@ -0,0 +1,656 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + var oTable; + + $(document).ready(function() { + /* Add a click handler to the rows - this could be used as a callback */ + $("#example tbody tr").click( function( e ) { + if ( $(this).hasClass('row_selected') ) { + $(this).removeClass('row_selected'); + } + else { + oTable.$('tr.row_selected').removeClass('row_selected'); + $(this).addClass('row_selected'); + } + }); + + /* Add a click handler for the delete row */ + $('#delete').click( function() { + var anSelected = fnGetSelected( oTable ); + oTable.fnDeleteRow( anSelected[0] ); + } ); + + /* Init the table */ + oTable = $('#example').dataTable( ); + } ); + + + /* Get the rows which are currently selected */ + function fnGetSelected( oTableLocal ) + { + return oTableLocal.$('tr.row_selected'); + } + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables row select example + </div> + + <h1>Preamble</h1> + <p>It can be quite useful at times to provide the user with the option to select rows in a DataTable. In this example we use standard jQuery 'click' events to add a class to table rows to indicate that they have been selected. Note that we use <i>oTable.$()</i> when working with rows in the table to ensure that all rows are considered, regardless of paging and filtering.</p> + + <h1>Live example</h1> + <p><a href="javascript:void(0)" id="delete">Delete selected row</a></p> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">var oTable; + +$(document).ready(function() { + /* Add a click handler to the rows - this could be used as a callback */ + $("#example tbody tr").click( function( e ) { + if ( $(this).hasClass('row_selected') ) { + $(this).removeClass('row_selected'); + } + else { + oTable.$('tr.row_selected').removeClass('row_selected'); + $(this).addClass('row_selected'); + } + }); + + /* Add a click handler for the delete row */ + $('#delete').click( function() { + var anSelected = fnGetSelected( oTable ); + oTable.fnDeleteRow( anSelected[0] ); + } ); + + /* Init the table */ + oTable = $('#example').dataTable( ); +} ); + + +/* Get the rows which are currently selected */ +function fnGetSelected( oTableLocal ) +{ + return oTableLocal.$('tr.row_selected'); +}</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/api/show_hide.html b/src/warden-server/contrib/wardenweb/datatables/examples/api/show_hide.html new file mode 100644 index 0000000..802a5d9 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/api/show_hide.html @@ -0,0 +1,631 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + $('#example').dataTable( { + "sScrollY": "200px", + "bPaginate": false + } ); + } ); + + function fnShowHide( iCol ) + { + /* Get the DataTables object again - this is not a recreation, just a get of the object */ + var oTable = $('#example').dataTable(); + + var bVis = oTable.fnSettings().aoColumns[iCol].bVisible; + oTable.fnSetColumnVis( iCol, bVis ? false : true ); + } + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables show and hide columns dynamically example + </div> + + <h1>Preamble</h1> + <p>This example shows how you can make use of the fnSetColumnVis() API function to show and hide columns in a table dynamically, after the table has been initialised (we've also got scrolling enabled here, although that is not required for the API function to work).</p> + + <a href="javascript:void(0);" onclick="fnShowHide(0);">Toggle column 1<br></a> + <a href="javascript:void(0);" onclick="fnShowHide(1);">Toggle column 2<br></a> + <a href="javascript:void(0);" onclick="fnShowHide(2);">Toggle column 3<br></a> + <a href="javascript:void(0);" onclick="fnShowHide(3);">Toggle column 4<br></a> + <a href="javascript:void(0);" onclick="fnShowHide(4);">Toggle column 5<br></a> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + $('#example').dataTable( { + "sScrollY": "200px", + "bPaginate": false + } ); +} ); + +function fnShowHide( iCol ) +{ + /* Get the DataTables object again - this is not a recreation, just a get of the object */ + var oTable = $('#example').dataTable(); + + var bVis = oTable.fnSettings().aoColumns[iCol].bVisible; + oTable.fnSetColumnVis( iCol, bVis ? false : true ); +}</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/api/tabs_and_scrolling.html b/src/warden-server/contrib/wardenweb/datatables/examples/api/tabs_and_scrolling.html new file mode 100644 index 0000000..8ad8379 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/api/tabs_and_scrolling.html @@ -0,0 +1,457 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table_jui.css"; + @import "../examples_support/themes/smoothness/jquery-ui-1.8.4.custom.css"; + .ui-tabs .ui-tabs-panel { padding: 10px } + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" language="javascript" src="../examples_support/jquery-ui-tabs.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + $("#tabs").tabs( { + "show": function(event, ui) { + var oTable = $('div.dataTables_scrollBody>table.display', ui.panel).dataTable(); + if ( oTable.length > 0 ) { + oTable.fnAdjustColumnSizing(); + } + } + } ); + + $('table.display').dataTable( { + "sScrollY": "200px", + "bScrollCollapse": true, + "bPaginate": false, + "bJQueryUI": true, + "aoColumnDefs": [ + { "sWidth": "10%", "aTargets": [ -1 ] } + ] + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables scrolling and jQuery UI tabs + </div> + + <h1>Preamble</h1> + <p>This example shows how DataTables with scrolling can be used together with jQuery UI tabs (or indeed any other method whereby the table is in a hidden (display:none) element when it is initialised). The reason this requires special consideration, is that when DataTables is initialised and it is in a hidden element, the browser doesn't have any measurements with which to give DataTables, and this will require in the misalignment of columns when scrolling is enabled.</p> + <p>The method to get around this is to call the fnAdjustColumnSizing API function. This function will calculate the column widths that are needed based on the current data and then redraw the table - which is exactly what is needed when the table becomes visible for the first time. For this we use the 'show' method provided by jQuery UI tables. We check to see if the DataTable has been created or not (note the extra selector for 'div.dataTables_scrollBody', this is added when the DataTable is initialised). If the table has been initialised, we re-size it. An optimisation could be added to re-size only of the first showing of the table.</p> + + <h1>Live example</h1> + <div id="demo"> + <div id="tabs"> + <ul> + <li><a href="#tabs-1">Trident browsers</a></li> + <li><a href="#tabs-2">Gecko browsers</a></li> + </ul> + + <div id="tabs-1"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example1"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>Grade</th> + </tr> + </thead> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>Grade</th> + </tr> + </tfoot> + <tbody> + <tr class="odd gradeX"> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="odd gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="odd gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="odd gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="odd gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="odd gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tbody> +</table> + </div> + + + <div id="tabs-2"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example2"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>Grade</th> + </tr> + </thead> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>Grade</th> + </tr> + </tfoot> + <tbody> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + </tbody> +</table> + </div> + </div> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + $("#tabs").tabs( { + "show": function(event, ui) { + var oTable = $('div.dataTables_scrollBody>table.display', ui.panel).dataTable(); + if ( oTable.length > 0 ) { + oTable.fnAdjustColumnSizing(); + } + } + } ); + + $('table.display').dataTable( { + "sScrollY": "200px", + "bScrollCollapse": true, + "bPaginate": false, + "bJQueryUI": true, + "aoColumnDefs": [ + { "sWidth": "10%", "aTargets": [ -1 ] } + ] + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/alt_pagination.html b/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/alt_pagination.html new file mode 100644 index 0000000..47480e5 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/alt_pagination.html @@ -0,0 +1,610 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + $('#example').dataTable( { + "sPaginationType": "full_numbers" + } ); + } ); + </script> + </head> + <body id="dt_example" class="example_alt_pagination"> + <div id="container"> + <div class="full_width big"> + DataTables alternative pagination example + </div> + + <h1>Preamble</h1> + <p>The page controls which are used by default in DataTables (forward and backward buttons only) are great for most situations, but there are cases where you may wish to customise the controls presented to the end user. This is made simple by DataTables through its extensible pagination mechanism. There are two types of pagination controls built into DataTables: <b>two_button</b> (default) and <b>full_numbers</b>. To switch between these two types, use the <b>sPaginationType</b> initialisation parameter. You can add additional types of pagination control by extending the <b>$.fn.dataTableExt.oPagination</b> object.</p> + <p>Note also that the number of pages which are shown with direct links (the 1, 2, 3...) can be changed by setting the variable <b>jQuery.fn.dataTableExt.oPagination.iFullNumbersShowPages</b> (default 5). Odd numbers are best to keep the display even.</p> + <p>The example below shows the <b>full_numbers</b> type of pagination, where 'first', 'previous', 'next' and 'last' buttons are presented, as well as the five pages around the current page.</p> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td> + Internet + Explorer + 4.0 + </td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + $('#example').dataTable( { + "sPaginationType": "full_numbers" + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/base.html b/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/base.html new file mode 100644 index 0000000..1eda85d --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/base.html @@ -0,0 +1,597 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/jquery.dataTables.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + $('#example').dataTable(); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables base example (CDN CSS) + </div> + + <h1>Preamble</h1> + <p>DataTables has most features enabled by default, so all you need to do to use it with one of your own tables is to call the construction function (as shown below).</p> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example" width="100%"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="odd gradeX"> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center"> 4</td> + <td class="center">X</td> + </tr> + <tr class="even gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="odd gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="even gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="odd gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="even gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + $('#example').dataTable(); +} );</pre> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/base_themeroller.html b/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/base_themeroller.html new file mode 100644 index 0000000..aebf8c3 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/base_themeroller.html @@ -0,0 +1,593 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/jquery.dataTables_themeroller.css"; + @import "../examples_support/themes/smoothness/jquery-ui-1.8.4.custom.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + $('#example').dataTable( { + "bJQueryUI": true, + "sPaginationType": "full_numbers" + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables base example (CDN CSS) + </div> + + <h1>Preamble</h1> + <p>DataTables has most features enabled by default, so all you need to do to use it with one of your own tables is to call the construction function (as shown below).</p> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example" width="100%"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="odd gradeX"> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center"> 4</td> + <td class="center">X</td> + </tr> + <tr class="even gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="odd gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="even gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="odd gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="even gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> + <tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + $('#example').dataTable(); +} );</pre> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/complex_header.html b/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/complex_header.html new file mode 100644 index 0000000..30eb1d2 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/complex_header.html @@ -0,0 +1,607 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + $('#example').dataTable(); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables complex header example (row and colspans) + </div> + + <h1>Preamble</h1> + <p>When using tables to display data, you will often wish to display column information in groups. DataTables fully supports colspan and rowspans in the header, assigning the required sorting listeners to the TH element suitable for that column. Each column must have one TH cell (and only one) which is unique to it for the listeners to be added. The example shown below has the core browser information grouped together.</p> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th rowspan="2">Rendering engine</th> + <th rowspan="2">Browser</th> + <th colspan="3">Details</th> + </tr> + <tr> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tfoot> + <tr> + <th rowspan="2">Rendering engine</th> + <th rowspan="2">Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + <tr> + <th colspan="3">Details</th> + </tr> + </tfoot> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + $('#example').dataTable(); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/dom.html b/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/dom.html new file mode 100644 index 0000000..ea0ce7c --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/dom.html @@ -0,0 +1,620 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + $('#example').dataTable( { + "sDom": '<"top"i>rt<"bottom"flp><"clear">' + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables DOM positioning example + </div> + + <h1>Preamble</h1> + <p>When customising DataTables for your own usage, you might find that the default position of the feature elements (filter input etc) is not quite to your liking. To address this issue DataTables takes inspiration from the CSS 3 Advanced Layout Module and provides the <b>sDom</b> initialisation parameter which can be set to indicate where you which particular features to appear in the DOM. You can also specify <b>div</b> wrapping containers (with classes) to provide complete layout flexibility. The syntax available is:</p> + <ul> + <li><b>l</b> - Length changing</li> + <li><b>f</b> - Filtering input</li> + <li><b>t</b> - The table!</li> + <li><b>i</b> - Information</li> + <li><b>p</b> - Pagination</li> + <li><b>r</b> - pRocessing</li> + <li><b><</b> and <b>></b> - div elements</li> + <li><b><"class"</b> and <b>></b> - div with a class</li> + <li>Examples: <b><"wrapper"flipt></b>, <b><lf<t>ip></b></li> + </ul> + <p>In the example below I've moved the table information to the top of the table, and all the interaction elements to the bottom, each wrapper in a container <b>div</b>.</p> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td> + Internet + Explorer + 4.0 + </td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + $('#example').dataTable( { + "sDom": '<"top"i>rt<"bottom"flp><"clear">' + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/filter_only.html b/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/filter_only.html new file mode 100644 index 0000000..776a398 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/filter_only.html @@ -0,0 +1,610 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + $('#example').dataTable( { + "bPaginate": false, + "bLengthChange": false, + "bFilter": true, + "bSort": false, + "bInfo": false, + "bAutoWidth": false } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables with only the filter feature + </div> + + <h1>Preamble</h1> + <p>Disabling features that you don't wish to use for a particular table is easily done by setting a variable in the initialisation object. In the following example only the filter feature is left enabled (although I've explicitly declared it as enabled).</p> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td>Internet Explorer 4.0</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + $('#example').dataTable( { + "bPaginate": false, + "bLengthChange": false, + "bFilter": true, + "bSort": false, + "bInfo": false, + "bAutoWidth": false + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/flexible_width.html b/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/flexible_width.html new file mode 100644 index 0000000..c310de8 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/flexible_width.html @@ -0,0 +1,603 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + $('#example').dataTable(); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container" style="width:80%"> + <div class="full_width big"> + DataTables - flexible width example + </div> + + <h1>Preamble</h1> + <p>Often you may want to have your table resize dynamically with the page. Typically this is done by assigning width:100% in your CSS, but this presents a problem for Javascript since it can be very hard to get that relative size, rather than the absolute pixels. As such, if you apply the <i>width</i> attribute to the HTML table + tag, this will be used as the width for the table (overruling any CSS styles).</p> + <p>This example shows a table width <i>width="100%"</i> and the container is also flexible width, so as the window is resized, the table will also resize dynamically.</p> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example" width="100%"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="odd gradeX"> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center"> 4</td> + <td class="center">X</td> + </tr> + <tr class="even gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="odd gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="even gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="odd gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="even gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + $('#example').dataTable(); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/hidden_columns.html b/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/hidden_columns.html new file mode 100644 index 0000000..8ea42c3 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/hidden_columns.html @@ -0,0 +1,605 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + $('#example').dataTable( { + "aoColumnDefs": [ + { "bSearchable": false, "bVisible": false, "aTargets": [ 2 ] }, + { "bVisible": false, "aTargets": [ 3 ] } + ] } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables with hidden columns + </div> + + <h1>Preamble</h1> + <p>There are times when you might find it useful to display only a sub-set of the information that was available in the original table. For example you might want to reduce the amount of data shown on screen to make it clearer for the user. This hidden data can still be filtered upon allowing the user access to that data (for example 'tag' information for a row entry), or this can be disabled. In the table below both the platform and engine version columns have been hidden, the former is searchable, the latter is not.</p> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td>Internet Explorer 4.0</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + $('#example').dataTable( { + "aoColumnDefs": [ + { "bSearchable": false, "bVisible": false, "aTargets": [ 2 ] }, + { "bVisible": false, "aTargets": [ 3 ] } + ] } ); + } );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/language.html b/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/language.html new file mode 100644 index 0000000..f30251f --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/language.html @@ -0,0 +1,613 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + $('#example').dataTable( { + "oLanguage": { + "sLengthMenu": "Display _MENU_ records per page", + "sZeroRecords": "Nothing found - sorry", + "sInfo": "Showing _START_ to _END_ of _TOTAL_ records", + "sInfoEmpty": "Showing 0 to 0 of 0 records", + "sInfoFiltered": "(filtered from _MAX_ total records)" + } + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables dynamic language + </div> + + <h1>Preamble</h1> + <p>Changing the language information displayed by DataTables is as simple as passing in a language object to the dataTable constructor. The example above shows a different set of English language definitions to be used, rather than the defaults.</p> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td>Internet Explorer 4.0</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { +$('#example').dataTable( { + "oLanguage": { + "sLengthMenu": "Display _MENU_ records per page", + "sZeroRecords": "Nothing found - sorry", + "sInfo": "Showing _START_ to _END_ of _TOTAL_ records", + "sInfoEmpty": "Showing 0 to 0 of 0 records", + "sInfoFiltered": "(filtered from _MAX_ total records)" + } + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/multi_col_sort.html b/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/multi_col_sort.html new file mode 100644 index 0000000..64f864b --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/multi_col_sort.html @@ -0,0 +1,636 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + /* Define two custom functions (asc and desc) for string sorting */ + jQuery.fn.dataTableExt.oSort['string-case-asc'] = function(x,y) { + return ((x < y) ? -1 : ((x > y) ? 1 : 0)); + }; + + jQuery.fn.dataTableExt.oSort['string-case-desc'] = function(x,y) { + return ((x < y) ? 1 : ((x > y) ? -1 : 0)); + }; + + $(document).ready(function() { + /* Build the DataTable with third column using our custom sort functions */ + $('#example').dataTable( { + "aaSorting": [ [0,'asc'], [1,'asc'] ], + "aoColumnDefs": [ + { "sType": 'string-case', "aTargets": [ 2 ] } + ] + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables multi column and custom sort example + </div> + + <h1>Preamble</h1> + <p>As you would expect with a desktop application, DataTables allows you to sort by multiple columns at the same time. This multiple sorting mechanism is always active if the <b>bSort</b> initialiser is <b>true</b> (it is by default) and the end user can activate it by 'shift' clicking on the column they want to add to the sort. You can also pass in an array of information using the <b>aaSorting</b> initialiser, as I have done in the example below there the first column is sorted as the primary column and the second one then used if the elements in the first column match. As many columns as you wish can be added to the sort.</p> + <p>DataTables also provides a method to add your own sorting functions, to extend those built into DataTables. This can be very useful if you wish to sort on data formats such as currency and non-Javascript standard date formats (<a href="http://www.overset.com/2008/09/01/javascript-natural-sort-algorithm/">this natural sort</a> algorithm is a popular useage). This is achieved by extending the <b>jQuery.fn.dataTableExt</b> object with ascending and descending sort functions. In the example below I've added case sensitive sorting functions.</p> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">/* Define two custom functions (asc and desc) for string sorting */ +jQuery.fn.dataTableExt.oSort['string-case-asc'] = function(x,y) { + return ((x < y) ? -1 : ((x > y) ? 1 : 0)); +}; + +jQuery.fn.dataTableExt.oSort['string-case-desc'] = function(x,y) { + return ((x < y) ? 1 : ((x > y) ? -1 : 0)); +}; + +$(document).ready(function() { + /* Build the DataTable with third column using our custom sort functions */ + $('#example').dataTable( { + "aaSorting": [ [0,'asc'], [1,'asc'] ], + "aoColumns": [ + null, + null, + { "sType": 'string-case' }, + null, + null + ] + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/multiple_tables.html b/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/multiple_tables.html new file mode 100644 index 0000000..4e55644 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/multiple_tables.html @@ -0,0 +1,417 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + $('.dataTable').dataTable(); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables multiple tables example + </div> + + <h1>Preamble</h1> + <p>Using standard jQuery selector syntax with DataTables it is trivial to initialise multiple tables with a single line of Javascript, as shown below. All tables are completely independent, but share the parameters passed thought the initialiser object (for example if you specific the Spanish language file, all tables will be shown in Spanish).</p> + + <h1>Live example</h1> + + <p style="font-weight: bold;">Trident based browsers</p> + <div id="demo_trident"> +<table cellpadding="0" cellspacing="0" border="0" class="display dataTable" id="allan"> + <thead> + <tr> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="gradeX"> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + </table> + </div> + <div class="clear"></div> + + + <p style="clear:both; margin-top:4em; font-weight: bold;">Gecko based browsers</p> + <div id="demo_gecko"> +<table cellpadding="0" cellspacing="0" border="0" class="display dataTable"> + <thead> + <tr> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="gradeA"> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + </table> + </div> + <div class="clear"></div> + + + <p style="clear:both; margin-top:4em; font-weight: bold;">WebKit based browsers (note no platform)</p> + <div id="demo_webkit"> +<table cellpadding="0" cellspacing="0" border="0" class="display dataTable"> + <thead> + <tr> + <th>Browser</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="gradeA"> + <td>Safari 1.2</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Safari 1.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Safari 2.0</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Safari 3.0</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>OmniWeb 5.5</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>iPod Touch / iPhone</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + </table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + $('.dataTable').dataTable(); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/scroll_x.html b/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/scroll_x.html new file mode 100644 index 0000000..c6a119f --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/scroll_x.html @@ -0,0 +1,611 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + $('#example').dataTable( { + "sScrollX": "100%", + "sScrollXInner": "110%", + "bScrollCollapse": true + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables horizontal scrolling example + </div> + + <h1>Preamble</h1> + <p>This DataTables horizontal scrolling example shows horizontal scrolling on a DataTable, which is very useful for when you have a wide table, with a large number of columns to display, but want to constrain it to a limited horizontal display area. To enable x scrolling simply set the sScrollX parameter to be whatever you want the container wrapper's width to be (any CSS measurement is acceptable, or just a number which is treated as pixels). Note also that sScrollXInner is used here to force the table to be wider than is strictly needed. You may or may not want to include this parameter depending on your application.</p> + <p>Also shown in this example is the use of a 'collapsing scroll table' by using <b>bScrollCollapse</b>. When this parameter is set to true, the table size will 'collapse' down to match the number of rows, if the table height is smaller than the scrollable area.</p> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> + <tbody> + <tr class="odd gradeX"> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="odd gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="odd gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="odd gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="odd gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="odd gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + $('#example').dataTable( { + "sScrollX": "100%", + "sScrollXInner": "110%", + "bScrollCollapse": true + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/scroll_xy.html b/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/scroll_xy.html new file mode 100644 index 0000000..9f287b4 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/scroll_xy.html @@ -0,0 +1,601 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + $('#example').dataTable( { + "sScrollY": 200, + "sScrollX": "100%", + "sScrollXInner": "110%" + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables horizontal and vertical scrolling example + </div> + + <h1>Preamble</h1> + <p>In this example you can see DataTables doing horizontal and vertical scrolling at the same time. Note also that pagination is enabled, and the scrolling accounts for this.</p> + + <h1>Live example</h1> + <div id="demo"> + +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="odd gradeX"> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="odd gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="odd gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="odd gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="odd gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="odd gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + $('#example').dataTable( { + "sScrollY": 200, + "sScrollX": "100%", + "sScrollXInner": "110%" + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/scroll_y.html b/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/scroll_y.html new file mode 100644 index 0000000..4405445 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/scroll_y.html @@ -0,0 +1,608 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + div.table_Wrapper { border:10px solid blue; } + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + $('#example').dataTable( { + "sScrollY": "200px", + "bPaginate": false + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables vertical scrolling example + </div> + + <h1>Preamble</h1> + <p>This example shows the DataTables table body scrolling in the vertical direction. This can generally be seen as an alternative method to pagination for displaying a large table in a fairly small vertical area, and as such pagination has been disabled here (note that this is not mandatory, it will work just fine with pagination enabled as well!). The example is set up to show grid lines using CSS, which is useful for alignment, both for testing and end user usability. To enable y scrolling simply set the sScrollY parameter to be whatever you want the container wrapper's height to be (any CSS measurement is acceptable, or just a number which is treated as pixels).</p> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> + <tbody> + <tr class="odd gradeX"> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="odd gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="odd gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="odd gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="odd gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="odd gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + $('#example').dataTable( { + "sScrollY": "200px", + "bPaginate": false + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/scroll_y_infinite.html b/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/scroll_y_infinite.html new file mode 100644 index 0000000..089b5cc --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/scroll_y_infinite.html @@ -0,0 +1,611 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + div.table_Wrapper { border:10px solid blue; } + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + $('#example').dataTable( { + "bScrollInfinite": true, + "bScrollCollapse": true, + "sScrollY": "200px" + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables infinite vertical scrolling example + </div> + + <h1>Preamble</h1> + <p>This example shows the DataTables table body scrolling in the vertical direction with infinite scrolling. The idea of infinite scrolling means that data will be added to the table dynamically, as and when needed by the user scrolling the table. A sub-set of the data is loaded initially, and more added as needed (technically of course, it is not "infinite" since it will stop loading data at the end of the data set!). Note that pagination much be enabled for infinite scrolling to work, but the pagination controls will not be shown (they could be, but can cause very confusing user interaction).</p> + <p>DataTables' infinite scroll can be used with any of the <a href="http://datatables.net/usage/#data_sources">four data sources</a> supported, and they do not require any modification to work (including server-side scripts).</p> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> + <tbody> + <tr class="odd gradeX"> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="odd gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="odd gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="odd gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="odd gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="odd gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + $('#example').dataTable( { + "bScrollInfinite": true, + "bScrollCollapse": true, + "sScrollY": "200px" + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/scroll_y_theme.html b/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/scroll_y_theme.html new file mode 100644 index 0000000..f0a9d0f --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/scroll_y_theme.html @@ -0,0 +1,610 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table_jui.css"; + @import "../examples_support/themes/smoothness/jquery-ui-1.8.4.custom.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + $('#example').dataTable( { + "sScrollY": 200, + "bJQueryUI": true, + "sPaginationType": "full_numbers" + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables vertical scrolling with jQuery UI ThemeRoller example + </div> + + <h1>Preamble</h1> + <p>This example is an extension of the vertical scrolling example, showing DataTables ability to be themed by jQuery UI's ThemeRoller.</p> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th width="12%">CSS grade</th> + </tr> + </thead> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> + <tbody> + <tr class="odd gradeX"> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="odd gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="odd gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="odd gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="odd gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="odd gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + $('#example').dataTable( { + "sScrollY": 200, + "bJQueryUI": true, + "sPaginationType": "full_numbers" + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/state_save.html b/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/state_save.html new file mode 100644 index 0000000..4319890 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/state_save.html @@ -0,0 +1,605 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + $('#example').dataTable( { + "bStateSave": true + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables state saving example + </div> + + <h1>Preamble</h1> + <p>DataTables can use cookies in the end user's web-browser in order to store it's state after each change in drawing. What this means is that if the user were to reload the page, the table should remain exactly as it was (length, filtering, pagination and sorting). This feature is disabled by default, but can be easily enabled using the <b>bStateSave</b> initialisation parameter as shown in this example. Note also that the duration of the cookie can be set using the <b>iCookieDuration</b> initialisation parameter (which is in seconds).</p> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + $('#example').dataTable( { + "bStateSave": true + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/table_sorting.html b/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/table_sorting.html new file mode 100644 index 0000000..25175f4 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/table_sorting.html @@ -0,0 +1,605 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + $('#example').dataTable( { + "aaSorting": [[ 4, "desc" ]] + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables table sorting example + </div> + + <h1>Preamble</h1> + <p>With DataTables you can alter the sorting characteristics of the table at initialisation time. Using the <b>aaSorting</b> initialisation parameter, you can get the table exactly how you want to present the information. The <b>aaSorting</b> parameter is an array of arrays where the first value is the column to sort on, and the second is 'asc' or 'desc' as required (it is a double array for <a href="../basic_init/multi_col_sort.html">multi-column sorting</a>). The table below is sorted (descending) by the CSS grade. Note also that the 'Engine version' column is automatically detected as a numeric column and sorted accordingly. Finally, also note that "asSorting" has been defined for the column in question for this example. The reason for this is that DataTables uses ["asc","desc"] for sorting order by default, but we would in this case prefer "desc" to be given first priority.</p> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + $('#example').dataTable( { + "aaSorting": [[ 4, "desc" ]] + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/themes.html b/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/themes.html new file mode 100644 index 0000000..46727e5 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/themes.html @@ -0,0 +1,599 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table_jui.css"; + @import "../examples_support/themes/smoothness/jquery-ui-1.8.4.custom.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + oTable = $('#example').dataTable({ + "bJQueryUI": true, + "sPaginationType": "full_numbers" + }); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables with jQuery UI themes example + </div> + + <h1>Preamble</h1> + <p>Styling widgets such as DataTables can often take a considerable amount of time to fully integrate it into your site/application, with the demo styles as a base. This holds true for all widgets, and the jQuery UI team have addressed this issue by introducing themes through their excellent <a href="http://jqueryui.com/themeroller/">ThemeRoller</a>. DataTables has full support for ThemeRoller created themes, all you need to do is enable the <b>bJQueryUI</b> flag in the initialisation object, and the required mark-up and classes will be added by DataTables.</p> + + <h1>Live example</h1> + <div class="demo_jui"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + oTable = $('#example').dataTable({ + "bJQueryUI": true, + "sPaginationType": "full_numbers" + }); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/zero_config.html b/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/zero_config.html new file mode 100644 index 0000000..2a0bec9 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/basic_init/zero_config.html @@ -0,0 +1,601 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + $('#example').dataTable(); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables zero configuration example + </div> + + <h1>Preamble</h1> + <p>DataTables has most features enabled by default, so all you need to do to use it with one of your own tables is to call the construction function (as shown below).</p> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example" width="100%"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="odd gradeX"> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center"> 4</td> + <td class="center">X</td> + </tr> + <tr class="even gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="odd gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="even gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="odd gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="even gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + $('#example').dataTable(); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/data_sources/ajax.html b/src/warden-server/contrib/wardenweb/datatables/examples/data_sources/ajax.html new file mode 100644 index 0000000..da789ba --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/data_sources/ajax.html @@ -0,0 +1,209 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + var oTable = $('#example').dataTable( { + "bProcessing": true, + "sAjaxSource": '../ajax/sources/arrays.txt' + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables AJAX source example + </div> + + <h1>Preamble</h1> + <p>Although DataTables is built from the principle of progressive enhancement, it is often useful to be able to construct a table from an AJAX source. This can be done in one of two ways - either using the <b>aaData</b> initialisation parameter which takes an array of data, or using the <b>sAjaxSource</b> initialisation parameter which will have DataTables go to that source with an XHR call and load data from there. This example shows the latter method in action. DataTables expects an object with an array called "aaData" with the data source.</p> + + <h1>Live example</h1> + <div id="dynamic"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th width="20%">Rendering engine</th> + <th width="25%">Browser</th> + <th width="25%">Platform(s)</th> + <th width="15%">Engine version</th> + <th width="15%">CSS grade</th> + </tr> + </thead> + <tbody> + + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + $('#example').dataTable( { + "bProcessing": true, + "sAjaxSource": '../ajax/sources/arrays.txt' + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + <h1>Server response</h1> + <p>The code below shows the latest JSON data that has been returned from the server in response to the Ajax request made by DataTables. This will update as further requests are made.</p> + <pre id="latest_xhr" class="brush: js;"></pre> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/data_sources/dom.html b/src/warden-server/contrib/wardenweb/datatables/examples/data_sources/dom.html new file mode 100644 index 0000000..4f697c0 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/data_sources/dom.html @@ -0,0 +1,601 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + $('#example').dataTable(); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables zero configuration example + </div> + + <h1>Preamble</h1> + <p>The foundation for DataTables is progressive enhancement, so it is very adept at reading table information directly from the DOM. Therefore, if your user's browser is capable the user will get a DataTables enhanced experience. Otherwise they get the plain HTML.</p> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + $('#example').dataTable(); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/data_sources/js_array.html b/src/warden-server/contrib/wardenweb/datatables/examples/data_sources/js_array.html new file mode 100644 index 0000000..5830997 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/data_sources/js_array.html @@ -0,0 +1,290 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + /* Data set - can contain whatever information you want */ + var aDataSet = [ + ['Trident','Internet Explorer 4.0','Win 95+','4','X'], + ['Trident','Internet Explorer 5.0','Win 95+','5','C'], + ['Trident','Internet Explorer 5.5','Win 95+','5.5','A'], + ['Trident','Internet Explorer 6','Win 98+','6','A'], + ['Trident','Internet Explorer 7','Win XP SP2+','7','A'], + ['Trident','AOL browser (AOL desktop)','Win XP','6','A'], + ['Gecko','Firefox 1.0','Win 98+ / OSX.2+','1.7','A'], + ['Gecko','Firefox 1.5','Win 98+ / OSX.2+','1.8','A'], + ['Gecko','Firefox 2.0','Win 98+ / OSX.2+','1.8','A'], + ['Gecko','Firefox 3.0','Win 2k+ / OSX.3+','1.9','A'], + ['Gecko','Camino 1.0','OSX.2+','1.8','A'], + ['Gecko','Camino 1.5','OSX.3+','1.8','A'], + ['Gecko','Netscape 7.2','Win 95+ / Mac OS 8.6-9.2','1.7','A'], + ['Gecko','Netscape Browser 8','Win 98SE+','1.7','A'], + ['Gecko','Netscape Navigator 9','Win 98+ / OSX.2+','1.8','A'], + ['Gecko','Mozilla 1.0','Win 95+ / OSX.1+',1,'A'], + ['Gecko','Mozilla 1.1','Win 95+ / OSX.1+',1.1,'A'], + ['Gecko','Mozilla 1.2','Win 95+ / OSX.1+',1.2,'A'], + ['Gecko','Mozilla 1.3','Win 95+ / OSX.1+',1.3,'A'], + ['Gecko','Mozilla 1.4','Win 95+ / OSX.1+',1.4,'A'], + ['Gecko','Mozilla 1.5','Win 95+ / OSX.1+',1.5,'A'], + ['Gecko','Mozilla 1.6','Win 95+ / OSX.1+',1.6,'A'], + ['Gecko','Mozilla 1.7','Win 98+ / OSX.1+',1.7,'A'], + ['Gecko','Mozilla 1.8','Win 98+ / OSX.1+',1.8,'A'], + ['Gecko','Seamonkey 1.1','Win 98+ / OSX.2+','1.8','A'], + ['Gecko','Epiphany 2.20','Gnome','1.8','A'], + ['Webkit','Safari 1.2','OSX.3','125.5','A'], + ['Webkit','Safari 1.3','OSX.3','312.8','A'], + ['Webkit','Safari 2.0','OSX.4+','419.3','A'], + ['Webkit','Safari 3.0','OSX.4+','522.1','A'], + ['Webkit','OmniWeb 5.5','OSX.4+','420','A'], + ['Webkit','iPod Touch / iPhone','iPod','420.1','A'], + ['Webkit','S60','S60','413','A'], + ['Presto','Opera 7.0','Win 95+ / OSX.1+','-','A'], + ['Presto','Opera 7.5','Win 95+ / OSX.2+','-','A'], + ['Presto','Opera 8.0','Win 95+ / OSX.2+','-','A'], + ['Presto','Opera 8.5','Win 95+ / OSX.2+','-','A'], + ['Presto','Opera 9.0','Win 95+ / OSX.3+','-','A'], + ['Presto','Opera 9.2','Win 88+ / OSX.3+','-','A'], + ['Presto','Opera 9.5','Win 88+ / OSX.3+','-','A'], + ['Presto','Opera for Wii','Wii','-','A'], + ['Presto','Nokia N800','N800','-','A'], + ['Presto','Nintendo DS browser','Nintendo DS','8.5','C/A<sup>1</sup>'], + ['KHTML','Konqureror 3.1','KDE 3.1','3.1','C'], + ['KHTML','Konqureror 3.3','KDE 3.3','3.3','A'], + ['KHTML','Konqureror 3.5','KDE 3.5','3.5','A'], + ['Tasman','Internet Explorer 4.5','Mac OS 8-9','-','X'], + ['Tasman','Internet Explorer 5.1','Mac OS 7.6-9','1','C'], + ['Tasman','Internet Explorer 5.2','Mac OS 8-X','1','C'], + ['Misc','NetFront 3.1','Embedded devices','-','C'], + ['Misc','NetFront 3.4','Embedded devices','-','A'], + ['Misc','Dillo 0.8','Embedded devices','-','X'], + ['Misc','Links','Text only','-','X'], + ['Misc','Lynx','Text only','-','X'], + ['Misc','IE Mobile','Windows Mobile 6','-','C'], + ['Misc','PSP browser','PSP','-','C'], + ['Other browsers','All others','-','-','U'] + ]; + + $(document).ready(function() { + $('#dynamic').html( '<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"></table>' ); + $('#example').dataTable( { + "aaData": aDataSet, + "aoColumns": [ + { "sTitle": "Engine" }, + { "sTitle": "Browser" }, + { "sTitle": "Platform" }, + { "sTitle": "Version", "sClass": "center" }, + { + "sTitle": "Grade", + "sClass": "center", + "fnRender": function(obj) { + var sReturn = obj.aData[ obj.iDataColumn ]; + if ( sReturn == "A" ) { + sReturn = "<b>A</b>"; + } + return sReturn; + } + } + ] + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables dynamic creation example + </div> + + <h1>Preamble</h1> + <p>At times you will wish to be able to create a table from dynamic information passed directly to DataTables, rather than having it read from the document. This is achieved using the "aaData" array in the initialisation object. A table node must first be created before the initialiser is called (as shown in the code below). This is also useful for optimisation - if you are able to format the data as required, this method can save a lot of DOM parsing to create a table.</p> + + <h1>Live example</h1> + <div id="dynamic"></div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + $('#demo').html( '<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"></table>' ); + $('#example').dataTable( { + "aaData": [ + /* Reduced data set */ + [ "Trident", "Internet Explorer 4.0", "Win 95+", 4, "X" ], + [ "Trident", "Internet Explorer 5.0", "Win 95+", 5, "C" ], + [ "Trident", "Internet Explorer 5.5", "Win 95+", 5.5, "A" ], + [ "Trident", "Internet Explorer 6.0", "Win 98+", 6, "A" ], + [ "Trident", "Internet Explorer 7.0", "Win XP SP2+", 7, "A" ], + [ "Gecko", "Firefox 1.5", "Win 98+ / OSX.2+", 1.8, "A" ], + [ "Gecko", "Firefox 2", "Win 98+ / OSX.2+", 1.8, "A" ], + [ "Gecko", "Firefox 3", "Win 2k+ / OSX.3+", 1.9, "A" ], + [ "Webkit", "Safari 1.2", "OSX.3", 125.5, "A" ], + [ "Webkit", "Safari 1.3", "OSX.3", 312.8, "A" ], + [ "Webkit", "Safari 2.0", "OSX.4+", 419.3, "A" ], + [ "Webkit", "Safari 3.0", "OSX.4+", 522.1, "A" ] + ], + "aoColumns": [ + { "sTitle": "Engine" }, + { "sTitle": "Browser" }, + { "sTitle": "Platform" }, + { "sTitle": "Version", "sClass": "center" }, + { + "sTitle": "Grade", + "sClass": "center", + "fnRender": function(obj) { + var sReturn = obj.aData[ obj.iDataColumn ]; + if ( sReturn == "A" ) { + sReturn = "<b>A</b>"; + } + return sReturn; + } + } + ] + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/data_sources/server_side.html b/src/warden-server/contrib/wardenweb/datatables/examples/data_sources/server_side.html new file mode 100644 index 0000000..071b07a --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/data_sources/server_side.html @@ -0,0 +1,393 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + $('#example').dataTable( { + "bProcessing": true, + "bServerSide": true, + "sAjaxSource": "../server_side/scripts/server_processing.php" + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables server-side processing example + </div> + + <h1>Preamble</h1> + <p>There are many ways to get your data into DataTables, and if you are working with seriously large databases, you might want to consider using the server-side options that DataTables provides. Basically all of the paging, filtering, sorting etc that DataTables does can be handed off to a server (or any other data source - Google Gears or Adobe Air for example!) and DataTables is just an events and display module.</p> + <p>The example here shows a very simple display of the CSS data (used in all my other examples), but in this instance coming from the server on each draw. Filtering, multi-column sorting etc all work as you would expect.</p> + + <h1>Live example</h1> + <div id="dynamic"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th width="20%">Rendering engine</th> + <th width="25%">Browser</th> + <th width="25%">Platform(s)</th> + <th width="15%">Engine version</th> + <th width="15%">CSS grade</th> + </tr> + </thead> + <tbody> + <tr> + <td colspan="5" class="dataTables_empty">Loading data from server</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + $('#example').dataTable( { + "bProcessing": true, + "bServerSide": true, + "sAjaxSource": "../server_side/scripts/server_processing.php" + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + <h1>Server response</h1> + <p>The code below shows the latest JSON data that has been returned from the server in response to the Ajax request made by DataTables. This will update as further requests are made.</p> + <pre id="latest_xhr" class="brush: js;"></pre> + + + <h1>Server side (PHP) code</h1> + <pre><?php + /* + * Script: DataTables server-side script for PHP and MySQL + * Copyright: 2010 - Allan Jardine + * License: GPL v2 or BSD (3-point) + */ + + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Easy set variables + */ + + /* Array of database columns which should be read and sent back to DataTables. Use a space where + * you want to insert a non-database field (for example a counter or static image) + */ + $aColumns = array( 'engine', 'browser', 'platform', 'version', 'grade' ); + + /* Indexed column (used for fast and accurate table cardinality) */ + $sIndexColumn = "id"; + + /* DB table to use */ + $sTable = "ajax"; + + /* Database connection information */ + $gaSql['user'] = ""; + $gaSql['password'] = ""; + $gaSql['db'] = ""; + $gaSql['server'] = "localhost"; + + + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * If you just want to use the basic configuration for DataTables with PHP server-side, there is + * no need to edit below this line + */ + + /* + * MySQL connection + */ + $gaSql['link'] = mysql_pconnect( $gaSql['server'], $gaSql['user'], $gaSql['password'] ) or + die( 'Could not open connection to server' ); + + mysql_select_db( $gaSql['db'], $gaSql['link'] ) or + die( 'Could not select database '. $gaSql['db'] ); + + + /* + * Paging + */ + $sLimit = ""; + if ( isset( $_GET['iDisplayStart'] ) && $_GET['iDisplayLength'] != '-1' ) + { + $sLimit = "LIMIT ".mysql_real_escape_string( $_GET['iDisplayStart'] ).", ". + mysql_real_escape_string( $_GET['iDisplayLength'] ); + } + + + /* + * Ordering + */ + if ( isset( $_GET['iSortCol_0'] ) ) + { + $sOrder = "ORDER BY "; + for ( $i=0 ; $i<intval( $_GET['iSortingCols'] ) ; $i++ ) + { + if ( $_GET[ 'bSortable_'.intval($_GET['iSortCol_'.$i]) ] == "true" ) + { + $sOrder .= $aColumns[ intval( $_GET['iSortCol_'.$i] ) ]." + ".mysql_real_escape_string( $_GET['sSortDir_'.$i] ) .", "; + } + } + + $sOrder = substr_replace( $sOrder, "", -2 ); + if ( $sOrder == "ORDER BY" ) + { + $sOrder = ""; + } + } + + + /* + * Filtering + * NOTE this does not match the built-in DataTables filtering which does it + * word by word on any field. It's possible to do here, but concerned about efficiency + * on very large tables, and MySQL's regex functionality is very limited + */ + $sWhere = ""; + if ( $_GET['sSearch'] != "" ) + { + $sWhere = "WHERE ("; + for ( $i=0 ; $i<count($aColumns) ; $i++ ) + { + $sWhere .= $aColumns[$i]." LIKE '%".mysql_real_escape_string( $_GET['sSearch'] )."%' OR "; + } + $sWhere = substr_replace( $sWhere, "", -3 ); + $sWhere .= ')'; + } + + /* Individual column filtering */ + for ( $i=0 ; $i<count($aColumns) ; $i++ ) + { + if ( $_GET['bSearchable_'.$i] == "true" && $_GET['sSearch_'.$i] != '' ) + { + if ( $sWhere == "" ) + { + $sWhere = "WHERE "; + } + else + { + $sWhere .= " AND "; + } + $sWhere .= $aColumns[$i]." LIKE '%".mysql_real_escape_string($_GET['sSearch_'.$i])."%' "; + } + } + + + /* + * SQL queries + * Get data to display + */ + $sQuery = " + SELECT SQL_CALC_FOUND_ROWS ".str_replace(" , ", " ", implode(", ", $aColumns))." + FROM $sTable + $sWhere + $sOrder + $sLimit + "; + $rResult = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error()); + + /* Data set length after filtering */ + $sQuery = " + SELECT FOUND_ROWS() + "; + $rResultFilterTotal = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error()); + $aResultFilterTotal = mysql_fetch_array($rResultFilterTotal); + $iFilteredTotal = $aResultFilterTotal[0]; + + /* Total data set length */ + $sQuery = " + SELECT COUNT(".$sIndexColumn.") + FROM $sTable + "; + $rResultTotal = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error()); + $aResultTotal = mysql_fetch_array($rResultTotal); + $iTotal = $aResultTotal[0]; + + + /* + * Output + */ + $output = array( + "sEcho" => intval($_GET['sEcho']), + "iTotalRecords" => $iTotal, + "iTotalDisplayRecords" => $iFilteredTotal, + "aaData" => array() + ); + + while ( $aRow = mysql_fetch_array( $rResult ) ) + { + $row = array(); + for ( $i=0 ; $i<count($aColumns) ; $i++ ) + { + if ( $aColumns[$i] == "version" ) + { + /* Special output formatting for 'version' column */ + $row[] = ($aRow[ $aColumns[$i] ]=="0") ? '-' : $aRow[ $aColumns[$i] ]; + } + else if ( $aColumns[$i] != ' ' ) + { + /* General output */ + $row[] = $aRow[ $aColumns[$i] ]; + } + } + $output['aaData'][] = $row; + } + + echo json_encode( $output ); +?></pre> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/data.sql b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/data.sql new file mode 100644 index 0000000..2958b13 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/data.sql @@ -0,0 +1,67 @@ +CREATE TABLE IF NOT EXISTS `ajax` ( + `id` int(10) NOT NULL auto_increment, + `engine` varchar(255) NOT NULL default '', + `browser` varchar(255) NOT NULL default '', + `platform` varchar(255) NOT NULL default '', + `version` float NOT NULL default '0', + `grade` varchar(20) NOT NULL default '', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Trident', 'Internet Explorer 4.0', 'Win 95+', '4', 'X' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Trident', 'Internet Explorer 5.0', 'Win 95+', '5', 'C' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Trident', 'Internet Explorer 5.5', 'Win 95+', '5.5', 'A' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Trident', 'Internet Explorer 6', 'Win 98+', '6', 'A' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Trident', 'Internet Explorer 7', 'Win XP SP2+', '7', 'A' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Trident', 'AOL browser (AOL desktop)', 'Win XP', '6', 'A' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Gecko', 'Firefox 1.0', 'Win 98+ / OSX.2+', '1.7', 'A' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Gecko', 'Firefox 1.5', 'Win 98+ / OSX.2+', '1.8', 'A' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Gecko', 'Firefox 2.0', 'Win 98+ / OSX.2+', '1.8', 'A' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Gecko', 'Firefox 3.0', 'Win 2k+ / OSX.3+', '1.9', 'A' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Gecko', 'Camino 1.0', 'OSX.2+', '1.8', 'A' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Gecko', 'Camino 1.5', 'OSX.3+', '1.8', 'A' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Gecko', 'Netscape 7.2', 'Win 95+ / Mac OS 8.6-9.2', '1.7', 'A' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Gecko', 'Netscape Browser 8', 'Win 98SE+', '1.7', 'A' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Gecko', 'Netscape Navigator 9', 'Win 98+ / OSX.2+', '1.8', 'A' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Gecko', 'Mozilla 1.0', 'Win 95+ / OSX.1+', '1', 'A' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Gecko', 'Mozilla 1.1', 'Win 95+ / OSX.1+', '1.1', 'A' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Gecko', 'Mozilla 1.2', 'Win 95+ / OSX.1+', '1.2', 'A' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Gecko', 'Mozilla 1.3', 'Win 95+ / OSX.1+', '1.3', 'A' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Gecko', 'Mozilla 1.4', 'Win 95+ / OSX.1+', '1.4', 'A' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Gecko', 'Mozilla 1.5', 'Win 95+ / OSX.1+', '1.5', 'A' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Gecko', 'Mozilla 1.6', 'Win 95+ / OSX.1+', '1.6', 'A' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Gecko', 'Mozilla 1.7', 'Win 98+ / OSX.1+', '1.7', 'A' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Gecko', 'Mozilla 1.8', 'Win 98+ / OSX.1+', '1.8', 'A' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Gecko', 'Seamonkey 1.1', 'Win 98+ / OSX.2+', '1.8', 'A' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Gecko', 'Epiphany 2.20', 'Gnome', '1.8', 'A' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Webkit', 'Safari 1.2', 'OSX.3', '125.5', 'A' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Webkit', 'Safari 1.3', 'OSX.3', '312.8', 'A' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Webkit', 'Safari 2.0', 'OSX.4+', '419.3', 'A' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Webkit', 'Safari 3.0', 'OSX.4+', '522.1', 'A' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Webkit', 'OmniWeb 5.5', 'OSX.4+', '420', 'A' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Webkit', 'iPod Touch / iPhone', 'iPod', '420.1', 'A' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Webkit', 'S60', 'S60', '413', 'A' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Presto', 'Opera 7.0', 'Win 95+ / OSX.1+', '-', 'A' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Presto', 'Opera 7.5', 'Win 95+ / OSX.2+', '-', 'A' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Presto', 'Opera 8.0', 'Win 95+ / OSX.2+', '-', 'A' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Presto', 'Opera 8.5', 'Win 95+ / OSX.2+', '-', 'A' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Presto', 'Opera 9.0', 'Win 95+ / OSX.3+', '-', 'A' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Presto', 'Opera 9.2', 'Win 88+ / OSX.3+', '-', 'A' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Presto', 'Opera 9.5', 'Win 88+ / OSX.3+', '-', 'A' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Presto', 'Opera for Wii', 'Wii', '-', 'A' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Presto', 'Nokia N800', 'N800', '-', 'A' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Presto', 'Nintendo DS browser', 'Nintendo DS', '8.5', 'C/A<sup>1</sup>' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'KHTML', 'Konqureror 3.1', 'KDE 3.1', '3.1', 'C' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'KHTML', 'Konqureror 3.3', 'KDE 3.3', '3.3', 'A' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'KHTML', 'Konqureror 3.5', 'KDE 3.5', '3.5', 'A' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Tasman', 'Internet Explorer 4.5', 'Mac OS 8-9', '-', 'X' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Tasman', 'Internet Explorer 5.1', 'Mac OS 7.6-9', '1', 'C' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Tasman', 'Internet Explorer 5.2', 'Mac OS 8-X', '1', 'C' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Misc', 'NetFront 3.1', 'Embedded devices', '-', 'C' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Misc', 'NetFront 3.4', 'Embedded devices', '-', 'A' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Misc', 'Dillo 0.8', 'Embedded devices', '-', 'X' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Misc', 'Links', 'Text only', '-', 'X' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Misc', 'Lynx', 'Text only', '-', 'X' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Misc', 'IE Mobile', 'Windows Mobile 6', '-', 'C' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Misc', 'PSP browser', 'PSP', '-', 'C' ); +INSERT INTO ajax ( engine, browser, platform, version, grade ) VALUES ( 'Other browsers', 'All others', '-', '-', 'U' ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/de_DE.txt b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/de_DE.txt new file mode 100644 index 0000000..9f39e3e --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/de_DE.txt @@ -0,0 +1,17 @@ +{ + "sProcessing": "Bitte warten...", + "sLengthMenu": "_MENU_ Einträge anzeigen", + "sZeroRecords": "Keine Einträge vorhanden.", + "sInfo": "_START_ bis _END_ von _TOTAL_ Einträgen", + "sInfoEmpty": "0 bis 0 von 0 Einträgen", + "sInfoFiltered": "(gefiltert von _MAX_ Einträgen)", + "sInfoPostFix": "", + "sSearch": "Suchen", + "sUrl": "", + "oPaginate": { + "sFirst": "Erster", + "sPrevious": "Zurück", + "sNext": "Nächster", + "sLast": "Letzter" + } +} \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/details_close.png b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/details_close.png new file mode 100644 index 0000000000000000000000000000000000000000..fcc23c63e22f9883bef72c9e3adae3d5ddfb35cc GIT binary patch literal 841 zcmV-P1GfB$P)<h;3K|Lk000e1NJLTq000yK000yS1^@s6jfou%00004XF*Lt007q5 z)K6G40000PbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!+et)0RCwB~ zRZUD&K@grT6<e^<2BXxNUgYOsC0<Bt4}us23L()G;V2>DA_on|3pY;aiIaw_AzX~% z0wEzG!5U~A62!y<6#_3!Y0@BA($@0c+jVBUFF+~kfo;CbzTKH`cV=g%b|^n=hzi67 zM5UV3FcF6cUCnu^p}pjrsWm6Ug}98UR-~ZFvWN`g0Fg%+2vP1<MCL$TMcf(~7<d*A zhi8+?q{cZn2{flQ+9MsM>rl3*$mmwr5rOIH=?}WDABr;u?U4@YDw`9eOu1C&^?L7Z zY;1fZBc9KT-2A-Q9Uc}tJv}1T-7R)sycF4)8NstzNldzAgSOWc2V?31C|17Z<>j$J zAke}0_aQSe0l9^R;<1c^#DEC_0!<vD5Y!9~LPc#YEG;d~hC-p&sI^UTwO-OQG&J;} zzrX)Em?qnMGX}ZE&w!UeCJtN*B%>d$>Do3Jo15TlYl9m;-_3M7y&8+fG<qbPBCP4{ z?R~-+v*p8K$cDcFH%$rC<VDG8ZmM+-xs??>bP>p=udnZ^^3rY*Ry8&@-XZS}=H{ef zDUJ>}0_oCdYHA|eDvG0BC2ghK?XIQGd^|3d(Ko2a8<ZPAT3e+oY;8&Da=F}A0hA`T zOnuWd;BUh;4Eaz@*NbU_ZXd4{Sx%WuX3yjCT&eJS;dde-pZ0t3u1YLb2*-r10&kuC zM%$mNicFiT%iQ|<`l`Hsd%KE}aRfufjdK;xqP%p!T@uFQ@ipQgE{pKj<mBW>%4c^+ z2RQuxqA|Bf6p=-Yhg8<rgXi%hN+UisHT6l=w|*kAqtWQwmX?->1x*8ObQBJv5%iB0 zU9{XrXRDi=!8bAj&V~kvL?Uy+VDJ@gXo|Fa=^duiBKhvUSnKK%G5>85_4~!w&Q6gS z9~Xt4ozl{)vr6y0nuGJKj&rJgrBbPcMMU#|wJ-Lc4fdkiFZ`>)vh)56_#?mow%h=n ThIkt{00000NkvXXu0mjfW_^Rc literal 0 HcmV?d00001 diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/details_open.png b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/details_open.png new file mode 100644 index 0000000000000000000000000000000000000000..6f034d0f2d5c7902dce190355b12defdc07d6c9a GIT binary patch literal 881 zcmV-%1CIQOP)<h;3K|Lk000e1NJLTq000yK000yS1^@s6jfou%00004XF*Lt007q5 z)K6G40000PbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU#14%?dRCwB~ zRozRIQ5b*Tx%`URmR7!^qREsHr4L~=rAQr;^QNxE%fy>P5xVIgh(4gM3Zjdy!n~2N zjD^FnHQ1(tR(9cJl^-l~RyvtO-;dMt9M4;+6T9$?ALpFs<F|93kMl~9dYBMthy#dp zv8JIRHV}$f>)Rcr6nirw3t>UzAPx#r5M&8N9I=W>B2)xRbt)puL>xs_c64-H@%#Or zXf!&j>$*muHOWXvHo`VD#lg6MPE~+#^!N8aRTO1|?J`J5He@S&wvbBVO8K%ZpNm8y zAIT}HC7Cxi$gY3tW-XzMtU1`kx+go?tM3CWp(Z#n*^&?X9upjrBoaWeDh>vNcO4E# z)3UM*kH0>GH%mi2IAp}6%}CKyd$<m+mR^J0^gIXz0v@N+c>~2W6jvjYwyv(OhW7UM zP7O5aPWUzq$A-}#e>#Hw16_xi<P1dCB5>hIJroxfm&IbSiP6!~SxS;g5FTo6ZM`H( zlIh)&4}38nXc|&$DyX^!-nt?1)(-JKW(QQ%jr|ydxA>>z)7I8@S=`cW5N4N`m!G77 zdZMpERgp|rK~d3JRsUp;<Xne@3X*%idAPiyqJn(0DUN1QwCPr>HJ6lA@hNmr@UjvF zT!Ag6;H&rZ+37vY=g+HO_-wIQtVRQvx7QEFj83+*vi=TLQ+cY^m5t3Z!D|~jv(ZlR zc>I^mX3LW^WSCo>=P5lkaGKBKE#utS*o(YFK~4deqwi1AMVd+U<ytr#o*<<w-^Js$ z884M5z!-{%A)S!cjdCNGPft&OAPzDy2v>S~dit;|^yb25sIpdZA`Wys(O1dAvo2(I ziyc~u+*C?>Z*T8&(cem%afeVS6nDGb_L8EKvNL%#5MBx6)#tX<qR#jZs%_P9tL7%i z*)oibj0|FLKS7R|cq~%4-ePi*J(zsR8eY2C@n?2cia7tGp51$YpG6bV?X8z@wBCL_ z4q3asI6I!Ng@uKAgNW99JzxL(z-9>j`d$yLwBMhA-vSH(T>k(8(cOU?00000NkvXX Hu0mjf8E%<j literal 0 HcmV?d00001 diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/editable_ajax.php b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/editable_ajax.php new file mode 100644 index 0000000..4f448b0 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/editable_ajax.php @@ -0,0 +1,3 @@ +<?php + echo $_POST['value'].' (server updated)'; +?> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/index.html b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/index.html new file mode 100644 index 0000000..3bf1b6a --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/index.html @@ -0,0 +1,7 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd"> +<html> + <frameset rows="15%,85%"> + <frame src="controller.html"> + <frame> + </frameset> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/infiniteScroll.php b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/infiniteScroll.php new file mode 100644 index 0000000..f543dd4 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/infiniteScroll.php @@ -0,0 +1,97 @@ +<?php + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Easy set variables + */ + + /* Array of database columns which should be read and sent back to DataTables. Use a space where + * you want to insert a non-database field (for example a counter or static image) + */ + $aColumns = array( 'name', 'phone', 'email', 'city', 'zip' ); + + /* Indexed column (used for fast and accurate table cardinality) */ + $sIndexColumn = "id"; + + /* DB table to use */ + $sTable = "testData"; + + /* Database connection information */ + $gaSql['user'] = ""; + $gaSql['password'] = ""; + $gaSql['db'] = ""; + $gaSql['server'] = "localhost"; + + /* REMOVE THIS LINE (it just includes my SQL connection user/pass) */ + include( $_SERVER['DOCUMENT_ROOT']."/datatables/mysql.php" ); + + + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * If you just want to use the basic configuration for DataTables with PHP server-side, there is + * no need to edit below this line + */ + + /* + * MySQL connection + */ + $gaSql['link'] = mysql_pconnect( $gaSql['server'], $gaSql['user'], $gaSql['password'] ) or + die( 'Could not open connection to server' ); + + mysql_select_db( $gaSql['db'], $gaSql['link'] ) or + die( 'Could not select database '. $gaSql['db'] ); + + + /* + * Paging + */ + $sLimit = ""; + if ( isset( $_GET['iStart'] ) && isset( $_GET['iLength'] ) ) + { + $sLimit = "LIMIT ".mysql_real_escape_string( $_GET['iStart'] ).", ". + mysql_real_escape_string( $_GET['iLength'] ); + } + else + { + echo '{ "aaData": [] }'; + exit(); + } + + /* + * SQL queries + * Get data to display + */ + $sQuery = " + SELECT ".str_replace(" , ", " ", implode(", ", $aColumns))." + FROM $sTable + ORDER BY name ASC + $sLimit + "; + $rResult = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error()); + + /* + * Output + */ + $sOutput = '{'; + $sOutput .= '"aaData": [ '; + while ( $aRow = mysql_fetch_array( $rResult ) ) + { + $sOutput .= "["; + for ( $i=0 ; $i<count($aColumns) ; $i++ ) + { + /* General output */ + $sOutput .= '"'.str_replace('"', '\"', $aRow[ $aColumns[$i] ]).'",'; + } + + /* + * Optional Configuration: + * If you need to add any extra columns (add/edit/delete etc) to the table, that aren't in the + * database - you can do it here + */ + + + $sOutput = substr_replace( $sOutput, "", -1 ); + $sOutput .= "],"; + } + $sOutput = substr_replace( $sOutput, "", -1 ); + $sOutput .= '] }'; + + echo $sOutput; +?> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/jquery-ui-tabs.js b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/jquery-ui-tabs.js new file mode 100755 index 0000000..7b72633 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/jquery-ui-tabs.js @@ -0,0 +1,65 @@ +/*! + * jQuery UI 1.8.2 + * + * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI + */ +(function(c){c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.2",plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e=0;e<b.length;e++)a.options[b[e][0]]&&b[e][1].apply(a.element,d)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(a,b){if(c(a).css("overflow")== +"hidden")return false;b=b&&b=="left"?"scrollLeft":"scrollTop";var d=false;if(a[b]>0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a<b+d},isOver:function(a,b,d,e,f,g){return c.ui.isOverAxis(a,d,f)&&c.ui.isOverAxis(b,e,g)},keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108, +NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d=this;setTimeout(function(){c(d).focus();b&&b.call(d)},a)}):this._focus.apply(this,arguments)},enableSelection:function(){return this.attr("unselectable","off").css("MozUserSelect","")},disableSelection:function(){return this.attr("unselectable","on").css("MozUserSelect", +"none")},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this,"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x", +1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==undefined)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position");if(b=="absolute"||b=="relative"||b=="fixed"){b=parseInt(a.css("zIndex"));if(!isNaN(b)&&b!=0)return b}a=a.parent()}}return 0}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){var b=a.nodeName.toLowerCase(),d=c.attr(a,"tabindex");return(/input|select|textarea|button|object/.test(b)? +!a.disabled:"a"==b||"area"==b?a.href||!isNaN(d):!isNaN(d))&&!c(a)["area"==b?"parents":"closest"](":hidden").length},tabbable:function(a){var b=c.attr(a,"tabindex");return(isNaN(b)||b>=0)&&c(a).is(":focusable")}})}})(jQuery); +;/*! + * jQuery UI Widget 1.8.2 + * + * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Widget + */ +(function(b){var j=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add(this).each(function(){b(this).triggerHandler("remove")});return j.call(b(this),a,c)})};b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]=function(h){return!!b.data(h,a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend({},c.options);b[e][a].prototype= +b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)):d;if(e&&d.substring(0,1)==="_")return h;e?this.each(function(){var g=b.data(this,a),i=g&&b.isFunction(g[d])?g[d].apply(g,f):g;if(i!==g&&i!==undefined){h=i;return false}}):this.each(function(){var g= +b.data(this,a);if(g){d&&g.option(d);g._init()}else b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){this.element=b(c).data(this.widgetName,this);this.options=b.extend(true,{},this.options,b.metadata&&b.metadata.get(c)[this.widgetName],a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});this._create(); +this._init()},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(a,c){var d=a,e=this;if(arguments.length===0)return b.extend({},e.options);if(typeof a==="string"){if(c===undefined)return this.options[a];d={};d[a]=c}b.each(d,function(f, +h){e._setOption(f,h)});return e},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",c);return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a= +b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery); +;/* + * jQuery UI Tabs 1.8.2 + * + * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Tabs + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + */ +(function(d){function s(){return++u}function v(){return++w}var u=0,w=0;d.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:false,cookie:null,collapsible:false,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"<div></div>",remove:null,select:null,show:null,spinner:"<em>Loading…</em>",tabTemplate:'<li><a href="#{href}"><span>#{label}</span></a></li>'},_create:function(){this._tabify(true)},_setOption:function(c,e){if(c=="selected")this.options.collapsible&& +e==this.options.selected||this.select(e);else{this.options[c]=e;this._tabify()}},_tabId:function(c){return c.title&&c.title.replace(/\s/g,"_").replace(/[^A-Za-z0-9\-_:\.]/g,"")||this.options.idPrefix+s()},_sanitizeSelector:function(c){return c.replace(/:/g,"\\:")},_cookie:function(){var c=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+v());return d.cookie.apply(null,[c].concat(d.makeArray(arguments)))},_ui:function(c,e){return{tab:c,panel:e,index:this.anchors.index(c)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var c= +d(this);c.html(c.data("label.tabs")).removeData("label.tabs")})},_tabify:function(c){function e(g,f){g.css({display:""});!d.support.opacity&&f.opacity&&g[0].style.removeAttribute("filter")}this.list=this.element.find("ol,ul").eq(0);this.lis=d("li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return d("a",this)[0]});this.panels=d([]);var a=this,b=this.options,h=/^#.+/;this.anchors.each(function(g,f){var j=d(f).attr("href"),l=j.split("#")[0],p;if(l&&(l===location.toString().split("#")[0]|| +(p=d("base")[0])&&l===p.href)){j=f.hash;f.href=j}if(h.test(j))a.panels=a.panels.add(a._sanitizeSelector(j));else if(j!="#"){d.data(f,"href.tabs",j);d.data(f,"load.tabs",j.replace(/#.*$/,""));j=a._tabId(f);f.href="#"+j;f=d("#"+j);if(!f.length){f=d(b.panelTemplate).attr("id",j).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(a.panels[g-1]||a.list);f.data("destroy.tabs",true)}a.panels=a.panels.add(f)}else b.disabled.push(g)});if(c){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all"); +this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(b.selected===undefined){location.hash&&this.anchors.each(function(g,f){if(f.hash==location.hash){b.selected=g;return false}});if(typeof b.selected!="number"&&b.cookie)b.selected=parseInt(a._cookie(),10);if(typeof b.selected!="number"&&this.lis.filter(".ui-tabs-selected").length)b.selected= +this.lis.index(this.lis.filter(".ui-tabs-selected"));b.selected=b.selected||(this.lis.length?0:-1)}else if(b.selected===null)b.selected=-1;b.selected=b.selected>=0&&this.anchors[b.selected]||b.selected<0?b.selected:0;b.disabled=d.unique(b.disabled.concat(d.map(this.lis.filter(".ui-state-disabled"),function(g){return a.lis.index(g)}))).sort();d.inArray(b.selected,b.disabled)!=-1&&b.disabled.splice(d.inArray(b.selected,b.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active"); +if(b.selected>=0&&this.anchors.length){this.panels.eq(b.selected).removeClass("ui-tabs-hide");this.lis.eq(b.selected).addClass("ui-tabs-selected ui-state-active");a.element.queue("tabs",function(){a._trigger("show",null,a._ui(a.anchors[b.selected],a.panels[b.selected]))});this.load(b.selected)}d(window).bind("unload",function(){a.lis.add(a.anchors).unbind(".tabs");a.lis=a.anchors=a.panels=null})}else b.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"));this.element[b.collapsible?"addClass": +"removeClass"]("ui-tabs-collapsible");b.cookie&&this._cookie(b.selected,b.cookie);c=0;for(var i;i=this.lis[c];c++)d(i)[d.inArray(c,b.disabled)!=-1&&!d(i).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");b.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(b.event!="mouseover"){var k=function(g,f){f.is(":not(.ui-state-disabled)")&&f.addClass("ui-state-"+g)},n=function(g,f){f.removeClass("ui-state-"+g)};this.lis.bind("mouseover.tabs", +function(){k("hover",d(this))});this.lis.bind("mouseout.tabs",function(){n("hover",d(this))});this.anchors.bind("focus.tabs",function(){k("focus",d(this).closest("li"))});this.anchors.bind("blur.tabs",function(){n("focus",d(this).closest("li"))})}var m,o;if(b.fx)if(d.isArray(b.fx)){m=b.fx[0];o=b.fx[1]}else m=o=b.fx;var q=o?function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.hide().removeClass("ui-tabs-hide").animate(o,o.duration||"normal",function(){e(f,o);a._trigger("show", +null,a._ui(g,f[0]))})}:function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");a._trigger("show",null,a._ui(g,f[0]))},r=m?function(g,f){f.animate(m,m.duration||"normal",function(){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");e(f,m);a.element.dequeue("tabs")})}:function(g,f){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");a.element.dequeue("tabs")};this.anchors.bind(b.event+".tabs", +function(){var g=this,f=d(this).closest("li"),j=a.panels.filter(":not(.ui-tabs-hide)"),l=d(a._sanitizeSelector(this.hash));if(f.hasClass("ui-tabs-selected")&&!b.collapsible||f.hasClass("ui-state-disabled")||f.hasClass("ui-state-processing")||a._trigger("select",null,a._ui(this,l[0]))===false){this.blur();return false}b.selected=a.anchors.index(this);a.abort();if(b.collapsible)if(f.hasClass("ui-tabs-selected")){b.selected=-1;b.cookie&&a._cookie(b.selected,b.cookie);a.element.queue("tabs",function(){r(g, +j)}).dequeue("tabs");this.blur();return false}else if(!j.length){b.cookie&&a._cookie(b.selected,b.cookie);a.element.queue("tabs",function(){q(g,l)});a.load(a.anchors.index(this));this.blur();return false}b.cookie&&a._cookie(b.selected,b.cookie);if(l.length){j.length&&a.element.queue("tabs",function(){r(g,j)});a.element.queue("tabs",function(){q(g,l)});a.load(a.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier.";d.browser.msie&&this.blur()});this.anchors.bind("click.tabs", +function(){return false})},destroy:function(){var c=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var e=d.data(this,"href.tabs");if(e)this.href=e;var a=d(this).unbind(".tabs");d.each(["href","load","cache"],function(b,h){a.removeData(h+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){d.data(this, +"destroy.tabs")?d(this).remove():d(this).removeClass("ui-state-default ui-corner-top ui-tabs-selected ui-state-active ui-state-hover ui-state-focus ui-state-disabled ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide")});c.cookie&&this._cookie(null,c.cookie);return this},add:function(c,e,a){if(a===undefined)a=this.anchors.length;var b=this,h=this.options;e=d(h.tabTemplate.replace(/#\{href\}/g,c).replace(/#\{label\}/g,e));c=!c.indexOf("#")?c.replace("#",""):this._tabId(d("a",e)[0]);e.addClass("ui-state-default ui-corner-top").data("destroy.tabs", +true);var i=d("#"+c);i.length||(i=d(h.panelTemplate).attr("id",c).data("destroy.tabs",true));i.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(a>=this.lis.length){e.appendTo(this.list);i.appendTo(this.list[0].parentNode)}else{e.insertBefore(this.lis[a]);i.insertBefore(this.panels[a])}h.disabled=d.map(h.disabled,function(k){return k>=a?++k:k});this._tabify();if(this.anchors.length==1){h.selected=0;e.addClass("ui-tabs-selected ui-state-active");i.removeClass("ui-tabs-hide"); +this.element.queue("tabs",function(){b._trigger("show",null,b._ui(b.anchors[0],b.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[a],this.panels[a]));return this},remove:function(c){var e=this.options,a=this.lis.eq(c).remove(),b=this.panels.eq(c).remove();if(a.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(c+(c+1<this.anchors.length?1:-1));e.disabled=d.map(d.grep(e.disabled,function(h){return h!=c}),function(h){return h>=c?--h:h});this._tabify();this._trigger("remove", +null,this._ui(a.find("a")[0],b[0]));return this},enable:function(c){var e=this.options;if(d.inArray(c,e.disabled)!=-1){this.lis.eq(c).removeClass("ui-state-disabled");e.disabled=d.grep(e.disabled,function(a){return a!=c});this._trigger("enable",null,this._ui(this.anchors[c],this.panels[c]));return this}},disable:function(c){var e=this.options;if(c!=e.selected){this.lis.eq(c).addClass("ui-state-disabled");e.disabled.push(c);e.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[c],this.panels[c]))}return this}, +select:function(c){if(typeof c=="string")c=this.anchors.index(this.anchors.filter("[href$="+c+"]"));else if(c===null)c=-1;if(c==-1&&this.options.collapsible)c=this.options.selected;this.anchors.eq(c).trigger(this.options.event+".tabs");return this},load:function(c){var e=this,a=this.options,b=this.anchors.eq(c)[0],h=d.data(b,"load.tabs");this.abort();if(!h||this.element.queue("tabs").length!==0&&d.data(b,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(c).addClass("ui-state-processing"); +if(a.spinner){var i=d("span",b);i.data("label.tabs",i.html()).html(a.spinner)}this.xhr=d.ajax(d.extend({},a.ajaxOptions,{url:h,success:function(k,n){d(e._sanitizeSelector(b.hash)).html(k);e._cleanup();a.cache&&d.data(b,"cache.tabs",true);e._trigger("load",null,e._ui(e.anchors[c],e.panels[c]));try{a.ajaxOptions.success(k,n)}catch(m){}},error:function(k,n){e._cleanup();e._trigger("load",null,e._ui(e.anchors[c],e.panels[c]));try{a.ajaxOptions.error(k,n,c,b)}catch(m){}}}));e.element.dequeue("tabs");return this}}, +abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this},url:function(c,e){this.anchors.eq(c).removeData("cache.tabs").data("load.tabs",e);return this},length:function(){return this.anchors.length}});d.extend(d.ui.tabs,{version:"1.8.2"});d.extend(d.ui.tabs.prototype,{rotation:null,rotate:function(c,e){var a=this,b=this.options,h=a._rotate||(a._rotate= +function(i){clearTimeout(a.rotation);a.rotation=setTimeout(function(){var k=b.selected;a.select(++k<a.anchors.length?k:0)},c);i&&i.stopPropagation()});e=a._unrotate||(a._unrotate=!e?function(i){i.clientX&&a.rotate(null)}:function(){t=b.selected;h()});if(c){this.element.bind("tabsshow",h);this.anchors.bind(b.event+".tabs",e);h()}else{clearTimeout(a.rotation);this.element.unbind("tabsshow",h);this.anchors.unbind(b.event+".tabs",e);delete this._rotate;delete this._unrotate}return this}})})(jQuery); +; \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/jquery.jeditable.js b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/jquery.jeditable.js new file mode 100644 index 0000000..a4c2f98 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/jquery.jeditable.js @@ -0,0 +1,543 @@ +/* + * Jeditable - jQuery in place edit plugin + * + * Copyright (c) 2006-2009 Mika Tuupola, Dylan Verheul + * + * Licensed under the MIT license: + * http://www.opensource.org/licenses/mit-license.php + * + * Project home: + * http://www.appelsiini.net/projects/jeditable + * + * Based on editable by Dylan Verheul <dylan_at_dyve.net>: + * http://www.dyve.net/jquery/?editable + * + */ + +/** + * Version 1.7.1 + * + * ** means there is basic unit tests for this parameter. + * + * @name Jeditable + * @type jQuery + * @param String target (POST) URL or function to send edited content to ** + * @param Hash options additional options + * @param String options[method] method to use to send edited content (POST or PUT) ** + * @param Function options[callback] Function to run after submitting edited content ** + * @param String options[name] POST parameter name of edited content + * @param String options[id] POST parameter name of edited div id + * @param Hash options[submitdata] Extra parameters to send when submitting edited content. + * @param String options[type] text, textarea or select (or any 3rd party input type) ** + * @param Integer options[rows] number of rows if using textarea ** + * @param Integer options[cols] number of columns if using textarea ** + * @param Mixed options[height] 'auto', 'none' or height in pixels ** + * @param Mixed options[width] 'auto', 'none' or width in pixels ** + * @param String options[loadurl] URL to fetch input content before editing ** + * @param String options[loadtype] Request type for load url. Should be GET or POST. + * @param String options[loadtext] Text to display while loading external content. + * @param Mixed options[loaddata] Extra parameters to pass when fetching content before editing. + * @param Mixed options[data] Or content given as paramameter. String or function.** + * @param String options[indicator] indicator html to show when saving + * @param String options[tooltip] optional tooltip text via title attribute ** + * @param String options[event] jQuery event such as 'click' of 'dblclick' ** + * @param String options[submit] submit button value, empty means no button ** + * @param String options[cancel] cancel button value, empty means no button ** + * @param String options[cssclass] CSS class to apply to input form. 'inherit' to copy from parent. ** + * @param String options[style] Style to apply to input form 'inherit' to copy from parent. ** + * @param String options[select] true or false, when true text is highlighted ?? + * @param String options[placeholder] Placeholder text or html to insert when element is empty. ** + * @param String options[onblur] 'cancel', 'submit', 'ignore' or function ?? + * + * @param Function options[onsubmit] function(settings, original) { ... } called before submit + * @param Function options[onreset] function(settings, original) { ... } called before reset + * @param Function options[onerror] function(settings, original, xhr) { ... } called on error + * + * @param Hash options[ajaxoptions] jQuery Ajax options. See docs.jquery.com. + * + */ + +(function($) { + + $.fn.editable = function(target, options) { + + if ('disable' == target) { + $(this).data('disabled.editable', true); + return; + } + if ('enable' == target) { + $(this).data('disabled.editable', false); + return; + } + if ('destroy' == target) { + $(this) + .unbind($(this).data('event.editable')) + .removeData('disabled.editable') + .removeData('event.editable'); + return; + } + + var settings = $.extend({}, $.fn.editable.defaults, {target:target}, options); + + /* setup some functions */ + var plugin = $.editable.types[settings.type].plugin || function() { }; + var submit = $.editable.types[settings.type].submit || function() { }; + var buttons = $.editable.types[settings.type].buttons + || $.editable.types['defaults'].buttons; + var content = $.editable.types[settings.type].content + || $.editable.types['defaults'].content; + var element = $.editable.types[settings.type].element + || $.editable.types['defaults'].element; + var reset = $.editable.types[settings.type].reset + || $.editable.types['defaults'].reset; + var callback = settings.callback || function() { }; + var onedit = settings.onedit || function() { }; + var onsubmit = settings.onsubmit || function() { }; + var onreset = settings.onreset || function() { }; + var onerror = settings.onerror || reset; + + /* show tooltip */ + if (settings.tooltip) { + $(this).attr('title', settings.tooltip); + } + + settings.autowidth = 'auto' == settings.width; + settings.autoheight = 'auto' == settings.height; + + return this.each(function() { + + /* save this to self because this changes when scope changes */ + var self = this; + + /* inlined block elements lose their width and height after first edit */ + /* save them for later use as workaround */ + var savedwidth = $(self).width(); + var savedheight = $(self).height(); + + /* save so it can be later used by $.editable('destroy') */ + $(this).data('event.editable', settings.event); + + /* if element is empty add something clickable (if requested) */ + if (!$.trim($(this).html())) { + $(this).html(settings.placeholder); + } + + $(this).bind(settings.event, function(e) { + + /* abort if disabled for this element */ + if (true === $(this).data('disabled.editable')) { + return; + } + + /* prevent throwing an exeption if edit field is clicked again */ + if (self.editing) { + return; + } + + /* abort if onedit hook returns false */ + if (false === onedit.apply(this, [settings, self])) { + return; + } + + /* prevent default action and bubbling */ + e.preventDefault(); + e.stopPropagation(); + + /* remove tooltip */ + if (settings.tooltip) { + $(self).removeAttr('title'); + } + + /* figure out how wide and tall we are, saved width and height */ + /* are workaround for http://dev.jquery.com/ticket/2190 */ + if (0 == $(self).width()) { + //$(self).css('visibility', 'hidden'); + settings.width = savedwidth; + settings.height = savedheight; + } else { + if (settings.width != 'none') { + settings.width = + settings.autowidth ? $(self).width() : settings.width; + } + if (settings.height != 'none') { + settings.height = + settings.autoheight ? $(self).height() : settings.height; + } + } + //$(this).css('visibility', ''); + + /* remove placeholder text, replace is here because of IE */ + if ($(this).html().toLowerCase().replace(/(;|")/g, '') == + settings.placeholder.toLowerCase().replace(/(;|")/g, '')) { + $(this).html(''); + } + + self.editing = true; + self.revert = $(self).html(); + $(self).html(''); + + /* create the form object */ + var form = $('<form />'); + + /* apply css or style or both */ + if (settings.cssclass) { + if ('inherit' == settings.cssclass) { + form.attr('class', $(self).attr('class')); + } else { + form.attr('class', settings.cssclass); + } + } + + if (settings.style) { + if ('inherit' == settings.style) { + form.attr('style', $(self).attr('style')); + /* IE needs the second line or display wont be inherited */ + form.css('display', $(self).css('display')); + } else { + form.attr('style', settings.style); + } + } + + /* add main input element to form and store it in input */ + var input = element.apply(form, [settings, self]); + + /* set input content via POST, GET, given data or existing value */ + var input_content; + + if (settings.loadurl) { + var t = setTimeout(function() { + input.disabled = true; + content.apply(form, [settings.loadtext, settings, self]); + }, 100); + + var loaddata = {}; + loaddata[settings.id] = self.id; + if ($.isFunction(settings.loaddata)) { + $.extend(loaddata, settings.loaddata.apply(self, [self.revert, settings])); + } else { + $.extend(loaddata, settings.loaddata); + } + $.ajax({ + type : settings.loadtype, + url : settings.loadurl, + data : loaddata, + async : false, + success: function(result) { + window.clearTimeout(t); + input_content = result; + input.disabled = false; + } + }); + } else if (settings.data) { + input_content = settings.data; + if ($.isFunction(settings.data)) { + input_content = settings.data.apply(self, [self.revert, settings]); + } + } else { + input_content = self.revert; + } + content.apply(form, [input_content, settings, self]); + + input.attr('name', settings.name); + + /* add buttons to the form */ + buttons.apply(form, [settings, self]); + + /* add created form to self */ + $(self).append(form); + + /* attach 3rd party plugin if requested */ + plugin.apply(form, [settings, self]); + + /* focus to first visible form element */ + $(':input:visible:enabled:first', form).focus(); + + /* highlight input contents when requested */ + if (settings.select) { + input.select(); + } + + /* discard changes if pressing esc */ + input.keydown(function(e) { + if (e.keyCode == 27) { + e.preventDefault(); + //self.reset(); + reset.apply(form, [settings, self]); + } + }); + + /* discard, submit or nothing with changes when clicking outside */ + /* do nothing is usable when navigating with tab */ + var t; + if ('cancel' == settings.onblur) { + input.blur(function(e) { + /* prevent canceling if submit was clicked */ + t = setTimeout(function() { + reset.apply(form, [settings, self]); + }, 500); + }); + } else if ('submit' == settings.onblur) { + input.blur(function(e) { + /* prevent double submit if submit was clicked */ + t = setTimeout(function() { + form.submit(); + }, 200); + }); + } else if ($.isFunction(settings.onblur)) { + input.blur(function(e) { + settings.onblur.apply(self, [input.val(), settings]); + }); + } else { + input.blur(function(e) { + /* TODO: maybe something here */ + }); + } + + form.submit(function(e) { + + if (t) { + clearTimeout(t); + } + + /* do no submit */ + e.preventDefault(); + + /* call before submit hook. */ + /* if it returns false abort submitting */ + if (false !== onsubmit.apply(form, [settings, self])) { + /* custom inputs call before submit hook. */ + /* if it returns false abort submitting */ + if (false !== submit.apply(form, [settings, self])) { + + /* check if given target is function */ + if ($.isFunction(settings.target)) { + var str = settings.target.apply(self, [input.val(), settings]); + $(self).html(str); + self.editing = false; + callback.apply(self, [self.innerHTML, settings]); + /* TODO: this is not dry */ + if (!$.trim($(self).html())) { + $(self).html(settings.placeholder); + } + } else { + /* add edited content and id of edited element to POST */ + var submitdata = {}; + submitdata[settings.name] = input.val(); + submitdata[settings.id] = self.id; + /* add extra data to be POST:ed */ + if ($.isFunction(settings.submitdata)) { + $.extend(submitdata, settings.submitdata.apply(self, [self.revert, settings])); + } else { + $.extend(submitdata, settings.submitdata); + } + + /* quick and dirty PUT support */ + if ('PUT' == settings.method) { + submitdata['_method'] = 'put'; + } + + /* show the saving indicator */ + $(self).html(settings.indicator); + + /* defaults for ajaxoptions */ + var ajaxoptions = { + type : 'POST', + data : submitdata, + dataType: 'html', + url : settings.target, + success : function(result, status) { + if (ajaxoptions.dataType == 'html') { + $(self).html(result); + } + self.editing = false; + callback.apply(self, [result, settings]); + if (!$.trim($(self).html())) { + $(self).html(settings.placeholder); + } + }, + error : function(xhr, status, error) { + onerror.apply(form, [settings, self, xhr]); + } + }; + + /* override with what is given in settings.ajaxoptions */ + $.extend(ajaxoptions, settings.ajaxoptions); + $.ajax(ajaxoptions); + + } + } + } + + /* show tooltip again */ + $(self).attr('title', settings.tooltip); + + return false; + }); + }); + + /* privileged methods */ + this.reset = function(form) { + /* prevent calling reset twice when blurring */ + if (this.editing) { + /* before reset hook, if it returns false abort reseting */ + if (false !== onreset.apply(form, [settings, self])) { + $(self).html(self.revert); + self.editing = false; + if (!$.trim($(self).html())) { + $(self).html(settings.placeholder); + } + /* show tooltip again */ + if (settings.tooltip) { + $(self).attr('title', settings.tooltip); + } + } + } + }; + }); + + }; + + + $.editable = { + types: { + defaults: { + element : function(settings, original) { + var input = $('<input type="hidden"></input>'); + $(this).append(input); + return(input); + }, + content : function(string, settings, original) { + $(':input:first', this).val(string); + }, + reset : function(settings, original) { + original.reset(this); + }, + buttons : function(settings, original) { + var form = this; + if (settings.submit) { + /* if given html string use that */ + if (settings.submit.match(/>$/)) { + var submit = $(settings.submit).click(function() { + if (submit.attr("type") != "submit") { + form.submit(); + } + }); + /* otherwise use button with given string as text */ + } else { + var submit = $('<button type="submit" />'); + submit.html(settings.submit); + } + $(this).append(submit); + } + if (settings.cancel) { + /* if given html string use that */ + if (settings.cancel.match(/>$/)) { + var cancel = $(settings.cancel); + /* otherwise use button with given string as text */ + } else { + var cancel = $('<button type="cancel" />'); + cancel.html(settings.cancel); + } + $(this).append(cancel); + + $(cancel).click(function(event) { + //original.reset(); + if ($.isFunction($.editable.types[settings.type].reset)) { + var reset = $.editable.types[settings.type].reset; + } else { + var reset = $.editable.types['defaults'].reset; + } + reset.apply(form, [settings, original]); + return false; + }); + } + } + }, + text: { + element : function(settings, original) { + var input = $('<input />'); + if (settings.width != 'none') { input.width(settings.width); } + if (settings.height != 'none') { input.height(settings.height); } + /* https://bugzilla.mozilla.org/show_bug.cgi?id=236791 */ + //input[0].setAttribute('autocomplete','off'); + input.attr('autocomplete','off'); + $(this).append(input); + return(input); + } + }, + textarea: { + element : function(settings, original) { + var textarea = $('<textarea />'); + if (settings.rows) { + textarea.attr('rows', settings.rows); + } else if (settings.height != "none") { + textarea.height(settings.height); + } + if (settings.cols) { + textarea.attr('cols', settings.cols); + } else if (settings.width != "none") { + textarea.width(settings.width); + } + $(this).append(textarea); + return(textarea); + } + }, + select: { + element : function(settings, original) { + var select = $('<select />'); + $(this).append(select); + return(select); + }, + content : function(data, settings, original) { + /* If it is string assume it is json. */ + if (String == data.constructor) { + eval ('var json = ' + data); + } else { + /* Otherwise assume it is a hash already. */ + var json = data; + } + for (var key in json) { + if (!json.hasOwnProperty(key)) { + continue; + } + if ('selected' == key) { + continue; + } + var option = $('<option />').val(key).append(json[key]); + $('select', this).append(option); + } + /* Loop option again to set selected. IE needed this... */ + $('select', this).children().each(function() { + if ($(this).val() == json['selected'] || + $(this).text() == $.trim(original.revert)) { + $(this).attr('selected', 'selected'); + } + }); + } + } + }, + + /* Add new input type */ + addInputType: function(name, input) { + $.editable.types[name] = input; + } + }; + + // publicly accessible defaults + $.fn.editable.defaults = { + name : 'value', + id : 'id', + type : 'text', + width : 'auto', + height : 'auto', + event : 'click.editable', + onblur : 'cancel', + loadtype : 'GET', + loadtext : 'Loading...', + placeholder: 'Click to edit', + loaddata : {}, + submitdata : {}, + ajaxoptions: {} + }; + +})(jQuery); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/jquery.tooltip.css b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/jquery.tooltip.css new file mode 100644 index 0000000..77574da --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/jquery.tooltip.css @@ -0,0 +1,12 @@ +#tooltip{ + position: absolute; + display: none; + border: 1px solid #333; + background: #BDCDFF; + padding: 5px 20px; + color: #333; + + border-radius: 5px; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; +} \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/jquery.tooltip.js b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/jquery.tooltip.js new file mode 100644 index 0000000..63b715f --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/jquery.tooltip.js @@ -0,0 +1,294 @@ +/* + * jQuery Tooltip plugin 1.3 + * + * http://bassistance.de/jquery-plugins/jquery-plugin-tooltip/ + * http://docs.jquery.com/Plugins/Tooltip + * + * Copyright (c) 2006 - 2008 Jörn Zaefferer + * + * $Id: jquery.tooltip.js 5741 2008-06-21 15:22:16Z joern.zaefferer $ + * + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + */ + +;(function($) { + + // the tooltip element + var helper = {}, + // the current tooltipped element + current, + // the title of the current element, used for restoring + title, + // timeout id for delayed tooltips + tID, + // IE 5.5 or 6 + IE = $.browser.msie && /MSIE\s(5\.5|6\.)/.test(navigator.userAgent), + // flag for mouse tracking + track = false; + + $.tooltip = { + blocked: false, + defaults: { + delay: 200, + fade: false, + showURL: true, + extraClass: "", + top: 15, + left: 15, + id: "tooltip" + }, + block: function() { + $.tooltip.blocked = !$.tooltip.blocked; + } + }; + + $.fn.extend({ + tooltip: function(settings) { + settings = $.extend({}, $.tooltip.defaults, settings); + createHelper(settings); + return this.each(function() { + $.data(this, "tooltip", settings); + this.tOpacity = helper.parent.css("opacity"); + // copy tooltip into its own expando and remove the title + this.tooltipText = this.title; + $(this).removeAttr("title"); + // also remove alt attribute to prevent default tooltip in IE + this.alt = ""; + }) + .mouseover(save) + .mouseout(hide) + .click(hide); + }, + fixPNG: IE ? function() { + return this.each(function () { + var image = $(this).css('backgroundImage'); + if (image.match(/^url\(["']?(.*\.png)["']?\)$/i)) { + image = RegExp.$1; + $(this).css({ + 'backgroundImage': 'none', + 'filter': "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=crop, src='" + image + "')" + }).each(function () { + var position = $(this).css('position'); + if (position != 'absolute' && position != 'relative') + $(this).css('position', 'relative'); + }); + } + }); + } : function() { return this; }, + unfixPNG: IE ? function() { + return this.each(function () { + $(this).css({'filter': '', backgroundImage: ''}); + }); + } : function() { return this; }, + hideWhenEmpty: function() { + return this.each(function() { + $(this)[ $(this).html() ? "show" : "hide" ](); + }); + }, + url: function() { + return this.attr('href') || this.attr('src'); + } + }); + + function createHelper(settings) { + // there can be only one tooltip helper + if( helper.parent ) + return; + // create the helper, h3 for title, div for url + helper.parent = $('<div id="' + settings.id + '"><h3></h3><div class="body"></div><div class="url"></div></div>') + // add to document + .appendTo(document.body) + // hide it at first + .hide(); + + // apply bgiframe if available + if ( $.fn.bgiframe ) + helper.parent.bgiframe(); + + // save references to title and url elements + helper.title = $('h3', helper.parent); + helper.body = $('div.body', helper.parent); + helper.url = $('div.url', helper.parent); + } + + function settings(element) { + return $.data(element, "tooltip"); + } + + // main event handler to start showing tooltips + function handle(event) { + // show helper, either with timeout or on instant + if( settings(this).delay ) + tID = setTimeout(show, settings(this).delay); + else + show(); + + // if selected, update the helper position when the mouse moves + track = !!settings(this).track; + $(document.body).bind('mousemove', update); + + // update at least once + update(event); + } + + // save elements title before the tooltip is displayed + function save() { + // if this is the current source, or it has no title (occurs with click event), stop + if ( $.tooltip.blocked || this == current || (!this.tooltipText && !settings(this).bodyHandler) ) + return; + + // save current + current = this; + title = this.tooltipText; + + if ( settings(this).bodyHandler ) { + helper.title.hide(); + var bodyContent = settings(this).bodyHandler.call(this); + if (bodyContent.nodeType || bodyContent.jquery) { + helper.body.empty().append(bodyContent) + } else { + helper.body.html( bodyContent ); + } + helper.body.show(); + } else if ( settings(this).showBody ) { + var parts = title.split(settings(this).showBody); + helper.title.html(parts.shift()).show(); + helper.body.empty(); + for(var i = 0, part; (part = parts[i]); i++) { + if(i > 0) + helper.body.append("<br/>"); + helper.body.append(part); + } + helper.body.hideWhenEmpty(); + } else { + helper.title.html(title).show(); + helper.body.hide(); + } + + // if element has href or src, add and show it, otherwise hide it + if( settings(this).showURL && $(this).url() ) + helper.url.html( $(this).url().replace('http://', '') ).show(); + else + helper.url.hide(); + + // add an optional class for this tip + helper.parent.addClass(settings(this).extraClass); + + // fix PNG background for IE + if (settings(this).fixPNG ) + helper.parent.fixPNG(); + + handle.apply(this, arguments); + } + + // delete timeout and show helper + function show() { + tID = null; + if ((!IE || !$.fn.bgiframe) && settings(current).fade) { + if (helper.parent.is(":animated")) + helper.parent.stop().show().fadeTo(settings(current).fade, current.tOpacity); + else + helper.parent.is(':visible') ? helper.parent.fadeTo(settings(current).fade, current.tOpacity) : helper.parent.fadeIn(settings(current).fade); + } else { + helper.parent.show(); + } + update(); + } + + /** + * callback for mousemove + * updates the helper position + * removes itself when no current element + */ + function update(event) { + if($.tooltip.blocked) + return; + + if (event && event.target.tagName == "OPTION") { + return; + } + + // stop updating when tracking is disabled and the tooltip is visible + if ( !track && helper.parent.is(":visible")) { + $(document.body).unbind('mousemove', update) + } + + // if no current element is available, remove this listener + if( current == null ) { + $(document.body).unbind('mousemove', update); + return; + } + + // remove position helper classes + helper.parent.removeClass("viewport-right").removeClass("viewport-bottom"); + + var left = helper.parent[0].offsetLeft; + var top = helper.parent[0].offsetTop; + if (event) { + // position the helper 15 pixel to bottom right, starting from mouse position + left = event.pageX + settings(current).left; + top = event.pageY + settings(current).top; + var right='auto'; + if (settings(current).positionLeft) { + right = $(window).width() - left; + left = 'auto'; + } + helper.parent.css({ + left: left, + right: right, + top: top + }); + } + + var v = viewport(), + h = helper.parent[0]; + // check horizontal position + if (v.x + v.cx < h.offsetLeft + h.offsetWidth) { + left -= h.offsetWidth + 20 + settings(current).left; + helper.parent.css({left: left + 'px'}).addClass("viewport-right"); + } + // check vertical position + if (v.y + v.cy < h.offsetTop + h.offsetHeight) { + top -= h.offsetHeight + 20 + settings(current).top; + helper.parent.css({top: top + 'px'}).addClass("viewport-bottom"); + } + } + + function viewport() { + return { + x: $(window).scrollLeft(), + y: $(window).scrollTop(), + cx: $(window).width(), + cy: $(window).height() + }; + } + + // hide helper and restore added classes and the title + function hide(event) { + if($.tooltip.blocked) + return; + // clear timeout if possible + if(tID) + clearTimeout(tID); + // no more current element + current = null; + + var tsettings = settings(this); + function complete() { + helper.parent.removeClass( tsettings.extraClass ).hide().css("opacity", ""); + } + if ((!IE || !$.fn.bgiframe) && tsettings.fade) { + if (helper.parent.is(':animated')) + helper.parent.stop().fadeTo(tsettings.fade, 0, complete); + else + helper.parent.stop().fadeOut(tsettings.fade, complete); + } else + complete(); + + if( settings(this).fixPNG ) + helper.parent.unfixPNG(); + } + +})(jQuery); diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/syntax/css/shCore.css b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/syntax/css/shCore.css new file mode 100644 index 0000000..0877fcb --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/syntax/css/shCore.css @@ -0,0 +1,377 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +.syntaxhighlighter a, +.syntaxhighlighter div, +.syntaxhighlighter code, +.syntaxhighlighter table, +.syntaxhighlighter table td, +.syntaxhighlighter table tr, +.syntaxhighlighter table tbody, +.syntaxhighlighter table thead, +.syntaxhighlighter table caption, +.syntaxhighlighter textarea { + -moz-border-radius: 0 0 0 0 !important; + -webkit-border-radius: 0 0 0 0 !important; + background: none !important; + border: 0 !important; + bottom: auto !important; + float: none !important; + height: auto !important; + left: auto !important; + line-height: 1.1em !important; + margin: 0 !important; + outline: 0 !important; + overflow: visible !important; + padding: 0 !important; + position: static !important; + right: auto !important; + text-align: left !important; + top: auto !important; + vertical-align: baseline !important; + width: auto !important; + box-sizing: content-box !important; + font-family: "Consolas","Monaco","Bitstream Vera Sans Mono","Courier New",Courier,monospace !important; + font-weight: normal !important; + font-style: normal !important; + font-size: 1em !important; + min-height: inherit !important; + min-height: auto !important; +} + +.syntaxhighlighter { + width: 100% !important; + margin: 1em 0 1em 0 !important; + position: relative !important; + overflow: auto !important; + font-size: 1em !important; +} +.syntaxhighlighter.source { + overflow: hidden !important; +} +.syntaxhighlighter .bold { + font-weight: bold !important; +} +.syntaxhighlighter .italic { + font-style: italic !important; +} +.syntaxhighlighter .line { + white-space: pre !important; +} +.syntaxhighlighter table { + width: 100% !important; +} +.syntaxhighlighter table caption { + text-align: left !important; + padding: .5em 0 0.5em 1em !important; +} +.syntaxhighlighter table td.code { + width: 100% !important; +} +.syntaxhighlighter table td.code .container { + position: relative !important; +} +.syntaxhighlighter table td.code .container textarea { + box-sizing: border-box !important; + position: absolute !important; + left: 0 !important; + top: 0 !important; + width: 100% !important; + height: 100% !important; + border: none !important; + background: white !important; + padding-left: 1em !important; + overflow: hidden !important; + white-space: pre !important; +} +.syntaxhighlighter table td.gutter .line { + text-align: right !important; + padding: 2px 0.5em 2px 1em !important; +} +.syntaxhighlighter table td.code .line { + padding: 2px 1em !important; +} +.syntaxhighlighter.nogutter td.code .container textarea, .syntaxhighlighter.nogutter td.code .line { + padding-left: 0em !important; +} +.syntaxhighlighter.show { + display: block !important; +} +.syntaxhighlighter.collapsed table { + display: none !important; +} +.syntaxhighlighter.collapsed .toolbar { + padding: 0.1em 0.8em 0em 0.8em !important; + font-size: 1em !important; + position: static !important; + width: auto !important; + height: auto !important; +} +.syntaxhighlighter.collapsed .toolbar span { + display: inline !important; + margin-right: 1em !important; +} +.syntaxhighlighter.collapsed .toolbar span a { + padding: 0 !important; + display: none !important; +} +.syntaxhighlighter.collapsed .toolbar span a.expandSource { + display: inline !important; +} +.syntaxhighlighter .toolbar { + position: absolute !important; + right: 1px !important; + top: 1px !important; + font-size: 10px !important; + z-index: 10 !important; +} +.syntaxhighlighter .toolbar span.title { + display: inline !important; +} +.syntaxhighlighter .toolbar a { + display: block !important; + text-align: center !important; + text-decoration: none !important; + padding-top: 1px !important; +} +.syntaxhighlighter .toolbar a.expandSource { + display: none !important; +} +.syntaxhighlighter.ie { + font-size: .9em !important; + padding: 1px 0 1px 0 !important; +} +.syntaxhighlighter.ie .toolbar { + line-height: 8px !important; +} +.syntaxhighlighter.ie .toolbar a { + padding-top: 0px !important; +} +.syntaxhighlighter.printing .line.alt1 .content, +.syntaxhighlighter.printing .line.alt2 .content, +.syntaxhighlighter.printing .line.highlighted .number, +.syntaxhighlighter.printing .line.highlighted.alt1 .content, +.syntaxhighlighter.printing .line.highlighted.alt2 .content { + background: none !important; +} +.syntaxhighlighter.printing .line .number { + color: #bbbbbb !important; +} +.syntaxhighlighter.printing .line .content { + color: black !important; +} +.syntaxhighlighter.printing .toolbar { + display: none !important; +} +.syntaxhighlighter.printing a { + text-decoration: none !important; +} +.syntaxhighlighter.printing .plain, .syntaxhighlighter.printing .plain a { + color: black !important; +} +.syntaxhighlighter.printing .comments, .syntaxhighlighter.printing .comments a { + color: #008200 !important; +} +.syntaxhighlighter.printing .string, .syntaxhighlighter.printing .string a { + color: blue !important; +} +.syntaxhighlighter.printing .keyword { + color: #006699 !important; + font-weight: bold !important; +} +.syntaxhighlighter.printing .preprocessor { + color: gray !important; +} +.syntaxhighlighter.printing .variable { + color: #aa7700 !important; +} +.syntaxhighlighter.printing .value { + color: #009900 !important; +} +.syntaxhighlighter.printing .functions { + color: #ff1493 !important; +} +.syntaxhighlighter.printing .constants { + color: #0066cc !important; +} +.syntaxhighlighter.printing .script { + font-weight: bold !important; +} +.syntaxhighlighter.printing .color1, .syntaxhighlighter.printing .color1 a { + color: gray !important; +} +.syntaxhighlighter.printing .color2, .syntaxhighlighter.printing .color2 a { + color: #ff1493 !important; +} +.syntaxhighlighter.printing .color3, .syntaxhighlighter.printing .color3 a { + color: red !important; +} +.syntaxhighlighter.printing .break, .syntaxhighlighter.printing .break a { + color: black !important; +} + + + +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +.syntaxhighlighter { + background-color: white !important; + font-size: 13px !important; + overflow: visible !important; +} +.syntaxhighlighter .line.alt1 { + background-color: white !important; +} +.syntaxhighlighter .line.alt2 { + background-color: #F8F8F8 !important; +} +.syntaxhighlighter .line.highlighted.alt1, .syntaxhighlighter .line.highlighted.alt2 { + background-color: #e0e0e0 !important; +} +.syntaxhighlighter .line.highlighted.number { + color: black !important; +} +.syntaxhighlighter table caption { + color: black !important; +} +.syntaxhighlighter .gutter { +} +.syntaxhighlighter .gutter div { + color: #5C5C5C !important; + width: 20px !important; +} +.syntaxhighlighter .gutter .line.alt1, .syntaxhighlighter .gutter .line.alt2 { + background-color: white !important; +} +.odd .syntaxhighlighter .gutter .line.alt1, .odd .syntaxhighlighter .gutter .line.alt2 { + background-color: #F2F2F2 !important; +} +.syntaxhighlighter .gutter .line { + border-right: 3px solid #4E6CA3 !important; +} +.syntaxhighlighter .gutter .line.highlighted { + background-color: #4E6CA3 !important; + color: white !important; +} +.syntaxhighlighter.printing .line .content { + border: none !important; +} +.syntaxhighlighter.collapsed { + overflow: visible !important; +} +.syntaxhighlighter.collapsed .toolbar { + color: blue !important; + background: white !important; + border: 1px solid #4E6CA3 !important; +} +.syntaxhighlighter.collapsed .toolbar a { + color: blue !important; +} +.syntaxhighlighter.collapsed .toolbar a:hover { + color: red !important; +} +.syntaxhighlighter .toolbar { + color: white !important; + border: none !important; +} +.syntaxhighlighter .toolbar a { + font: 100%/1.45em "Lucida Grande", Verdana, Arial, Helvetica, sans-serif !important; + color: white !important; + background: #4E6CA3 !important; + float: right !important; + padding: 2px 5px !important; + clear: both; +} +.syntaxhighlighter .toolbar a:hover { + color: #b7c5df !important; + background: #39568b !important; +} +.syntaxhighlighter .plain, .syntaxhighlighter .plain a { + color: black !important; +} +.syntaxhighlighter .comments, .syntaxhighlighter .comments a { + color: #008200 !important; +} +.syntaxhighlighter .string, .syntaxhighlighter .string a { + color: blue !important; +} +.syntaxhighlighter .keyword { + color: #006699 !important; +} +.syntaxhighlighter .preprocessor { + color: gray !important; +} +.syntaxhighlighter .variable { + color: #aa7700 !important; +} +.syntaxhighlighter .value { + color: #009900 !important; +} +.syntaxhighlighter .functions { + color: #ff1493 !important; +} +.syntaxhighlighter .constants { + color: #0066cc !important; +} +.syntaxhighlighter .script { + font-weight: bold !important; + color: #006699 !important; + background-color: none !important; +} +.syntaxhighlighter .color1, .syntaxhighlighter .color1 a { + color: gray !important; +} +.syntaxhighlighter .color2, .syntaxhighlighter .color2 a { + color: #ff1493 !important; +} +.syntaxhighlighter .color3, .syntaxhighlighter .color3 a { + color: red !important; +} + +.syntaxhighlighter .keyword { + font-weight: bold !important; +} + +.datatables_ref:hover { + text-decoration: underline; + cursor: pointer; + *cursor: hand; +} + +.syntaxhighlighter .dtapi { + color: #069; +} + +.syntaxhighlighter .dtapi:hover { + text-decoration: underline; + cursor: pointer; + *cursor: hand; +} + diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/syntax/images/arrow.jpg b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/syntax/images/arrow.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eba85eac52dfcf2f41fab61010a4369f31047b2c GIT binary patch literal 430 zcmex=<NpH&0WUXCHwH!~28I+MWcdGvLC~c%IlGd9k%5H)B*^gp9Rr_ZN`6u*L&^c5 z2;=|T3@r?d!~-S-V1@&zb|ywfpezu>C5UDGKfoZ!!NAVI!OSSgz$D1XEXer(2tyjs z*{FaEXcMXkE4u*DziiA%!mLbU%)%@pZ0v$UqT+%KjLa;IEX;6Sj7&nzf{MZ{%8p7- zLCzv<|8Fty0Ch77G7B=;GbC+!_<f1D*s4#8)2$~h*tW9xi9wgCsgsr6zqNW>^Ug@C z%#_@~E6&Dtm;Xtx%#@#3LeKtu@SkCqQmjc+S>eK+W_7~r^DHO&RpyFJncV4TDIc}v b@Mo5J2UK$B>=%|_)ymy_Y26A@lm9mXK<iC# literal 0 HcmV?d00001 diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/syntax/images/extended.png b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/syntax/images/extended.png new file mode 100644 index 0000000000000000000000000000000000000000..5dd01bfc5b0670cb1e8080f7383e00c1186296b9 GIT binary patch literal 1189 zcmaJ>U1-}@6jtMAnBe|UXtxZq+{$dUw6?As%dWN9iDTKVyDBrb*P22{Wa%ariF7qd zsqHXGmKF9>!q%s5Z|lpTTNx{bl9H}V+rV7<kcUzT88aR0a}riIGPdGfC2_ikWCEdc zF5mZ^@7#N?KFRbS-_`bN8%0sO(kFy0`R;aJ_e&JDqx5#iagwy#$%383gLYXm5fxW( z5rMQO4WTTOl<IpAP&Y-nXf<E33*sqW#+qMpF#d{W5H>}1_f!l?9!54Oq9Ij}(#tbH z(m++B^chZsqLDx)^~9Koa%25@d2CpYD0EK@bXRyHpdniV6>UVf_)3&s)8$F*EHgA% zgV@7Sdfik(%zy+o5#apLC&Lf~A=b}!1;gR+Q4oMEWMF_{13os)cLjI|!Nx<AYNj&C zXNA;8Es{m)l5HD2!<5Tqf4R$#%^`-3L?VtxAmAeipH<ausp8WuZ&N`)mTanqtzsQG zic%4e+EJP~U2j1%Hf42dW1Gl^F%`*RSU+@HY63;^|Dl?;iMH%4df|6VVJlxX5R*j~ z9yMihaD!f_l))!VB-z-^V?5H_#Y_p?*eYQIByt=OC0W&-d<`#(d|J0`NtaPth|)yC zuc`_kOr;W`P)OilAi=Up*vAQMB*-0ueL^zP7YaAI0+vTLq}xrd@`9V(mg|gyW{}DP zGS%})Ntsv!Yc2EY7G7XTNT!0x1P5VYYcK0uWqU7#yG<VqF~c|q`=5huE|KYR!p*TI z$>!iAolLt)#ySUCOm0?tT8QT>i^YE$jUJa9e(-U<UT;u4=G-rT*)tydqIGYt2V6Qg zbN>1K{Cs0i@x#Zl>hBlgr%xZaMuCYZW0_NvRz?{h@$A?4j9l)~xDs3F{rvfI{Rh{P zJJn}zEZkgNJe!)<YHgohyx1NO_EJ}lwRX&Q?A^crkIoC1Ucbx7mk#XPSDY>{zgGDE z)~)uDqmPz;nQ0t3eE9A=H?Ci2C+0G@1Gs*>!ExN7cctR2Yvp9i&R0&l5B^rG)f&@J zpIrIKGjV5?@p|u5ZP)g6#=cthc-;dBzrA|(!OCCHh793;aB>ww>E6ziX9`kpy$PpU zT3S{P(J`vFJJLPTdX9QJ_tR&cUGM+>=hUwcFEbu6F1x6u%RevFzR68GKaO;=U-+(X GVDev$t&%?g literal 0 HcmV?d00001 diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/syntax/js/shCore.js b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/syntax/js/shCore.js new file mode 100644 index 0000000..e23c0d6 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/syntax/js/shCore.js @@ -0,0 +1,2708 @@ +/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +// XRegExp 1.5.0 +// (c) 2007-2010 Steven Levithan +// MIT License +// <http://xregexp.com> +// Provides an augmented, extensible, cross-browser implementation of regular expressions, +// including support for additional syntax, flags, and methods + +var XRegExp; + +if (XRegExp) { + // Avoid running twice, since that would break references to native globals + throw Error("can't load XRegExp twice in the same frame"); +} + +// Run within an anonymous function to protect variables and avoid new globals +(function () { + + //--------------------------------- + // Constructor + //--------------------------------- + + // Accepts a pattern and flags; returns a new, extended `RegExp` object. Differs from a native + // regular expression in that additional syntax and flags are supported and cross-browser + // syntax inconsistencies are ameliorated. `XRegExp(/regex/)` clones an existing regex and + // converts to type XRegExp + XRegExp = function (pattern, flags) { + var output = [], + currScope = XRegExp.OUTSIDE_CLASS, + pos = 0, + context, tokenResult, match, chr, regex; + + if (XRegExp.isRegExp(pattern)) { + if (flags !== undefined) + throw TypeError("can't supply flags when constructing one RegExp from another"); + return clone(pattern); + } + // Tokens become part of the regex construction process, so protect against infinite + // recursion when an XRegExp is constructed within a token handler or trigger + if (isInsideConstructor) + throw Error("can't call the XRegExp constructor within token definition functions"); + + flags = flags || ""; + context = { // `this` object for custom tokens + hasNamedCapture: false, + captureNames: [], + hasFlag: function (flag) {return flags.indexOf(flag) > -1;}, + setFlag: function (flag) {flags += flag;} + }; + + while (pos < pattern.length) { + // Check for custom tokens at the current position + tokenResult = runTokens(pattern, pos, currScope, context); + + if (tokenResult) { + output.push(tokenResult.output); + pos += (tokenResult.match[0].length || 1); + } else { + // Check for native multicharacter metasequences (excluding character classes) at + // the current position + if (match = real.exec.call(nativeTokens[currScope], pattern.slice(pos))) { + output.push(match[0]); + pos += match[0].length; + } else { + chr = pattern.charAt(pos); + if (chr === "[") + currScope = XRegExp.INSIDE_CLASS; + else if (chr === "]") + currScope = XRegExp.OUTSIDE_CLASS; + // Advance position one character + output.push(chr); + pos++; + } + } + } + + regex = RegExp(output.join(""), real.replace.call(flags, flagClip, "")); + regex._xregexp = { + source: pattern, + captureNames: context.hasNamedCapture ? context.captureNames : null + }; + return regex; + }; + + + //--------------------------------- + // Public properties + //--------------------------------- + + XRegExp.version = "1.5.0"; + + // Token scope bitflags + XRegExp.INSIDE_CLASS = 1; + XRegExp.OUTSIDE_CLASS = 2; + + + //--------------------------------- + // Private variables + //--------------------------------- + + var replacementToken = /\$(?:(\d\d?|[$&`'])|{([$\w]+)})/g, + flagClip = /[^gimy]+|([\s\S])(?=[\s\S]*\1)/g, // Nonnative and duplicate flags + quantifier = /^(?:[?*+]|{\d+(?:,\d*)?})\??/, + isInsideConstructor = false, + tokens = [], + // Copy native globals for reference ("native" is an ES3 reserved keyword) + real = { + exec: RegExp.prototype.exec, + test: RegExp.prototype.test, + match: String.prototype.match, + replace: String.prototype.replace, + split: String.prototype.split + }, + compliantExecNpcg = real.exec.call(/()??/, "")[1] === undefined, // check `exec` handling of nonparticipating capturing groups + compliantLastIndexIncrement = function () { + var x = /^/g; + real.test.call(x, ""); + return !x.lastIndex; + }(), + compliantLastIndexReset = function () { + var x = /x/g; + real.replace.call("x", x, ""); + return !x.lastIndex; + }(), + hasNativeY = RegExp.prototype.sticky !== undefined, + nativeTokens = {}; + + // `nativeTokens` match native multicharacter metasequences only (including deprecated octals, + // excluding character classes) + nativeTokens[XRegExp.INSIDE_CLASS] = /^(?:\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\dA-Fa-f]{2}|u[\dA-Fa-f]{4}|c[A-Za-z]|[\s\S]))/; + nativeTokens[XRegExp.OUTSIDE_CLASS] = /^(?:\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9]\d*|x[\dA-Fa-f]{2}|u[\dA-Fa-f]{4}|c[A-Za-z]|[\s\S])|\(\?[:=!]|[?*+]\?|{\d+(?:,\d*)?}\??)/; + + + //--------------------------------- + // Public methods + //--------------------------------- + + // Lets you extend or change XRegExp syntax and create custom flags. This is used internally by + // the XRegExp library and can be used to create XRegExp plugins. This function is intended for + // users with advanced knowledge of JavaScript's regular expression syntax and behavior. It can + // be disabled by `XRegExp.freezeTokens` + XRegExp.addToken = function (regex, handler, scope, trigger) { + tokens.push({ + pattern: clone(regex, "g" + (hasNativeY ? "y" : "")), + handler: handler, + scope: scope || XRegExp.OUTSIDE_CLASS, + trigger: trigger || null + }); + }; + + // Accepts a pattern and flags; returns an extended `RegExp` object. If the pattern and flag + // combination has previously been cached, the cached copy is returned; otherwise the newly + // created regex is cached + XRegExp.cache = function (pattern, flags) { + var key = pattern + "/" + (flags || ""); + return XRegExp.cache[key] || (XRegExp.cache[key] = XRegExp(pattern, flags)); + }; + + // Accepts a `RegExp` instance; returns a copy with the `/g` flag set. The copy has a fresh + // `lastIndex` (set to zero). If you want to copy a regex without forcing the `global` + // property, use `XRegExp(regex)`. Do not use `RegExp(regex)` because it will not preserve + // special properties required for named capture + XRegExp.copyAsGlobal = function (regex) { + return clone(regex, "g"); + }; + + // Accepts a string; returns the string with regex metacharacters escaped. The returned string + // can safely be used at any point within a regex to match the provided literal string. Escaped + // characters are [ ] { } ( ) * + ? - . , \ ^ $ | # and whitespace + XRegExp.escape = function (str) { + return str.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); + }; + + // Accepts a string to search, regex to search with, position to start the search within the + // string (default: 0), and an optional Boolean indicating whether matches must start at-or- + // after the position or at the specified position only. This function ignores the `lastIndex` + // property of the provided regex + XRegExp.execAt = function (str, regex, pos, anchored) { + regex = clone(regex, "g" + ((anchored && hasNativeY) ? "y" : "")); + regex.lastIndex = pos = pos || 0; + var match = regex.exec(str); + if (anchored) + return (match && match.index === pos) ? match : null; + else + return match; + }; + + // Breaks the unrestorable link to XRegExp's private list of tokens, thereby preventing + // syntax and flag changes. Should be run after XRegExp and any plugins are loaded + XRegExp.freezeTokens = function () { + XRegExp.addToken = function () { + throw Error("can't run addToken after freezeTokens"); + }; + }; + + // Accepts any value; returns a Boolean indicating whether the argument is a `RegExp` object. + // Note that this is also `true` for regex literals and regexes created by the `XRegExp` + // constructor. This works correctly for variables created in another frame, when `instanceof` + // and `constructor` checks would fail to work as intended + XRegExp.isRegExp = function (o) { + return Object.prototype.toString.call(o) === "[object RegExp]"; + }; + + // Executes `callback` once per match within `str`. Provides a simpler and cleaner way to + // iterate over regex matches compared to the traditional approaches of subverting + // `String.prototype.replace` or repeatedly calling `exec` within a `while` loop + XRegExp.iterate = function (str, origRegex, callback, context) { + var regex = clone(origRegex, "g"), + i = -1, match; + while (match = regex.exec(str)) { + callback.call(context, match, ++i, str, regex); + if (regex.lastIndex === match.index) + regex.lastIndex++; + } + if (origRegex.global) + origRegex.lastIndex = 0; + }; + + // Accepts a string and an array of regexes; returns the result of using each successive regex + // to search within the matches of the previous regex. The array of regexes can also contain + // objects with `regex` and `backref` properties, in which case the named or numbered back- + // references specified are passed forward to the next regex or returned. E.g.: + // var xregexpImgFileNames = XRegExp.matchChain(html, [ + // {regex: /<img\b([^>]+)>/i, backref: 1}, // <img> tag attributes + // {regex: XRegExp('(?ix) \\s src=" (?<src> [^"]+ )'), backref: "src"}, // src attribute values + // {regex: XRegExp("^http://xregexp\\.com(/[^#?]+)", "i"), backref: 1}, // xregexp.com paths + // /[^\/]+$/ // filenames (strip directory paths) + // ]); + XRegExp.matchChain = function (str, chain) { + return function recurseChain (values, level) { + var item = chain[level].regex ? chain[level] : {regex: chain[level]}, + regex = clone(item.regex, "g"), + matches = [], i; + for (i = 0; i < values.length; i++) { + XRegExp.iterate(values[i], regex, function (match) { + matches.push(item.backref ? (match[item.backref] || "") : match[0]); + }); + } + return ((level === chain.length - 1) || !matches.length) ? + matches : recurseChain(matches, level + 1); + }([str], 0); + }; + + + //--------------------------------- + // New RegExp prototype methods + //--------------------------------- + + // Accepts a context object and arguments array; returns the result of calling `exec` with the + // first value in the arguments array. the context is ignored but is accepted for congruity + // with `Function.prototype.apply` + RegExp.prototype.apply = function (context, args) { + return this.exec(args[0]); + }; + + // Accepts a context object and string; returns the result of calling `exec` with the provided + // string. the context is ignored but is accepted for congruity with `Function.prototype.call` + RegExp.prototype.call = function (context, str) { + return this.exec(str); + }; + + + //--------------------------------- + // Overriden native methods + //--------------------------------- + + // Adds named capture support (with backreferences returned as `result.name`), and fixes two + // cross-browser issues per ES3: + // - Captured values for nonparticipating capturing groups should be returned as `undefined`, + // rather than the empty string. + // - `lastIndex` should not be incremented after zero-length matches. + RegExp.prototype.exec = function (str) { + var match = real.exec.apply(this, arguments), + name, r2; + if (match && str) { + // Fix browsers whose `exec` methods don't consistently return `undefined` for + // nonparticipating capturing groups + if (!compliantExecNpcg && match.length > 1 && indexOf(match, "") > -1) { + r2 = RegExp(this.source, real.replace.call(getNativeFlags(this), "g", "")); + // Using `str.slice(match.index)` rather than `match[0]` in case lookahead allowed + // matching due to characters outside the match + real.replace.call(str.slice(match.index), r2, function () { + for (var i = 1; i < arguments.length - 2; i++) { + if (arguments[i] === undefined) + match[i] = undefined; + } + }); + } + // Attach named capture properties + if (this._xregexp && this._xregexp.captureNames) { + for (var i = 1; i < match.length; i++) { + name = this._xregexp.captureNames[i - 1]; + if (name) + match[name] = match[i]; + } + } + // Fix browsers that increment `lastIndex` after zero-length matches + if (!compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index)) + this.lastIndex--; + } + return match; + }; + + // Don't override `test` if it won't change anything + if (!compliantLastIndexIncrement) { + // Fix browser bug in native method + RegExp.prototype.test = function (str) { + // Use the native `exec` to skip some processing overhead, even though the overriden + // `exec` would take care of the `lastIndex` fix + var match = real.exec.call(this, str); + // Fix browsers that increment `lastIndex` after zero-length matches + if (match && this.global && !match[0].length && (this.lastIndex > match.index)) + this.lastIndex--; + return !!match; + }; + } + + // Adds named capture support and fixes browser bugs in native method + String.prototype.match = function (regex) { + if (!XRegExp.isRegExp(regex)) + regex = RegExp(regex); // Native `RegExp` + if (regex.global) { + var result = real.match.apply(this, arguments); + regex.lastIndex = 0; // Fix IE bug + return result; + } + return regex.exec(this); // Run the altered `exec` + }; + + // Adds support for `${n}` tokens for named and numbered backreferences in replacement text, + // and provides named backreferences to replacement functions as `arguments[0].name`. Also + // fixes cross-browser differences in replacement text syntax when performing a replacement + // using a nonregex search value, and the value of replacement regexes' `lastIndex` property + // during replacement iterations. Note that this doesn't support SpiderMonkey's proprietary + // third (`flags`) parameter + String.prototype.replace = function (search, replacement) { + var isRegex = XRegExp.isRegExp(search), + captureNames, result, str; + + // There are many combinations of search/replacement types/values and browser bugs that + // preclude passing to native `replace`, so just keep this check relatively simple + if (isRegex && typeof replacement.valueOf() === "string" && replacement.indexOf("${") === -1 && compliantLastIndexReset) + return real.replace.apply(this, arguments); + + if (!isRegex) + search = search + ""; // Type conversion + else if (search._xregexp) + captureNames = search._xregexp.captureNames; // Array or `null` + + if (typeof replacement === "function") { + result = real.replace.call(this, search, function () { + if (captureNames) { + // Change the `arguments[0]` string primitive to a String object which can store properties + arguments[0] = new String(arguments[0]); + // Store named backreferences on `arguments[0]` + for (var i = 0; i < captureNames.length; i++) { + if (captureNames[i]) + arguments[0][captureNames[i]] = arguments[i + 1]; + } + } + // Update `lastIndex` before calling `replacement` + if (isRegex && search.global) + search.lastIndex = arguments[arguments.length - 2] + arguments[0].length; + return replacement.apply(null, arguments); + }); + } else { + str = this + ""; // Type conversion, so `args[args.length - 1]` will be a string (given nonstring `this`) + result = real.replace.call(str, search, function () { + var args = arguments; // Keep this function's `arguments` available through closure + return real.replace.call(replacement, replacementToken, function ($0, $1, $2) { + // Numbered backreference (without delimiters) or special variable + if ($1) { + switch ($1) { + case "$": return "$"; + case "&": return args[0]; + case "`": return args[args.length - 1].slice(0, args[args.length - 2]); + case "'": return args[args.length - 1].slice(args[args.length - 2] + args[0].length); + // Numbered backreference + default: + // What does "$10" mean? + // - Backreference 10, if 10 or more capturing groups exist + // - Backreference 1 followed by "0", if 1-9 capturing groups exist + // - Otherwise, it's the string "$10" + // Also note: + // - Backreferences cannot be more than two digits (enforced by `replacementToken`) + // - "$01" is equivalent to "$1" if a capturing group exists, otherwise it's the string "$01" + // - There is no "$0" token ("$&" is the entire match) + var literalNumbers = ""; + $1 = +$1; // Type conversion; drop leading zero + if (!$1) // `$1` was "0" or "00" + return $0; + while ($1 > args.length - 3) { + literalNumbers = String.prototype.slice.call($1, -1) + literalNumbers; + $1 = Math.floor($1 / 10); // Drop the last digit + } + return ($1 ? args[$1] || "" : "$") + literalNumbers; + } + // Named backreference or delimited numbered backreference + } else { + // What does "${n}" mean? + // - Backreference to numbered capture n. Two differences from "$n": + // - n can be more than two digits + // - Backreference 0 is allowed, and is the entire match + // - Backreference to named capture n, if it exists and is not a number overridden by numbered capture + // - Otherwise, it's the string "${n}" + var n = +$2; // Type conversion; drop leading zeros + if (n <= args.length - 3) + return args[n]; + n = captureNames ? indexOf(captureNames, $2) : -1; + return n > -1 ? args[n + 1] : $0; + } + }); + }); + } + + if (isRegex && search.global) + search.lastIndex = 0; // Fix IE bug + + return result; + }; + + // A consistent cross-browser, ES3 compliant `split` + String.prototype.split = function (s /* separator */, limit) { + // If separator `s` is not a regex, use the native `split` + if (!XRegExp.isRegExp(s)) + return real.split.apply(this, arguments); + + var str = this + "", // Type conversion + output = [], + lastLastIndex = 0, + match, lastLength; + + // Behavior for `limit`: if it's... + // - `undefined`: No limit + // - `NaN` or zero: Return an empty array + // - A positive number: Use `Math.floor(limit)` + // - A negative number: No limit + // - Other: Type-convert, then use the above rules + if (limit === undefined || +limit < 0) { + limit = Infinity; + } else { + limit = Math.floor(+limit); + if (!limit) + return []; + } + + // This is required if not `s.global`, and it avoids needing to set `s.lastIndex` to zero + // and restore it to its original value when we're done using the regex + s = XRegExp.copyAsGlobal(s); + + while (match = s.exec(str)) { // Run the altered `exec` (required for `lastIndex` fix, etc.) + if (s.lastIndex > lastLastIndex) { + output.push(str.slice(lastLastIndex, match.index)); + + if (match.length > 1 && match.index < str.length) + Array.prototype.push.apply(output, match.slice(1)); + + lastLength = match[0].length; + lastLastIndex = s.lastIndex; + + if (output.length >= limit) + break; + } + + if (s.lastIndex === match.index) + s.lastIndex++; + } + + if (lastLastIndex === str.length) { + if (!real.test.call(s, "") || lastLength) + output.push(""); + } else { + output.push(str.slice(lastLastIndex)); + } + + return output.length > limit ? output.slice(0, limit) : output; + }; + + + //--------------------------------- + // Private helper functions + //--------------------------------- + + // Supporting function for `XRegExp`, `XRegExp.copyAsGlobal`, etc. Returns a copy of a `RegExp` + // instance with a fresh `lastIndex` (set to zero), preserving properties required for named + // capture. Also allows adding new flags in the process of copying the regex + function clone (regex, additionalFlags) { + if (!XRegExp.isRegExp(regex)) + throw TypeError("type RegExp expected"); + var x = regex._xregexp; + regex = XRegExp(regex.source, getNativeFlags(regex) + (additionalFlags || "")); + if (x) { + regex._xregexp = { + source: x.source, + captureNames: x.captureNames ? x.captureNames.slice(0) : null + }; + } + return regex; + }; + + function getNativeFlags (regex) { + return (regex.global ? "g" : "") + + (regex.ignoreCase ? "i" : "") + + (regex.multiline ? "m" : "") + + (regex.extended ? "x" : "") + // Proposed for ES4; included in AS3 + (regex.sticky ? "y" : ""); + }; + + function runTokens (pattern, index, scope, context) { + var i = tokens.length, + result, match, t; + // Protect against constructing XRegExps within token handler and trigger functions + isInsideConstructor = true; + // Must reset `isInsideConstructor`, even if a `trigger` or `handler` throws + try { + while (i--) { // Run in reverse order + t = tokens[i]; + if ((scope & t.scope) && (!t.trigger || t.trigger.call(context))) { + t.pattern.lastIndex = index; + match = t.pattern.exec(pattern); // Running the altered `exec` here allows use of named backreferences, etc. + if (match && match.index === index) { + result = { + output: t.handler.call(context, match, scope), + match: match + }; + break; + } + } + } + } catch (err) { + throw err; + } finally { + isInsideConstructor = false; + } + return result; + }; + + function indexOf (array, item, from) { + if (Array.prototype.indexOf) // Use the native array method if available + return array.indexOf(item, from); + for (var i = from || 0; i < array.length; i++) { + if (array[i] === item) + return i; + } + return -1; + }; + + + //--------------------------------- + // Built-in tokens + //--------------------------------- + + // Augment XRegExp's regular expression syntax and flags. Note that when adding tokens, the + // third (`scope`) argument defaults to `XRegExp.OUTSIDE_CLASS` + + // Comment pattern: (?# ) + XRegExp.addToken( + /\(\?#[^)]*\)/, + function (match) { + // Keep tokens separated unless the following token is a quantifier + return real.test.call(quantifier, match.input.slice(match.index + match[0].length)) ? "" : "(?:)"; + } + ); + + // Capturing group (match the opening parenthesis only). + // Required for support of named capturing groups + XRegExp.addToken( + /\((?!\?)/, + function () { + this.captureNames.push(null); + return "("; + } + ); + + // Named capturing group (match the opening delimiter only): (?<name> + XRegExp.addToken( + /\(\?<([$\w]+)>/, + function (match) { + this.captureNames.push(match[1]); + this.hasNamedCapture = true; + return "("; + } + ); + + // Named backreference: \k<name> + XRegExp.addToken( + /\\k<([\w$]+)>/, + function (match) { + var index = indexOf(this.captureNames, match[1]); + // Keep backreferences separate from subsequent literal numbers. Preserve back- + // references to named groups that are undefined at this point as literal strings + return index > -1 ? + "\\" + (index + 1) + (isNaN(match.input.charAt(match.index + match[0].length)) ? "" : "(?:)") : + match[0]; + } + ); + + // Empty character class: [] or [^] + XRegExp.addToken( + /\[\^?]/, + function (match) { + // For cross-browser compatibility with ES3, convert [] to \b\B and [^] to [\s\S]. + // (?!) should work like \b\B, but is unreliable in Firefox + return match[0] === "[]" ? "\\b\\B" : "[\\s\\S]"; + } + ); + + // Mode modifier at the start of the pattern only, with any combination of flags imsx: (?imsx) + // Does not support x(?i), (?-i), (?i-m), (?i: ), (?i)(?m), etc. + XRegExp.addToken( + /^\(\?([imsx]+)\)/, + function (match) { + this.setFlag(match[1]); + return ""; + } + ); + + // Whitespace and comments, in free-spacing (aka extended) mode only + XRegExp.addToken( + /(?:\s+|#.*)+/, + function (match) { + // Keep tokens separated unless the following token is a quantifier + return real.test.call(quantifier, match.input.slice(match.index + match[0].length)) ? "" : "(?:)"; + }, + XRegExp.OUTSIDE_CLASS, + function () {return this.hasFlag("x");} + ); + + // Dot, in dotall (aka singleline) mode only + XRegExp.addToken( + /\./, + function () {return "[\\s\\S]";}, + XRegExp.OUTSIDE_CLASS, + function () {return this.hasFlag("s");} + ); + + + //--------------------------------- + // Backward compatibility + //--------------------------------- + + // Uncomment the following block for compatibility with XRegExp 1.0-1.2: + /* + XRegExp.matchWithinChain = XRegExp.matchChain; + RegExp.prototype.addFlags = function (s) {return clone(this, s);}; + RegExp.prototype.execAll = function (s) {var r = []; XRegExp.iterate(s, this, function (m) {r.push(m);}); return r;}; + RegExp.prototype.forEachExec = function (s, f, c) {return XRegExp.iterate(s, this, f, c);}; + RegExp.prototype.validate = function (s) {var r = RegExp("^(?:" + this.source + ")$(?!\\s)", getNativeFlags(this)); if (this.global) this.lastIndex = 0; return s.search(r) === 0;}; + */ + +})(); +// +// Begin anonymous function. This is used to contain local scope variables without polutting global scope. +// +if (typeof(SyntaxHighlighter) == 'undefined') var SyntaxHighlighter = function() { + +// CommonJS +if (typeof(require) != 'undefined' && typeof(XRegExp) == 'undefined') +{ + XRegExp = require('XRegExp').XRegExp; +} + +// Shortcut object which will be assigned to the SyntaxHighlighter variable. +// This is a shorthand for local reference in order to avoid long namespace +// references to SyntaxHighlighter.whatever... +var sh = { + defaults : { + /** Additional CSS class names to be added to highlighter elements. */ + 'class-name' : '', + + /** First line number. */ + 'first-line' : 1, + + /** + * Pads line numbers. Possible values are: + * + * false - don't pad line numbers. + * true - automaticaly pad numbers with minimum required number of leading zeroes. + * [int] - length up to which pad line numbers. + */ + 'pad-line-numbers' : false, + + /** Lines to highlight. */ + 'highlight' : null, + + /** Title to be displayed above the code block. */ + 'title' : null, + + /** Enables or disables smart tabs. */ + 'smart-tabs' : true, + + /** Gets or sets tab size. */ + 'tab-size' : 4, + + /** Enables or disables gutter. */ + 'gutter' : true, + + /** Enables or disables toolbar. */ + 'toolbar' : true, + + /** Enables quick code copy and paste from double click. */ + 'quick-code' : true, + + /** Forces code view to be collapsed. */ + 'collapse' : false, + + /** Enables or disables automatic links. */ + 'auto-links' : true, + + /** Gets or sets light mode. Equavalent to turning off gutter and toolbar. */ + 'light' : false, + + 'unindent' : true, + + 'html-script' : false + }, + + config : { + space : ' ', + + /** Enables use of <SCRIPT type="syntaxhighlighter" /> tags. */ + useScriptTags : true, + + /** Blogger mode flag. */ + bloggerMode : false, + + stripBrs : false, + + /** Name of the tag that SyntaxHighlighter will automatically look for. */ + tagName : 'pre', + + strings : { + expandSource : 'expand source', + help : '?', + alert: 'SyntaxHighlighter\n\n', + noBrush : 'Can\'t find brush for: ', + brushNotHtmlScript : 'Brush wasn\'t configured for html-script option: ', + + // this is populated by the build script + aboutDialog : '@ABOUT@' + } + }, + + /** Internal 'global' variables. */ + vars : { + discoveredBrushes : null, + highlighters : {} + }, + + /** This object is populated by user included external brush files. */ + brushes : {}, + + /** Common regular expressions. */ + regexLib : { + multiLineCComments : /\/\*[\s\S]*?\*\//gm, + singleLineCComments : /\/\/.*$/gm, + singleLinePerlComments : /#.*$/gm, + doubleQuotedString : /"([^\\"\n]|\\.)*"/g, + singleQuotedString : /'([^\\'\n]|\\.)*'/g, + multiLineDoubleQuotedString : new XRegExp('"([^\\\\"]|\\\\.)*"', 'gs'), + multiLineSingleQuotedString : new XRegExp("'([^\\\\']|\\\\.)*'", 'gs'), + xmlComments : /(<|<)!--[\s\S]*?--(>|>)/gm, + url : /\w+:\/\/[\w-.\/?%&=:@;#]*/g, + + /** <?= ?> tags. */ + phpScriptTags : { left: /(<|<)\?(?:=|php)?/g, right: /\?(>|>)/g, 'eof' : true }, + + /** <%= %> tags. */ + aspScriptTags : { left: /(<|<)%=?/g, right: /%(>|>)/g }, + + /** <script> tags. */ + scriptScriptTags : { left: /(<|<)\s*script.*?(>|>)/gi, right: /(<|<)\/\s*script\s*(>|>)/gi } + }, + + toolbar: { + /** + * Generates HTML markup for the toolbar. + * @param {Highlighter} highlighter Highlighter instance. + * @return {String} Returns HTML markup. + */ + getHtml: function(highlighter) + { + var html = '<div class="toolbar">', + items = sh.toolbar.items, + list = items.list + ; + + function defaultGetHtml(highlighter, name) + { + return sh.toolbar.getButtonHtml(highlighter, name, sh.config.strings[name]); + }; + + for (var i = 0; i < list.length; i++) + html += (items[list[i]].getHtml || defaultGetHtml)(highlighter, list[i]); + + html += '</div>'; + + return html; + }, + + /** + * Generates HTML markup for a regular button in the toolbar. + * @param {Highlighter} highlighter Highlighter instance. + * @param {String} commandName Command name that would be executed. + * @param {String} label Label text to display. + * @return {String} Returns HTML markup. + */ + getButtonHtml: function(highlighter, commandName, label) + { + return '<span><a href="#" class="toolbar_item' + + ' command_' + commandName + + ' ' + commandName + + '">' + label + '</a></span>' + ; + }, + + /** + * Event handler for a toolbar anchor. + */ + handler: function(e) + { + var target = e.target, + className = target.className || '' + ; + + function getValue(name) + { + var r = new RegExp(name + '_(\\w+)'), + match = r.exec(className) + ; + + return match ? match[1] : null; + }; + + var highlighter = getHighlighterById(findParentElement(target, '.syntaxhighlighter').id), + commandName = getValue('command') + ; + + // execute the toolbar command + if (highlighter && commandName) + sh.toolbar.items[commandName].execute(highlighter); + + // disable default A click behaviour + e.preventDefault(); + }, + + /** Collection of toolbar items. */ + items : { + // Ordered lis of items in the toolbar. Can't expect `for (var n in items)` to be consistent. + list: ['expandSource', 'help'], + + expandSource: { + getHtml: function(highlighter) + { + if (highlighter.getParam('collapse') != true) + return ''; + + var title = highlighter.getParam('title'); + return sh.toolbar.getButtonHtml(highlighter, 'expandSource', title ? title : sh.config.strings.expandSource); + }, + + execute: function(highlighter) + { + var div = getHighlighterDivById(highlighter.id); + removeClass(div, 'collapsed'); + } + }, + + /** Command to display the about dialog window. */ + help: { + execute: function(highlighter) + { + var wnd = popup('', '_blank', 500, 250, 'scrollbars=0'), + doc = wnd.document + ; + + doc.write(sh.config.strings.aboutDialog); + doc.close(); + wnd.focus(); + } + } + } + }, + + /** + * Finds all elements on the page which should be processes by SyntaxHighlighter. + * + * @param {Object} globalParams Optional parameters which override element's + * parameters. Only used if element is specified. + * + * @param {Object} element Optional element to highlight. If none is + * provided, all elements in the current document + * are returned which qualify. + * + * @return {Array} Returns list of <code>{ target: DOMElement, params: Object }</code> objects. + */ + findElements: function(globalParams, element) + { + var elements = element ? [element] : toArray(document.getElementsByTagName(sh.config.tagName)), + conf = sh.config, + result = [] + ; + + // support for <SCRIPT TYPE="syntaxhighlighter" /> feature + if (conf.useScriptTags) + elements = elements.concat(getSyntaxHighlighterScriptTags()); + + if (elements.length === 0) + return result; + + for (var i = 0; i < elements.length; i++) + { + var item = { + target: elements[i], + // local params take precedence over globals + params: merge(globalParams, parseParams(elements[i].className)) + }; + + if (item.params['brush'] == null) + continue; + + result.push(item); + } + + return result; + }, + + /** + * Shorthand to highlight all elements on the page that are marked as + * SyntaxHighlighter source code. + * + * @param {Object} globalParams Optional parameters which override element's + * parameters. Only used if element is specified. + * + * @param {Object} element Optional element to highlight. If none is + * provided, all elements in the current document + * are highlighted. + */ + highlight: function(globalParams, element) + { + var elements = this.findElements(globalParams, element), + propertyName = 'innerHTML', + highlighter = null, + conf = sh.config + ; + + if (elements.length === 0) + return; + + for (var i = 0; i < elements.length; i++) + { + var element = elements[i], + target = element.target, + params = element.params, + brushName = params.brush, + code + ; + + if (brushName == null) + continue; + + // Instantiate a brush + if (params['html-script'] == 'true' || sh.defaults['html-script'] == true) + { + highlighter = new sh.HtmlScript(brushName); + brushName = 'htmlscript'; + } + else + { + var brush = findBrush(brushName); + + if (brush) + highlighter = new brush(); + else + continue; + } + + code = target[propertyName]; + + // remove CDATA from <SCRIPT/> tags if it's present + if (conf.useScriptTags) + code = stripCData(code); + + // Inject title if the attribute is present + if ((target.title || '') != '') + params.title = target.title; + + params['brush'] = brushName; + highlighter.init(params); + element = highlighter.getDiv(code); + + // carry over ID + if ((target.id || '') != '') + element.id = target.id; + + target.parentNode.replaceChild(element, target); + } + }, + + /** + * Main entry point for the SyntaxHighlighter. + * @param {Object} params Optional params to apply to all highlighted elements. + */ + all: function(params) + { + attachEvent( + window, + 'load', + function() { sh.highlight(params); } + ); + } +}; // end of sh + +/** + * Checks if target DOM elements has specified CSS class. + * @param {DOMElement} target Target DOM element to check. + * @param {String} className Name of the CSS class to check for. + * @return {Boolean} Returns true if class name is present, false otherwise. + */ +function hasClass(target, className) +{ + return target.className.indexOf(className) != -1; +}; + +/** + * Adds CSS class name to the target DOM element. + * @param {DOMElement} target Target DOM element. + * @param {String} className New CSS class to add. + */ +function addClass(target, className) +{ + if (!hasClass(target, className)) + target.className += ' ' + className; +}; + +/** + * Removes CSS class name from the target DOM element. + * @param {DOMElement} target Target DOM element. + * @param {String} className CSS class to remove. + */ +function removeClass(target, className) +{ + target.className = target.className.replace(className, ''); +}; + +/** + * Converts the source to array object. Mostly used for function arguments and + * lists returned by getElementsByTagName() which aren't Array objects. + * @param {List} source Source list. + * @return {Array} Returns array. + */ +function toArray(source) +{ + var result = []; + + for (var i = 0; i < source.length; i++) + result.push(source[i]); + + return result; +}; + +/** + * Splits block of text into lines. + * @param {String} block Block of text. + * @return {Array} Returns array of lines. + */ +function splitLines(block) +{ + return block.split(/\r?\n/); +} + +/** + * Generates HTML ID for the highlighter. + * @param {String} highlighterId Highlighter ID. + * @return {String} Returns HTML ID. + */ +function getHighlighterId(id) +{ + var prefix = 'highlighter_'; + return id.indexOf(prefix) == 0 ? id : prefix + id; +}; + +/** + * Finds Highlighter instance by ID. + * @param {String} highlighterId Highlighter ID. + * @return {Highlighter} Returns instance of the highlighter. + */ +function getHighlighterById(id) +{ + return sh.vars.highlighters[getHighlighterId(id)]; +}; + +/** + * Finds highlighter's DIV container. + * @param {String} highlighterId Highlighter ID. + * @return {Element} Returns highlighter's DIV element. + */ +function getHighlighterDivById(id) +{ + return document.getElementById(getHighlighterId(id)); +}; + +/** + * Stores highlighter so that getHighlighterById() can do its thing. Each + * highlighter must call this method to preserve itself. + * @param {Highilghter} highlighter Highlighter instance. + */ +function storeHighlighter(highlighter) +{ + sh.vars.highlighters[getHighlighterId(highlighter.id)] = highlighter; +}; + +/** + * Looks for a child or parent node which has specified classname. + * Equivalent to jQuery's $(container).find(".className") + * @param {Element} target Target element. + * @param {String} search Class name or node name to look for. + * @param {Boolean} reverse If set to true, will go up the node tree instead of down. + * @return {Element} Returns found child or parent element on null. + */ +function findElement(target, search, reverse /* optional */) +{ + if (target == null) + return null; + + var nodes = reverse != true ? target.childNodes : [ target.parentNode ], + propertyToFind = { '#' : 'id', '.' : 'className' }[search.substr(0, 1)] || 'nodeName', + expectedValue, + found + ; + + expectedValue = propertyToFind != 'nodeName' + ? search.substr(1) + : search.toUpperCase() + ; + + // main return of the found node + if ((target[propertyToFind] || '').indexOf(expectedValue) != -1) + return target; + + for (var i = 0; nodes && i < nodes.length && found == null; i++) + found = findElement(nodes[i], search, reverse); + + return found; +}; + +/** + * Looks for a parent node which has specified classname. + * This is an alias to <code>findElement(container, className, true)</code>. + * @param {Element} target Target element. + * @param {String} className Class name to look for. + * @return {Element} Returns found parent element on null. + */ +function findParentElement(target, className) +{ + return findElement(target, className, true); +}; + +/** + * Finds an index of element in the array. + * @ignore + * @param {Object} searchElement + * @param {Number} fromIndex + * @return {Number} Returns index of element if found; -1 otherwise. + */ +function indexOf(array, searchElement, fromIndex) +{ + fromIndex = Math.max(fromIndex || 0, 0); + + for (var i = fromIndex; i < array.length; i++) + if(array[i] == searchElement) + return i; + + return -1; +}; + +/** + * Generates a unique element ID. + */ +function guid(prefix) +{ + return (prefix || '') + Math.round(Math.random() * 1000000).toString(); +}; + +/** + * Merges two objects. Values from obj2 override values in obj1. + * Function is NOT recursive and works only for one dimensional objects. + * @param {Object} obj1 First object. + * @param {Object} obj2 Second object. + * @return {Object} Returns combination of both objects. + */ +function merge(obj1, obj2) +{ + var result = {}, name; + + for (name in obj1) + result[name] = obj1[name]; + + for (name in obj2) + result[name] = obj2[name]; + + return result; +}; + +/** + * Attempts to convert string to boolean. + * @param {String} value Input string. + * @return {Boolean} Returns true if input was "true", false if input was "false" and value otherwise. + */ +function toBoolean(value) +{ + var result = { "true" : true, "false" : false }[value]; + return result == null ? value : result; +}; + +/** + * Opens up a centered popup window. + * @param {String} url URL to open in the window. + * @param {String} name Popup name. + * @param {int} width Popup width. + * @param {int} height Popup height. + * @param {String} options window.open() options. + * @return {Window} Returns window instance. + */ +function popup(url, name, width, height, options) +{ + var x = (screen.width - width) / 2, + y = (screen.height - height) / 2 + ; + + options += ', left=' + x + + ', top=' + y + + ', width=' + width + + ', height=' + height + ; + options = options.replace(/^,/, ''); + + var win = window.open(url, name, options); + win.focus(); + return win; +}; + +/** + * Adds event handler to the target object. + * @param {Object} obj Target object. + * @param {String} type Name of the event. + * @param {Function} func Handling function. + */ +function attachEvent(obj, type, func, scope) +{ + function handler(e) + { + e = e || window.event; + + if (!e.target) + { + e.target = e.srcElement; + e.preventDefault = function() + { + this.returnValue = false; + }; + } + + func.call(scope || window, e); + }; + + if (obj.attachEvent) + { + obj.attachEvent('on' + type, handler); + } + else + { + obj.addEventListener(type, handler, false); + } +}; + +/** + * Displays an alert. + * @param {String} str String to display. + */ +function alert(str) +{ + window.alert(sh.config.strings.alert + str); +}; + +/** + * Finds a brush by its alias. + * + * @param {String} alias Brush alias. + * @param {Boolean} showAlert Suppresses the alert if false. + * @return {Brush} Returns bursh constructor if found, null otherwise. + */ +function findBrush(alias, showAlert) +{ + var brushes = sh.vars.discoveredBrushes, + result = null + ; + + if (brushes == null) + { + brushes = {}; + + // Find all brushes + for (var brush in sh.brushes) + { + var info = sh.brushes[brush], + aliases = info.aliases + ; + + if (aliases == null) + continue; + + // keep the brush name + info.brushName = brush.toLowerCase(); + + for (var i = 0; i < aliases.length; i++) + brushes[aliases[i]] = brush; + } + + sh.vars.discoveredBrushes = brushes; + } + + result = sh.brushes[brushes[alias]]; + + if (result == null && showAlert) + alert(sh.config.strings.noBrush + alias); + + return result; +}; + +/** + * Executes a callback on each line and replaces each line with result from the callback. + * @param {Object} str Input string. + * @param {Object} callback Callback function taking one string argument and returning a string. + */ +function eachLine(str, callback) +{ + var lines = splitLines(str); + + for (var i = 0; i < lines.length; i++) + lines[i] = callback(lines[i], i); + + // include \r to enable copy-paste on windows (ie8) without getting everything on one line + return lines.join('\r\n'); +}; + +/** + * This is a special trim which only removes first and last empty lines + * and doesn't affect valid leading space on the first line. + * + * @param {String} str Input string + * @return {String} Returns string without empty first and last lines. + */ +function trimFirstAndLastLines(str) +{ + return str.replace(/^[ ]*[\n]+|[\n]*[ ]*$/g, ''); +}; + +/** + * Parses key/value pairs into hash object. + * + * Understands the following formats: + * - name: word; + * - name: [word, word]; + * - name: "string"; + * - name: 'string'; + * + * For example: + * name1: value; name2: [value, value]; name3: 'value' + * + * @param {String} str Input string. + * @return {Object} Returns deserialized object. + */ +function parseParams(str) +{ + var match, + result = {}, + arrayRegex = new XRegExp("^\\[(?<values>(.*?))\\]$"), + regex = new XRegExp( + "(?<name>[\\w-]+)" + + "\\s*:\\s*" + + "(?<value>" + + "[\\w-%#]+|" + // word + "\\[.*?\\]|" + // [] array + '".*?"|' + // "" string + "'.*?'" + // '' string + ")\\s*;?", + "g" + ) + ; + + while ((match = regex.exec(str)) != null) + { + var value = match.value + .replace(/^['"]|['"]$/g, '') // strip quotes from end of strings + ; + + // try to parse array value + if (value != null && arrayRegex.test(value)) + { + var m = arrayRegex.exec(value); + value = m.values.length > 0 ? m.values.split(/\s*,\s*/) : []; + } + + result[match.name] = value; + } + + return result; +}; + +/** + * Wraps each line of the string into <code/> tag with given style applied to it. + * + * @param {String} str Input string. + * @param {String} css Style name to apply to the string. + * @return {String} Returns input string with each line surrounded by <span/> tag. + */ +function wrapLinesWithCode(str, css) +{ + if (str == null || str.length == 0 || str == '\n') + return str; + + str = str.replace(/</g, '<'); + + // Replace two or more sequential spaces with leaving last space untouched. + str = str.replace(/ {2,}/g, function(m) + { + var spaces = ''; + + for (var i = 0; i < m.length - 1; i++) + spaces += sh.config.space; + + return spaces + ' '; + }); + + // Split each line and apply <span class="...">...</span> to them so that + // leading spaces aren't included. + if (css != null) + str = eachLine(str, function(line) + { + if (line.length == 0) + return ''; + + var spaces = ''; + + line = line.replace(/^( | )+/, function(s) + { + spaces = s; + return ''; + }); + + if (line.length == 0) + return spaces; + + return spaces + '<code class="' + css + '">' + line + '</code>'; + }); + + return str; +}; + +/** + * Pads number with zeros until it's length is the same as given length. + * + * @param {Number} number Number to pad. + * @param {Number} length Max string length with. + * @return {String} Returns a string padded with proper amount of '0'. + */ +function padNumber(number, length) +{ + var result = number.toString(); + + while (result.length < length) + result = '0' + result; + + return result; +}; + +/** + * Replaces tabs with spaces. + * + * @param {String} code Source code. + * @param {Number} tabSize Size of the tab. + * @return {String} Returns code with all tabs replaces by spaces. + */ +function processTabs(code, tabSize) +{ + var tab = ''; + + for (var i = 0; i < tabSize; i++) + tab += ' '; + + return code.replace(/\t/g, tab); +}; + +/** + * Replaces tabs with smart spaces. + * + * @param {String} code Code to fix the tabs in. + * @param {Number} tabSize Number of spaces in a column. + * @return {String} Returns code with all tabs replaces with roper amount of spaces. + */ +function processSmartTabs(code, tabSize) +{ + var lines = splitLines(code), + tab = '\t', + spaces = '' + ; + + // Create a string with 1000 spaces to copy spaces from... + // It's assumed that there would be no indentation longer than that. + for (var i = 0; i < 50; i++) + spaces += ' '; // 20 spaces * 50 + + // This function inserts specified amount of spaces in the string + // where a tab is while removing that given tab. + function insertSpaces(line, pos, count) + { + return line.substr(0, pos) + + spaces.substr(0, count) + + line.substr(pos + 1, line.length) // pos + 1 will get rid of the tab + ; + }; + + // Go through all the lines and do the 'smart tabs' magic. + code = eachLine(code, function(line) + { + if (line.indexOf(tab) == -1) + return line; + + var pos = 0; + + while ((pos = line.indexOf(tab)) != -1) + { + // This is pretty much all there is to the 'smart tabs' logic. + // Based on the position within the line and size of a tab, + // calculate the amount of spaces we need to insert. + var spaces = tabSize - pos % tabSize; + line = insertSpaces(line, pos, spaces); + } + + return line; + }); + + return code; +}; + +/** + * Performs various string fixes based on configuration. + */ +function fixInputString(str) +{ + var br = /<br\s*\/?>|<br\s*\/?>/gi; + + if (sh.config.bloggerMode == true) + str = str.replace(br, '\n'); + + if (sh.config.stripBrs == true) + str = str.replace(br, ''); + + return str; +}; + +/** + * Removes all white space at the begining and end of a string. + * + * @param {String} str String to trim. + * @return {String} Returns string without leading and following white space characters. + */ +function trim(str) +{ + return str.replace(/^\s+|\s+$/g, ''); +}; + +/** + * Unindents a block of text by the lowest common indent amount. + * @param {String} str Text to unindent. + * @return {String} Returns unindented text block. + */ +function unindent(str) +{ + var lines = splitLines(fixInputString(str)), + indents = new Array(), + regex = /^\s*/, + min = 1000 + ; + + // go through every line and check for common number of indents + for (var i = 0; i < lines.length && min > 0; i++) + { + var line = lines[i]; + + if (trim(line).length == 0) + continue; + + var matches = regex.exec(line); + + // In the event that just one line doesn't have leading white space + // we can't unindent anything, so bail completely. + if (matches == null) + return str; + + min = Math.min(matches[0].length, min); + } + + // trim minimum common number of white space from the begining of every line + if (min > 0) + for (var i = 0; i < lines.length; i++) + lines[i] = lines[i].substr(min); + + return lines.join('\n'); +}; + +/** + * Callback method for Array.sort() which sorts matches by + * index position and then by length. + * + * @param {Match} m1 Left object. + * @param {Match} m2 Right object. + * @return {Number} Returns -1, 0 or -1 as a comparison result. + */ +function matchesSortCallback(m1, m2) +{ + // sort matches by index first + if(m1.index < m2.index) + return -1; + else if(m1.index > m2.index) + return 1; + else + { + // if index is the same, sort by length + if(m1.length < m2.length) + return -1; + else if(m1.length > m2.length) + return 1; + } + + return 0; +}; + +/** + * Executes given regular expression on provided code and returns all + * matches that are found. + * + * @param {String} code Code to execute regular expression on. + * @param {Object} regex Regular expression item info from <code>regexList</code> collection. + * @return {Array} Returns a list of Match objects. + */ +function getMatches(code, regexInfo) +{ + function defaultAdd(match, regexInfo) + { + return match[0]; + }; + + var index = 0, + match = null, + matches = [], + func = regexInfo.func ? regexInfo.func : defaultAdd + ; + + while((match = regexInfo.regex.exec(code)) != null) + { + var resultMatch = func(match, regexInfo); + + if (typeof(resultMatch) == 'string') + resultMatch = [new sh.Match(resultMatch, match.index, regexInfo.css)]; + + matches = matches.concat(resultMatch); + } + + return matches; +}; + +/** + * Turns all URLs in the code into <a/> tags. + * @param {String} code Input code. + * @return {String} Returns code with </a> tags. + */ +function processUrls(code) +{ + var gt = /(.*)((>|<).*)/; + + return code.replace(sh.regexLib.url, function(m) + { + var suffix = '', + match = null + ; + + // We include < and > in the URL for the common cases like <http://google.com> + // The problem is that they get transformed into <http://google.com> + // Where as > easily looks like part of the URL string. + + if (match = gt.exec(m)) + { + m = match[1]; + suffix = match[2]; + } + + return '<a href="' + m + '">' + m + '</a>' + suffix; + }); +}; + +/** + * Finds all <SCRIPT TYPE="syntaxhighlighter" /> elementss. + * @return {Array} Returns array of all found SyntaxHighlighter tags. + */ +function getSyntaxHighlighterScriptTags() +{ + var tags = document.getElementsByTagName('script'), + result = [] + ; + + for (var i = 0; i < tags.length; i++) + if (tags[i].type == 'syntaxhighlighter') + result.push(tags[i]); + + return result; +}; + +/** + * Strips <![CDATA[]]> from <SCRIPT /> content because it should be used + * there in most cases for XHTML compliance. + * @param {String} original Input code. + * @return {String} Returns code without leading <![CDATA[]]> tags. + */ +function stripCData(original) +{ + var left = '<![CDATA[', + right = ']]>', + // for some reason IE inserts some leading blanks here + copy = trim(original), + changed = false, + leftLength = left.length, + rightLength = right.length + ; + + if (copy.indexOf(left) == 0) + { + copy = copy.substring(leftLength); + changed = true; + } + + var copyLength = copy.length; + + if (copy.indexOf(right) == copyLength - rightLength) + { + copy = copy.substring(0, copyLength - rightLength); + changed = true; + } + + return changed ? copy : original; +}; + + +/** + * Quick code mouse double click handler. + */ +function quickCodeHandler(e) +{ + var target = e.target, + highlighterDiv = findParentElement(target, '.syntaxhighlighter'), + container = findParentElement(target, '.container'), + textarea = document.createElement('textarea'), + highlighter + ; + + if (!container || !highlighterDiv || findElement(container, 'textarea')) + return; + + highlighter = getHighlighterById(highlighterDiv.id); + + // add source class name + addClass(highlighterDiv, 'source'); + + // Have to go over each line and grab it's text, can't just do it on the + // container because Firefox loses all \n where as Webkit doesn't. + var lines = container.childNodes, + code = [] + ; + + for (var i = 0; i < lines.length; i++) + code.push(lines[i].innerText || lines[i].textContent); + + // using \r instead of \r or \r\n makes this work equally well on IE, FF and Webkit + code = code.join('\r'); + + // For Webkit browsers, replace nbsp with a breaking space + code = code.replace(/\u00a0/g, " "); + + // inject <textarea/> tag + textarea.appendChild(document.createTextNode(code)); + container.appendChild(textarea); + + // preselect all text + textarea.focus(); + textarea.select(); + + // set up handler for lost focus + attachEvent(textarea, 'blur', function(e) + { + textarea.parentNode.removeChild(textarea); + removeClass(highlighterDiv, 'source'); + }); +}; + +/** + * Match object. + */ +sh.Match = function(value, index, css) +{ + this.value = value; + this.index = index; + this.length = value.length; + this.css = css; + this.brushName = null; +}; + +sh.Match.prototype.toString = function() +{ + return this.value; +}; + +/** + * Simulates HTML code with a scripting language embedded. + * + * @param {String} scriptBrushName Brush name of the scripting language. + */ +sh.HtmlScript = function(scriptBrushName) +{ + var brushClass = findBrush(scriptBrushName), + scriptBrush, + xmlBrush = new sh.brushes.Xml(), + bracketsRegex = null, + ref = this, + methodsToExpose = 'getDiv getHtml init'.split(' ') + ; + + if (brushClass == null) + return; + + scriptBrush = new brushClass(); + + for(var i = 0; i < methodsToExpose.length; i++) + // make a closure so we don't lose the name after i changes + (function() { + var name = methodsToExpose[i]; + + ref[name] = function() + { + return xmlBrush[name].apply(xmlBrush, arguments); + }; + })(); + + if (scriptBrush.htmlScript == null) + { + alert(sh.config.strings.brushNotHtmlScript + scriptBrushName); + return; + } + + xmlBrush.regexList.push( + { regex: scriptBrush.htmlScript.code, func: process } + ); + + function offsetMatches(matches, offset) + { + for (var j = 0; j < matches.length; j++) + matches[j].index += offset; + } + + function process(match, info) + { + var code = match.code, + matches = [], + regexList = scriptBrush.regexList, + offset = match.index + match.left.length, + htmlScript = scriptBrush.htmlScript, + result + ; + + // add all matches from the code + for (var i = 0; i < regexList.length; i++) + { + result = getMatches(code, regexList[i]); + offsetMatches(result, offset); + matches = matches.concat(result); + } + + // add left script bracket + if (htmlScript.left != null && match.left != null) + { + result = getMatches(match.left, htmlScript.left); + offsetMatches(result, match.index); + matches = matches.concat(result); + } + + // add right script bracket + if (htmlScript.right != null && match.right != null) + { + result = getMatches(match.right, htmlScript.right); + offsetMatches(result, match.index + match[0].lastIndexOf(match.right)); + matches = matches.concat(result); + } + + for (var j = 0; j < matches.length; j++) + matches[j].brushName = brushClass.brushName; + + return matches; + } +}; + +/** + * Main Highlither class. + * @constructor + */ +sh.Highlighter = function() +{ + // not putting any code in here because of the prototype inheritance +}; + +sh.Highlighter.prototype = { + /** + * Returns value of the parameter passed to the highlighter. + * @param {String} name Name of the parameter. + * @param {Object} defaultValue Default value. + * @return {Object} Returns found value or default value otherwise. + */ + getParam: function(name, defaultValue) + { + var result = this.params[name]; + return toBoolean(result == null ? defaultValue : result); + }, + + /** + * Shortcut to document.createElement(). + * @param {String} name Name of the element to create (DIV, A, etc). + * @return {HTMLElement} Returns new HTML element. + */ + create: function(name) + { + return document.createElement(name); + }, + + /** + * Applies all regular expression to the code and stores all found + * matches in the `this.matches` array. + * @param {Array} regexList List of regular expressions. + * @param {String} code Source code. + * @return {Array} Returns list of matches. + */ + findMatches: function(regexList, code) + { + var result = []; + + if (regexList != null) + for (var i = 0; i < regexList.length; i++) + // BUG: length returns len+1 for array if methods added to prototype chain (oising@gmail.com) + if (typeof (regexList[i]) == "object") + result = result.concat(getMatches(code, regexList[i])); + + // sort and remove nested the matches + return this.removeNestedMatches(result.sort(matchesSortCallback)); + }, + + /** + * Checks to see if any of the matches are inside of other matches. + * This process would get rid of highligted strings inside comments, + * keywords inside strings and so on. + */ + removeNestedMatches: function(matches) + { + // Optimized by Jose Prado (http://joseprado.com) + for (var i = 0; i < matches.length; i++) + { + if (matches[i] === null) + continue; + + var itemI = matches[i], + itemIEndPos = itemI.index + itemI.length + ; + + for (var j = i + 1; j < matches.length && matches[i] !== null; j++) + { + var itemJ = matches[j]; + + if (itemJ === null) + continue; + else if (itemJ.index > itemIEndPos) + break; + else if (itemJ.index == itemI.index && itemJ.length > itemI.length) + matches[i] = null; + else if (itemJ.index >= itemI.index && itemJ.index < itemIEndPos) + matches[j] = null; + } + } + + return matches; + }, + + /** + * Creates an array containing integer line numbers starting from the 'first-line' param. + * @return {Array} Returns array of integers. + */ + figureOutLineNumbers: function(code) + { + var lines = [], + firstLine = parseInt(this.getParam('first-line')) + ; + + eachLine(code, function(line, index) + { + lines.push(index + firstLine); + }); + + return lines; + }, + + /** + * Determines if specified line number is in the highlighted list. + */ + isLineHighlighted: function(lineNumber) + { + var list = this.getParam('highlight', []); + + if (typeof(list) != 'object' && list.push == null) + list = [ list ]; + + return indexOf(list, lineNumber.toString()) != -1; + }, + + /** + * Generates HTML markup for a single line of code while determining alternating line style. + * @param {Integer} lineNumber Line number. + * @param {String} code Line HTML markup. + * @return {String} Returns HTML markup. + */ + getLineHtml: function(lineIndex, lineNumber, code) + { + var classes = [ + 'line', + 'number' + lineNumber, + 'index' + lineIndex, + 'alt' + (lineNumber % 2 == 0 ? 1 : 2).toString() + ]; + + if (this.isLineHighlighted(lineNumber)) + classes.push('highlighted'); + + if (lineNumber == 0) + classes.push('break'); + + return '<div class="' + classes.join(' ') + '">' + code + '</div>'; + }, + + /** + * Generates HTML markup for line number column. + * @param {String} code Complete code HTML markup. + * @param {Array} lineNumbers Calculated line numbers. + * @return {String} Returns HTML markup. + */ + getLineNumbersHtml: function(code, lineNumbers) + { + var html = '', + count = splitLines(code).length, + firstLine = parseInt(this.getParam('first-line')), + pad = this.getParam('pad-line-numbers') + ; + + if (pad == true) + pad = (firstLine + count - 1).toString().length; + else if (isNaN(pad) == true) + pad = 0; + + for (var i = 0; i < count; i++) + { + var lineNumber = lineNumbers ? lineNumbers[i] : firstLine + i, + code = lineNumber == 0 ? sh.config.space : padNumber(lineNumber, pad) + ; + + html += this.getLineHtml(i, lineNumber, code); + } + + return html; + }, + + /** + * Splits block of text into individual DIV lines. + * @param {String} code Code to highlight. + * @param {Array} lineNumbers Calculated line numbers. + * @return {String} Returns highlighted code in HTML form. + */ + getCodeLinesHtml: function(html, lineNumbers) + { + html = trim(html); + + var lines = splitLines(html), + padLength = this.getParam('pad-line-numbers'), + firstLine = parseInt(this.getParam('first-line')), + html = '', + brushName = this.getParam('brush') + ; + + for (var i = 0; i < lines.length; i++) + { + var line = lines[i], + indent = /^( |\s)+/.exec(line), + spaces = null, + lineNumber = lineNumbers ? lineNumbers[i] : firstLine + i; + ; + + if (indent != null) + { + spaces = indent[0].toString(); + line = line.substr(spaces.length); + spaces = spaces.replace(' ', sh.config.space); + } + + line = trim(line); + + if (line.length == 0) + line = sh.config.space; + + html += this.getLineHtml( + i, + lineNumber, + (spaces != null ? '<code class="' + brushName + ' spaces">' + spaces + '</code>' : '') + line + ); + } + + return html; + }, + + /** + * Returns HTML for the table title or empty string if title is null. + */ + getTitleHtml: function(title) + { + return title ? '<caption>' + title + '</caption>' : ''; + }, + + /** + * Finds all matches in the source code. + * @param {String} code Source code to process matches in. + * @param {Array} matches Discovered regex matches. + * @return {String} Returns formatted HTML with processed mathes. + */ + getMatchesHtml: function(code, matches) + { + var pos = 0, + result = '', + brushName = this.getParam('brush', '') + ; + + function getBrushNameCss(match) + { + var result = match ? (match.brushName || brushName) : brushName; + return result ? result + ' ' : ''; + }; + + // Finally, go through the final list of matches and pull the all + // together adding everything in between that isn't a match. + for (var i = 0; i < matches.length; i++) + { + var match = matches[i], + matchBrushName + ; + + if (match === null || match.length === 0) + continue; + + matchBrushName = getBrushNameCss(match); + + result += wrapLinesWithCode(code.substr(pos, match.index - pos), matchBrushName + 'plain') + + wrapLinesWithCode(match.value, matchBrushName + match.css) + ; + + pos = match.index + match.length + (match.offset || 0); + } + + // don't forget to add whatever's remaining in the string + result += wrapLinesWithCode(code.substr(pos), getBrushNameCss() + 'plain'); + + return result; + }, + + /** + * Generates HTML markup for the whole syntax highlighter. + * @param {String} code Source code. + * @return {String} Returns HTML markup. + */ + getHtml: function(code) + { + var html = '', + classes = [ 'syntaxhighlighter' ], + tabSize, + matches, + lineNumbers + ; + + // process light mode + if (this.getParam('light') == true) + this.params.toolbar = this.params.gutter = false; + + className = 'syntaxhighlighter'; + + if (this.getParam('collapse') == true) + classes.push('collapsed'); + + if ((gutter = this.getParam('gutter')) == false) + classes.push('nogutter'); + + // add custom user style name + classes.push(this.getParam('class-name')); + + // add brush alias to the class name for custom CSS + classes.push(this.getParam('brush')); + + code = trimFirstAndLastLines(code) + .replace(/\r/g, ' ') // IE lets these buggers through + ; + + tabSize = this.getParam('tab-size'); + + // replace tabs with spaces + code = this.getParam('smart-tabs') == true + ? processSmartTabs(code, tabSize) + : processTabs(code, tabSize) + ; + + // unindent code by the common indentation + if (this.getParam('unindent')) + code = unindent(code); + + if (gutter) + lineNumbers = this.figureOutLineNumbers(code); + + // find matches in the code using brushes regex list + matches = this.findMatches(this.regexList, code); + // processes found matches into the html + html = this.getMatchesHtml(code, matches); + // finally, split all lines so that they wrap well + html = this.getCodeLinesHtml(html, lineNumbers); + + // finally, process the links + if (this.getParam('auto-links')) + html = processUrls(html); + + if (typeof(navigator) != 'undefined' && navigator.userAgent && navigator.userAgent.match(/MSIE/)) + classes.push('ie'); + + html = + '<div id="' + getHighlighterId(this.id) + '" class="' + classes.join(' ') + '">' + + (this.getParam('toolbar') ? sh.toolbar.getHtml(this) : '') + + '<table border="0" cellpadding="0" cellspacing="0">' + + this.getTitleHtml(this.getParam('title')) + + '<tbody>' + + '<tr>' + + (gutter ? '<td class="gutter">' + this.getLineNumbersHtml(code) + '</td>' : '') + + '<td class="code">' + + '<div class="container">' + + html + + '</div>' + + '</td>' + + '</tr>' + + '</tbody>' + + '</table>' + + '</div>' + ; + + return html; + }, + + /** + * Highlights the code and returns complete HTML. + * @param {String} code Code to highlight. + * @return {Element} Returns container DIV element with all markup. + */ + getDiv: function(code) + { + if (code === null) + code = ''; + + this.code = code; + + var div = this.create('div'); + + // create main HTML + div.innerHTML = this.getHtml(code); + + // set up click handlers + if (this.getParam('toolbar')) + attachEvent(findElement(div, '.toolbar'), 'click', sh.toolbar.handler); + + if (this.getParam('quick-code')) + attachEvent(findElement(div, '.code'), 'dblclick', quickCodeHandler); + + return div; + }, + + /** + * Initializes the highlighter/brush. + * + * Constructor isn't used for initialization so that nothing executes during necessary + * `new SyntaxHighlighter.Highlighter()` call when setting up brush inheritence. + * + * @param {Hash} params Highlighter parameters. + */ + init: function(params) + { + this.id = guid(); + + // register this instance in the highlighters list + storeHighlighter(this); + + // local params take precedence over defaults + this.params = merge(sh.defaults, params || {}) + + // process light mode + if (this.getParam('light') == true) + this.params.toolbar = this.params.gutter = false; + }, + + /** + * Converts space separated list of keywords into a regular expression string. + * @param {String} str Space separated keywords. + * @return {String} Returns regular expression string. + */ + getKeywords: function(str) + { + str = str + .replace(/^\s+|\s+$/g, '') + .replace(/\s+/g, '|') + ; + + return '\\b(?:' + str + ')\\b'; + }, + + /** + * Makes a brush compatible with the `html-script` functionality. + * @param {Object} regexGroup Object containing `left` and `right` regular expressions. + */ + forHtmlScript: function(regexGroup) + { + var regex = { 'end' : regexGroup.right.source }; + + if(regexGroup.eof) + regex.end = "(?:(?:" + regex.end + ")|$)"; + + this.htmlScript = { + left : { regex: regexGroup.left, css: 'script' }, + right : { regex: regexGroup.right, css: 'script' }, + code : new XRegExp( + "(?<left>" + regexGroup.left.source + ")" + + "(?<code>.*?)" + + "(?<right>" + regex.end + ")", + "sgi" + ) + }; + } +}; // end of Highlighter + +return sh; +}(); // end of anonymous function + +// CommonJS +typeof(exports) != 'undefined' ? exports.SyntaxHighlighter = SyntaxHighlighter : null;/** + * SyntaxHighlighter + * http://alexgorbatchev.com/SyntaxHighlighter + * + * SyntaxHighlighter is donationware. If you are using it, please donate. + * http://alexgorbatchev.com/SyntaxHighlighter/donate.html + * + * @version + * 3.0.83 (July 02 2010) + * + * @copyright + * Copyright (C) 2004-2010 Alex Gorbatchev. + * + * @license + * Dual licensed under the MIT and GPL licenses. + */ +;(function() +{ + // CommonJS + typeof(require) != 'undefined' ? SyntaxHighlighter = require('shCore').SyntaxHighlighter : null; + + function Brush() + { + var keywords = 'break case catch continue ' + + 'default delete do else false ' + + 'for function if in instanceof ' + + 'new null return super switch ' + + 'this throw true try typeof var while with' + ; + + var datatablesAPI = + 'fnSettings fnDraw fnFilter fnSort fnAddData fnDeleteRow fnClearTable fnGetData '+ + 'fnGetPosition fnGetNodes fnOpen fnClose fnUpdate fnSetColumnVis fnVersionCheck '+ + 'fnPageChange fnSortListener fnDestroy fnAdjustColumnSizing'; + + var r = SyntaxHighlighter.regexLib; + + this.regexList = [ + { regex: r.multiLineDoubleQuotedString, css: 'string' }, // double quoted strings + { regex: r.multiLineSingleQuotedString, css: 'string' }, // single quoted strings + { regex: r.singleLineCComments, css: 'comments' }, // one line comments + { regex: r.multiLineCComments, css: 'comments' }, // multiline comments + { regex: /\s*#.*/gm, css: 'preprocessor' }, // preprocessor tags like #region and #endregion + { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' }, // keywords + { regex: new RegExp(this.getKeywords(datatablesAPI), 'gm'), css: 'dtapi' } // DataTables API methods + ]; + + this.forHtmlScript(r.scriptScriptTags); + }; + + Brush.prototype = new SyntaxHighlighter.Highlighter(); + Brush.aliases = ['js', 'jscript', 'javascript']; + + SyntaxHighlighter.brushes.JScript = Brush; + + // CommonJS + typeof(exports) != 'undefined' ? exports.Brush = Brush : null; +})(); + +/* + http://www.JSON.org/json2.js + 2011-02-23 + Public Domain. +*/ +var JSON;JSON||(JSON={}); +(function(){function k(a){return a<10?"0"+a:a}function o(a){p.lastIndex=0;return p.test(a)?'"'+a.replace(p,function(a){var c=r[a];return typeof c==="string"?c:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+a+'"'}function l(a,j){var c,d,h,m,g=e,f,b=j[a];b&&typeof b==="object"&&typeof b.toJSON==="function"&&(b=b.toJSON(a));typeof i==="function"&&(b=i.call(j,a,b));switch(typeof b){case "string":return o(b);case "number":return isFinite(b)?String(b):"null";case "boolean":case "null":return String(b);case "object":if(!b)return"null"; +e+=n;f=[];if(Object.prototype.toString.apply(b)==="[object Array]"){m=b.length;for(c=0;c<m;c+=1)f[c]=l(c,b)||"null";h=f.length===0?"[]":e?"[\n"+e+f.join(",\n"+e)+"\n"+g+"]":"["+f.join(",")+"]";e=g;return h}if(i&&typeof i==="object"){m=i.length;for(c=0;c<m;c+=1)typeof i[c]==="string"&&(d=i[c],(h=l(d,b))&&f.push(o(d)+(e?": ":":")+h))}else for(d in b)Object.prototype.hasOwnProperty.call(b,d)&&(h=l(d,b))&&f.push(o(d)+(e?": ":":")+h);h=f.length===0?"{}":e?"{\n"+e+f.join(",\n"+e)+"\n"+g+"}":"{"+f.join(",")+ +"}";e=g;return h}}if(typeof Date.prototype.toJSON!=="function")Date.prototype.toJSON=function(){return isFinite(this.valueOf())?this.getUTCFullYear()+"-"+k(this.getUTCMonth()+1)+"-"+k(this.getUTCDate())+"T"+k(this.getUTCHours())+":"+k(this.getUTCMinutes())+":"+k(this.getUTCSeconds())+"Z":null},String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(){return this.valueOf()};var q=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, +p=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,e,n,r={"\u0008":"\\b","\t":"\\t","\n":"\\n","\u000c":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},i;if(typeof JSON.stringify!=="function")JSON.stringify=function(a,j,c){var d;n=e="";if(typeof c==="number")for(d=0;d<c;d+=1)n+=" ";else typeof c==="string"&&(n=c);if((i=j)&&typeof j!=="function"&&(typeof j!=="object"||typeof j.length!=="number"))throw Error("JSON.stringify");return l("", +{"":a})};if(typeof JSON.parse!=="function")JSON.parse=function(a,e){function c(a,d){var g,f,b=a[d];if(b&&typeof b==="object")for(g in b)Object.prototype.hasOwnProperty.call(b,g)&&(f=c(b,g),f!==void 0?b[g]=f:delete b[g]);return e.call(a,d,b)}var d,a=String(a);q.lastIndex=0;q.test(a)&&(a=a.replace(q,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)}));if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, +"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return d=eval("("+a+")"),typeof e==="function"?c({"":d},""):d;throw new SyntaxError("JSON.parse");}})(); + + +/* Self initialise */ +SyntaxHighlighter.all(); + +$(window).load( function() { +var dtOptions = [ +'fnSettings', +'fnDraw', +'fnFilter', +'fnSort', +'fnAddData', +'fnDeleteRow', +'fnClearTable', +'fnGetData', +'fnGetPosition', +'fnGetNodes', +'fnOpen', +'fnClose', +'fnUpdate', +'fnSetColumnVis', +'fnVersionCheck', +'fnPageChange', +'fnSortListener', +'fnDestroy', +'fnAdjustColumnSizing', +'bPaginate', +'bLengthChange', +'bFilter', +'bSort', +'bInfo', +'bProcessing', +'bAutoWidth', +'bSortClasses', +'bStateSave', +'fnRowCallback', +'fnDrawCallback', +'fnHeaderCallback', +'fnFooterCallback', +'fnInitComplete', +'fnServerParams', +'iDisplayLength', +'aaSorting', +'sPaginationType', +'sDom', +'sAjaxSource', +'iCookieDuration', +'asStripClasses', +'bVisible', +'bSearchable', +'bSortable', +'sTitle', +'sWidth', +'sClass', +'fnRender', +'sType', +'iDataSort', +'bUseRendered', +'bServerSide', +'sAjaxSource', +'fnServerData', +'aaSortingFixed', +'oSearch', +'aoSearchCols', +'sName', +'bJQueryUI', +'iDisplayStart', +'asSorting', +'sSortDataType', +'fnServerData', +'sScrollX', +'sScrollY', +'bScrollCollapse', +'sScrollXInner', +'sCookiePrefix', +'aLengthMenu', +'fnFormatNumber', +'bRetrieve', +'bDestroy', +'aTargets', +'fnCookieCallback', +'fnInfoCallback', +'bScrollInfinite', +'iScrollLoadGap', +'fnStateLoadCallback', +'fnStateSaveCallback', +'bDeferRender', +'mDataProp', +'iDeferLoading', +'bSortCellsTop', +'sDefaultContent', +'fnPreDrawCallback', +'sAjaxDataProp', +'aaData', +'sLoadingRecords', +'sProcessing', +'sLengthMenu', +'sZeroRecords', +'sInfo', +'sInfoEmpty', +'sInfoFiltered', +'sInfoPostFix', +'sSearch', +'sUrl', +'sFirst', +'sPrevious', +'sNext', +'sLast', +'sEmptyTable', +'sInfoThousands', +'oLanguage', +'oPaginate' +]; + +var dtLinks = [ +'fnSettings', +'fnDraw', +'fnFilter', +'fnSort', +'fnAddData', +'fnDeleteRow', +'fnClearTable', +'fnGetData', +'fnGetPosition', +'fnGetNodes', +'fnOpen', +'fnClose', +'fnUpdate', +'fnSetColumnVis', +'fnVersionCheck', +'fnPageChange', +'fnSortListener', +'fnDestroy', +'fnAdjustColumnSizing', +'bPaginate', +'bLengthChange', +'bFilter', +'bSort', +'bInfo', +'bProcessing', +'bAutoWidth', +'bSortClasses', +'bStateSave', +'fnRowCallback', +'fnDrawCallback', +'fnHeaderCallback', +'fnFooterCallback', +'fnInitComplete', +'fnServerParams', +'iDisplayLength', +'aaSorting', +'sPaginationType', +'sDom', +'sAjaxSource', +'iCookieDuration', +'asStripClasses', +'bVisible', +'bSearchable', +'bSortable', +'sTitle', +'sWidth', +'sClass', +'fnRender', +'sType', +'iDataSort', +'bUseRendered', +'bServerSide', +'sAjaxSource', +'fnServerData', +'aaSortingFixed', +'oSearch', +'aoSearchCols', +'sName', +'bJQueryUI', +'iDisplayStart', +'asSorting', +'sSortDataType', +'fnServerData', +'sScrollX', +'sScrollY', +'bScrollCollapse', +'sScrollXInner', +'sCookiePrefix', +'aLengthMenu', +'fnFormatNumber', +'bRetrieve', +'bDestroy', +'aTargets', +'fnCookieCallback', +'fnInfoCallback', +'bScrollInfinite', +'iScrollLoadGap', +'fnStateLoadCallback', +'fnStateSaveCallback', +'bDeferRender', +'mDataProp', +'iDeferLoading', +'bSortCellsTop', +'sDefaultContent', +'fnPreDrawCallback', +'sAjaxDataProp', +'aaData', +'oLanguage.sLoadingRecords', +'oLanguage.sProcessing', +'oLanguage.sLengthMenu', +'oLanguage.sZeroRecords', +'oLanguage.sInfo', +'oLanguage.sInfoEmpty', +'oLanguage.sInfoFiltered', +'oLanguage.sInfoPostFix', +'oLanguage.sSearch', +'oLanguage.sUrl', +'oLanguage.oPaginate.sFirst', +'oLanguage.oPaginate.sPrevious', +'oLanguage.oPaginate.sNext', +'oLanguage.oPaginate.sLast', +'oLanguage.sEmptyTable', +'oLanguage.sInfoThousands', +'oLanguage', +'oPaginate' +]; + + /* Add a class to all the strings which are DataTables init options or API methods */ + var dtList = '"'+ dtOptions.join( '" "' ) +'"'; + $('code.string').each( function () { + if ( dtList.indexOf( this.innerHTML ) !== -1 ) { + $(this).addClass( 'datatables_ref' ); + } + } ); + + $('code.dtapi').each( function () { + if ( dtList.indexOf( this.innerHTML ) !== -1 ) { + $(this).addClass( 'datatables_ref' ); + } + } ); + + /* Click handler to redirect to the documentation */ + $('code.datatables_ref').live('click', function () { + var i = $.inArray( this.innerHTML.replace(/"/g,''), dtOptions ); + if ( i !== -1 ) { + window.location.href = "http://datatables.net/ref#"+dtLinks[i]; + } + } ); +} ); + +/* Show and syntax highlight XHR returns from the server */ +$(document).ready( function () { + if ( $.fn.dataTableSettings.length >= 1 ) { + $('#example').dataTable().bind('xhr', function ( e, oSettings ) { + var n = document.getElementById('latest_xhr'); + n.innerHTML = JSON.stringify( + JSON.parse(oSettings.jqXHR.responseText), null, 2 + ); + n.className = "brush: js;" + SyntaxHighlighter.highlight({}, n); + } ); + } +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/syntax/license/Syntax Highlighter b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/syntax/license/Syntax Highlighter new file mode 100644 index 0000000..e7c70ba --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/syntax/license/Syntax Highlighter @@ -0,0 +1,20 @@ +Copyright (c) 2003, 2004 Jim Weirich + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png new file mode 100755 index 0000000000000000000000000000000000000000..5b5dab2ab7b1c50dea9cfe73dc5a269a92d2d4b4 GIT binary patch literal 180 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F!3HG1q!d*FscKIb$B>N1x91EQ4=4yQ7#`R^ z$vje}<irI&an_s0pV!D+$FtuP31JO&3=I&aE+u|=5A)Hv$*VMh&S3C#^>bP0l+XkK DSH>_4 literal 0 HcmV?d00001 diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/smoothness/images/ui-bg_flat_75_ffffff_40x100.png b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/smoothness/images/ui-bg_flat_75_ffffff_40x100.png new file mode 100755 index 0000000000000000000000000000000000000000..ac8b229af950c29356abf64a6c4aa894575445f0 GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F!3HG1q!d*FsY*{5$B>N1x91EQ4=4yQYz+E8 zPo9&<{J;c_6SHRil>2s{Zw^OT)6@jj2u|u!(plXsM>LJD`vD!n;OXk;vd$@?2>^GI BH@yG= literal 0 HcmV?d00001 diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png new file mode 100755 index 0000000000000000000000000000000000000000..ad3d6346e00f246102f72f2e026ed0491988b394 GIT binary patch literal 120 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnour0hLi978O6-<~(*I$*%ybaDOn z{W;e!B}_MSUQoPXhYd^Y6RUoS1yepnPx`2Kz)7OXQG!!=-jY=F+d2OOy?#DnJ32>z UEim$g7SJdLPgg&ebxsLQ09~*s;{X5v literal 0 HcmV?d00001 diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/smoothness/images/ui-bg_glass_65_ffffff_1x400.png b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/smoothness/images/ui-bg_glass_65_ffffff_1x400.png new file mode 100755 index 0000000000000000000000000000000000000000..42ccba269b6e91bef12ad0fa18be651b5ef0ee68 GIT binary patch literal 105 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnouqzpV=978O6-=0?FV^9z|eBtf= z|7WztIJ;WT>{+tN>ySr~=F{k$>;_x^_y?afmf9pRKH0)6?eSP?3s5hEr>mdKI;Vst E0O<Z9>;M1& literal 0 HcmV?d00001 diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/smoothness/images/ui-bg_glass_75_dadada_1x400.png b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/smoothness/images/ui-bg_glass_75_dadada_1x400.png new file mode 100755 index 0000000000000000000000000000000000000000..5a46b47cb16631068aee9e0bd61269fc4e95e5cd GIT binary patch literal 111 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnouq|7{B978O6lPf+wIa#m9#>Unb zm^4K~wN3Zq+uP<E-4iDYHYX${Ii)G?xY5!0{fvg8SC7yQ4u<2&oOc%dd<Zm-fx*+& K&t;ucLK6Ud-y?JY literal 0 HcmV?d00001 diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png new file mode 100755 index 0000000000000000000000000000000000000000..86c2baa655eac8539db34f8d9adb69ec1226201c GIT binary patch literal 110 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnouq)a_s978O6-<~$)Vo(rZKDhVK z|J9WTLT^QIG;Q^ml{ow8HvtEZhta#LLqp$|vO7%bGjI7IBizcw`SFI!bT^;@44$rj JF6*2UngEbSBdP!Z literal 0 HcmV?d00001 diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png new file mode 100755 index 0000000000000000000000000000000000000000..4443fdc1a156babad4336f004eaf5ca5dfa0f9ab GIT binary patch literal 119 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnour0hIh978O6-<~(*YA|4MzBvER z|7}eQtdCVXoUc2b{PaWeaIKu7gJx>{vDV26o)#~38k_!`W=^oo1w6ixmPC4R1b Tyd6G3lNdZ*{an^LB{Ts5`idse literal 0 HcmV?d00001 diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png new file mode 100755 index 0000000000000000000000000000000000000000..7c9fa6c6edcfcdd3e5b77e6f547b719e6fc66e30 GIT binary patch literal 101 zcmeAS@N?(olHy`uVBq!ia0vp^j6j^i!3HGVb)pi0l#Zv1V~E7m<ccpZF4n8Dv9Yx& zy8QY7U*2m$;l+;n|NjK_PainIAnKgVYt6(keT9{lbLSy{pgsmqS3j3^P6<r_2PGZu literal 0 HcmV?d00001 diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/smoothness/images/ui-icons_222222_256x240.png b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/smoothness/images/ui-icons_222222_256x240.png new file mode 100755 index 0000000000000000000000000000000000000000..ee039dc096a38a3753f92519546eee94bcfbeffa GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/smoothness/images/ui-icons_2e83ff_256x240.png b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/smoothness/images/ui-icons_2e83ff_256x240.png new file mode 100755 index 0000000000000000000000000000000000000000..45e8928e5284adacea3f9ec07b9b50667d2ac65f GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/smoothness/images/ui-icons_454545_256x240.png b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/smoothness/images/ui-icons_454545_256x240.png new file mode 100755 index 0000000000000000000000000000000000000000..7ec70d11bfb2f77374dfd00ef61ba0c3647b5a0c GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/smoothness/images/ui-icons_888888_256x240.png b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/smoothness/images/ui-icons_888888_256x240.png new file mode 100755 index 0000000000000000000000000000000000000000..5ba708c39172a69e069136bd1309c4322c61f571 GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/smoothness/images/ui-icons_cd0a0a_256x240.png b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/smoothness/images/ui-icons_cd0a0a_256x240.png new file mode 100755 index 0000000000000000000000000000000000000000..7930a558099bc8d92b4264eb67a0f040460f4a4f GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/smoothness/jquery-ui-1.8.4.custom.css b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/smoothness/jquery-ui-1.8.4.custom.css new file mode 100755 index 0000000..0cb22be --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/smoothness/jquery-ui-1.8.4.custom.css @@ -0,0 +1,572 @@ +/* + * jQuery UI CSS Framework @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { display: none; } +.ui-helper-hidden-accessible { position: absolute; left: -99999999px; } +.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } +.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } +.ui-helper-clearfix { display: inline-block; } +/* required comment for clearfix to work in Opera \*/ +* html .ui-helper-clearfix { height:1%; } +.ui-helper-clearfix { display:block; } +/* end clearfix */ +.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { cursor: default !important; } + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } + + +/* + * jQuery UI CSS Framework @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + * + * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana,Arial,sans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=02_glass.png&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px + */ + + +/* Component containers +----------------------------------*/ +.ui-widget { font-family: Verdana,Arial,sans-serif; font-size: 1.1em; } +.ui-widget .ui-widget { font-size: 1em; } +.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif; font-size: 1em; } +.ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; } +.ui-widget-content a { color: #222222; } +.ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; } +.ui-widget-header a { color: #222222; } + +/* Interaction states +----------------------------------*/ +.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3; background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #555555; } +.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; text-decoration: none; } +.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999; background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; } +.ui-state-hover a, .ui-state-hover a:hover { color: #212121; text-decoration: none; } +.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; } +.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; text-decoration: none; } +.ui-widget :active { outline: none; } + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fcefa1; background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x; color: #363636; } +.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; } +.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; } +.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; } +.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; } +.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } +.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } +.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); } +.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } +.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } +.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png); } +.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); } +.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); } +.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); } +.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); } + +/* positioning */ +.ui-icon-carat-1-n { background-position: 0 0; } +.ui-icon-carat-1-ne { background-position: -16px 0; } +.ui-icon-carat-1-e { background-position: -32px 0; } +.ui-icon-carat-1-se { background-position: -48px 0; } +.ui-icon-carat-1-s { background-position: -64px 0; } +.ui-icon-carat-1-sw { background-position: -80px 0; } +.ui-icon-carat-1-w { background-position: -96px 0; } +.ui-icon-carat-1-nw { background-position: -112px 0; } +.ui-icon-carat-2-n-s { background-position: -128px 0; } +.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-off { background-position: -96px -144px; } +.ui-icon-radio-on { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; } +.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; } +.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } +.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } +.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; } +.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } +.ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } +.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } +.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; } + +/* Overlays */ +.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); } +.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/* + * jQuery UI Resizable @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Resizable#theming + */ +.ui-resizable { position: relative;} +.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;} +.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } +.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; } +.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; } +.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; } +.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; } +.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } +.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } +.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } +.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* + * jQuery UI Selectable @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Selectable#theming + */ +.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; } +/* + * jQuery UI Accordion @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Accordion#theming + */ +/* IE/Win - Fix animation bug - #4615 */ +.ui-accordion { width: 100%; } +.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; } +.ui-accordion .ui-accordion-li-fix { display: inline; } +.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } +.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; } +.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; } +.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } +.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; } +.ui-accordion .ui-accordion-content-active { display: block; }/* + * jQuery UI Autocomplete @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Autocomplete#theming + */ +.ui-autocomplete { position: absolute; cursor: default; } + +/* workarounds */ +* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */ + +/* + * jQuery UI Menu @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Menu#theming + */ +.ui-menu { + list-style:none; + padding: 2px; + margin: 0; + display:block; + float: left; +} +.ui-menu .ui-menu { + margin-top: -3px; +} +.ui-menu .ui-menu-item { + margin:0; + padding: 0; + zoom: 1; + float: left; + clear: left; + width: 100%; +} +.ui-menu .ui-menu-item a { + text-decoration:none; + display:block; + padding:.2em .4em; + line-height:1.5; + zoom:1; +} +.ui-menu .ui-menu-item a.ui-state-hover, +.ui-menu .ui-menu-item a.ui-state-active { + font-weight: normal; + margin: -1px; +} +/* + * jQuery UI Button @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Button#theming + */ +.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */ +.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */ +button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */ +.ui-button-icons-only { width: 3.4em; } +button.ui-button-icons-only { width: 3.7em; } + +/*button text element */ +.ui-button .ui-button-text { display: block; line-height: 1.4; } +.ui-button-text-only .ui-button-text { padding: .4em 1em; } +.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; } +.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; } +.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; } +.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; } +/* no icon support for input elements, provide padding by default */ +input.ui-button { padding: .4em 1em; } + +/*button icon element(s) */ +.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; } +.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; } +.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; } +.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } +.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } + +/*button sets*/ +.ui-buttonset { margin-right: 7px; } +.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; } + +/* workarounds */ +button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */ +/* + * jQuery UI Dialog @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Dialog#theming + */ +.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; } +.ui-dialog .ui-dialog-titlebar { padding: .5em 1em .3em; position: relative; } +.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .2em 0; } +.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } +.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } +.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } +.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } +.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; } +.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; } +.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } +.ui-draggable .ui-dialog-titlebar { cursor: move; } +/* + * jQuery UI Slider @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Slider#theming + */ +.ui-slider { position: relative; text-align: left; } +.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } +.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } + +.ui-slider-horizontal { height: .8em; } +.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } +.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } +.ui-slider-horizontal .ui-slider-range-min { left: 0; } +.ui-slider-horizontal .ui-slider-range-max { right: 0; } + +.ui-slider-vertical { width: .8em; height: 100px; } +.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } +.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } +.ui-slider-vertical .ui-slider-range-min { bottom: 0; } +.ui-slider-vertical .ui-slider-range-max { top: 0; }/* + * jQuery UI Tabs @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Tabs#theming + */ +.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ +.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; } +.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; } +.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; } +.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; } +.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; } +.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ +.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; } +.ui-tabs .ui-tabs-hide { display: none !important; } +/* + * jQuery UI Datepicker @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Datepicker#theming + */ +.ui-datepicker { width: 17em; padding: .2em .2em 0; } +.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } +.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } +.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } +.ui-datepicker .ui-datepicker-prev { left:2px; } +.ui-datepicker .ui-datepicker-next { right:2px; } +.ui-datepicker .ui-datepicker-prev-hover { left:1px; } +.ui-datepicker .ui-datepicker-next-hover { right:1px; } +.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } +.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } +.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } +.ui-datepicker select.ui-datepicker-month-year {width: 100%;} +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { width: 49%;} +.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } +.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } +.ui-datepicker td { border: 0; padding: 1px; } +.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } +.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } +.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { width:auto; } +.ui-datepicker-multi .ui-datepicker-group { float:left; } +.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } +.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } +.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } +.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } +.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } +.ui-datepicker-row-break { clear:both; width:100%; } + +/* RTL support */ +.ui-datepicker-rtl { direction: rtl; } +.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } +.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } +.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } +.ui-datepicker-rtl .ui-datepicker-group { float:right; } +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } + +/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ +.ui-datepicker-cover { + display: none; /*sorry for IE5*/ + display/**/: block; /*sorry for IE5*/ + position: absolute; /*must have*/ + z-index: -1; /*must have*/ + filter: mask(); /*must have*/ + top: -4px; /*must have*/ + left: -4px; /*must have*/ + width: 200px; /*must have*/ + height: 200px; /*must have*/ +}/* + * jQuery UI Progressbar @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Progressbar#theming + */ +.ui-progressbar { height:2em; text-align: left; } +.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; } \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png new file mode 100755 index 0000000000000000000000000000000000000000..954e22dbd99e8c6dd7091335599abf2d10bf8003 GIT binary patch literal 260 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEr#)R9Ln2z=UU%d=WFXS=@V?HT z#xG*`>Yvsgk=}99w^d^D^d*@m74oMo<%#FcopJf?u00-~YVKV2wzrI*_R6;UORMea zBFVSEnN~eiVA6V&z`E)YLz5Aok^D)In}Yn=OzDpgR5Wv0XfT8pOkmV{sKAJ-PO9#T zZK}IXj&Q-V!U)!LcB_3K<j6=ku*!%uXjy#leKdQ?`ZvP&RiaPVOzxQ$`O)`M(6sLS yN%J;Y?DO0<r7?ff#!c6LsA*2U`f2*?C%gsKpMo6zvorv`#o+1c=d#Wzp$Py>0&C*{ literal 0 HcmV?d00001 diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png new file mode 100755 index 0000000000000000000000000000000000000000..64ece5707d91a6edf9fad4bfcce0c4dbcafcf58d GIT binary patch literal 251 zcmV<X00jSuP)<h;3K|Lk000e1NJLTq001Ze001Zm1^@s6jQ+T70002ONkl<ZScUD^ zT?&IR7(~(AY#^)6!n1<<Vj)fQYm^M-n@5r1C}@~h2;ohZ7-N3vC*J$+J$LlEJIhL0 z?fU|%;UEDj;@||T;sBg74hkR1O4$<++XU{$LE{Z7;GhCj!9fA2go6yIhJysCh=UWT ziUV-UI2ia*&y+p!utUI|$6*(^`>bvPcjKS|RKP(6sDcCAB(_QB%0978a<$Ah$!b|E zwn;|HO0i8cQ<lay$(1s&O|n)t8rvkbvR?jjlN@>j@~)s!ajF0S002ovPDHLkV1oEp BYH0uf literal 0 HcmV?d00001 diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/ui-lightness/images/ui-bg_flat_10_000000_40x100.png b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/ui-lightness/images/ui-bg_flat_10_000000_40x100.png new file mode 100755 index 0000000000000000000000000000000000000000..abdc01082bf3534eafecc5819d28c9574d44ea89 GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F!3HG1q!d*FsY*{5$B>N1x91EQ4=4yQY-ImG zFPf9b{J;c_6SHRK%WcbN_hZpM=(Ry;4Rxv2@@2Y=$K57eF$X$=!PC{xWt~$(69B)$ BI)4BF literal 0 HcmV?d00001 diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png new file mode 100755 index 0000000000000000000000000000000000000000..9b383f4d2eab09c0f2a739d6b232c32934bc620b GIT binary patch literal 104 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnour1U*q978O6-yYw{%b*}|_(02F z@qbE9)0CJMo;*v*PWv`Vh2h6EmG8IS-Cm{3U~`<YvxSSFU3)<QP%DF{tDnm{r-UW| Dvd<uf literal 0 HcmV?d00001 diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png new file mode 100755 index 0000000000000000000000000000000000000000..a23baad25b1d1ff36e17361eab24271f2e9b7326 GIT binary patch literal 125 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnouq+C2*978O6lYjjF{IFh)jg74> zFlmZ}YMcJY=eo?o%*@I?2`NblNeMudl#t?<YIry`QK*OGr~otD9plAEGz`5G6d9zp Wa55e{GUW=;JO)o!KbLh*2~7a@&m@!p literal 0 HcmV?d00001 diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png new file mode 100755 index 0000000000000000000000000000000000000000..42ccba269b6e91bef12ad0fa18be651b5ef0ee68 GIT binary patch literal 105 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnouqzpV=978O6-=0?FV^9z|eBtf= z|7WztIJ;WT>{+tN>ySr~=F{k$>;_x^_y?afmf9pRKH0)6?eSP?3s5hEr>mdKI;Vst E0O<Z9>;M1& literal 0 HcmV?d00001 diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png new file mode 100755 index 0000000000000000000000000000000000000000..39d5824d6af5456f1e89fc7847ea3599ea5fd815 GIT binary patch literal 3762 zcmb_eYgiKKwx-=Q?P<E4nMM;$eWu2m#PU%`&Ae^LOv^6gctJ3vM8!lUG!aCxQ#0eJ zq?xIqDJi9<fFp>di0+w!yaC|_1uvA>yaxz|iX3eB<LqajpXblFzRUBi^{w~$)_UKp zpDz0D*=4#5008Vc>v#HR0ASmSVIKMS&kf`CSAV4g0DJLgPkRO79xj%J<(hH6`bTGj zrr^$JeiHJI?;s&<5pRw-^kj}=E;X0OX+pgz+f5GVt0NQv_gbu0>-8J+F$O>HpW?Lx z+YFO`CV&6VV9fsEwG#js0_-|v*!ujZ*M=jfo457?0Do-z<^}+8bI+qk+W~+$zz%Z& z;L7&@&ns`l8Ofh*Wd<Cp_>U0pO%RP^?Xa_h7I}7K#}4Xt`s%-(m-enaPWX<H>$O&- zX~a1aOzn?!r?5wJVBNPJ_o8-(9Fz<_c1LYGxUl(E+Wdx?wkNHH2T%eWq9Kz00h#RB zYKI~=a<9_QqC^n<>hyWlS66waWgyAP#t&TfTWP=Sxa)ukRY%j7WH}(@r=B^W_;b&M zRzPYsb*j^Kou%%`K6VP+dKtR@x~qEHq4rXMxoX-gcSf&->lMY%TMXF!Gw_A)(tp6} z2A%kN3twbr%KyUrrmw24V3d%wzK<-q(M;MTr41}un`P!!xejADEv_CJ{CTif907B& zEP`pDJIZHVgnmxh$EZnBOUxz~Ap+ZzKbFmg39_n-)$wY!Q@i~5aGmHbN7&*gk<HNQ z!$-sS))5(#?qPW$1C^3#;cFvQMWTd)d(I_4awE^ZjGC%XcnSGez>q9zWgV|2(Zhxl zoDqJp&MxW(qX#C@oF8L)*r$RdSjVFSc$%z?*9%YoZ6sOZ!vtxXtBM<*r82<p7}?1@ zveQI&tiNm{;57jipQbO}b?9l*l4nGAT4Y=-w()@*#J1?%2{)nY^{|NO=xM)s?jR6< ziJ!fSOOPs*$8->vyC}_Eiz1PJ2L$bttko`=+fH{Ne@G#lMDxkKt_y)O(J5&Ak)w-I znm!vzYX3$kLDG$hOp-KJg~7}M;73BFWA{!a61fe?NJkjR_}Xw+*`O0=AGg7&dU<kQ zA;d%-zM*iwS2t8Y)Gu@JK&A)fV=HHvbW`6mV+EZrtJSauApMCndBS~F>A`A?9`whW zM{fkFf`G`P^9j*|-q9KLvS<191z9a^mK3Lss}W8O=sZ}N$V4Fh*SWF5NbZQ>p{0>$ z0pe}d$*s!y<I6P@1-n$GE>*R&NSXbjmld6{4Y;O89MuDTK0Hn0C?QdL9z1qGegXs! z7$MIGkPkwdHF2os-Z-e85B?5An>yc|m<}>!Iirg%H-<NQ%ws0uIi51-a5phDmp{k5 zD(zjPC;t}@{w)+0&{l~FS*>%F11XY{{>@kgL>a#6fM9JzBE&an&F>eWh|b0^kJ<?n zs=7WyuX=fIhvAjTTX`c}HUH)bTTI;OJGlyB{(NK&G;Htmn6^?c?TaAsOV}uBUtAa> zNBM5*nCa~(xwn~rG~<cfPp*ub4V(WF)lGbJpS(|MvAA83yV}}9bfbt(>>GSG9mz3h z9F~64y}giIrz^lfl|_5HpUsG}?Wpr*&f?bS=|9biqivN)-a~u>uK<{Lfcng{663QL zLXzO@*N5)q4C=j6E8nC+P%lEwI#~0wkt;M4Y8!+DYzN2rBuYao1*HRIa^NC9nFeep z+ns5$X9Bh48S-`ss!k&!J#Ddd=j1O-9}?`v(B|<M1@-U18t+Js;ZNHIk3$u$U;Eyu z3exyGipUQbO;S|Bzp(hX{&!NB@oq*gb}e^)68}5#!kH$BhK<@5!ubu^XDa&d1C#@| z3yY}&(~QVLCVdv){)I_ECxKsIlmW8LZ!;=rtk4ZaX!xm*=*Z(|P+Uqf*Rg<I!Tau& z85{4>>R7wD97BV;nK~quUHx^mj^G6K2GZ1*uSN?iLm!7vHB7_1^TGbKhmnK+K`GYA zocp2=on8LxJH^`7^1ch0ft(MTU$vJB!R@gQ^R`qoX>(=iY#u++3K>oqSpG={?#YVw zp3m99FXk^~<6#X9X1oKYXEH%8t2btG65(u0zF-J)^>8dj0Evc+9_Bd^Y)k9AfW~FV z%iDV(ClS6)TC7eVzh{ml;p4cx8)$TV&qhRWp+dqiw>i32?1;5d>HLrNj=^OdJ<}L) zWxqw8aFI<~_TkMDQHS?`z+KQ?+{ASoy%}RBu6i9?BXbh%OEx1OuZ}?n(VjrT(!B1; zQ!#WA0NBx=^6rJrFVsDCuT4)OTG<Ikaz*O8tFTZ)QL^`qbYu)jq*kTD>zZ3$Z4Yqz z&c9+7%g!%zxtv#p2fhHbo98KBwfE<e9Z<Yr%uRWj-5Hd3hTYY<&ve`je8y8RV)knu zYCT0K`*JrRv<nx%jAf>&Y(&2#=}qEEU`ECEjlCp=X^_tIoMx>%kBT5k)^c=zyV5w3 zc>DLKY6%=y0igWi9B@4hB}bR6K|+jYBt+}i6Ld|b`*s62c6Ge?zGYvdW)=p90~$Ad zxGB>c<3Dy~hPJ#vNXierOl41xBn_0L<5NhK6JO-LvtS&Z{xjGKfIC6*9%*?tv*?+! zv;Q{?mHN2b|3DEJO}R9w11ZT5QVC(H0u|0n9cVK_@2r%C<)OnZ(3aS0Ux^6G$ja*< z9R~o~9XjhPL)w@vYi6r;H$tR>wW`0-Z&Qed`X0LZY9-~mfso!@dt?5Q;@|K6$mAB& z$J41&y)<{N;QATPeU}BC{lM_<D4HZA)B)i-;gJ1pwusq$h>@-LlQ2hjX;}6~qdglT zGm%qJm*F^in=w*?j;@C_P<fNuR>CMnXK5Fd^wXV**pZOdS1KbSJsC~s#R;tmXIMb` zHB>sx<rNDl@4+*>Qg&E5Yf@}d#~Z9D4R{}ZpLm7S=bY0x#k<=H?=R+=W$=Bm2aU*n z)qgD*0#4>GGlHhQ`bx#k=Njc;+9D@{F5`xI^tMkBf{XIzwB=b9KbuuLF7jMTR~Mwt zN#!)9J4&^V@JRe9Y!b2!;$rCLPWZfG`C;Qz`u~TJdCzv->e`=R8uHX_2{Fp&pWJ*h z#A60&bY(j(^P@t_`_pktBV7{tFVoeNWlNA|zgNr&DMjJ_!k2%2s2~F@la$M6k%hWi z7}}hoDuoaN7?lchVk@4DunpEIS$72&uuF&F;&4uhC$L)6IzHHUryR9emzpxwsRXmj zfc}pI#oRCB7Y1;t=*58Gsv7x3PGuW^spn6V&dWf#?*TQ0(|*rr=EeE1o~y1<q=XbB zH7M1n6!fSD?pm#tnQqCt>wyQi%)e*oX6iX@$m0F1R<jp2X5!4xYkF7J+;bthC|!^_ zfGt{`v`5@+vH^moN%0^eXsq^fv|D%^4d2~y%?^q=-Nv+wR>tKUT0vgg!8^fWhYLqS zF@EOpFld7>f^kprb~YwMq=^<<pan6S!*H@g7t}eQJLhuWeLGTkT2P+Ck3!Te1lk%) zt9TCz)oC3>e|gw?QFyf8ck|ZC^>)3c`b$^C>jCB4Fne_1e$Cqt=4Ud#K~~8Nfa91W zwk17&D?X?4FRzR+5qCiIqPf0};K4$tW$}l~A?u_E=JSe;*f_DO>r{z=U4_<)dY)M! z7O#mizC+GN&#;)k)vkBU<tXnqP_^|-tGmZcT8Dlxt6Pn?`uypBX@1fVrNePVd#ALp zF4$80+@AG;7xl5W_sE^yNYES$<C6}`Zb1&JCZx~nYEbc%r#1d%Mn0pgS$5QlwG(ot z!Za{>S@fZesb{v?YuFlCPRjsT5bxB4@+sqdq}xvvBhTngZ(N1LUCS-ei=5sgE-Tbc z7HK+A_O23MP@sUoc?I?*ZB|F)&%us|2<oRU<$~ApQ%f%RU*aE`VmGrB<J4ieMCirV zP_~OQ;txr2WBgPQtAbapRV&BoULc}?@}z*gAAJEFNo(?(iOCZhqe)W78eZ*UvaN@7 zhKKGvt0!}(rjB;qc0K^%h|5n7(;vc+uHx|Dg@=F~<I;s3VT_=D#he%5p2SoOly<_w z*HKrz@ej3W?Y+xd+RJZ;9WZCGEGI{ETYg8h6;=d~Oi`<7@VfdE&iUPi>O$#G7V$6z zq>G%6!cu7OEf+_#^A=23Hd6Db9-yK*NQ#<PGnv3oz%Gl*Ib##q`dB%MvY>S+kjJI7 zhLiLz{>zKKtHH>H;B-cALzj`>@+-~?X2aP7ypf9WMf8q0m)wS!Nkf+&R&&zEjFOUx zlq^>v#VAq}=)?dKRMe+010g9O;qAiaTA4dV+==mw%i3Re)DwZ$Wd5CK1m4Ivy&&Ef zO8W!SpcgA>zfTGAE!{IPJMhdZ`T4{K#7ndDT8K2&*jf=J8O>H*iDJ}ZK}z|$C3U62 z$nZhk4v$QIYzMaV+0`B8S!=9RSYzi*QG#tp>ZY|lY_`}A-zI7)(tV$B9G-tC#zt8m z<!M@MT<43;wMNmuo-kSmPm5UQboY7uH(`#(7slpt#=BnL_;t>re~pD7oIFkmIAM=s zw+Iili%nSC?yks)t~q4lTlZW(#5^yUV@+^KvIuQzZDO^*TBz!<CtQh2rfO<z=TS{H zzIH*$V56H0{EnCR^XrG!ZG7AjD4r}Q(t2l9(P&QU6M<44;NxCby12gE#~t-zco3A+ rQq8KZ5e*fKEaO{0Ke0s~Qmy6Xh5m%FO!wV}CE%>j#nX%*uiW|{x9q0w literal 0 HcmV?d00001 diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png new file mode 100755 index 0000000000000000000000000000000000000000..f1273672d253263b7564e9e21d69d7d9d0b337d9 GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^j6j^i!3HGVb)pi0l%l7LV~E7m<R2d&AFo$qV`FPm oboulDzr6KyA+fs7hb{~ZQx+&qVC9&67pR!Q)78&qol`;+0H8b=ng9R* literal 0 HcmV?d00001 diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png new file mode 100755 index 0000000000000000000000000000000000000000..32f86222ac7efd4e1b1f3dbafeb3d5783d8de13c GIT binary patch literal 167 zcmeAS@N?(olHy`uVBq!ia0vp^j6j^i!3Ja)XlH!`a`HS~9780gZtb(?I}{+moL>7s zyI`Y7$F!Dbe>W|wjBOHW$ygS--u6f3W(K|!ygPL}3f&#$lo`@lzd7`<FVfd2+Wqgh zWaNa;tvAA5)&(2ItP}lX^pAHA@58>Pt~sI)y9#FRI%l<hhw|=)KiW@o-eWlEyi@Gk Rtz4kZ44$rjF6*2UngA)*Kyd&7 literal 0 HcmV?d00001 diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/ui-lightness/images/ui-icons_222222_256x240.png b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/ui-lightness/images/ui-icons_222222_256x240.png new file mode 100755 index 0000000000000000000000000000000000000000..ee039dc096a38a3753f92519546eee94bcfbeffa GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/ui-lightness/images/ui-icons_228ef1_256x240.png b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/ui-lightness/images/ui-icons_228ef1_256x240.png new file mode 100755 index 0000000000000000000000000000000000000000..10e3631dcab364a0a1ab81862d678fd032908dd7 GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/ui-lightness/images/ui-icons_ef8c08_256x240.png b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/ui-lightness/images/ui-icons_ef8c08_256x240.png new file mode 100755 index 0000000000000000000000000000000000000000..35bb8efa9c87eed9615e64354e12d3578c604823 GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/ui-lightness/images/ui-icons_ffd27a_256x240.png b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/ui-lightness/images/ui-icons_ffd27a_256x240.png new file mode 100755 index 0000000000000000000000000000000000000000..baebb63e3fc8fbba697afca858abb3f55bd0f08e GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/ui-lightness/images/ui-icons_ffffff_256x240.png b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/ui-lightness/images/ui-icons_ffffff_256x240.png new file mode 100755 index 0000000000000000000000000000000000000000..bef5178a9054c16582876bac57017f783272e750 GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/ui-lightness/jquery-ui-1.8.4.custom.css b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/ui-lightness/jquery-ui-1.8.4.custom.css new file mode 100755 index 0000000..11ede67 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/examples_support/themes/ui-lightness/jquery-ui-1.8.4.custom.css @@ -0,0 +1,572 @@ +/* + * jQuery UI CSS Framework @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { display: none; } +.ui-helper-hidden-accessible { position: absolute; left: -99999999px; } +.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } +.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } +.ui-helper-clearfix { display: inline-block; } +/* required comment for clearfix to work in Opera \*/ +* html .ui-helper-clearfix { height:1%; } +.ui-helper-clearfix { display:block; } +/* end clearfix */ +.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { cursor: default !important; } + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } + + +/* + * jQuery UI CSS Framework @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + * + * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px + */ + + +/* Component containers +----------------------------------*/ +.ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; } +.ui-widget .ui-widget { font-size: 1em; } +.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; } +.ui-widget-content { border: 1px solid #dddddd; background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; } +.ui-widget-content a { color: #333333; } +.ui-widget-header { border: 1px solid #e78f08; background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; } +.ui-widget-header a { color: #ffffff; } + +/* Interaction states +----------------------------------*/ +.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1c94c4; } +.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; } +.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #c77405; } +.ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; } +.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #fbd850; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eb8f00; } +.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; text-decoration: none; } +.ui-widget :active { outline: none; } + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fed22f; background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; } +.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; } +.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; } +.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; } +.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; } +.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } +.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } +.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); } +.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } +.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); } +.ui-state-default .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); } +.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); } +.ui-state-active .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); } +.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_228ef1_256x240.png); } +.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffd27a_256x240.png); } + +/* positioning */ +.ui-icon-carat-1-n { background-position: 0 0; } +.ui-icon-carat-1-ne { background-position: -16px 0; } +.ui-icon-carat-1-e { background-position: -32px 0; } +.ui-icon-carat-1-se { background-position: -48px 0; } +.ui-icon-carat-1-s { background-position: -64px 0; } +.ui-icon-carat-1-sw { background-position: -80px 0; } +.ui-icon-carat-1-w { background-position: -96px 0; } +.ui-icon-carat-1-nw { background-position: -112px 0; } +.ui-icon-carat-2-n-s { background-position: -128px 0; } +.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-off { background-position: -96px -144px; } +.ui-icon-radio-on { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; } +.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; } +.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } +.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } +.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; } +.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } +.ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } +.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } +.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; } + +/* Overlays */ +.ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); } +.ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }/* + * jQuery UI Resizable @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Resizable#theming + */ +.ui-resizable { position: relative;} +.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;} +.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } +.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; } +.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; } +.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; } +.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; } +.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } +.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } +.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } +.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* + * jQuery UI Selectable @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Selectable#theming + */ +.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; } +/* + * jQuery UI Accordion @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Accordion#theming + */ +/* IE/Win - Fix animation bug - #4615 */ +.ui-accordion { width: 100%; } +.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; } +.ui-accordion .ui-accordion-li-fix { display: inline; } +.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } +.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; } +.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; } +.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } +.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; } +.ui-accordion .ui-accordion-content-active { display: block; }/* + * jQuery UI Autocomplete @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Autocomplete#theming + */ +.ui-autocomplete { position: absolute; cursor: default; } + +/* workarounds */ +* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */ + +/* + * jQuery UI Menu @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Menu#theming + */ +.ui-menu { + list-style:none; + padding: 2px; + margin: 0; + display:block; + float: left; +} +.ui-menu .ui-menu { + margin-top: -3px; +} +.ui-menu .ui-menu-item { + margin:0; + padding: 0; + zoom: 1; + float: left; + clear: left; + width: 100%; +} +.ui-menu .ui-menu-item a { + text-decoration:none; + display:block; + padding:.2em .4em; + line-height:1.5; + zoom:1; +} +.ui-menu .ui-menu-item a.ui-state-hover, +.ui-menu .ui-menu-item a.ui-state-active { + font-weight: normal; + margin: -1px; +} +/* + * jQuery UI Button @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Button#theming + */ +.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */ +.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */ +button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */ +.ui-button-icons-only { width: 3.4em; } +button.ui-button-icons-only { width: 3.7em; } + +/*button text element */ +.ui-button .ui-button-text { display: block; line-height: 1.4; } +.ui-button-text-only .ui-button-text { padding: .4em 1em; } +.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; } +.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; } +.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; } +.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; } +/* no icon support for input elements, provide padding by default */ +input.ui-button { padding: .4em 1em; } + +/*button icon element(s) */ +.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; } +.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; } +.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; } +.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } +.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } + +/*button sets*/ +.ui-buttonset { margin-right: 7px; } +.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; } + +/* workarounds */ +button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */ +/* + * jQuery UI Dialog @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Dialog#theming + */ +.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; } +.ui-dialog .ui-dialog-titlebar { padding: .5em 1em .3em; position: relative; } +.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .2em 0; } +.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } +.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } +.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } +.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } +.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; } +.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; } +.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } +.ui-draggable .ui-dialog-titlebar { cursor: move; } +/* + * jQuery UI Slider @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Slider#theming + */ +.ui-slider { position: relative; text-align: left; } +.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } +.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } + +.ui-slider-horizontal { height: .8em; } +.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } +.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } +.ui-slider-horizontal .ui-slider-range-min { left: 0; } +.ui-slider-horizontal .ui-slider-range-max { right: 0; } + +.ui-slider-vertical { width: .8em; height: 100px; } +.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } +.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } +.ui-slider-vertical .ui-slider-range-min { bottom: 0; } +.ui-slider-vertical .ui-slider-range-max { top: 0; }/* + * jQuery UI Tabs @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Tabs#theming + */ +.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ +.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; } +.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; } +.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; } +.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; } +.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; } +.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ +.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; } +.ui-tabs .ui-tabs-hide { display: none !important; } +/* + * jQuery UI Datepicker @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Datepicker#theming + */ +.ui-datepicker { width: 17em; padding: .2em .2em 0; } +.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } +.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } +.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } +.ui-datepicker .ui-datepicker-prev { left:2px; } +.ui-datepicker .ui-datepicker-next { right:2px; } +.ui-datepicker .ui-datepicker-prev-hover { left:1px; } +.ui-datepicker .ui-datepicker-next-hover { right:1px; } +.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } +.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } +.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } +.ui-datepicker select.ui-datepicker-month-year {width: 100%;} +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { width: 49%;} +.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } +.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } +.ui-datepicker td { border: 0; padding: 1px; } +.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } +.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } +.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { width:auto; } +.ui-datepicker-multi .ui-datepicker-group { float:left; } +.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } +.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } +.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } +.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } +.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } +.ui-datepicker-row-break { clear:both; width:100%; } + +/* RTL support */ +.ui-datepicker-rtl { direction: rtl; } +.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } +.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } +.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } +.ui-datepicker-rtl .ui-datepicker-group { float:right; } +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } + +/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ +.ui-datepicker-cover { + display: none; /*sorry for IE5*/ + display/**/: block; /*sorry for IE5*/ + position: absolute; /*must have*/ + z-index: -1; /*must have*/ + filter: mask(); /*must have*/ + top: -4px; /*must have*/ + left: -4px; /*must have*/ + width: 200px; /*must have*/ + height: 200px; /*must have*/ +}/* + * jQuery UI Progressbar @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Progressbar#theming + */ +.ui-progressbar { height:2em; text-align: left; } +.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; } \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/index.html b/src/warden-server/contrib/wardenweb/datatables/examples/index.html new file mode 100644 index 0000000..0c40043 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/index.html @@ -0,0 +1,151 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../media/css/demo_page.css"; + @import "../media/css/demo_table.css"; + </style> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables examples + </div> + + <p>This DataTables package comes with a number of examples of how you can use this software, and demonstrates the capabilities and flexibility of DataTables.</p> + + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="basic_init/dom.html">DOM positioning</a></li> + <li><a href="basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="basic_init/state_save.html">State saving</a></li> + <li><a href="basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="basic_init/scroll_x.html">Horizontal</a> / + <a href="basic_init/scroll_y.html">Vertical</a> / + <a href="basic_init/scroll_xy.html">Both</a> / + <a href="basic_init/scroll_y_theme.html">Themed</a> / + <a href="basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="advanced_init/events_live.html">Live events</a> / + <a href="advanced_init/events_pre_init.html">Pre-init</a> / + <a href="advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="advanced_init/column_render.html">Column rendering</a></li> + <li><a href="advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="advanced_init/row_callback.html">Row callback</a></li> + <li><a href="advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="api/add_row.html">Dynamically add a new row</a></li> + <li><a href="api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="api/highlight.html">Highlight rows and columns</a></li> + <li><a href="api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="api/form.html">Submit form with elements in table</a></li> + <li><a href="api/counter_column.html">Index column (static number column)</a></li> + <li><a href="api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="data_sources/dom.html">DOM</a></li> + <li><a href="data_sources/js_array.html">Javascript array</a></li> + <li><a href="data_sources/ajax.html">Ajax source</a></li> + <li><a href="data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="server_side/post.html">Use HTTP POST</a></li> + <li><a href="server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/plug-ins/dom_sort.html b/src/warden-server/contrib/wardenweb/datatables/examples/plug-ins/dom_sort.html new file mode 100644 index 0000000..294f95b --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/plug-ins/dom_sort.html @@ -0,0 +1,1143 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + input.engine { width: 100%; } + input.version { width: 50px; } + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + /* Create an array with the values of all the input boxes in a column */ + $.fn.dataTableExt.afnSortData['dom-text'] = function ( oSettings, iColumn ) + { + var aData = []; + $( 'td:eq('+iColumn+') input', oSettings.oApi._fnGetTrNodes(oSettings) ).each( function () { + aData.push( this.value ); + } ); + return aData; + } + + /* Create an array with the values of all the select options in a column */ + $.fn.dataTableExt.afnSortData['dom-select'] = function ( oSettings, iColumn ) + { + var aData = []; + $( 'td:eq('+iColumn+') select', oSettings.oApi._fnGetTrNodes(oSettings) ).each( function () { + aData.push( $(this).val() ); + } ); + return aData; + } + + /* Create an array with the values of all the checkboxes in a column */ + $.fn.dataTableExt.afnSortData['dom-checkbox'] = function ( oSettings, iColumn ) + { + var aData = []; + $( 'td:eq('+iColumn+') input', oSettings.oApi._fnGetTrNodes(oSettings) ).each( function () { + aData.push( this.checked==true ? "1" : "0" ); + } ); + return aData; + } + + /* Initialise the table with the required column sorting data types */ + $(document).ready(function() { + $('#example').dataTable( { + "aoColumns": [ + null, + null, + { "sSortDataType": "dom-text" }, + { "sSortDataType": "dom-text", "sType": "numeric" }, + { "sSortDataType": "dom-select" }, + { "sSortDataType": "dom-checkbox" } + ] + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables live DOM sorting example + </div> + + <h1>Preamble</h1> + <p>This example shows how you can use information available in the DOM to sort columns. Typically DataTables will read information to be sorted during it's initialisation phase, and this will not be updated based on user interaction, so sorting on columns which have, for example, form elements in them, may not reflect the current value of the input. To overcome this problem, you must update the data that DataTables will sort on, just prior to the sort. This method is much more efficient than actually sorting using the DOM, since only one DOM query is needed for each cell to be sorted.</p> + <p>The example below shows the first two columns as normal text with sorting as you would expect. The following columns all have a form input element of different kinds, and the information contained within is what DataTables will perform the sort on, based on the value at the time of the sort.</p> + <p>This is a fairly simple example, but it you aren't constrained to just using form input elements, you could use anything and customise your DOM queries to suit yourself. You could also update the sorting live as a user in entered data into a form using an event handler calling fnSort() or fnDraw().</p> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + <th>Check</th> + </tr> + </thead> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td><input type="text" class="engine" value="Win 95+"></td> + <td class="center"><input type="text" class="version" value="4"></td> + <td class="center"> + <select size="1"> + <option value="A">A</option> + <option value="C">C</option> + <option value="X" selected="selected">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox" checked="checked"></td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td><input type="text" class="engine" value="Win 95+"></td> + <td class="center"><input type="text" class="version" value="5"></td> + <td class="center"> + <select size="1"> + <option value="A">A</option> + <option value="C" selected="selected">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox"></td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td><input type="text" class="engine" value="Win 95+"></td> + <td class="center"><input type="text" class="version" value="5.5"></td> + <td class="center"> + <select size="1"> + <option value="A" selected="selected">A</option> + <option value="C">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox" checked="checked"></td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td><input type="text" class="engine" value="Win 98+"></td> + <td class="center"><input type="text" class="version" value="6"></td> + <td class="center"> + <select size="1"> + <option value="A" selected="selected">A</option> + <option value="C">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox"></td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td><input type="text" class="engine" value="Win XP SP2+"></td> + <td class="center"><input type="text" class="version" value="7"></td> + <td class="center"> + <select size="1"> + <option value="A" selected="selected">A</option> + <option value="C">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox" checked="checked"></td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td><input type="text" class="engine" value="Win XP"></td> + <td class="center"><input type="text" class="version" value="6"></td> + <td class="center"> + <select size="1"> + <option value="A" selected="selected">A</option> + <option value="C">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox" checked="checked"></td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td><input type="text" class="engine" value="Win 98+ / OSX.2+"></td> + <td class="center"><input type="text" class="version" value="1.7"></td> + <td class="center"> + <select size="1"> + <option value="A" selected="selected">A</option> + <option value="C">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox"></td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td><input type="text" class="engine" value="Win 98+ / OSX.2+"></td> + <td class="center"><input type="text" class="version" value="1.8"></td> + <td class="center"> + <select size="1"> + <option value="A" selected="selected">A</option> + <option value="C">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox"></td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td><input type="text" class="engine" value="Win 98+ / OSX.2+"></td> + <td class="center"><input type="text" class="version" value="1.8"></td> + <td class="center"> + <select size="1"> + <option value="A" selected="selected">A</option> + <option value="C">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox" checked="checked"></td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td><input type="text" class="engine" value="Win 2k+ / OSX.3+"></td> + <td class="center"><input type="text" class="version" value="1.9"></td> + <td class="center"> + <select size="1"> + <option value="A" selected="selected">A</option> + <option value="C">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox" checked="checked"></td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td><input type="text" class="engine" value="OSX.2+"></td> + <td class="center"><input type="text" class="version" value="1.8"></td> + <td class="center"> + <select size="1"> + <option value="A" selected="selected">A</option> + <option value="C">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox"></td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td><input type="text" class="engine" value="OSX.3+"></td> + <td class="center"><input type="text" class="version" value="1.8"></td> + <td class="center"> + <select size="1"> + <option value="A" selected="selected">A</option> + <option value="C">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox" checked="checked"></td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td><input type="text" class="engine" value="Win 95+ / Mac OS 8.6-9.2"></td> + <td class="center"><input type="text" class="version" value="1.7"></td> + <td class="center"> + <select size="1"> + <option value="A" selected="selected">A</option> + <option value="C">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox"></td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td><input type="text" class="engine" value="Win 98SE+"></td> + <td class="center"><input type="text" class="version" value="1.7"></td> + <td class="center"> + <select size="1"> + <option value="A" selected="selected">A</option> + <option value="C">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox" checked="checked"></td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td><input type="text" class="engine" value="Win 98+ / OSX.2+"></td> + <td class="center"><input type="text" class="version" value="1.8"></td> + <td class="center"> + <select size="1"> + <option value="A" selected="selected">A</option> + <option value="C">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox"></td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td><input type="text" class="engine" value="Win 95+ / OSX.1+"></td> + <td class="center"><input type="text" class="version" value="1"></td> + <td class="center"> + <select size="1"> + <option value="A" selected="selected">A</option> + <option value="C">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox" checked="checked"></td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td><input type="text" class="engine" value="Win 95+ / OSX.1+"></td> + <td class="center"><input type="text" class="version" value="1.1"></td> + <td class="center"> + <select size="1"> + <option value="A" selected="selected">A</option> + <option value="C">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox" checked="checked"></td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td><input type="text" class="engine" value="Win 95+ / OSX.1+"></td> + <td class="center"><input type="text" class="version" value="1.2"></td> + <td class="center"> + <select size="1"> + <option value="A" selected="selected">A</option> + <option value="C">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox"></td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td><input type="text" class="engine" value="Win 95+ / OSX.1+"></td> + <td class="center"><input type="text" class="version" value="1.3"></td> + <td class="center"> + <select size="1"> + <option value="A" selected="selected">A</option> + <option value="C">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox"></td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td><input type="text" class="engine" value="Win 95+ / OSX.1+"></td> + <td class="center"><input type="text" class="version" value="1.4"></td> + <td class="center"> + <select size="1"> + <option value="A" selected="selected">A</option> + <option value="C">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox"></td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td><input type="text" class="engine" value="Win 95+ / OSX.1+"></td> + <td class="center"><input type="text" class="version" value="1.5"></td> + <td class="center"> + <select size="1"> + <option value="A" selected="selected">A</option> + <option value="C">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox" checked="checked"></td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td><input type="text" class="engine" value="Win 95+ / OSX.1+"></td> + <td class="center"><input type="text" class="version" value="1.6"></td> + <td class="center"> + <select size="1"> + <option value="A" selected="selected">A</option> + <option value="C">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox"></td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td><input type="text" class="engine" value="Win 98+ / OSX.1+"></td> + <td class="center"><input type="text" class="version" value="1.7"></td> + <td class="center"> + <select size="1"> + <option value="A" selected="selected">A</option> + <option value="C">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox" checked="checked"></td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td><input type="text" class="engine" value="Win 98+ / OSX.1+"></td> + <td class="center"><input type="text" class="version" value="1.8"></td> + <td class="center"> + <select size="1"> + <option value="A" selected="selected">A</option> + <option value="C">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox" checked="checked"></td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td><input type="text" class="engine" value="Win 98+ / OSX.2+"></td> + <td class="center"><input type="text" class="version" value="1.8"></td> + <td class="center"> + <select size="1"> + <option value="A" selected="selected">A</option> + <option value="C">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox" checked="checked"></td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td><input type="text" class="engine" value="Gnome"></td> + <td class="center"><input type="text" class="version" value="1.8"></td> + <td class="center"> + <select size="1"> + <option value="A" selected="selected">A</option> + <option value="C">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox"></td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td><input type="text" class="engine" value="OSX.3"></td> + <td class="center"><input type="text" class="version" value="125.5"></td> + <td class="center"> + <select size="1"> + <option value="A" selected="selected">A</option> + <option value="C">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox" checked="checked"></td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td><input type="text" class="engine" value="OSX.3"></td> + <td class="center"><input type="text" class="version" value="312.8"></td> + <td class="center"> + <select size="1"> + <option value="A" selected="selected">A</option> + <option value="C">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox"></td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td><input type="text" class="engine" value="OSX.4+"></td> + <td class="center"><input type="text" class="version" value="419.3"></td> + <td class="center"> + <select size="1"> + <option value="A" selected="selected">A</option> + <option value="C">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox"></td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td><input type="text" class="engine" value="OSX.4+"></td> + <td class="center"><input type="text" class="version" value="522.1"></td> + <td class="center"> + <select size="1"> + <option value="A" selected="selected">A</option> + <option value="C">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox" checked="checked"></td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td><input type="text" class="engine" value="OSX.4+"></td> + <td class="center"><input type="text" class="version" value="420"></td> + <td class="center"> + <select size="1"> + <option value="A" selected="selected">A</option> + <option value="C">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox" checked="checked"></td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td><input type="text" class="engine" value="iPod"></td> + <td class="center"><input type="text" class="version" value="420.1"></td> + <td class="center"> + <select size="1"> + <option value="A" selected="selected">A</option> + <option value="C">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox"></td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td><input type="text" class="engine" value="S60"></td> + <td class="center"><input type="text" class="version" value="413"></td> + <td class="center"> + <select size="1"> + <option value="A" selected="selected">A</option> + <option value="C">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox" checked="checked"></td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td><input type="text" class="engine" value="Win 95+ / OSX.1+"></td> + <td class="center"><input type="text" class="version" value="-"></td> + <td class="center"> + <select size="1"> + <option value="A" selected="selected">A</option> + <option value="C">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox"></td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td><input type="text" class="engine" value="Win 95+ / OSX.2+"></td> + <td class="center"><input type="text" class="version" value="-"></td> + <td class="center"> + <select size="1"> + <option value="A" selected="selected">A</option> + <option value="C">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox"></td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td><input type="text" class="engine" value="Win 95+ / OSX.2+"></td> + <td class="center"><input type="text" class="version" value="-"></td> + <td class="center"> + <select size="1"> + <option value="A" selected="selected">A</option> + <option value="C">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox"></td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td><input type="text" class="engine" value="Win 95+ / OSX.2+"></td> + <td class="center"><input type="text" class="version" value="-"></td> + <td class="center"> + <select size="1"> + <option value="A" selected="selected">A</option> + <option value="C">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox"></td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td><input type="text" class="engine" value="Win 95+ / OSX.3+"></td> + <td class="center"><input type="text" class="version" value="-"></td> + <td class="center"> + <select size="1"> + <option value="A" selected="selected">A</option> + <option value="C">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox" checked="checked"></td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td><input type="text" class="engine" value="Win 88+ / OSX.3+"></td> + <td class="center"><input type="text" class="version" value="-"></td> + <td class="center"> + <select size="1"> + <option value="A" selected="selected">A</option> + <option value="C">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox" checked="checked"></td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td><input type="text" class="engine" value="Win 88+ / OSX.3+"></td> + <td class="center"><input type="text" class="version" value="-"></td> + <td class="center"> + <select size="1"> + <option value="A" selected="selected">A</option> + <option value="C">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox" checked="checked"></td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td><input type="text" class="engine" value="Wii"></td> + <td class="center"><input type="text" class="version" value="-"></td> + <td class="center"> + <select size="1"> + <option value="A" selected="selected">A</option> + <option value="C">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox"></td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td><input type="text" class="engine" value="N800"></td> + <td class="center"><input type="text" class="version" value="-"></td> + <td class="center"> + <select size="1"> + <option value="A" selected="selected">A</option> + <option value="C">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox"></td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td><input type="text" class="engine" value="Nintendo DS"></td> + <td class="center"><input type="text" class="version" value="8.5"></td> + <td class="center"> + <select size="1"> + <option value="A">A</option> + <option value="C" selected="selected">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox" checked="checked"></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td><input type="text" class="engine" value="KDE 3.1"></td> + <td class="center"><input type="text" class="version" value="3.1"></td> + <td class="center"> + <select size="1"> + <option value="A">A</option> + <option value="C" selected="selected">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox"></td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td><input type="text" class="engine" value="KDE 3.3"></td> + <td class="center"><input type="text" class="version" value="3.3"></td> + <td class="center"> + <select size="1"> + <option value="A" selected="selected">A</option> + <option value="C">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox"></td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td><input type="text" class="engine" value="KDE 3.5"></td> + <td class="center"><input type="text" class="version" value="3.5"></td> + <td class="center"> + <select size="1"> + <option value="A" selected="selected">A</option> + <option value="C">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox" checked="checked"></td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td><input type="text" class="engine" value="Mac OS 8-9"></td> + <td class="center"><input type="text" class="version" value="-"></td> + <td class="center"> + <select size="1"> + <option value="A">A</option> + <option value="C">C</option> + <option value="X" selected="selected">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox" checked="checked"></td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td><input type="text" class="engine" value="Mac OS 7.6-9"></td> + <td class="center"><input type="text" class="version" value="1"></td> + <td class="center"> + <select size="1"> + <option value="A">A</option> + <option value="C" selected="selected">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox"></td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td><input type="text" class="engine" value="Mac OS 8-X"></td> + <td class="center"><input type="text" class="version" value="1"></td> + <td class="center"> + <select size="1"> + <option value="A">A</option> + <option value="C" selected="selected">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox" checked="checked"></td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td><input type="text" class="engine" value="Embedded devices"></td> + <td class="center"><input type="text" class="version" value="-"></td> + <td class="center"> + <select size="1"> + <option value="A">A</option> + <option value="C" selected="selected">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox"></td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td><input type="text" class="engine" value="Embedded devices"></td> + <td class="center"><input type="text" class="version" value="-"></td> + <td class="center"> + <select size="1"> + <option value="A" selected="selected">A</option> + <option value="C">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox"></td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td><input type="text" class="engine" value="Embedded devices"></td> + <td class="center"><input type="text" class="version" value="-"></td> + <td class="center"> + <select size="1"> + <option value="A">A</option> + <option value="C">C</option> + <option value="X" selected="selected">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox" checked="checked"></td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td><input type="text" class="engine" value="Text only"></td> + <td class="center"><input type="text" class="version" value="-"></td> + <td class="center"> + <select size="1"> + <option value="A">A</option> + <option value="C">C</option> + <option value="X" selected="selected">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox"></td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td><input type="text" class="engine" value="Text only"></td> + <td class="center"><input type="text" class="version" value="-"></td> + <td class="center"> + <select size="1"> + <option value="A">A</option> + <option value="C">C</option> + <option value="X" selected="selected">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox"></td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td><input type="text" class="engine" value="Windows Mobile 6"></td> + <td class="center"><input type="text" class="version" value="-"></td> + <td class="center"> + <select size="1"> + <option value="A">A</option> + <option value="C" selected="selected">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox"></td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td><input type="text" class="engine" value="PSP"></td> + <td class="center"><input type="text" class="version" value="-"></td> + <td class="center"> + <select size="1"> + <option value="A">A</option> + <option value="C" selected="selected">C</option> + <option value="X">X</option> + <option value="U">U</option> + </select> + </td> + <td class="center"><input type="checkbox"></td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td><input type="text" class="engine" value="-"></td> + <td class="center"><input type="text" class="version" value="-"></td> + <td class="center"> + <select size="1"> + <option value="A">A</option> + <option value="C">C</option> + <option value="X">X</option> + <option value="U" selected="selected">U</option> + </select> + </td> + <td class="center"><input type="checkbox"></td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + <th>Check</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">/* Create an array with the values of all the input boxes in a column */ +$.fn.dataTableExt.afnSortData['dom-text'] = function ( oSettings, iColumn ) +{ + var aData = []; + $( 'td:eq('+iColumn+') input', oSettings.oApi._fnGetTrNodes(oSettings) ).each( function () { + aData.push( this.value ); + } ); + return aData; +} + +/* Create an array with the values of all the select options in a column */ +$.fn.dataTableExt.afnSortData['dom-select'] = function ( oSettings, iColumn ) +{ + var aData = []; + $( 'td:eq('+iColumn+') select', oSettings.oApi._fnGetTrNodes(oSettings) ).each( function () { + aData.push( $(this).val() ); + } ); + return aData; +} + +/* Create an array with the values of all the checkboxes in a column */ +$.fn.dataTableExt.afnSortData['dom-checkbox'] = function ( oSettings, iColumn ) +{ + var aData = []; + $( 'td:eq('+iColumn+') input', oSettings.oApi._fnGetTrNodes(oSettings) ).each( function () { + aData.push( this.checked==true ? "1" : "0" ); + } ); + return aData; +} + +/* Initialise the table with the required column sorting data types */ +$(document).ready(function() { + $('#example').dataTable( { + "aoColumns": [ + null, + null, + { "sSortDataType": "dom-text" }, + { "sSortDataType": "dom-text", "sType": "numeric" }, + { "sSortDataType": "dom-select" }, + { "sSortDataType": "dom-checkbox" } + ] + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/plug-ins/html_sort.html b/src/warden-server/contrib/wardenweb/datatables/examples/plug-ins/html_sort.html new file mode 100644 index 0000000..8bf55c3 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/plug-ins/html_sort.html @@ -0,0 +1,209 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + jQuery.fn.dataTableExt.aTypes.push( + function ( sData ) { + return 'html'; + } + ); + + $(document).ready(function() { + $('#example').dataTable(); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables HTML sorting auto-detection example + </div> + + <h1>Preamble</h1> + <p>It can be very useful to have DataTables default to it's built in type of HTML, rather than string, which a column does not fit the requirements of any other type. The way this method works is to put the 'html' type at the end of aTypes, which means it will be set as that type only if none of the other types match the data in question.</p> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Reflection</th> + <th class="html">Link</th> + </tr> + </thead> + <tbody> + <tr> + <td>DataTables</td> + <td><a href="http://www.sprymedia.co.uk/article/DataTables">DataTables</a></td> + </tr> + <tr> + <td>Integrity</td> + <td><a href="http://www.sprymedia.co.uk/article/Integrity">A link to Integrity</a></td> + </tr> + <tr> + <td>Integrity</td> + <td><a href="http://www.sprymedia.co.uk/article/Integrity">Integrity</a></td> + </tr> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">jQuery.fn.dataTableExt.aTypes.push( + function ( sData ) { + return 'html'; + } +); + +$(document).ready(function() { + $('#example').dataTable(); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/plug-ins/paging_plugin.html b/src/warden-server/contrib/wardenweb/datatables/examples/plug-ins/paging_plugin.html new file mode 100644 index 0000000..83b3a40 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/plug-ins/paging_plugin.html @@ -0,0 +1,839 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> +/* Time between each scrolling frame */ +$.fn.dataTableExt.oPagination.iTweenTime = 100; + +$.fn.dataTableExt.oPagination.scrolling = { + "fnInit": function ( oSettings, nPaging, fnCallbackDraw ) + { + /* Store the next and previous elements in the oSettings object as they can be very + * usful for automation - particularly testing + */ + var nPrevious = document.createElement( 'div' ); + var nNext = document.createElement( 'div' ); + + if ( oSettings.sTableId !== '' ) + { + nPaging.setAttribute( 'id', oSettings.sTableId+'_paginate' ); + nPrevious.setAttribute( 'id', oSettings.sTableId+'_previous' ); + nNext.setAttribute( 'id', oSettings.sTableId+'_next' ); + } + + nPrevious.className = "paginate_disabled_previous"; + nNext.className = "paginate_disabled_next"; + + nPrevious.title = oSettings.oLanguage.oPaginate.sPrevious; + nNext.title = oSettings.oLanguage.oPaginate.sNext; + + nPaging.appendChild( nPrevious ); + nPaging.appendChild( nNext ); + + $(nPrevious).click( function() { + /* Disallow paging event during a current paging event */ + if ( typeof oSettings.iPagingLoopStart != 'undefined' && oSettings.iPagingLoopStart != -1 ) + { + return; + } + + oSettings.iPagingLoopStart = oSettings._iDisplayStart; + oSettings.iPagingEnd = oSettings._iDisplayStart - oSettings._iDisplayLength; + + /* Correct for underrun */ + if ( oSettings.iPagingEnd < 0 ) + { + oSettings.iPagingEnd = 0; + } + + var iTween = $.fn.dataTableExt.oPagination.iTweenTime; + var innerLoop = function () { + if ( oSettings.iPagingLoopStart > oSettings.iPagingEnd ) { + oSettings.iPagingLoopStart--; + oSettings._iDisplayStart = oSettings.iPagingLoopStart; + fnCallbackDraw( oSettings ); + setTimeout( function() { innerLoop(); }, iTween ); + } else { + oSettings.iPagingLoopStart = -1; + } + }; + innerLoop(); + } ); + + $(nNext).click( function() { + /* Disallow paging event during a current paging event */ + if ( typeof oSettings.iPagingLoopStart != 'undefined' && oSettings.iPagingLoopStart != -1 ) + { + return; + } + + oSettings.iPagingLoopStart = oSettings._iDisplayStart; + + /* Make sure we are not over running the display array */ + if ( oSettings._iDisplayStart + oSettings._iDisplayLength < oSettings.fnRecordsDisplay() ) + { + oSettings.iPagingEnd = oSettings._iDisplayStart + oSettings._iDisplayLength; + } + + var iTween = $.fn.dataTableExt.oPagination.iTweenTime; + var innerLoop = function () { + if ( oSettings.iPagingLoopStart < oSettings.iPagingEnd ) { + oSettings.iPagingLoopStart++; + oSettings._iDisplayStart = oSettings.iPagingLoopStart; + fnCallbackDraw( oSettings ); + setTimeout( function() { innerLoop(); }, iTween ); + } else { + oSettings.iPagingLoopStart = -1; + } + }; + innerLoop(); + } ); + + /* Take the brutal approach to cancelling text selection */ + $(nPrevious).bind( 'selectstart', function () { return false; } ); + $(nNext).bind( 'selectstart', function () { return false; } ); + }, + + "fnUpdate": function ( oSettings, fnCallbackDraw ) + { + if ( !oSettings.aanFeatures.p ) + { + return; + } + + /* Loop over each instance of the pager */ + var an = oSettings.aanFeatures.p; + for ( var i=0, iLen=an.length ; i<iLen ; i++ ) + { + if ( an[i].childNodes.length !== 0 ) + { + an[i].childNodes[0].className = + ( oSettings._iDisplayStart === 0 ) ? + oSettings.oClasses.sPagePrevDisabled : oSettings.oClasses.sPagePrevEnabled; + + an[i].childNodes[1].className = + ( oSettings.fnDisplayEnd() == oSettings.fnRecordsDisplay() ) ? + oSettings.oClasses.sPageNextDisabled : oSettings.oClasses.sPageNextEnabled; + } + } + } +} + + $(document).ready(function() { + $('#example').dataTable( { + "sPaginationType": "scrolling" + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables custom pagination plug-in example + </div> + + <h1>Preamble</h1> + <p>The two default pagination styles that DataTables comes with are great for basic tables, but you might which to add extra customisation or a bit of 'glitz'. This plug-in will scroll the table in an animated style.</p> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">/* Time between each scrolling frame */ +$.fn.dataTableExt.oPagination.iTweenTime = 100; + +$.fn.dataTableExt.oPagination.scrolling = { + "fnInit": function ( oSettings, nPaging, fnCallbackDraw ) + { + /* Store the next and previous elements in the oSettings object as they can be very + * usful for automation - particularly testing + */ + var nPrevious = document.createElement( 'div' ); + var nNext = document.createElement( 'div' ); + + if ( oSettings.sTableId !== '' ) + { + nPaging.setAttribute( 'id', oSettings.sTableId+'_paginate' ); + nPrevious.setAttribute( 'id', oSettings.sTableId+'_previous' ); + nNext.setAttribute( 'id', oSettings.sTableId+'_next' ); + } + + nPrevious.className = "paginate_disabled_previous"; + nNext.className = "paginate_disabled_next"; + + nPrevious.title = oSettings.oLanguage.oPaginate.sPrevious; + nNext.title = oSettings.oLanguage.oPaginate.sNext; + + nPaging.appendChild( nPrevious ); + nPaging.appendChild( nNext ); + + $(nPrevious).click( function() { + /* Disallow paging event during a current paging event */ + if ( typeof oSettings.iPagingLoopStart != 'undefined' && oSettings.iPagingLoopStart != -1 ) + { + return; + } + + oSettings.iPagingLoopStart = oSettings._iDisplayStart; + oSettings.iPagingEnd = oSettings._iDisplayStart - oSettings._iDisplayLength; + + /* Correct for underrun */ + if ( oSettings.iPagingEnd < 0 ) + { + oSettings.iPagingEnd = 0; + } + + var iTween = $.fn.dataTableExt.oPagination.iTweenTime; + var innerLoop = function () { + if ( oSettings.iPagingLoopStart > oSettings.iPagingEnd ) { + oSettings.iPagingLoopStart--; + oSettings._iDisplayStart = oSettings.iPagingLoopStart; + fnCallbackDraw( oSettings ); + setTimeout( function() { innerLoop(); }, iTween ); + } else { + oSettings.iPagingLoopStart = -1; + } + }; + innerLoop(); + } ); + + $(nNext).click( function() { + /* Disallow paging event during a current paging event */ + if ( typeof oSettings.iPagingLoopStart != 'undefined' && oSettings.iPagingLoopStart != -1 ) + { + return; + } + + oSettings.iPagingLoopStart = oSettings._iDisplayStart; + + /* Make sure we are not over running the display array */ + if ( oSettings._iDisplayStart + oSettings._iDisplayLength < oSettings.fnRecordsDisplay() ) + { + oSettings.iPagingEnd = oSettings._iDisplayStart + oSettings._iDisplayLength; + } + + var iTween = $.fn.dataTableExt.oPagination.iTweenTime; + var innerLoop = function () { + if ( oSettings.iPagingLoopStart < oSettings.iPagingEnd ) { + oSettings.iPagingLoopStart++; + oSettings._iDisplayStart = oSettings.iPagingLoopStart; + fnCallbackDraw( oSettings ); + setTimeout( function() { innerLoop(); }, iTween ); + } else { + oSettings.iPagingLoopStart = -1; + } + }; + innerLoop(); + } ); + + /* Take the brutal approach to cancelling text selection */ + $(nPrevious).bind( 'selectstart', function () { return false; } ); + $(nNext).bind( 'selectstart', function () { return false; } ); + }, + + "fnUpdate": function ( oSettings, fnCallbackDraw ) + { + if ( !oSettings.aanFeatures.p ) + { + return; + } + + /* Loop over each instance of the pager */ + var an = oSettings.aanFeatures.p; + for ( var i=0, iLen=an.length ; i<iLen ; i++ ) + { + if ( an[i].childNodes.length !== 0 ) + { + an[i].childNodes[0].className = + ( oSettings._iDisplayStart === 0 ) ? + oSettings.oClasses.sPagePrevDisabled : oSettings.oClasses.sPagePrevEnabled; + + an[i].childNodes[1].className = + ( oSettings.fnDisplayEnd() == oSettings.fnRecordsDisplay() ) ? + oSettings.oClasses.sPageNextDisabled : oSettings.oClasses.sPageNextEnabled; + } + } + } +} + +$(document).ready(function() { + $('#example').dataTable( { + "sPaginationType": "scrolling" + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/plug-ins/plugin_api.html b/src/warden-server/contrib/wardenweb/datatables/examples/plug-ins/plugin_api.html new file mode 100644 index 0000000..0b68be5 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/plug-ins/plugin_api.html @@ -0,0 +1,669 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + /* + * Function: fnGetHiddenTrNodes + * Purpose: Get all of the hidden TR nodes (i.e. the ones which aren't on display) + * Returns: array: + * Inputs: object:oSettings - DataTables settings object + */ + $.fn.dataTableExt.oApi.fnGetHiddenTrNodes = function ( oSettings ) + { + /* Note the use of a DataTables 'private' function thought the 'oApi' object */ + var anNodes = this.oApi._fnGetTrNodes( oSettings ); + var anDisplay = $('tbody tr', oSettings.nTable); + + /* Remove nodes which are being displayed */ + for ( var i=0 ; i<anDisplay.length ; i++ ) + { + var iIndex = jQuery.inArray( anDisplay[i], anNodes ); + if ( iIndex != -1 ) + { + anNodes.splice( iIndex, 1 ); + } + } + + /* Fire back the array to the caller */ + return anNodes; + } + + /* Init the table and fire off a call to get the hidden nodes. */ + var oTable; + $(document).ready(function() { + var oTable = $('#example').dataTable(); + + $('#button').click( function () { + var nHidden = oTable.fnGetHiddenTrNodes( ); + alert( nHidden.length +' nodes were returned' ); + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables new API function plug-in example + </div> + + <h1>Preamble</h1> + <p>DataTables presents a number of useful API functions to the calling code which can be used to manipulate the table data as required. But there are times when DataTables doesn't provide the API function that you want - so for this DataTables allows a method by which custom API functions can be defined (effectively a plug-in). This is done by adding functions the <b>$.fn.dataTableExt.oApi</b> object, which will be registered by DataTables. Each function is passed a single parameter, the settings object for the table in question.</p> + <p>In the example below, I present an API function which is used to obtain all of the TR rows which are currently not on display (useful for building a form from the table).</p> + + <h1>Live example</h1> + <a id="button" href="javascript:void(0);">Click to get hidden rows</a> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">/* + * Function: fnGetHiddenTrNodes + * Purpose: Get all of the hidden TR nodes (i.e. the ones which aren't on display) + * Returns: array: + * Inputs: object:oSettings - DataTables settings object + */ +$.fn.dataTableExt.oApi.fnGetHiddenTrNodes = function ( oSettings ) +{ + /* Note the use of a DataTables 'private' function thought the 'oApi' object */ + var anNodes = this.oApi._fnGetTrNodes( oSettings ); + var anDisplay = $('tbody tr', oSettings.nTable); + + /* Remove nodes which are being displayed */ + for ( var i=0 ; i<anDisplay.length ; i++ ) + { + var iIndex = jQuery.inArray( anDisplay[i], anNodes ); + if ( iIndex != -1 ) + { + anNodes.splice( iIndex, 1 ); + } + } + + /* Fire back the array to the caller */ + return anNodes; +} + +/* Init the table and fire off a call to get the hidden nodes. */ +var oTable; +$(document).ready(function() { + var oTable = $('#example').dataTable(); + + $('#button').click( function () { + var nHidden = oTable.fnGetHiddenTrNodes(); + alert( nHidden.length +' nodes were returned' ); + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/plug-ins/range_filtering.html b/src/warden-server/contrib/wardenweb/datatables/examples/plug-ins/range_filtering.html new file mode 100644 index 0000000..c79915d --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/plug-ins/range_filtering.html @@ -0,0 +1,673 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + /* Custom filtering function which will filter data in column four between two values */ + $.fn.dataTableExt.afnFiltering.push( + function( oSettings, aData, iDataIndex ) { + var iMin = document.getElementById('min').value * 1; + var iMax = document.getElementById('max').value * 1; + var iVersion = aData[3] == "-" ? 0 : aData[3]*1; + if ( iMin == "" && iMax == "" ) + { + return true; + } + else if ( iMin == "" && iVersion < iMax ) + { + return true; + } + else if ( iMin < iVersion && "" == iMax ) + { + return true; + } + else if ( iMin < iVersion && iVersion < iMax ) + { + return true; + } + return false; + } + ); + + $(document).ready(function() { + /* Initialise datatables */ + var oTable = $('#example').dataTable(); + + /* Add event listeners to the two range filtering inputs */ + $('#min').keyup( function() { oTable.fnDraw(); } ); + $('#max').keyup( function() { oTable.fnDraw(); } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables custom filtering (range filtering) example + </div> + + <h1>Preamble</h1> + <p>There may be occasions when you wish to filter data presented to the end user in your own manner, common examples are number range filtering (in between two numbers) and date range filtering. DataTables provide an API method to add your own filtering functions, <b>$.fn.dataTableExt.afnFiltering</b>. This is an array of functions (push your own onto it) which will will be run at table draw time to see if a particular row should be included or not.</p> + + <h1>Live example</h1> + <table border="0" cellspacing="5" cellpadding="5"> + <tr> + <td>Minimum engine version:</td> + <td><input type="text" id="min" name="min"></td> + </tr> + <tr> + <td>Maximum engine version:</td> + <td><input type="text" id="max" name="max"></td> + </tr> + </table> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">/* Custom filtering function which will filter data in column four between two values */ +$.fn.dataTableExt.afnFiltering.push( + function( oSettings, aData, iDataIndex ) { + var iMin = document.getElementById('min').value * 1; + var iMax = document.getElementById('max').value * 1; + var iVersion = aData[3] == "-" ? 0 : aData[3]*1; + if ( iMin == "" && iMax == "" ) + { + return true; + } + else if ( iMin == "" && iVersion < iMax ) + { + return true; + } + else if ( iMin < iVersion && "" == iMax ) + { + return true; + } + else if ( iMin < iVersion && iVersion < iMax ) + { + return true; + } + return false; + } +); + +$(document).ready(function() { + /* Initialise datatables */ + var oTable = $('#example').dataTable(); + + /* Add event listeners to the two range filtering inputs */ + $('#min').keyup( function() { oTable.fnDraw(); } ); + $('#max').keyup( function() { oTable.fnDraw(); } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/plug-ins/sorting_plugin.html b/src/warden-server/contrib/wardenweb/datatables/examples/plug-ins/sorting_plugin.html new file mode 100644 index 0000000..980346c --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/plug-ins/sorting_plugin.html @@ -0,0 +1,702 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + /* Note 'unshift' does not work in IE6. A simply array concatenation would. This is used + * to give the custom type top priority + */ + jQuery.fn.dataTableExt.aTypes.unshift( + function ( sData ) + { + var sValidChars = "0123456789-,"; + var Char; + var bDecimal = false; + + /* Check the numeric part */ + for ( i=0 ; i<sData.length ; i++ ) + { + Char = sData.charAt(i); + if (sValidChars.indexOf(Char) == -1) + { + return null; + } + + /* Only allowed one decimal place... */ + if ( Char == "," ) + { + if ( bDecimal ) + { + return null; + } + bDecimal = true; + } + } + + return 'numeric-comma'; + } + ); + + jQuery.fn.dataTableExt.oSort['numeric-comma-asc'] = function(a,b) { + var x = (a == "-") ? 0 : a.replace( /,/, "." ); + var y = (b == "-") ? 0 : b.replace( /,/, "." ); + x = parseFloat( x ); + y = parseFloat( y ); + return ((x < y) ? -1 : ((x > y) ? 1 : 0)); + }; + + jQuery.fn.dataTableExt.oSort['numeric-comma-desc'] = function(a,b) { + var x = (a == "-") ? 0 : a.replace( /,/, "." ); + var y = (b == "-") ? 0 : b.replace( /,/, "." ); + x = parseFloat( x ); + y = parseFloat( y ); + return ((x < y) ? 1 : ((x > y) ? -1 : 0)); + }; + + $(document).ready(function() { + $('#example').dataTable(); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables sorting and type detection example + </div> + + <h1>Preamble</h1> + <p>When dealing with your own data formatting, it can often be very useful to have DataTables detect data types and sorting them accordingly for types which are not build into DataTables. For this reason plug-in support is provided to allow custom type detection and sorting.</p> + <p>This example shows sorting with a comma (',') for a decimal place. These plug-ins (and others can be found on <a href="http://www.datatables.net/plug-ins">DataTables.net</a>.</p> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5,5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1,7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1,8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1,8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1,9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1,8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1,8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1,7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1,7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1,8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1,1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1,2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1,3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1,4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1,5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1,6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1,7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1,8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1,8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1,8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125,5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312,8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419,3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522,1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420,1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8,5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3,1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3,3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3,5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">/* Note 'unshift' does not work in IE6. A simply array concatenation would. This is used + * to give the custom type top priority + */ +jQuery.fn.dataTableExt.aTypes.unshift( + function ( sData ) + { + var sValidChars = "0123456789-,"; + var Char; + var bDecimal = false; + + /* Check the numeric part */ + for ( i=0 ; i<sData.length ; i++ ) + { + Char = sData.charAt(i); + if (sValidChars.indexOf(Char) == -1) + { + return null; + } + + /* Only allowed one decimal place... */ + if ( Char == "," ) + { + if ( bDecimal ) + { + return null; + } + bDecimal = true; + } + } + + return 'numeric-comma'; + } +); + +jQuery.fn.dataTableExt.oSort['numeric-comma-asc'] = function(a,b) { + var x = (a == "-") ? 0 : a.replace( /,/, "." ); + var y = (b == "-") ? 0 : b.replace( /,/, "." ); + x = parseFloat( x ); + y = parseFloat( y ); + return ((x < y) ? -1 : ((x > y) ? 1 : 0)); +}; + +jQuery.fn.dataTableExt.oSort['numeric-comma-desc'] = function(a,b) { + var x = (a == "-") ? 0 : a.replace( /,/, "." ); + var y = (b == "-") ? 0 : b.replace( /,/, "." ); + x = parseFloat( x ); + y = parseFloat( y ); + return ((x < y) ? 1 : ((x > y) ? -1 : 0)); +}; + +$(document).ready(function() { + $('#example').dataTable(); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/plug-ins/sorting_sType.html b/src/warden-server/contrib/wardenweb/datatables/examples/plug-ins/sorting_sType.html new file mode 100644 index 0000000..823e589 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/plug-ins/sorting_sType.html @@ -0,0 +1,650 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + jQuery.fn.dataTableExt.oSort['numeric-comma-asc'] = function(a,b) { + var x = (a == "-") ? 0 : a.replace( /,/, "." ); + var y = (b == "-") ? 0 : b.replace( /,/, "." ); + x = parseFloat( x ); + y = parseFloat( y ); + return ((x < y) ? -1 : ((x > y) ? 1 : 0)); + }; + + jQuery.fn.dataTableExt.oSort['numeric-comma-desc'] = function(a,b) { + var x = (a == "-") ? 0 : a.replace( /,/, "." ); + var y = (b == "-") ? 0 : b.replace( /,/, "." ); + x = parseFloat( x ); + y = parseFloat( y ); + return ((x < y) ? 1 : ((x > y) ? -1 : 0)); + }; + + $(document).ready(function() { + $('#example').dataTable( { + "aoColumns": [ + null, + null, + null, + { "sType": "numeric-comma" }, + null + ] + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables sorting plug-in example + </div> + + <h1>Preamble</h1> + <p>When dealing with your own data formats, it can be desirable to define how you want sorting to occur. Using plug-in sorting functions, you have have DataTables sort data in any manner you wish. You tell DataTables how to sort a column by using the sType parameter - if it is not given then DataTables will attempt to automatically detect the type based on it's built in formatting functions.</p> + <p>This example shows sorting with a comma (',') for a decimal place. This sorting plug-in (and others can be found on <a href="http://www.datatables.net/plug-ins/sorting">DataTables.net</a>.</p> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5,5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1,7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1,8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1,8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1,9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1,8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1,8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1,7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1,7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1,8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1,1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1,2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1,3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1,4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1,5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1,6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1,7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1,8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1,8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1,8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125,5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312,8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419,3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522,1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420,1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8,5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3,1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3,3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3,5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">jQuery.fn.dataTableExt.oSort['numeric-comma-asc'] = function(a,b) { + var x = (a == "-") ? 0 : a.replace( /,/, "." ); + var y = (b == "-") ? 0 : b.replace( /,/, "." ); + x = parseFloat( x ); + y = parseFloat( y ); + return ((x < y) ? -1 : ((x > y) ? 1 : 0)); +}; + +jQuery.fn.dataTableExt.oSort['numeric-comma-desc'] = function(a,b) { + var x = (a == "-") ? 0 : a.replace( /,/, "." ); + var y = (b == "-") ? 0 : b.replace( /,/, "." ); + x = parseFloat( x ); + y = parseFloat( y ); + return ((x < y) ? 1 : ((x > y) ? -1 : 0)); +}; + +$(document).ready(function() { + $('#example').dataTable( { + "aoColumns": [ + null, + null, + null, + { "sType": "numeric-comma" }, + null + ] + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/server_side/custom_vars.html b/src/warden-server/contrib/wardenweb/datatables/examples/server_side/custom_vars.html new file mode 100644 index 0000000..c5af8db --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/server_side/custom_vars.html @@ -0,0 +1,219 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + $('#example').dataTable( { + "bProcessing": true, + "bServerSide": true, + "sAjaxSource": "scripts/server_processing.php", + "fnServerParams": function ( aoData ) { + aoData.push( { "name": "more_data", "value": "my_value" } ); + } + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables server-side processing example + </div> + + <h1>Preamble</h1> + <p>It can often be useful to send a little bit of extra information to the server when utilising DataTables' server-side processing option. This can be done by using the <a href="http://datatables.net/ref#fnServerParams">fnServerParams</a> callback function which is called whenever an XHR is sent to the server. fnServerParams Takes a single parameter, the array of name/value pairs of parameters that are to be sent to the server. You can manipulate this as you require - typically adding another parameter, as shown in this example.</p> + + <h1>Live example</h1> + <div id="dynamic"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th width="20%">Rendering engine</th> + <th width="25%">Browser</th> + <th width="25%">Platform(s)</th> + <th width="15%">Engine version</th> + <th width="15%">CSS grade</th> + </tr> + </thead> + <tbody> + <tr> + <td colspan="5" class="dataTables_empty">Loading data from server</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + $('#example').dataTable( { + "bProcessing": true, + "bServerSide": true, + "sAjaxSource": "scripts/server_processing.php" + "fnServerParams": function ( aoData ) { + aoData.push( { "name": "more_data", "value": "my_value" } ); + } + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + <h1>Server response</h1> + <p>The code below shows the latest JSON data that has been returned from the server in response to the Ajax request made by DataTables. This will update as further requests are made.</p> + <pre id="latest_xhr" class="brush: js;"></pre> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/server_side/defer_loading.html b/src/warden-server/contrib/wardenweb/datatables/examples/server_side/defer_loading.html new file mode 100644 index 0000000..924a802 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/server_side/defer_loading.html @@ -0,0 +1,282 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + $('#example').dataTable( { + "bProcessing": true, + "bServerSide": true, + "sAjaxSource": "scripts/server_processing.php", + "iDeferLoading": 57 + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables server-side processing example with deferred loading + </div> + + <h1>Preamble</h1> + <p>When using DataTables with server-side processing the default behaviour is to have DataTables automatically go the server and load the data, removing anything which might already be on the page. However, this behaviour might not always be desirable when the first page of the table has already been preloaded in the HTML. This is achieved by using the <i>iDeferLoading</i> initialisation property. It serves two purposes, firstly to include that deferred loading is required, but also to tell DataTables how many records there are in the full table, in this case 57 (this allows the information element and pagination to be displayed correctly).</p> + + <p>In this example the preloaded data is hardcoded in, but you could use a PHP include or anything else to put the data in the table for the first page - DataTables won't process it at all, simply display it and be ready to load the next page / search / sort etc.</p> + + <h1>Live example</h1> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th width="20%">Rendering engine</th> + <th width="25%">Browser</th> + <th width="25%">Platform(s)</th> + <th width="15%">Engine version</th> + <th width="15%">CSS grade</th> + </tr> + </thead> + <tbody> + <tr> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td>1.7</td> + <td>A</td> + </tr> + <tr> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td>1.8</td> + <td>A</td> + </tr> + <tr> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td>1.8</td> + <td>A</td> + </tr> + <tr> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td>1.9</td> + <td>A</td> + </tr> + <tr> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td>1.8</td> + <td>A</td> + </tr> + <tr> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td>1.8</td> + <td>A</td> + </tr> + <tr> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td>1.7</td> + <td>A</td> + </tr> + <tr> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td>1.7</td> + <td>A</td> + </tr> + <tr> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td>1.8</td> + <td>A</td> + </tr> + <tr> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td>1</td> + <td>A</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + $('#example').dataTable( { + "bProcessing": true, + "bServerSide": true, + "sAjaxSource": "scripts/server_processing.php", + "iDeferLoading": 57 + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + <h1>Server response</h1> + <p>The code below shows the latest JSON data that has been returned from the server in response to the Ajax request made by DataTables. This will update as further requests are made.</p> + <pre id="latest_xhr" class="brush: js;"></pre> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/server_side/editable.html b/src/warden-server/contrib/wardenweb/datatables/examples/server_side/editable.html new file mode 100644 index 0000000..6cbadf3 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/server_side/editable.html @@ -0,0 +1,232 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../examples_support/jquery.jeditable.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + var oTable = $('#example').dataTable( { + "bProcessing": true, + "bServerSide": true, + "sAjaxSource": "scripts/server_processing.php", + "fnDrawCallback": function () { + $('#example tbody td').editable( '../examples_support/editable_ajax.php', { + "callback": function( sValue, y ) { + /* Redraw the table from the new data on the server */ + oTable.fnDraw(); + }, + "height": "14px" + } ); + } + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables server-side processing example + </div> + + <h1>Preamble</h1> + <p>When using server-side processing and you wish to integrate the <a href="http://www.appelsiini.net/projects/jeditable">jEditable plug-in for jQuery</a> with DataTables, you need to consider that each time data is returned from the server, DataTables will build new DOM elements - so these need the jEditable event handlers applied to them. This is down through use of the fnDrawCallback function.</p> + + <h1>Live example</h1> + <div id="dynamic"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th width="20%">Rendering engine</th> + <th width="25%">Browser</th> + <th width="25%">Platform(s)</th> + <th width="15%">Engine version</th> + <th width="15%">CSS grade</th> + </tr> + </thead> + <tbody> + <tr> + <td colspan="5" class="dataTables_empty">Loading data from server</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + var oTable = $('#example').dataTable( { + "bProcessing": true, + "bServerSide": true, + "sAjaxSource": "scripts/server_processing.php", + "fnDrawCallback": function () { + $('#example tbody td').editable( '../examples_support/editable_ajax.php', { + "callback": function( sValue, y ) { + /* Redraw the table from the new data on the server */ + oTable.fnDraw(); + }, + "height": "14px" + } ); + } + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + <h1>Server response</h1> + <p>The code below shows the latest JSON data that has been returned from the server in response to the Ajax request made by DataTables. This will update as further requests are made.</p> + <pre id="latest_xhr" class="brush: js;"></pre> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/server_side/ids.html b/src/warden-server/contrib/wardenweb/datatables/examples/server_side/ids.html new file mode 100644 index 0000000..0aac5a2 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/server_side/ids.html @@ -0,0 +1,213 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + $('#example').dataTable( { + "bProcessing": true, + "bServerSide": true, + "sAjaxSource": "scripts/id.php" + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables server-side processing example - automatic row ID addition + </div> + + <h1>Preamble</h1> + <p>Often when using server-side processing you will find that it can be useful to have a specific ID on each row (the row ID from the database for example). By assigning the ID you want to apply to each row using the property <b>DT_RowId</b> of the data source object for each row, DataTables will automatically add it for you. Likewise there is a <b>DT_RowClass</b> option which will add your given class. This example shows both and is a trivial modification of the server-side script to add these two options, with no changes on the client-side.</p> + + <h1>Live example</h1> + <div id="dynamic"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th width="20%">Rendering engine</th> + <th width="25%">Browser</th> + <th width="25%">Platform(s)</th> + <th width="15%">Engine version</th> + <th width="15%">CSS grade</th> + </tr> + </thead> + <tbody> + <tr> + <td colspan="5" class="dataTables_empty">Loading data from server</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + $('#example').dataTable( { + "bProcessing": true, + "bServerSide": true, + "sAjaxSource": "scripts/id.php" + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + <h1>Server response</h1> + <p>The code below shows the latest JSON data that has been returned from the server in response to the Ajax request made by DataTables. This will update as further requests are made.</p> + <pre id="latest_xhr" class="brush: js;"></pre> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/server_side/jsonp.html b/src/warden-server/contrib/wardenweb/datatables/examples/server_side/jsonp.html new file mode 100644 index 0000000..f959b32 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/server_side/jsonp.html @@ -0,0 +1,231 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + $('#example').dataTable( { + "bProcessing": true, + "bServerSide": true, + "sAjaxSource": "scripts/jsonp.php", + "fnServerData": function( sUrl, aoData, fnCallback ) { + $.ajax( { + "url": sUrl, + "data": aoData, + "success": fnCallback, + "dataType": "jsonp", + "cache": false + } ); + } + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables server-side processing example with JSONP + </div> + + <h1>Preamble</h1> + <p><a href="http://bob.pythonmac.org/archives/2005/12/05/remote-json-jsonp/">JSONP</a> is a method of using JSON data from any server, regardless of XSS protection that modern browsers use. It is very useful for being able to retrieve JSON data from any domain name you choose and is easy to integrate with DataTables, thanks to jQuery's Ajax handler, as shown in this example.</p> + + <h1>Live example</h1> + <div id="dynamic"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th width="20%">Rendering engine</th> + <th width="25%">Browser</th> + <th width="25%">Platform(s)</th> + <th width="15%">Engine version</th> + <th width="15%">CSS grade</th> + </tr> + </thead> + <tbody> + <tr> + <td colspan="5" class="dataTables_empty">Loading data from server</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + $('#example').dataTable( { + "bProcessing": true, + "bServerSide": true, + "sAjaxSource": "scripts/jsonp.php", + "fnServerData": function( sUrl, aoData, fnCallback ) { + $.ajax( { + "url": sUrl, + "data": aoData, + "success": fnCallback, + "dataType": "jsonp", + "cache": false + } ); + } + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + <h1>Server response</h1> + <p>The code below shows the latest JSON data that has been returned from the server in response to the Ajax request made by DataTables. This will update as further requests are made.</p> + <pre id="latest_xhr" class="brush: js;"></pre> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/server_side/object_data.html b/src/warden-server/contrib/wardenweb/datatables/examples/server_side/object_data.html new file mode 100644 index 0000000..47c06c3 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/server_side/object_data.html @@ -0,0 +1,228 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + $('#example').dataTable( { + "bProcessing": true, + "bServerSide": true, + "sAjaxSource": "scripts/objects.php", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables server-side processing example - object based data source + </div> + + <h1>Preamble</h1> + <p>The "native" data format that DataTables expects for server-side processing is a 2D array of data (rows by columns). However, this is often not flexible enough for either the server-side environment, or you might want to convey more information in the data source than is necessary to show in the table (row IDs from the database for example). For this DataTables supports the reading of data for objects as well as arrays.</p> + <p>In this example the server responds with an array of objects, and DataTables will look up each property that is specified by the <b>mDataProp</b> property given for each column</p> + + <h1>Live example</h1> + <div id="dynamic"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th width="20%">Rendering engine</th> + <th width="25%">Browser</th> + <th width="25%">Platform(s)</th> + <th width="15%">Engine version</th> + <th width="15%">CSS grade</th> + </tr> + </thead> + <tbody> + <tr> + <td colspan="5" class="dataTables_empty">Loading data from server</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + $('#example').dataTable( { + "bProcessing": true, + "bServerSide": true, + "sAjaxSource": "scripts/objects.php", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + <h1>Server response</h1> + <p>The code below shows the latest JSON data that has been returned from the server in response to the Ajax request made by DataTables. This will update as further requests are made.</p> + <pre id="latest_xhr" class="brush: js;"></pre> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/server_side/pipeline.html b/src/warden-server/contrib/wardenweb/datatables/examples/server_side/pipeline.html new file mode 100644 index 0000000..e629848 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/server_side/pipeline.html @@ -0,0 +1,422 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + var oCache = { + iCacheLower: -1 + }; + + function fnSetKey( aoData, sKey, mValue ) + { + for ( var i=0, iLen=aoData.length ; i<iLen ; i++ ) + { + if ( aoData[i].name == sKey ) + { + aoData[i].value = mValue; + } + } + } + + function fnGetKey( aoData, sKey ) + { + for ( var i=0, iLen=aoData.length ; i<iLen ; i++ ) + { + if ( aoData[i].name == sKey ) + { + return aoData[i].value; + } + } + return null; + } + + function fnDataTablesPipeline ( sSource, aoData, fnCallback ) { + var iPipe = 5; /* Ajust the pipe size */ + + var bNeedServer = false; + var sEcho = fnGetKey(aoData, "sEcho"); + var iRequestStart = fnGetKey(aoData, "iDisplayStart"); + var iRequestLength = fnGetKey(aoData, "iDisplayLength"); + var iRequestEnd = iRequestStart + iRequestLength; + oCache.iDisplayStart = iRequestStart; + + /* outside pipeline? */ + if ( oCache.iCacheLower < 0 || iRequestStart < oCache.iCacheLower || iRequestEnd > oCache.iCacheUpper ) + { + bNeedServer = true; + } + + /* sorting etc changed? */ + if ( oCache.lastRequest && !bNeedServer ) + { + for( var i=0, iLen=aoData.length ; i<iLen ; i++ ) + { + if ( aoData[i].name != "iDisplayStart" && aoData[i].name != "iDisplayLength" && aoData[i].name != "sEcho" ) + { + if ( aoData[i].value != oCache.lastRequest[i].value ) + { + bNeedServer = true; + break; + } + } + } + } + + /* Store the request for checking next time around */ + oCache.lastRequest = aoData.slice(); + + if ( bNeedServer ) + { + if ( iRequestStart < oCache.iCacheLower ) + { + iRequestStart = iRequestStart - (iRequestLength*(iPipe-1)); + if ( iRequestStart < 0 ) + { + iRequestStart = 0; + } + } + + oCache.iCacheLower = iRequestStart; + oCache.iCacheUpper = iRequestStart + (iRequestLength * iPipe); + oCache.iDisplayLength = fnGetKey( aoData, "iDisplayLength" ); + fnSetKey( aoData, "iDisplayStart", iRequestStart ); + fnSetKey( aoData, "iDisplayLength", iRequestLength*iPipe ); + + $.getJSON( sSource, aoData, function (json) { + /* Callback processing */ + oCache.lastJson = jQuery.extend(true, {}, json); + + if ( oCache.iCacheLower != oCache.iDisplayStart ) + { + json.aaData.splice( 0, oCache.iDisplayStart-oCache.iCacheLower ); + } + json.aaData.splice( oCache.iDisplayLength, json.aaData.length ); + + fnCallback(json) + } ); + } + else + { + json = jQuery.extend(true, {}, oCache.lastJson); + json.sEcho = sEcho; /* Update the echo for each response */ + json.aaData.splice( 0, iRequestStart-oCache.iCacheLower ); + json.aaData.splice( iRequestLength, json.aaData.length ); + fnCallback(json); + return; + } + } + + $(document).ready(function() { + $('#example').dataTable( { + "bProcessing": true, + "bServerSide": true, + "sAjaxSource": "scripts/server_processing.php", + "fnServerData": fnDataTablesPipeline + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables server-side processing with pipelining example + </div> + + <h1>Preamble</h1> + <p>When using server-side processing with DataTables, it can be quite intensive on your server having an Ajax call every time the user performs some kind of interaction - you can effectively DDOS your server with your own application!</p> + <p>This example shows how you might over-come this by modifying the request set to the server to retrieve more information than is actually required for a single page's display. This means that the user can page multiple times (5 times the display size is the default) before a request must be made of the server. Paging is typically the most common interaction performed with a DataTable, so this can be most beneficial to your server's resource usage. Of course the pipeline must be cleared for interactions other than paging (sorting, filtering etc), but that's the trade off that can be made (sending extra information is cheap - while another XHR is expensive).</p> + + <h1>Live example</h1> + <div id="dynamic"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th width="20%">Rendering engine</th> + <th width="25%">Browser</th> + <th width="25%">Platform(s)</th> + <th width="15%">Engine version</th> + <th width="15%">CSS grade</th> + </tr> + </thead> + <tbody> + <tr> + <td colspan="5" class="dataTables_empty">Loading data from server</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">var oCache = { + iCacheLower: -1 +}; + +function fnSetKey( aoData, sKey, mValue ) +{ + for ( var i=0, iLen=aoData.length ; i<iLen ; i++ ) + { + if ( aoData[i].name == sKey ) + { + aoData[i].value = mValue; + } + } +} + +function fnGetKey( aoData, sKey ) +{ + for ( var i=0, iLen=aoData.length ; i<iLen ; i++ ) + { + if ( aoData[i].name == sKey ) + { + return aoData[i].value; + } + } + return null; +} + +function fnDataTablesPipeline ( sSource, aoData, fnCallback ) { + var iPipe = 5; /* Ajust the pipe size */ + + var bNeedServer = false; + var sEcho = fnGetKey(aoData, "sEcho"); + var iRequestStart = fnGetKey(aoData, "iDisplayStart"); + var iRequestLength = fnGetKey(aoData, "iDisplayLength"); + var iRequestEnd = iRequestStart + iRequestLength; + oCache.iDisplayStart = iRequestStart; + + /* outside pipeline? */ + if ( oCache.iCacheLower < 0 || iRequestStart < oCache.iCacheLower || iRequestEnd > oCache.iCacheUpper ) + { + bNeedServer = true; + } + + /* sorting etc changed? */ + if ( oCache.lastRequest && !bNeedServer ) + { + for( var i=0, iLen=aoData.length ; i<iLen ; i++ ) + { + if ( aoData[i].name != "iDisplayStart" && aoData[i].name != "iDisplayLength" && aoData[i].name != "sEcho" ) + { + if ( aoData[i].value != oCache.lastRequest[i].value ) + { + bNeedServer = true; + break; + } + } + } + } + + /* Store the request for checking next time around */ + oCache.lastRequest = aoData.slice(); + + if ( bNeedServer ) + { + if ( iRequestStart < oCache.iCacheLower ) + { + iRequestStart = iRequestStart - (iRequestLength*(iPipe-1)); + if ( iRequestStart < 0 ) + { + iRequestStart = 0; + } + } + + oCache.iCacheLower = iRequestStart; + oCache.iCacheUpper = iRequestStart + (iRequestLength * iPipe); + oCache.iDisplayLength = fnGetKey( aoData, "iDisplayLength" ); + fnSetKey( aoData, "iDisplayStart", iRequestStart ); + fnSetKey( aoData, "iDisplayLength", iRequestLength*iPipe ); + + $.getJSON( sSource, aoData, function (json) { + /* Callback processing */ + oCache.lastJson = jQuery.extend(true, {}, json); + + if ( oCache.iCacheLower != oCache.iDisplayStart ) + { + json.aaData.splice( 0, oCache.iDisplayStart-oCache.iCacheLower ); + } + json.aaData.splice( oCache.iDisplayLength, json.aaData.length ); + + fnCallback(json) + } ); + } + else + { + json = jQuery.extend(true, {}, oCache.lastJson); + json.sEcho = sEcho; /* Update the echo for each response */ + json.aaData.splice( 0, iRequestStart-oCache.iCacheLower ); + json.aaData.splice( iRequestLength, json.aaData.length ); + fnCallback(json); + return; + } +} + +$(document).ready(function() { + $('#example').dataTable( { + "bProcessing": true, + "bServerSide": true, + "sAjaxSource": "scripts/server_processing.php", + "fnServerData": fnDataTablesPipeline + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + <h1>Server response</h1> + <p>The code below shows the latest JSON data that has been returned from the server in response to the Ajax request made by DataTables. This will update as further requests are made.</p> + <pre id="latest_xhr" class="brush: js;"></pre> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/server_side/post.html b/src/warden-server/contrib/wardenweb/datatables/examples/server_side/post.html new file mode 100644 index 0000000..b8f9ac3 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/server_side/post.html @@ -0,0 +1,215 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + $('#example').dataTable( { + "bProcessing": true, + "bServerSide": true, + "sAjaxSource": "scripts/post.php", + "sServerMethod": "POST" + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables server-side processing with POST example + </div> + + <h1>Preamble</h1> + <p>The default HTTP method that DataTables uses to get data from the server-side if GET, however, there are times when you may wish to use POST. This is very easy using the sServerMethod initialisation parameter, which is simply set to the HTTP method that you want to use - the default is 'GET' and this example shows 'POST' being used.</p> + + <h1>Live example</h1> + <div id="dynamic"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th width="20%">Rendering engine</th> + <th width="25%">Browser</th> + <th width="25%">Platform(s)</th> + <th width="15%">Engine version</th> + <th width="15%">CSS grade</th> + </tr> + </thead> + <tbody> + <tr> + <td colspan="5" class="dataTables_empty">Loading data from server</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + $('#example').dataTable( { + "bProcessing": true, + "bServerSide": true, + "sAjaxSource": "scripts/post.php", + "sServerMethod": "POST" + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + <h1>Server response</h1> + <p>The code below shows the latest JSON data that has been returned from the server in response to the Ajax request made by DataTables. This will update as further requests are made.</p> + <pre id="latest_xhr" class="brush: js;"></pre> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/server_side/row_details.html b/src/warden-server/contrib/wardenweb/datatables/examples/server_side/row_details.html new file mode 100644 index 0000000..ee097b9 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/server_side/row_details.html @@ -0,0 +1,295 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + var oTable; + + /* Formating function for row details */ + function fnFormatDetails ( nTr ) + { + var aData = oTable.fnGetData( nTr ); + var sOut = '<table cellpadding="5" cellspacing="0" border="0" style="padding-left:50px;">'; + sOut += '<tr><td>Rendering engine:</td><td>'+aData[2]+' '+aData[5]+'</td></tr>'; + sOut += '<tr><td>Link to source:</td><td>Could provide a link here</td></tr>'; + sOut += '<tr><td>Extra info:</td><td>And any further details here (images etc)</td></tr>'; + sOut += '</table>'; + + return sOut; + } + + $(document).ready(function() { + oTable = $('#example').dataTable( { + "bProcessing": true, + "bServerSide": true, + "sAjaxSource": "scripts/details_col.php", + "aoColumns": [ + { "sClass": "center", "bSortable": false }, + null, + null, + null, + { "sClass": "center" }, + { "sClass": "center" } + ], + "aaSorting": [[1, 'asc']] + } ); + + $('#example tbody td img').live( 'click', function () { + var nTr = $(this).parents('tr')[0]; + if ( oTable.fnIsOpen(nTr) ) + { + /* This row is already open - close it */ + this.src = "../examples_support/details_open.png"; + oTable.fnClose( nTr ); + } + else + { + /* Open this row */ + this.src = "../examples_support/details_close.png"; + oTable.fnOpen( nTr, fnFormatDetails(nTr), 'details' ); + } + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables server-side processing example with hidden row information + </div> + + <h1>Preamble</h1> + <p>This example shows how you might modify the client-side show/hide details rows example for use with DataTables server-side processing option.</p> + + <h1>Live example</h1> + <div id="dynamic"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th width="4%"></th> + <th width="25%">Rendering engine</th> + <th width="20%">Browser</th> + <th width="25%">Platform(s)</th> + <th width="16%">Engine version</th> + <th width="10%">CSS grade</th> + </tr> + </thead> + <tbody> + <tr> + <td colspan="5" class="dataTables_empty">Loading data from server</td> + </tr> + </tbody> + <tfoot> + <tr> + <th></th> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">var oTable; + +/* Formating function for row details */ +function fnFormatDetails ( nTr ) +{ + var aData = oTable.fnGetData( nTr ); + var sOut = '<table cellpadding="5" cellspacing="0" border="0" style="padding-left:50px;">'; + sOut += '<tr><td>Rendering engine:</td><td>'+aData[2]+' '+aData[5]+'</td></tr>'; + sOut += '<tr><td>Link to source:</td><td>Could provide a link here</td></tr>'; + sOut += '<tr><td>Extra info:</td><td>And any further details here (images etc)</td></tr>'; + sOut += '</table>'; + + return sOut; +} + +$(document).ready(function() { + oTable = $('#example').dataTable( { + "bProcessing": true, + "bServerSide": true, + "sAjaxSource": "scripts/details_col.php", + "aoColumns": [ + { "sClass": "center", "bSortable": false }, + null, + null, + null, + { "sClass": "center" }, + { "sClass": "center" } + ], + "aaSorting": [[1, 'asc']] + } ); + + $('#example tbody td img').live( 'click', function () { + var nTr = $(this).parents('tr')[0]; + if ( oTable.fnIsOpen(nTr) ) + { + /* This row is already open - close it */ + this.src = "../examples_support/details_open.png"; + oTable.fnClose( nTr ); + } + else + { + /* Open this row */ + this.src = "../examples_support/details_close.png"; + oTable.fnOpen( nTr, fnFormatDetails(nTr), 'details' ); + } + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + <h1>Server response</h1> + <p>The code below shows the latest JSON data that has been returned from the server in response to the Ajax request made by DataTables. This will update as further requests are made.</p> + <pre id="latest_xhr" class="brush: js;"></pre> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/server_side/scripts/custom_data_property.php b/src/warden-server/contrib/wardenweb/datatables/examples/server_side/scripts/custom_data_property.php new file mode 100644 index 0000000..947eb2d --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/server_side/scripts/custom_data_property.php @@ -0,0 +1,174 @@ +<?php + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Easy set variables + */ + + /* Array of database columns which should be read and sent back to DataTables. Use a space where + * you want to insert a non-database field (for example a counter or static image) + */ + $aColumns = array( 'engine', 'browser', 'platform', 'version', 'grade' ); + + /* Indexed column (used for fast and accurate table cardinality) */ + $sIndexColumn = "id"; + + /* DB table to use */ + $sTable = "ajax"; + + /* Database connection information */ + $gaSql['user'] = ""; + $gaSql['password'] = ""; + $gaSql['db'] = ""; + $gaSql['server'] = "localhost"; + + /* REMOVE THIS LINE (it just includes my SQL connection user/pass) */ + include( $_SERVER['DOCUMENT_ROOT']."/datatables/mysql.php" ); + + + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * If you just want to use the basic configuration for DataTables with PHP server-side, there is + * no need to edit below this line + */ + + /* + * MySQL connection + */ + $gaSql['link'] = mysql_pconnect( $gaSql['server'], $gaSql['user'], $gaSql['password'] ) or + die( 'Could not open connection to server' ); + + mysql_select_db( $gaSql['db'], $gaSql['link'] ) or + die( 'Could not select database '. $gaSql['db'] ); + + + /* + * Paging + */ + $sLimit = ""; + if ( isset( $_GET['iDisplayStart'] ) && $_GET['iDisplayLength'] != '-1' ) + { + $sLimit = "LIMIT ".mysql_real_escape_string( $_GET['iDisplayStart'] ).", ". + mysql_real_escape_string( $_GET['iDisplayLength'] ); + } + + + /* + * Ordering + */ + $sOrder = ""; + if ( isset( $_GET['iSortCol_0'] ) ) + { + $sOrder = "ORDER BY "; + for ( $i=0 ; $i<intval( $_GET['iSortingCols'] ) ; $i++ ) + { + if ( $_GET[ 'bSortable_'.intval($_GET['iSortCol_'.$i]) ] == "true" ) + { + $sOrder .= $aColumns[ intval( $_GET['iSortCol_'.$i] ) ]." + ".mysql_real_escape_string( $_GET['sSortDir_'.$i] ) .", "; + } + } + + $sOrder = substr_replace( $sOrder, "", -2 ); + if ( $sOrder == "ORDER BY" ) + { + $sOrder = ""; + } + } + + + /* + * Filtering + * NOTE this does not match the built-in DataTables filtering which does it + * word by word on any field. It's possible to do here, but concerned about efficiency + * on very large tables, and MySQL's regex functionality is very limited + */ + $sWhere = ""; + if ( isset($_GET['sSearch']) && $_GET['sSearch'] != "" ) + { + $sWhere = "WHERE ("; + for ( $i=0 ; $i<count($aColumns) ; $i++ ) + { + $sWhere .= $aColumns[$i]." LIKE '%".mysql_real_escape_string( $_GET['sSearch'] )."%' OR "; + } + $sWhere = substr_replace( $sWhere, "", -3 ); + $sWhere .= ')'; + } + + /* Individual column filtering */ + for ( $i=0 ; $i<count($aColumns) ; $i++ ) + { + if ( isset($_GET['bSearchable_'.$i]) && $_GET['bSearchable_'.$i] == "true" && $_GET['sSearch_'.$i] != '' ) + { + if ( $sWhere == "" ) + { + $sWhere = "WHERE "; + } + else + { + $sWhere .= " AND "; + } + $sWhere .= $aColumns[$i]." LIKE '%".mysql_real_escape_string($_GET['sSearch_'.$i])."%' "; + } + } + + + /* + * SQL queries + * Get data to display + */ + $sQuery = " + SELECT SQL_CALC_FOUND_ROWS ".str_replace(" , ", " ", implode(", ", $aColumns))." + FROM $sTable + $sWhere + $sOrder + $sLimit + "; + $rResult = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error()); + + /* Data set length after filtering */ + $sQuery = " + SELECT FOUND_ROWS() + "; + $rResultFilterTotal = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error()); + $aResultFilterTotal = mysql_fetch_array($rResultFilterTotal); + $iFilteredTotal = $aResultFilterTotal[0]; + + /* Total data set length */ + $sQuery = " + SELECT COUNT(".$sIndexColumn.") + FROM $sTable + "; + $rResultTotal = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error()); + $aResultTotal = mysql_fetch_array($rResultTotal); + $iTotal = $aResultTotal[0]; + + + /* + * Output + */ + $output = array( + "sEcho" => intval($_GET['sEcho']), + "iTotalRecords" => $iTotal, + "iTotalDisplayRecords" => $iFilteredTotal, + "test" => array() + ); + + while ( $aRow = mysql_fetch_array( $rResult ) ) + { + $row = array(); + for ( $i=0 ; $i<count($aColumns) ; $i++ ) + { + if ( $aColumns[$i] == "version" ) + { + /* Special output formatting for 'version' column */ + $row[] = ($aRow[ $aColumns[$i] ]=="0") ? '-' : $aRow[ $aColumns[$i] ]; + } + else if ( $aColumns[$i] != ' ' ) + { + /* General output */ + $row[] = $aRow[ $aColumns[$i] ]; + } + } + $output['test'][] = $row; + } + + echo json_encode( $output ); +?> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/server_side/scripts/details_col.php b/src/warden-server/contrib/wardenweb/datatables/examples/server_side/scripts/details_col.php new file mode 100644 index 0000000..03e0cf9 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/server_side/scripts/details_col.php @@ -0,0 +1,179 @@ +<?php + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Easy set variables + */ + + /* Array of database columns which should be read and sent back to DataTables. Use a space where + * you want to insert a non-database field (for example a counter or static image) + */ + $aColumns = array( 'engine', 'browser', 'platform', 'version', 'grade' ); + + /* Indexed column (used for fast and accurate table cardinality) */ + $sIndexColumn = "id"; + + /* DB table to use */ + $sTable = "ajax"; + + /* Database connection information */ + $gaSql['user'] = ""; + $gaSql['password'] = ""; + $gaSql['db'] = ""; + $gaSql['server'] = "localhost"; + + /* REMOVE THIS LINE (it just includes my SQL connection user/pass) */ + include( $_SERVER['DOCUMENT_ROOT']."/datatables/mysql.php" ); + + + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * If you just want to use the basic configuration for DataTables with PHP server-side, there is + * no need to edit below this line + */ + + /* + * MySQL connection + */ + $gaSql['link'] = mysql_pconnect( $gaSql['server'], $gaSql['user'], $gaSql['password'] ) or + die( 'Could not open connection to server' ); + + mysql_select_db( $gaSql['db'], $gaSql['link'] ) or + die( 'Could not select database '. $gaSql['db'] ); + + + /* + * Paging + */ + $sLimit = ""; + if ( isset( $_GET['iDisplayStart'] ) && $_GET['iDisplayLength'] != '-1' ) + { + $sLimit = "LIMIT ".mysql_real_escape_string( $_GET['iDisplayStart'] ).", ". + mysql_real_escape_string( $_GET['iDisplayLength'] ); + } + + + /* + * Ordering + */ + $sOrder = ""; + if ( isset( $_GET['iSortCol_0'] ) ) + { + $sOrder = "ORDER BY "; + for ( $i=0 ; $i<intval( $_GET['iSortingCols'] ) ; $i++ ) + { + if ( $_GET[ 'bSortable_'.intval($_GET['iSortCol_'.$i]) ] == "true" ) + { + $sOrder .= $aColumns[ intval( $_GET['iSortCol_'.$i] )-1 ]." + ".mysql_real_escape_string( $_GET['sSortDir_'.$i] ) .", "; + } + } + + $sOrder = substr_replace( $sOrder, "", -2 ); + if ( $sOrder == "ORDER BY" ) + { + $sOrder = ""; + } + } + + + /* + * Filtering + * NOTE this does not match the built-in DataTables filtering which does it + * word by word on any field. It's possible to do here, but concerned about efficiency + * on very large tables, and MySQL's regex functionality is very limited + */ + $sWhere = ""; + if ( isset($_GET['sSearch']) && $_GET['sSearch'] != "" ) + { + $sWhere = "WHERE ("; + for ( $i=0 ; $i<count($aColumns) ; $i++ ) + { + $sWhere .= $aColumns[$i]." LIKE '%".mysql_real_escape_string( $_GET['sSearch'] )."%' OR "; + } + $sWhere = substr_replace( $sWhere, "", -3 ); + $sWhere .= ')'; + } + + /* Individual column filtering */ + for ( $i=0 ; $i<count($aColumns) ; $i++ ) + { + if ( isset($_GET['bSearchable_'.$i]) && $_GET['bSearchable_'.$i] == "true" && $_GET['sSearch_'.$i] != '' ) + { + if ( $sWhere == "" ) + { + $sWhere = "WHERE "; + } + else + { + $sWhere .= " AND "; + } + $sWhere .= $aColumns[$i]." LIKE '%".mysql_real_escape_string($_GET['sSearch_'.$i])."%' "; + } + } + + + /* + * SQL queries + * Get data to display + */ + $sQuery = " + SELECT SQL_CALC_FOUND_ROWS ".str_replace(" , ", " ", implode(", ", $aColumns))." + FROM $sTable + $sWhere + $sOrder + $sLimit + "; + $rResult = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error()); + + /* Data set length after filtering */ + $sQuery = " + SELECT FOUND_ROWS() + "; + $rResultFilterTotal = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error()); + $aResultFilterTotal = mysql_fetch_array($rResultFilterTotal); + $iFilteredTotal = $aResultFilterTotal[0]; + + /* Total data set length */ + $sQuery = " + SELECT COUNT(".$sIndexColumn.") + FROM $sTable + "; + $rResultTotal = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error()); + $aResultTotal = mysql_fetch_array($rResultTotal); + $iTotal = $aResultTotal[0]; + + + /* + * Output + */ + $output = array( + "sEcho" => intval($_GET['sEcho']), + "iTotalRecords" => $iTotal, + "iTotalDisplayRecords" => $iFilteredTotal, + "aaData" => array() + ); + + while ( $aRow = mysql_fetch_array( $rResult ) ) + { + $row = array(); + + /* Add the details image at the start of the display array */ + $row[] = '<img src="../examples_support/details_open.png">'; + + for ( $i=0 ; $i<count($aColumns) ; $i++ ) + { + if ( $aColumns[$i] == "version" ) + { + /* Special output formatting for 'version' column */ + $row[] = ($aRow[ $aColumns[$i] ]=="0") ? '-' : $aRow[ $aColumns[$i] ]; + } + else if ( $aColumns[$i] != ' ' ) + { + /* General output */ + $row[] = $aRow[ $aColumns[$i] ]; + } + } + $row['extra'] = 'hrmll'; + $output['aaData'][] = $row; + } + + echo json_encode( $output ); +?> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/server_side/scripts/filter_col.php b/src/warden-server/contrib/wardenweb/datatables/examples/server_side/scripts/filter_col.php new file mode 100644 index 0000000..dd5bca7 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/server_side/scripts/filter_col.php @@ -0,0 +1,122 @@ +<?php + /* MySQL connection */ + include( $_SERVER['DOCUMENT_ROOT']."/datatables/mysql.php" ); /* ;-) */ + + $gaSql['link'] = mysql_pconnect( $gaSql['server'], $gaSql['user'], $gaSql['password'] ) or + die( 'Could not open connection to server' ); + + mysql_select_db( $gaSql['db'], $gaSql['link'] ) or + die( 'Could not select database '. $gaSql['db'] ); + + /* Paging */ + $sLimit = ""; + if ( isset( $_GET['iDisplayStart'] ) && $_GET['iDisplayLength'] != '-1' ) + { + $sLimit = "LIMIT ".mysql_real_escape_string( $_GET['iDisplayStart'] ).", ". + mysql_real_escape_string( $_GET['iDisplayLength'] ); + } + + /* Ordering */ + if ( isset( $_GET['iSortCol_0'] ) ) + { + $sOrder = "ORDER BY "; + for ( $i=0 ; $i<mysql_real_escape_string( $_GET['iSortingCols'] ) ; $i++ ) + { + $sOrder .= fnColumnToField(mysql_real_escape_string( $_GET['iSortCol_'.$i] ))." + ".mysql_real_escape_string( $_GET['sSortDir_'.$i] ) .", "; + } + $sOrder = substr_replace( $sOrder, "", -2 ); + } + + /* Filtering - NOTE this does not match the built-in DataTables filtering which does it + * word by word on any field. It's possible to do here, but concerned about efficiency + * on very large tables, and MySQL's regex functionality is very limited + */ + $sWhere = ""; + if ( $_GET['sSearch'] != "" ) + { + $sWhere = "WHERE ( engine LIKE '%".mysql_real_escape_string( $_GET['sSearch'] )."%' OR ". + "browser LIKE '%".mysql_real_escape_string( $_GET['sSearch'] )."%' OR ". + "platform LIKE '%".mysql_real_escape_string( $_GET['sSearch'] )."%' OR ". + "version LIKE '%".mysql_real_escape_string( $_GET['sSearch'] )."%' OR ". + "grade LIKE '%".mysql_real_escape_string( $_GET['sSearch'] )."%' )"; + } + + for ( $i=0 ; $i<$_GET['iColumns'] ; $i++ ) + { + if ( $_GET['sSearch_'.$i] != '' ) + { + if ( $sWhere != "" ) + { + $sWhere .= " AND "; + } + else + { + $sWhere .= "WHERE "; + } + $sWhere .= fnColumnToField($i) ." LIKE '%".mysql_real_escape_string( $_GET['sSearch_'.$i] )."%'"; + } + } + + $sQuery = " + SELECT SQL_CALC_FOUND_ROWS id, engine, browser, platform, version, grade + FROM ajax + $sWhere + $sOrder + $sLimit + "; + $rResult = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error()); + + $sQuery = " + SELECT FOUND_ROWS() + "; + $rResultFilterTotal = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error()); + $aResultFilterTotal = mysql_fetch_array($rResultFilterTotal); + $iFilteredTotal = $aResultFilterTotal[0]; + + $sQuery = " + SELECT COUNT(id) + FROM ajax + "; + $rResultTotal = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error()); + $aResultTotal = mysql_fetch_array($rResultTotal); + $iTotal = $aResultTotal[0]; + + $sOutput = '{'; + $sOutput .= '"sEcho": '.intval($_GET['sEcho']).', '; + $sOutput .= '"iTotalRecords": '.$iTotal.', '; + $sOutput .= '"iTotalDisplayRecords": '.$iFilteredTotal.', '; + $sOutput .= '"aaData": [ '; + while ( $aRow = mysql_fetch_array( $rResult ) ) + { + $sOutput .= "["; + $sOutput .= '"'.str_replace('"', '\"', $aRow['engine']).'",'; + $sOutput .= '"'.str_replace('"', '\"', $aRow['browser']).'",'; + $sOutput .= '"'.str_replace('"', '\"', $aRow['platform']).'",'; + if ( $aRow['version'] == "0" ) + $sOutput .= '"-",'; + else + $sOutput .= '"'.str_replace('"', '\"', $aRow['version']).'",'; + $sOutput .= '"'.str_replace('"', '\"', $aRow['grade']).'"'; + $sOutput .= "],"; + } + $sOutput = substr_replace( $sOutput, "", -1 ); + $sOutput .= '] }'; + + echo $sOutput; + + + function fnColumnToField( $i ) + { + if ( $i == 0 ) + return "engine"; + else if ( $i == 1 ) + return "browser"; + else if ( $i == 2 ) + return "platform"; + else if ( $i == 3 ) + return "version"; + else if ( $i == 4 ) + return "grade"; + } +?> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/server_side/scripts/id.php b/src/warden-server/contrib/wardenweb/datatables/examples/server_side/scripts/id.php new file mode 100644 index 0000000..801e3dd --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/server_side/scripts/id.php @@ -0,0 +1,179 @@ +<?php + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Easy set variables + */ + + /* Array of database columns which should be read and sent back to DataTables. Use a space where + * you want to insert a non-database field (for example a counter or static image) + */ + $aColumns = array( 'engine', 'browser', 'platform', 'version', 'grade' ); + + /* Indexed column (used for fast and accurate table cardinality) */ + $sIndexColumn = "id"; + + /* DB table to use */ + $sTable = "ajax"; + + /* Database connection information */ + $gaSql['user'] = ""; + $gaSql['password'] = ""; + $gaSql['db'] = ""; + $gaSql['server'] = "localhost"; + + /* REMOVE THIS LINE (it just includes my SQL connection user/pass) */ + include( $_SERVER['DOCUMENT_ROOT']."/datatables/mysql.php" ); + + + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * If you just want to use the basic configuration for DataTables with PHP server-side, there is + * no need to edit below this line + */ + + /* + * MySQL connection + */ + $gaSql['link'] = mysql_pconnect( $gaSql['server'], $gaSql['user'], $gaSql['password'] ) or + die( 'Could not open connection to server' ); + + mysql_select_db( $gaSql['db'], $gaSql['link'] ) or + die( 'Could not select database '. $gaSql['db'] ); + + + /* + * Paging + */ + $sLimit = ""; + if ( isset( $_GET['iDisplayStart'] ) && $_GET['iDisplayLength'] != '-1' ) + { + $sLimit = "LIMIT ".mysql_real_escape_string( $_GET['iDisplayStart'] ).", ". + mysql_real_escape_string( $_GET['iDisplayLength'] ); + } + + + /* + * Ordering + */ + $sOrder = ""; + if ( isset( $_GET['iSortCol_0'] ) ) + { + $sOrder = "ORDER BY "; + for ( $i=0 ; $i<intval( $_GET['iSortingCols'] ) ; $i++ ) + { + if ( $_GET[ 'bSortable_'.intval($_GET['iSortCol_'.$i]) ] == "true" ) + { + $sOrder .= $aColumns[ intval( $_GET['iSortCol_'.$i] ) ]." + ".mysql_real_escape_string( $_GET['sSortDir_'.$i] ) .", "; + } + } + + $sOrder = substr_replace( $sOrder, "", -2 ); + if ( $sOrder == "ORDER BY" ) + { + $sOrder = ""; + } + } + + + /* + * Filtering + * NOTE this does not match the built-in DataTables filtering which does it + * word by word on any field. It's possible to do here, but concerned about efficiency + * on very large tables, and MySQL's regex functionality is very limited + */ + $sWhere = ""; + if ( isset($_GET['sSearch']) && $_GET['sSearch'] != "" ) + { + $sWhere = "WHERE ("; + for ( $i=0 ; $i<count($aColumns) ; $i++ ) + { + $sWhere .= $aColumns[$i]." LIKE '%".mysql_real_escape_string( $_GET['sSearch'] )."%' OR "; + } + $sWhere = substr_replace( $sWhere, "", -3 ); + $sWhere .= ')'; + } + + /* Individual column filtering */ + for ( $i=0 ; $i<count($aColumns) ; $i++ ) + { + if ( isset($_GET['bSearchable_'.$i]) && $_GET['bSearchable_'.$i] == "true" && $_GET['sSearch_'.$i] != '' ) + { + if ( $sWhere == "" ) + { + $sWhere = "WHERE "; + } + else + { + $sWhere .= " AND "; + } + $sWhere .= $aColumns[$i]." LIKE '%".mysql_real_escape_string($_GET['sSearch_'.$i])."%' "; + } + } + + + /* + * SQL queries + * Get data to display + */ + $sQuery = " + SELECT SQL_CALC_FOUND_ROWS id, ".str_replace(" , ", " ", implode(", ", $aColumns))." + FROM $sTable + $sWhere + $sOrder + $sLimit + "; + $rResult = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error()); + + /* Data set length after filtering */ + $sQuery = " + SELECT FOUND_ROWS() + "; + $rResultFilterTotal = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error()); + $aResultFilterTotal = mysql_fetch_array($rResultFilterTotal); + $iFilteredTotal = $aResultFilterTotal[0]; + + /* Total data set length */ + $sQuery = " + SELECT COUNT(".$sIndexColumn.") + FROM $sTable + "; + $rResultTotal = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error()); + $aResultTotal = mysql_fetch_array($rResultTotal); + $iTotal = $aResultTotal[0]; + + + /* + * Output + */ + $output = array( + "sEcho" => intval($_GET['sEcho']), + "iTotalRecords" => $iTotal, + "iTotalDisplayRecords" => $iFilteredTotal, + "aaData" => array() + ); + + while ( $aRow = mysql_fetch_array( $rResult ) ) + { + $row = array(); + + // Add the row ID and class to the object + $row['DT_RowId'] = 'row_'.$aRow['id']; + $row['DT_RowClass'] = 'grade'.$aRow['grade']; + + for ( $i=0 ; $i<count($aColumns) ; $i++ ) + { + if ( $aColumns[$i] == "version" ) + { + /* Special output formatting for 'version' column */ + $row[] = ($aRow[ $aColumns[$i] ]=="0") ? '-' : $aRow[ $aColumns[$i] ]; + } + else if ( $aColumns[$i] != ' ' ) + { + /* General output */ + $row[] = $aRow[ $aColumns[$i] ]; + } + } + $output['aaData'][] = $row; + } + + echo json_encode( $output ); +?> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/server_side/scripts/id_jsonp.php b/src/warden-server/contrib/wardenweb/datatables/examples/server_side/scripts/id_jsonp.php new file mode 100644 index 0000000..4d4d2fd --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/server_side/scripts/id_jsonp.php @@ -0,0 +1,179 @@ +<?php + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Easy set variables + */ + + /* Array of database columns which should be read and sent back to DataTables. Use a space where + * you want to insert a non-database field (for example a counter or static image) + */ + $aColumns = array( 'engine', 'browser', 'platform', 'version', 'grade' ); + + /* Indexed column (used for fast and accurate table cardinality) */ + $sIndexColumn = "id"; + + /* DB table to use */ + $sTable = "ajax"; + + /* Database connection information */ + $gaSql['user'] = ""; + $gaSql['password'] = ""; + $gaSql['db'] = ""; + $gaSql['server'] = "localhost"; + + /* REMOVE THIS LINE (it just includes my SQL connection user/pass) */ + include( $_SERVER['DOCUMENT_ROOT']."/datatables/mysql.php" ); + + + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * If you just want to use the basic configuration for DataTables with PHP server-side, there is + * no need to edit below this line + */ + + /* + * MySQL connection + */ + $gaSql['link'] = mysql_pconnect( $gaSql['server'], $gaSql['user'], $gaSql['password'] ) or + die( 'Could not open connection to server' ); + + mysql_select_db( $gaSql['db'], $gaSql['link'] ) or + die( 'Could not select database '. $gaSql['db'] ); + + + /* + * Paging + */ + $sLimit = ""; + if ( isset( $_GET['iDisplayStart'] ) && $_GET['iDisplayLength'] != '-1' ) + { + $sLimit = "LIMIT ".mysql_real_escape_string( $_GET['iDisplayStart'] ).", ". + mysql_real_escape_string( $_GET['iDisplayLength'] ); + } + + + /* + * Ordering + */ + $sOrder = ""; + if ( isset( $_GET['iSortCol_0'] ) ) + { + $sOrder = "ORDER BY "; + for ( $i=0 ; $i<intval( $_GET['iSortingCols'] ) ; $i++ ) + { + if ( $_GET[ 'bSortable_'.intval($_GET['iSortCol_'.$i]) ] == "true" ) + { + $sOrder .= $aColumns[ intval( $_GET['iSortCol_'.$i] ) ]." + ".mysql_real_escape_string( $_GET['sSortDir_'.$i] ) .", "; + } + } + + $sOrder = substr_replace( $sOrder, "", -2 ); + if ( $sOrder == "ORDER BY" ) + { + $sOrder = ""; + } + } + + + /* + * Filtering + * NOTE this does not match the built-in DataTables filtering which does it + * word by word on any field. It's possible to do here, but concerned about efficiency + * on very large tables, and MySQL's regex functionality is very limited + */ + $sWhere = ""; + if ( isset($_GET['sSearch']) && $_GET['sSearch'] != "" ) + { + $sWhere = "WHERE ("; + for ( $i=0 ; $i<count($aColumns) ; $i++ ) + { + $sWhere .= $aColumns[$i]." LIKE '%".mysql_real_escape_string( $_GET['sSearch'] )."%' OR "; + } + $sWhere = substr_replace( $sWhere, "", -3 ); + $sWhere .= ')'; + } + + /* Individual column filtering */ + for ( $i=0 ; $i<count($aColumns) ; $i++ ) + { + if ( isset($_GET['bSearchable_'.$i]) && $_GET['bSearchable_'.$i] == "true" && $_GET['sSearch_'.$i] != '' ) + { + if ( $sWhere == "" ) + { + $sWhere = "WHERE "; + } + else + { + $sWhere .= " AND "; + } + $sWhere .= $aColumns[$i]." LIKE '%".mysql_real_escape_string($_GET['sSearch_'.$i])."%' "; + } + } + + + /* + * SQL queries + * Get data to display + */ + $sQuery = " + SELECT SQL_CALC_FOUND_ROWS id, ".str_replace(" , ", " ", implode(", ", $aColumns))." + FROM $sTable + $sWhere + $sOrder + $sLimit + "; + $rResult = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error()); + + /* Data set length after filtering */ + $sQuery = " + SELECT FOUND_ROWS() + "; + $rResultFilterTotal = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error()); + $aResultFilterTotal = mysql_fetch_array($rResultFilterTotal); + $iFilteredTotal = $aResultFilterTotal[0]; + + /* Total data set length */ + $sQuery = " + SELECT COUNT(".$sIndexColumn.") + FROM $sTable + "; + $rResultTotal = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error()); + $aResultTotal = mysql_fetch_array($rResultTotal); + $iTotal = $aResultTotal[0]; + + + /* + * Output + */ + $output = array( + "sEcho" => intval($_GET['sEcho']), + "iTotalRecords" => $iTotal, + "iTotalDisplayRecords" => $iFilteredTotal, + "aaData" => array() + ); + + while ( $aRow = mysql_fetch_array( $rResult ) ) + { + $row = array(); + + // Add the row ID and class to the object + $row['DT_RowId'] = 'row_'.$aRow['id']; + $row['DT_RowClass'] = 'grade'.$aRow['grade']; + + for ( $i=0 ; $i<count($aColumns) ; $i++ ) + { + if ( $aColumns[$i] == "version" ) + { + /* Special output formatting for 'version' column */ + $row[] = ($aRow[ $aColumns[$i] ]=="0") ? '-' : $aRow[ $aColumns[$i] ]; + } + else if ( $aColumns[$i] != ' ' ) + { + /* General output */ + $row[] = $aRow[ $aColumns[$i] ]; + } + } + $output['aaData'][] = $row; + } + + echo $_GET['callback'].'('.json_encode( $output ).');'; +?> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/server_side/scripts/jsonp.php b/src/warden-server/contrib/wardenweb/datatables/examples/server_side/scripts/jsonp.php new file mode 100644 index 0000000..a5d96ed --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/server_side/scripts/jsonp.php @@ -0,0 +1,174 @@ +<?php + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Easy set variables + */ + + /* Array of database columns which should be read and sent back to DataTables. Use a space where + * you want to insert a non-database field (for example a counter or static image) + */ + $aColumns = array( 'engine', 'browser', 'platform', 'version', 'grade' ); + + /* Indexed column (used for fast and accurate table cardinality) */ + $sIndexColumn = "id"; + + /* DB table to use */ + $sTable = "ajax"; + + /* Database connection information */ + $gaSql['user'] = ""; + $gaSql['password'] = ""; + $gaSql['db'] = ""; + $gaSql['server'] = "localhost"; + + /* REMOVE THIS LINE (it just includes my SQL connection user/pass) */ + include( $_SERVER['DOCUMENT_ROOT']."/datatables/mysql.php" ); + + + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * If you just want to use the basic configuration for DataTables with PHP server-side, there is + * no need to edit below this line + */ + + /* + * MySQL connection + */ + $gaSql['link'] = mysql_pconnect( $gaSql['server'], $gaSql['user'], $gaSql['password'] ) or + die( 'Could not open connection to server' ); + + mysql_select_db( $gaSql['db'], $gaSql['link'] ) or + die( 'Could not select database '. $gaSql['db'] ); + + + /* + * Paging + */ + $sLimit = ""; + if ( isset( $_GET['iDisplayStart'] ) && $_GET['iDisplayLength'] != '-1' ) + { + $sLimit = "LIMIT ".mysql_real_escape_string( $_GET['iDisplayStart'] ).", ". + mysql_real_escape_string( $_GET['iDisplayLength'] ); + } + + + /* + * Ordering + */ + $sOrder = ""; + if ( isset( $_GET['iSortCol_0'] ) ) + { + $sOrder = "ORDER BY "; + for ( $i=0 ; $i<intval( $_GET['iSortingCols'] ) ; $i++ ) + { + if ( $_GET[ 'bSortable_'.intval($_GET['iSortCol_'.$i]) ] == "true" ) + { + $sOrder .= $aColumns[ intval( $_GET['iSortCol_'.$i] ) ]." + ".mysql_real_escape_string( $_GET['sSortDir_'.$i] ) .", "; + } + } + + $sOrder = substr_replace( $sOrder, "", -2 ); + if ( $sOrder == "ORDER BY" ) + { + $sOrder = ""; + } + } + + + /* + * Filtering + * NOTE this does not match the built-in DataTables filtering which does it + * word by word on any field. It's possible to do here, but concerned about efficiency + * on very large tables, and MySQL's regex functionality is very limited + */ + $sWhere = ""; + if ( isset($_GET['sSearch']) && $_GET['sSearch'] != "" ) + { + $sWhere = "WHERE ("; + for ( $i=0 ; $i<count($aColumns) ; $i++ ) + { + $sWhere .= $aColumns[$i]." LIKE '%".mysql_real_escape_string( $_GET['sSearch'] )."%' OR "; + } + $sWhere = substr_replace( $sWhere, "", -3 ); + $sWhere .= ')'; + } + + /* Individual column filtering */ + for ( $i=0 ; $i<count($aColumns) ; $i++ ) + { + if ( isset($_GET['bSearchable_'.$i]) && $_GET['bSearchable_'.$i] == "true" && $_GET['sSearch_'.$i] != '' ) + { + if ( $sWhere == "" ) + { + $sWhere = "WHERE "; + } + else + { + $sWhere .= " AND "; + } + $sWhere .= $aColumns[$i]." LIKE '%".mysql_real_escape_string($_GET['sSearch_'.$i])."%' "; + } + } + + + /* + * SQL queries + * Get data to display + */ + $sQuery = " + SELECT SQL_CALC_FOUND_ROWS ".str_replace(" , ", " ", implode(", ", $aColumns))." + FROM $sTable + $sWhere + $sOrder + $sLimit + "; + $rResult = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error()); + + /* Data set length after filtering */ + $sQuery = " + SELECT FOUND_ROWS() + "; + $rResultFilterTotal = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error()); + $aResultFilterTotal = mysql_fetch_array($rResultFilterTotal); + $iFilteredTotal = $aResultFilterTotal[0]; + + /* Total data set length */ + $sQuery = " + SELECT COUNT(".$sIndexColumn.") + FROM $sTable + "; + $rResultTotal = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error()); + $aResultTotal = mysql_fetch_array($rResultTotal); + $iTotal = $aResultTotal[0]; + + + /* + * Output + */ + $output = array( + "sEcho" => intval($_GET['sEcho']), + "iTotalRecords" => $iTotal, + "iTotalDisplayRecords" => $iFilteredTotal, + "aaData" => array() + ); + + while ( $aRow = mysql_fetch_array( $rResult ) ) + { + $row = array(); + for ( $i=0 ; $i<count($aColumns) ; $i++ ) + { + if ( $aColumns[$i] == "version" ) + { + /* Special output formatting for 'version' column */ + $row[] = ($aRow[ $aColumns[$i] ]=="0") ? '-' : $aRow[ $aColumns[$i] ]; + } + else if ( $aColumns[$i] != ' ' ) + { + /* General output */ + $row[] = $aRow[ $aColumns[$i] ]; + } + } + $output['aaData'][] = $row; + } + + echo $_GET['callback'].'('.json_encode( $output ).');'; +?> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/server_side/scripts/objects.php b/src/warden-server/contrib/wardenweb/datatables/examples/server_side/scripts/objects.php new file mode 100644 index 0000000..ae0a4e6 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/server_side/scripts/objects.php @@ -0,0 +1,176 @@ +<?php + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Easy set variables + */ + + /* Array of database columns which should be read and sent back to DataTables. Use a space where + * you want to insert a non-database field (for example a counter or static image) + */ + $aColumns = array( 'engine', 'browser', 'platform', 'version', 'grade' ); + + /* Indexed column (used for fast and accurate table cardinality) */ + $sIndexColumn = "id"; + + /* DB table to use */ + $sTable = "ajax"; + + /* Database connection information */ + $gaSql['user'] = ""; + $gaSql['password'] = ""; + $gaSql['db'] = ""; + $gaSql['server'] = "localhost"; + + /* REMOVE THIS LINE (it just includes my SQL connection user/pass) */ + include( $_SERVER['DOCUMENT_ROOT']."/datatables/mysql.php" ); + + + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * If you just want to use the basic configuration for DataTables with PHP server-side, there is + * no need to edit below this line + */ + + /* + * MySQL connection + */ + $gaSql['link'] = mysql_pconnect( $gaSql['server'], $gaSql['user'], $gaSql['password'] ) or + die( 'Could not open connection to server' ); + + mysql_select_db( $gaSql['db'], $gaSql['link'] ) or + die( 'Could not select database '. $gaSql['db'] ); + + + /* + * Paging + */ + $sLimit = ""; + if ( isset( $_GET['iDisplayStart'] ) && $_GET['iDisplayLength'] != '-1' ) + { + $sLimit = "LIMIT ".mysql_real_escape_string( $_GET['iDisplayStart'] ).", ". + mysql_real_escape_string( $_GET['iDisplayLength'] ); + } + + + /* + * Ordering + */ + $sOrder = ""; + if ( isset( $_GET['iSortCol_0'] ) ) + { + $sOrder = "ORDER BY "; + for ( $i=0 ; $i<intval( $_GET['iSortingCols'] ) ; $i++ ) + { + if ( $_GET[ 'bSortable_'.intval($_GET['iSortCol_'.$i]) ] == "true" ) + { + $iColumnIndex = array_search( $_GET['mDataProp_'.$_GET['iSortCol_'.$i]], $aColumns ); + $sOrder .= $aColumns[ $iColumnIndex ]." + ".mysql_real_escape_string( $_GET['sSortDir_'.$i] ) .", "; + } + } + + $sOrder = substr_replace( $sOrder, "", -2 ); + if ( $sOrder == "ORDER BY" ) + { + $sOrder = ""; + } + } + + + /* + * Filtering + * NOTE this does not match the built-in DataTables filtering which does it + * word by word on any field. It's possible to do here, but concerned about efficiency + * on very large tables, and MySQL's regex functionality is very limited + */ + $sWhere = ""; + if ( isset($_GET['sSearch']) && $_GET['sSearch'] != "" ) + { + $sWhere = "WHERE ("; + for ( $i=0 ; $i<count($aColumns) ; $i++ ) + { + $sWhere .= $aColumns[$i]." LIKE '%".mysql_real_escape_string( $_GET['sSearch'] )."%' OR "; + } + $sWhere = substr_replace( $sWhere, "", -3 ); + $sWhere .= ')'; + } + + /* Individual column filtering */ + for ( $i=0 ; $i<count($aColumns) ; $i++ ) + { + if ( isset($_GET['bSearchable_'.$i]) && $_GET['bSearchable_'.$i] == "true" && $_GET['sSearch_'.$i] != '' ) + { + if ( $sWhere == "" ) + { + $sWhere = "WHERE "; + } + else + { + $sWhere .= " AND "; + } + $iColumnIndex = array_search( $_GET['mDataProp_'.$i], $aColumns ); + $sWhere .= $aColumns[$iColumnIndex]." LIKE '%".mysql_real_escape_string($_GET['sSearch_'.$i])."%' "; + } + } + + + /* + * SQL queries + * Get data to display + */ + $sQuery = " + SELECT SQL_CALC_FOUND_ROWS ".str_replace(" , ", " ", implode(", ", $aColumns))." + FROM $sTable + $sWhere + $sOrder + $sLimit + "; + $rResult = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error()); + + /* Data set length after filtering */ + $sQuery = " + SELECT FOUND_ROWS() + "; + $rResultFilterTotal = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error()); + $aResultFilterTotal = mysql_fetch_array($rResultFilterTotal); + $iFilteredTotal = $aResultFilterTotal[0]; + + /* Total data set length */ + $sQuery = " + SELECT COUNT(".$sIndexColumn.") + FROM $sTable + "; + $rResultTotal = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error()); + $aResultTotal = mysql_fetch_array($rResultTotal); + $iTotal = $aResultTotal[0]; + + + /* + * Output + */ + $output = array( + "sEcho" => intval($_GET['sEcho']), + "iTotalRecords" => $iTotal, + "iTotalDisplayRecords" => $iFilteredTotal, + "aaData" => array() + ); + + while ( $aRow = mysql_fetch_array( $rResult ) ) + { + $row = array(); + for ( $i=0 ; $i<count($aColumns) ; $i++ ) + { + if ( $aColumns[$i] == "version" ) + { + /* Special output formatting for 'version' column */ + $row[ $aColumns[$i] ] = ($aRow[ $aColumns[$i] ]=="0") ? '-' : $aRow[ $aColumns[$i] ]; + } + else if ( $aColumns[$i] != ' ' ) + { + /* General output */ + $row[ $aColumns[$i] ] = $aRow[ $aColumns[$i] ]; + } + } + $output['aaData'][] = $row; + } + + echo json_encode( $output ); +?> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/server_side/scripts/objects_jsonp.php b/src/warden-server/contrib/wardenweb/datatables/examples/server_side/scripts/objects_jsonp.php new file mode 100644 index 0000000..7b403ba --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/server_side/scripts/objects_jsonp.php @@ -0,0 +1,176 @@ +<?php + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Easy set variables + */ + + /* Array of database columns which should be read and sent back to DataTables. Use a space where + * you want to insert a non-database field (for example a counter or static image) + */ + $aColumns = array( 'engine', 'browser', 'platform', 'version', 'grade' ); + + /* Indexed column (used for fast and accurate table cardinality) */ + $sIndexColumn = "id"; + + /* DB table to use */ + $sTable = "ajax"; + + /* Database connection information */ + $gaSql['user'] = ""; + $gaSql['password'] = ""; + $gaSql['db'] = ""; + $gaSql['server'] = "localhost"; + + /* REMOVE THIS LINE (it just includes my SQL connection user/pass) */ + include( $_SERVER['DOCUMENT_ROOT']."/datatables/mysql.php" ); + + + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * If you just want to use the basic configuration for DataTables with PHP server-side, there is + * no need to edit below this line + */ + + /* + * MySQL connection + */ + $gaSql['link'] = mysql_pconnect( $gaSql['server'], $gaSql['user'], $gaSql['password'] ) or + die( 'Could not open connection to server' ); + + mysql_select_db( $gaSql['db'], $gaSql['link'] ) or + die( 'Could not select database '. $gaSql['db'] ); + + + /* + * Paging + */ + $sLimit = ""; + if ( isset( $_GET['iDisplayStart'] ) && $_GET['iDisplayLength'] != '-1' ) + { + $sLimit = "LIMIT ".mysql_real_escape_string( $_GET['iDisplayStart'] ).", ". + mysql_real_escape_string( $_GET['iDisplayLength'] ); + } + + + /* + * Ordering + */ + $sOrder = ""; + if ( isset( $_GET['iSortCol_0'] ) ) + { + $sOrder = "ORDER BY "; + for ( $i=0 ; $i<intval( $_GET['iSortingCols'] ) ; $i++ ) + { + if ( $_GET[ 'bSortable_'.intval($_GET['iSortCol_'.$i]) ] == "true" ) + { + $iColumnIndex = array_search( $_GET['mDataProp_'.$_GET['iSortCol_'.$i]], $aColumns ); + $sOrder .= $aColumns[ $iColumnIndex ]." + ".mysql_real_escape_string( $_GET['sSortDir_'.$i] ) .", "; + } + } + + $sOrder = substr_replace( $sOrder, "", -2 ); + if ( $sOrder == "ORDER BY" ) + { + $sOrder = ""; + } + } + + + /* + * Filtering + * NOTE this does not match the built-in DataTables filtering which does it + * word by word on any field. It's possible to do here, but concerned about efficiency + * on very large tables, and MySQL's regex functionality is very limited + */ + $sWhere = ""; + if ( isset($_GET['sSearch']) && $_GET['sSearch'] != "" ) + { + $sWhere = "WHERE ("; + for ( $i=0 ; $i<count($aColumns) ; $i++ ) + { + $sWhere .= $aColumns[$i]." LIKE '%".mysql_real_escape_string( $_GET['sSearch'] )."%' OR "; + } + $sWhere = substr_replace( $sWhere, "", -3 ); + $sWhere .= ')'; + } + + /* Individual column filtering */ + for ( $i=0 ; $i<count($aColumns) ; $i++ ) + { + if ( isset($_GET['bSearchable_'.$i]) && $_GET['bSearchable_'.$i] == "true" && $_GET['sSearch_'.$i] != '' ) + { + if ( $sWhere == "" ) + { + $sWhere = "WHERE "; + } + else + { + $sWhere .= " AND "; + } + $iColumnIndex = array_search( $_GET['mDataProp_'.$i], $aColumns ); + $sWhere .= $aColumns[$iColumnIndex]." LIKE '%".mysql_real_escape_string($_GET['sSearch_'.$i])."%' "; + } + } + + + /* + * SQL queries + * Get data to display + */ + $sQuery = " + SELECT SQL_CALC_FOUND_ROWS ".str_replace(" , ", " ", implode(", ", $aColumns))." + FROM $sTable + $sWhere + $sOrder + $sLimit + "; + $rResult = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error()); + + /* Data set length after filtering */ + $sQuery = " + SELECT FOUND_ROWS() + "; + $rResultFilterTotal = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error()); + $aResultFilterTotal = mysql_fetch_array($rResultFilterTotal); + $iFilteredTotal = $aResultFilterTotal[0]; + + /* Total data set length */ + $sQuery = " + SELECT COUNT(".$sIndexColumn.") + FROM $sTable + "; + $rResultTotal = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error()); + $aResultTotal = mysql_fetch_array($rResultTotal); + $iTotal = $aResultTotal[0]; + + + /* + * Output + */ + $output = array( + "sEcho" => intval($_GET['sEcho']), + "iTotalRecords" => $iTotal, + "iTotalDisplayRecords" => $iFilteredTotal, + "aaData" => array() + ); + + while ( $aRow = mysql_fetch_array( $rResult ) ) + { + $row = array(); + for ( $i=0 ; $i<count($aColumns) ; $i++ ) + { + if ( $aColumns[$i] == "version" ) + { + /* Special output formatting for 'version' column */ + $row[ $aColumns[$i] ] = ($aRow[ $aColumns[$i] ]=="0") ? '-' : $aRow[ $aColumns[$i] ]; + } + else if ( $aColumns[$i] != ' ' ) + { + /* General output */ + $row[ $aColumns[$i] ] = $aRow[ $aColumns[$i] ]; + } + } + $output['aaData'][] = $row; + } + + echo $_GET['callback'].'('.json_encode( $output ).');'; +?> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/server_side/scripts/post.php b/src/warden-server/contrib/wardenweb/datatables/examples/server_side/scripts/post.php new file mode 100644 index 0000000..21cafdb --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/server_side/scripts/post.php @@ -0,0 +1,184 @@ +<?php + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Easy set variables + */ + + /* Array of database columns which should be read and sent back to DataTables. Use a space where + * you want to insert a non-database field (for example a counter or static image) + */ + $aColumns = array( 'engine', 'browser', 'platform', 'version', 'grade' ); + + /* Indexed column (used for fast and accurate table cardinality) */ + $sIndexColumn = "id"; + + /* DB table to use */ + $sTable = "ajax"; + + /* Database connection information */ + $gaSql['user'] = ""; + $gaSql['password'] = ""; + $gaSql['db'] = ""; + $gaSql['server'] = "localhost"; + + /* REMOVE THIS LINE (it just includes my SQL connection user/pass) */ + include( $_SERVER['DOCUMENT_ROOT']."/datatables/mysql.php" ); + + + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * If you just want to use the basic configuration for DataTables with PHP server-side, there is + * no need to edit below this line + */ + + /* + * MySQL connection + */ + $gaSql['link'] = mysql_pconnect( $gaSql['server'], $gaSql['user'], $gaSql['password'] ) or + die( 'Could not open connection to server' ); + + mysql_select_db( $gaSql['db'], $gaSql['link'] ) or + die( 'Could not select database '. $gaSql['db'] ); + + + /* + * Paging + */ + $sLimit = ""; + if ( isset( $_POST['iDisplayStart'] ) && $_POST['iDisplayLength'] != '-1' ) + { + $sLimit = "LIMIT ".mysql_real_escape_string( $_POST['iDisplayStart'] ).", ". + mysql_real_escape_string( $_POST['iDisplayLength'] ); + } + + + /* + * Ordering + */ + if ( isset( $_POST['iSortCol_0'] ) ) + { + $sOrder = "ORDER BY "; + for ( $i=0 ; $i<intval( $_POST['iSortingCols'] ) ; $i++ ) + { + if ( $_POST[ 'bSortable_'.intval($_POST['iSortCol_'.$i]) ] == "true" ) + { + $sOrder .= $aColumns[ intval( $_POST['iSortCol_'.$i] ) ]." + ".mysql_real_escape_string( $_POST['sSortDir_'.$i] ) .", "; + } + } + + $sOrder = substr_replace( $sOrder, "", -2 ); + if ( $sOrder == "ORDER BY" ) + { + $sOrder = ""; + } + } + + + /* + * Filtering + * NOTE this does not match the built-in DataTables filtering which does it + * word by word on any field. It's possible to do here, but concerned about efficiency + * on very large tables, and MySQL's regex functionality is very limited + */ + $sWhere = ""; + if ( $_POST['sSearch'] != "" ) + { + $sWhere = "WHERE ("; + for ( $i=0 ; $i<count($aColumns) ; $i++ ) + { + $sWhere .= $aColumns[$i]." LIKE '%".mysql_real_escape_string( $_POST['sSearch'] )."%' OR "; + } + $sWhere = substr_replace( $sWhere, "", -3 ); + $sWhere .= ')'; + } + + /* Individual column filtering */ + for ( $i=0 ; $i<count($aColumns) ; $i++ ) + { + if ( $_POST['bSearchable_'.$i] == "true" && $_POST['sSearch_'.$i] != '' ) + { + if ( $sWhere == "" ) + { + $sWhere = "WHERE "; + } + else + { + $sWhere .= " AND "; + } + $sWhere .= $aColumns[$i]." LIKE '%".mysql_real_escape_string($_POST['sSearch_'.$i])."%' "; + } + } + + + /* + * SQL queries + * Get data to display + */ + $sQuery = " + SELECT SQL_CALC_FOUND_ROWS ".str_replace(" , ", " ", implode(", ", $aColumns))." + FROM $sTable + $sWhere + $sOrder + $sLimit + "; + $rResult = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error()); + + /* Data set length after filtering */ + $sQuery = " + SELECT FOUND_ROWS() + "; + $rResultFilterTotal = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error()); + $aResultFilterTotal = mysql_fetch_array($rResultFilterTotal); + $iFilteredTotal = $aResultFilterTotal[0]; + + /* Total data set length */ + $sQuery = " + SELECT COUNT(".$sIndexColumn.") + FROM $sTable + "; + $rResultTotal = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error()); + $aResultTotal = mysql_fetch_array($rResultTotal); + $iTotal = $aResultTotal[0]; + + + /* + * Output + */ + $sOutput = '{'; + $sOutput .= '"sEcho": '.intval($_POST['sEcho']).', '; + $sOutput .= '"iTotalRecords": '.$iTotal.', '; + $sOutput .= '"iTotalDisplayRecords": '.$iFilteredTotal.', '; + $sOutput .= '"aaData": [ '; + while ( $aRow = mysql_fetch_array( $rResult ) ) + { + $sOutput .= "["; + for ( $i=0 ; $i<count($aColumns) ; $i++ ) + { + if ( $aColumns[$i] == "version" ) + { + /* Special output formatting for 'version' */ + $sOutput .= ($aRow[ $aColumns[$i] ]=="0") ? + '"-",' : + '"'.str_replace('"', '\"', $aRow[ $aColumns[$i] ]).'",'; + } + else if ( $aColumns[$i] != ' ' ) + { + /* General output */ + $sOutput .= '"'.str_replace('"', '\"', $aRow[ $aColumns[$i] ]).'",'; + } + } + + /* + * Optional Configuration: + * If you need to add any extra columns (add/edit/delete etc) to the table, that aren't in the + * database - you can do it here + */ + + + $sOutput = substr_replace( $sOutput, "", -1 ); + $sOutput .= "],"; + } + $sOutput = substr_replace( $sOutput, "", -1 ); + $sOutput .= '] }'; + + echo $sOutput; +?> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/server_side/scripts/server_processing.php b/src/warden-server/contrib/wardenweb/datatables/examples/server_side/scripts/server_processing.php new file mode 100644 index 0000000..98faa61 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/server_side/scripts/server_processing.php @@ -0,0 +1,174 @@ +<?php + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Easy set variables + */ + + /* Array of database columns which should be read and sent back to DataTables. Use a space where + * you want to insert a non-database field (for example a counter or static image) + */ + $aColumns = array( 'engine', 'browser', 'platform', 'version', 'grade' ); + + /* Indexed column (used for fast and accurate table cardinality) */ + $sIndexColumn = "id"; + + /* DB table to use */ + $sTable = "ajax"; + + /* Database connection information */ + $gaSql['user'] = ""; + $gaSql['password'] = ""; + $gaSql['db'] = ""; + $gaSql['server'] = "localhost"; + + /* REMOVE THIS LINE (it just includes my SQL connection user/pass) */ + include( $_SERVER['DOCUMENT_ROOT']."/datatables/mysql.php" ); + + + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * If you just want to use the basic configuration for DataTables with PHP server-side, there is + * no need to edit below this line + */ + + /* + * MySQL connection + */ + $gaSql['link'] = mysql_pconnect( $gaSql['server'], $gaSql['user'], $gaSql['password'] ) or + die( 'Could not open connection to server' ); + + mysql_select_db( $gaSql['db'], $gaSql['link'] ) or + die( 'Could not select database '. $gaSql['db'] ); + + + /* + * Paging + */ + $sLimit = ""; + if ( isset( $_GET['iDisplayStart'] ) && $_GET['iDisplayLength'] != '-1' ) + { + $sLimit = "LIMIT ".mysql_real_escape_string( $_GET['iDisplayStart'] ).", ". + mysql_real_escape_string( $_GET['iDisplayLength'] ); + } + + + /* + * Ordering + */ + $sOrder = ""; + if ( isset( $_GET['iSortCol_0'] ) ) + { + $sOrder = "ORDER BY "; + for ( $i=0 ; $i<intval( $_GET['iSortingCols'] ) ; $i++ ) + { + if ( $_GET[ 'bSortable_'.intval($_GET['iSortCol_'.$i]) ] == "true" ) + { + $sOrder .= "`".$aColumns[ intval( $_GET['iSortCol_'.$i] ) ]."` ". + mysql_real_escape_string( $_GET['sSortDir_'.$i] ) .", "; + } + } + + $sOrder = substr_replace( $sOrder, "", -2 ); + if ( $sOrder == "ORDER BY" ) + { + $sOrder = ""; + } + } + + + /* + * Filtering + * NOTE this does not match the built-in DataTables filtering which does it + * word by word on any field. It's possible to do here, but concerned about efficiency + * on very large tables, and MySQL's regex functionality is very limited + */ + $sWhere = ""; + if ( isset($_GET['sSearch']) && $_GET['sSearch'] != "" ) + { + $sWhere = "WHERE ("; + for ( $i=0 ; $i<count($aColumns) ; $i++ ) + { + $sWhere .= "`".$aColumns[$i]."` LIKE '%".mysql_real_escape_string( $_GET['sSearch'] )."%' OR "; + } + $sWhere = substr_replace( $sWhere, "", -3 ); + $sWhere .= ')'; + } + + /* Individual column filtering */ + for ( $i=0 ; $i<count($aColumns) ; $i++ ) + { + if ( isset($_GET['bSearchable_'.$i]) && $_GET['bSearchable_'.$i] == "true" && $_GET['sSearch_'.$i] != '' ) + { + if ( $sWhere == "" ) + { + $sWhere = "WHERE "; + } + else + { + $sWhere .= " AND "; + } + $sWhere .= "`".$aColumns[$i]."` LIKE '%".mysql_real_escape_string($_GET['sSearch_'.$i])."%' "; + } + } + + + /* + * SQL queries + * Get data to display + */ + $sQuery = " + SELECT SQL_CALC_FOUND_ROWS `".str_replace(" , ", " ", implode("`, `", $aColumns))."` + FROM $sTable + $sWhere + $sOrder + $sLimit + "; + $rResult = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error()); + + /* Data set length after filtering */ + $sQuery = " + SELECT FOUND_ROWS() + "; + $rResultFilterTotal = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error()); + $aResultFilterTotal = mysql_fetch_array($rResultFilterTotal); + $iFilteredTotal = $aResultFilterTotal[0]; + + /* Total data set length */ + $sQuery = " + SELECT COUNT(`".$sIndexColumn."`) + FROM $sTable + "; + $rResultTotal = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error()); + $aResultTotal = mysql_fetch_array($rResultTotal); + $iTotal = $aResultTotal[0]; + + + /* + * Output + */ + $output = array( + "sEcho" => intval($_GET['sEcho']), + "iTotalRecords" => $iTotal, + "iTotalDisplayRecords" => $iFilteredTotal, + "aaData" => array() + ); + + while ( $aRow = mysql_fetch_array( $rResult ) ) + { + $row = array(); + for ( $i=0 ; $i<count($aColumns) ; $i++ ) + { + if ( $aColumns[$i] == "version" ) + { + /* Special output formatting for 'version' column */ + $row[] = ($aRow[ $aColumns[$i] ]=="0") ? '-' : $aRow[ $aColumns[$i] ]; + } + else if ( $aColumns[$i] != ' ' ) + { + /* General output */ + $row[] = $aRow[ $aColumns[$i] ]; + } + } + $output['aaData'][] = $row; + } + + echo json_encode( $output ); +?> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/server_side/select_rows.html b/src/warden-server/contrib/wardenweb/datatables/examples/server_side/select_rows.html new file mode 100644 index 0000000..7144a19 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/server_side/select_rows.html @@ -0,0 +1,257 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> +$(document).ready(function() { + var aSelected = []; + + /* Init the table */ + $("#example").dataTable({ + "bProcessing": true, + "bServerSide": true, + "sAjaxSource": "scripts/id.php", + "fnRowCallback": function( nRow, aData, iDisplayIndex ) { + if ( jQuery.inArray(aData.DT_RowId, aSelected) !== -1 ) { + $(nRow).addClass('row_selected'); + } + } + }); + + /* Click event handler */ + $('#example tbody tr').live('click', function () { + var id = this.id; + var index = jQuery.inArray(id, aSelected); + + if ( index === -1 ) { + aSelected.push( id ); + } else { + aSelected.splice( index, 1 ); + } + + $(this).toggleClass('row_selected'); + } ); +} ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables server-side processing with user selectable rows example + </div> + + <h1>Preamble</h1> + <p>When you want to detail with user selectable rows and DataTables, it is relatively simple when using DOM based data - but if using server-side processing, DataTables doesn't retain state over pages / filters etc, leaving this to the server-side instead. As such, you will need to keep a track of which rows a user as selected and mark them as selected on each draw. This is shown in this demo, which uses a unique ID assigned to the TR element (this is done automatically through the use of the <i>DT_RowId</i> special property returned as part of the object given by the server for each row).</p> + + <h1>Live example</h1> + <div id="dynamic"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th width="20%">Rendering engine</th> + <th width="25%">Browser</th> + <th width="25%">Platform(s)</th> + <th width="15%">Engine version</th> + <th width="15%">CSS grade</th> + </tr> + </thead> + <tbody> + <tr> + <td colspan="5" class="dataTables_empty">Loading data from server</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + var aSelected = []; + + /* Init the table */ + $("#example").dataTable({ + "bProcessing": true, + "bServerSide": true, + "sAjaxSource": "scripts/id.php", + "fnRowCallback": function( nRow, aData, iDisplayIndex ) { + if ( jQuery.inArray(aData.DT_RowId, aSelected) !== -1 ) { + $(nRow).addClass('row_selected'); + } + } + }); + + /* Click event handler */ + $('#example tbody tr').live('click', function () { + var id = this.id; + var index = jQuery.inArray(id, aSelected); + + if ( index === -1 ) { + aSelected.push( id ); + } else { + aSelected.splice( index, 1 ); + } + + $(this).toggleClass('row_selected'); + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + <h1>Server response</h1> + <p>The code below shows the latest JSON data that has been returned from the server in response to the Ajax request made by DataTables. This will update as further requests are made.</p> + <pre id="latest_xhr" class="brush: js;"></pre> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/examples/server_side/server_side.html b/src/warden-server/contrib/wardenweb/datatables/examples/server_side/server_side.html new file mode 100644 index 0000000..9e51bfd --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/examples/server_side/server_side.html @@ -0,0 +1,392 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../media/css/demo_page.css"; + @import "../../media/css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + $('#example').dataTable( { + "bProcessing": true, + "bServerSide": true, + "sAjaxSource": "scripts/server_processing.php" + } ); + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + DataTables server-side processing example + </div> + + <h1>Preamble</h1> + <p>There are many ways to get your data into DataTables, and if you are working with seriously large databases, you might want to consider using the server-side options that DataTables provides. Basically all of the paging, filtering, sorting etc that DataTables does can be handed off to a server (or any other data source - Google Gears or Adobe Air for example!) and DataTables is just an events and display module.</p> + <p>The example here shows a very simple display of the CSS data (used in all my other examples), but in this instance coming from the server on each draw. Filtering, multi-column sorting etc all work as you would expect.</p> + + <h1>Live example</h1> + <div id="dynamic"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th width="20%">Rendering engine</th> + <th width="25%">Browser</th> + <th width="25%">Platform(s)</th> + <th width="15%">Engine version</th> + <th width="15%">CSS grade</th> + </tr> + </thead> + <tbody> + <tr> + <td colspan="5" class="dataTables_empty">Loading data from server</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <h1>Initialisation code</h1> + <pre class="brush: js;">$(document).ready(function() { + $('#example').dataTable( { + "bProcessing": true, + "bServerSide": true, + "sAjaxSource": "scripts/server_processing.php" + } ); +} );</pre> + <style type="text/css"> + @import "../examples_support/syntax/css/shCore.css"; + </style> + <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script> + + <h1>Server response</h1> + <p>The code below shows the latest JSON data that has been returned from the server in response to the Ajax request made by DataTables. This will update as further requests are made.</p> + <pre id="latest_xhr" class="brush: js;"></pre> + + <h1>Server side (PHP) code</h1> + <pre><?php + /* + * Script: DataTables server-side script for PHP and MySQL + * Copyright: 2010 - Allan Jardine + * License: GPL v2 or BSD (3-point) + */ + + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Easy set variables + */ + + /* Array of database columns which should be read and sent back to DataTables. Use a space where + * you want to insert a non-database field (for example a counter or static image) + */ + $aColumns = array( 'engine', 'browser', 'platform', 'version', 'grade' ); + + /* Indexed column (used for fast and accurate table cardinality) */ + $sIndexColumn = "id"; + + /* DB table to use */ + $sTable = "ajax"; + + /* Database connection information */ + $gaSql['user'] = ""; + $gaSql['password'] = ""; + $gaSql['db'] = ""; + $gaSql['server'] = "localhost"; + + + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * If you just want to use the basic configuration for DataTables with PHP server-side, there is + * no need to edit below this line + */ + + /* + * MySQL connection + */ + $gaSql['link'] = mysql_pconnect( $gaSql['server'], $gaSql['user'], $gaSql['password'] ) or + die( 'Could not open connection to server' ); + + mysql_select_db( $gaSql['db'], $gaSql['link'] ) or + die( 'Could not select database '. $gaSql['db'] ); + + + /* + * Paging + */ + $sLimit = ""; + if ( isset( $_GET['iDisplayStart'] ) && $_GET['iDisplayLength'] != '-1' ) + { + $sLimit = "LIMIT ".mysql_real_escape_string( $_GET['iDisplayStart'] ).", ". + mysql_real_escape_string( $_GET['iDisplayLength'] ); + } + + + /* + * Ordering + */ + if ( isset( $_GET['iSortCol_0'] ) ) + { + $sOrder = "ORDER BY "; + for ( $i=0 ; $i<intval( $_GET['iSortingCols'] ) ; $i++ ) + { + if ( $_GET[ 'bSortable_'.intval($_GET['iSortCol_'.$i]) ] == "true" ) + { + $sOrder .= $aColumns[ intval( $_GET['iSortCol_'.$i] ) ]." + ".mysql_real_escape_string( $_GET['sSortDir_'.$i] ) .", "; + } + } + + $sOrder = substr_replace( $sOrder, "", -2 ); + if ( $sOrder == "ORDER BY" ) + { + $sOrder = ""; + } + } + + + /* + * Filtering + * NOTE this does not match the built-in DataTables filtering which does it + * word by word on any field. It's possible to do here, but concerned about efficiency + * on very large tables, and MySQL's regex functionality is very limited + */ + $sWhere = ""; + if ( $_GET['sSearch'] != "" ) + { + $sWhere = "WHERE ("; + for ( $i=0 ; $i<count($aColumns) ; $i++ ) + { + $sWhere .= $aColumns[$i]." LIKE '%".mysql_real_escape_string( $_GET['sSearch'] )."%' OR "; + } + $sWhere = substr_replace( $sWhere, "", -3 ); + $sWhere .= ')'; + } + + /* Individual column filtering */ + for ( $i=0 ; $i<count($aColumns) ; $i++ ) + { + if ( $_GET['bSearchable_'.$i] == "true" && $_GET['sSearch_'.$i] != '' ) + { + if ( $sWhere == "" ) + { + $sWhere = "WHERE "; + } + else + { + $sWhere .= " AND "; + } + $sWhere .= $aColumns[$i]." LIKE '%".mysql_real_escape_string($_GET['sSearch_'.$i])."%' "; + } + } + + + /* + * SQL queries + * Get data to display + */ + $sQuery = " + SELECT SQL_CALC_FOUND_ROWS ".str_replace(" , ", " ", implode(", ", $aColumns))." + FROM $sTable + $sWhere + $sOrder + $sLimit + "; + $rResult = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error()); + + /* Data set length after filtering */ + $sQuery = " + SELECT FOUND_ROWS() + "; + $rResultFilterTotal = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error()); + $aResultFilterTotal = mysql_fetch_array($rResultFilterTotal); + $iFilteredTotal = $aResultFilterTotal[0]; + + /* Total data set length */ + $sQuery = " + SELECT COUNT(".$sIndexColumn.") + FROM $sTable + "; + $rResultTotal = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error()); + $aResultTotal = mysql_fetch_array($rResultTotal); + $iTotal = $aResultTotal[0]; + + + /* + * Output + */ + $output = array( + "sEcho" => intval($_GET['sEcho']), + "iTotalRecords" => $iTotal, + "iTotalDisplayRecords" => $iFilteredTotal, + "aaData" => array() + ); + + while ( $aRow = mysql_fetch_array( $rResult ) ) + { + $row = array(); + for ( $i=0 ; $i<count($aColumns) ; $i++ ) + { + if ( $aColumns[$i] == "version" ) + { + /* Special output formatting for 'version' column */ + $row[] = ($aRow[ $aColumns[$i] ]=="0") ? '-' : $aRow[ $aColumns[$i] ]; + } + else if ( $aColumns[$i] != ' ' ) + { + /* General output */ + $row[] = $aRow[ $aColumns[$i] ]; + } + } + $output['aaData'][] = $row; + } + + echo json_encode( $output ); +?></pre> + + + <h1>Other examples</h1> + <div class="demo_links"> + <h2>Basic initialisation</h2> + <ul> + <li><a href="../basic_init/zero_config.html">Zero configuration</a></li> + <li><a href="../basic_init/filter_only.html">Feature enablement</a></li> + <li><a href="../basic_init/table_sorting.html">Sorting data</a></li> + <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li> + <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li> + <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li> + <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li> + <li><a href="../basic_init/dom.html">DOM positioning</a></li> + <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li> + <li><a href="../basic_init/state_save.html">State saving</a></li> + <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li> + <li>Scrolling: <br> + <a href="../basic_init/scroll_x.html">Horizontal</a> / + <a href="../basic_init/scroll_y.html">Vertical</a> / + <a href="../basic_init/scroll_xy.html">Both</a> / + <a href="../basic_init/scroll_y_theme.html">Themed</a> / + <a href="../basic_init/scroll_y_infinite.html">Infinite</a> + </li> + <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li> + <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li> + </ul> + + <h2>Advanced initialisation</h2> + <ul> + <li>Events: <br> + <a href="../advanced_init/events_live.html">Live events</a> / + <a href="../advanced_init/events_pre_init.html">Pre-init</a> / + <a href="../advanced_init/events_post_init.html">Post-init</a> + </li> + <li><a href="../advanced_init/column_render.html">Column rendering</a></li> + <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li> + <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li> + <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li> + <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li> + <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li> + <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li> + <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li> + <li><a href="../advanced_init/row_callback.html">Row callback</a></li> + <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li> + <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li> + <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li> + <li><a href="../advanced_init/defaults.html">Setting defaults</a></li> + <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li> + <li><a href="../advanced_init/dt_events.html">Custom events</a></li> + </ul> + + <h2>API</h2> + <ul> + <li><a href="../api/add_row.html">Dynamically add a new row</a></li> + <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li> + <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li> + <li><a href="../api/highlight.html">Highlight rows and columns</a></li> + <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li> + <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li> + <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li> + <li><a href="../api/form.html">Submit form with elements in table</a></li> + <li><a href="../api/counter_column.html">Index column (static number column)</a></li> + <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li> + <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li> + <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li> + <li><a href="../api/regex.html">Regular expression filtering</a></li> + </ul> + </div> + + <div class="demo_links"> + <h2>Data sources</h2> + <ul> + <li><a href="../data_sources/dom.html">DOM</a></li> + <li><a href="../data_sources/js_array.html">Javascript array</a></li> + <li><a href="../data_sources/ajax.html">Ajax source</a></li> + <li><a href="../data_sources/server_side.html">Server side processing</a></li> + </ul> + + <h2>Server-side processing</h2> + <ul> + <li><a href="../server_side/server_side.html">Obtain server-side data</a></li> + <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li> + <li><a href="../server_side/post.html">Use HTTP POST</a></li> + <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li> + <li><a href="../server_side/object_data.html">Reading table data from objects</a></li> + <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li> + <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li> + <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li> + <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li> + <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li> + <li><a href="../server_side/column_ordering.html">Custom column ordering (in callback data)</a></li> + <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li> + </ul> + + <h2>Ajax data source</h2> + <ul> + <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li> + <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li> + <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li> + <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li> + <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li> + <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li> + <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li> + </ul> + + <h2>Plug-ins</h2> + <ul> + <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li> + <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li> + <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li> + <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li> + <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li> + <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li> + <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li> + </ul> + </div> + + + <div id="footer" class="clear" style="text-align:center;"> + <p> + Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br> + Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables. + </p> + + <span style="font-size:10px;"> + DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> © 2007-2011<br> + DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/jquery.dataTables.min.js b/src/warden-server/contrib/wardenweb/datatables/jquery.dataTables.min.js new file mode 100644 index 0000000..bbbddb5 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/jquery.dataTables.min.js @@ -0,0 +1,153 @@ +/* + * File: jquery.dataTables.min.js + * Version: 1.9.0 + * Author: Allan Jardine (www.sprymedia.co.uk) + * Info: www.datatables.net + * + * Copyright 2008-2012 Allan Jardine, all rights reserved. + * + * This source file is free software, under either the GPL v2 license or a + * BSD style license, available at: + * http://datatables.net/license_gpl2 + * http://datatables.net/license_bsd + * + * This source file is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details. + */ +(function(i,aa,k,l){var j=function(e){function o(a,b){var c=j.defaults.columns,d=a.aoColumns.length,c=i.extend({},j.models.oColumn,c,{sSortingClass:a.oClasses.sSortable,sSortingClassJUI:a.oClasses.sSortJUI,nTh:b?b:k.createElement("th"),sTitle:c.sTitle?c.sTitle:b?b.innerHTML:"",aDataSort:c.aDataSort?c.aDataSort:[d],mDataProp:c.mDataProp?c.oDefaults:d});a.aoColumns.push(c);if(a.aoPreSearchCols[d]===l||null===a.aoPreSearchCols[d])a.aoPreSearchCols[d]=i.extend({},j.models.oSearch);else{c=a.aoPreSearchCols[d]; +if(c.bRegex===l)c.bRegex=!0;if(c.bSmart===l)c.bSmart=!0;if(c.bCaseInsensitive===l)c.bCaseInsensitive=!0}E(a,d,null)}function E(a,b,c){b=a.aoColumns[b];if(c!==l&&null!==c){if(c.sType!==l)b.sType=c.sType,b._bAutoType=!1;i.extend(b,c);n(b,c,"sWidth","sWidthOrig");if(c.iDataSort!==l)b.aDataSort=[c.iDataSort];n(b,c,"aDataSort")}b.fnGetData=V(b.mDataProp);b.fnSetData=sa(b.mDataProp);if(!a.oFeatures.bSort)b.bSortable=!1;if(!b.bSortable||-1==i.inArray("asc",b.asSorting)&&-1==i.inArray("desc",b.asSorting))b.sSortingClass= +a.oClasses.sSortableNone,b.sSortingClassJUI="";else if(b.bSortable||-1==i.inArray("asc",b.asSorting)&&-1==i.inArray("desc",b.asSorting))b.sSortingClass=a.oClasses.sSortable,b.sSortingClassJUI=a.oClasses.sSortJUI;else if(-1!=i.inArray("asc",b.asSorting)&&-1==i.inArray("desc",b.asSorting))b.sSortingClass=a.oClasses.sSortableAsc,b.sSortingClassJUI=a.oClasses.sSortJUIAscAllowed;else if(-1==i.inArray("asc",b.asSorting)&&-1!=i.inArray("desc",b.asSorting))b.sSortingClass=a.oClasses.sSortableDesc,b.sSortingClassJUI= +a.oClasses.sSortJUIDescAllowed}function r(a){if(!1===a.oFeatures.bAutoWidth)return!1;ba(a);for(var b=0,c=a.aoColumns.length;b<c;b++)a.aoColumns[b].nTh.style.width=a.aoColumns[b].sWidth}function s(a,b){for(var c=-1,d=0;d<a.aoColumns.length;d++)if(!0===a.aoColumns[d].bVisible&&c++,c==b)return d;return null}function t(a,b){for(var c=-1,d=0;d<a.aoColumns.length;d++)if(!0===a.aoColumns[d].bVisible&&c++,d==b)return!0===a.aoColumns[d].bVisible?c:null;return null}function v(a){for(var b=0,c=0;c<a.aoColumns.length;c++)!0=== +a.aoColumns[c].bVisible&&b++;return b}function B(a){for(var b=j.ext.aTypes,c=b.length,d=0;d<c;d++){var f=b[d](a);if(null!==f)return f}return"string"}function D(a,b){for(var c=b.split(","),d=[],f=0,h=a.aoColumns.length;f<h;f++)for(var g=0;g<h;g++)if(a.aoColumns[f].sName==c[g]){d.push(g);break}return d}function x(a){for(var b="",c=0,d=a.aoColumns.length;c<d;c++)b+=a.aoColumns[c].sName+",";return b.length==d?"":b.slice(0,-1)}function I(a,b,c,d){var f,h,g,e,q;if(b)for(f=b.length-1;0<=f;f--){var m=b[f].aTargets; +i.isArray(m)||F(a,1,"aTargets must be an array of targets, not a "+typeof m);for(h=0,g=m.length;h<g;h++)if("number"===typeof m[h]&&0<=m[h]){for(;a.aoColumns.length<=m[h];)o(a);d(m[h],b[f])}else if("number"===typeof m[h]&&0>m[h])d(a.aoColumns.length+m[h],b[f]);else if("string"===typeof m[h])for(e=0,q=a.aoColumns.length;e<q;e++)("_all"==m[h]||i(a.aoColumns[e].nTh).hasClass(m[h]))&&d(e,b[f])}if(c)for(f=0,a=c.length;f<a;f++)d(f,c[f])}function G(a,b){var c;c=i.isArray(b)?b.slice():i.extend(!0,{},b);var d= +a.aoData.length;c=i.extend(!0,{},j.models.oRow,{_aData:c});a.aoData.push(c);for(var f,h=0,g=a.aoColumns.length;h<g;h++)if(c=a.aoColumns[h],"function"===typeof c.fnRender&&c.bUseRendered&&null!==c.mDataProp&&J(a,d,h,R(a,d,h)),c._bAutoType&&"string"!=c.sType&&(f=w(a,d,h,"type"),null!==f&&""!==f))if(f=B(f),null===c.sType)c.sType=f;else if(c.sType!=f&&"html"!=c.sType)c.sType="string";a.aiDisplayMaster.push(d);a.oFeatures.bDeferRender||ca(a,d);return d}function ta(a){var b,c,d,f,h,g,e,q,m;if(a.bDeferLoading|| +null===a.sAjaxSource){e=a.nTBody.childNodes;for(b=0,c=e.length;b<c;b++)if("TR"==e[b].nodeName.toUpperCase()){q=a.aoData.length;e[b]._DT_RowIndex=q;a.aoData.push(i.extend(!0,{},j.models.oRow,{nTr:e[b]}));a.aiDisplayMaster.push(q);g=e[b].childNodes;h=0;for(d=0,f=g.length;d<f;d++)if(m=g[d].nodeName.toUpperCase(),"TD"==m||"TH"==m)J(a,q,h,i.trim(g[d].innerHTML)),h++}}e=S(a);g=[];for(b=0,c=e.length;b<c;b++)for(d=0,f=e[b].childNodes.length;d<f;d++)h=e[b].childNodes[d],m=h.nodeName.toUpperCase(),("TD"==m|| +"TH"==m)&&g.push(h);for(f=0,e=a.aoColumns.length;f<e;f++){m=a.aoColumns[f];if(null===m.sTitle)m.sTitle=m.nTh.innerHTML;h=m._bAutoType;q="function"===typeof m.fnRender;var o=null!==m.sClass,r=m.bVisible,l,n;if(h||q||o||!r)for(b=0,c=a.aoData.length;b<c;b++){d=a.aoData[b];l=g[b*e+f];if(h&&"string"!=m.sType&&(n=w(a,b,f,"type"),""!==n))if(n=B(n),null===m.sType)m.sType=n;else if(m.sType!=n&&"html"!=m.sType)m.sType="string";if("function"===typeof m.mDataProp)l.innerHTML=w(a,b,f,"display");if(q)n=R(a,b,f), +l.innerHTML=n,m.bUseRendered&&J(a,b,f,n);o&&(l.className+=" "+m.sClass);r?d._anHidden[f]=null:(d._anHidden[f]=l,l.parentNode.removeChild(l));m.fnCreatedCell&&m.fnCreatedCell.call(a.oInstance,l,w(a,b,f,"display"),d._aData,b,f)}}if(0!==a.aoRowCreatedCallback.length)for(b=0,c=a.aoData.length;b<c;b++)d=a.aoData[b],C(a,"aoRowCreatedCallback",null,[d.nTr,d._aData,b])}function K(a,b){return b._DT_RowIndex!==l?b._DT_RowIndex:null}function da(a,b,c){for(var b=L(a,b),d=0,a=a.aoColumns.length;d<a;d++)if(b[d]=== +c)return d;return-1}function W(a,b,c){for(var d=[],f=0,h=a.aoColumns.length;f<h;f++)d.push(w(a,b,f,c));return d}function w(a,b,c,d){var f=a.aoColumns[c];if((c=f.fnGetData(a.aoData[b]._aData,d))===l){if(a.iDrawError!=a.iDraw&&null===f.sDefaultContent)F(a,0,"Requested unknown parameter '"+f.mDataProp+"' from the data source for row "+b),a.iDrawError=a.iDraw;return f.sDefaultContent}if(null===c&&null!==f.sDefaultContent)c=f.sDefaultContent;else if("function"===typeof c)return c();return"display"==d&& +null===c?"":c}function J(a,b,c,d){a.aoColumns[c].fnSetData(a.aoData[b]._aData,d)}function V(a){if(null===a)return function(){return null};if("function"===typeof a)return function(b,d){return a(b,d)};if("string"===typeof a&&-1!=a.indexOf(".")){var b=a.split(".");return function(a){for(var d=0,f=b.length;d<f;d++)if(a=a[b[d]],a===l)return l;return a}}return function(b){return b[a]}}function sa(a){if(null===a)return function(){};if("function"===typeof a)return function(b,d){a(b,"set",d)};if("string"=== +typeof a&&-1!=a.indexOf(".")){var b=a.split(".");return function(a,d){for(var f=0,h=b.length-1;f<h;f++)a=a[b[f]];a[b[b.length-1]]=d}}return function(b,d){b[a]=d}}function X(a){for(var b=[],c=a.aoData.length,d=0;d<c;d++)b.push(a.aoData[d]._aData);return b}function ea(a){a.aoData.splice(0,a.aoData.length);a.aiDisplayMaster.splice(0,a.aiDisplayMaster.length);a.aiDisplay.splice(0,a.aiDisplay.length);z(a)}function fa(a,b){for(var c=-1,d=0,f=a.length;d<f;d++)a[d]==b?c=d:a[d]>b&&a[d]--; -1!=c&&a.splice(c, +1)}function R(a,b,c){var d=a.aoColumns[c];return d.fnRender({iDataRow:b,iDataColumn:c,oSettings:a,aData:a.aoData[b]._aData,mDataProp:d.mDataProp},w(a,b,c,"display"))}function ca(a,b){var c=a.aoData[b],d;if(null===c.nTr){c.nTr=k.createElement("tr");c.nTr._DT_RowIndex=b;if(c._aData.DT_RowId)c.nTr.id=c._aData.DT_RowId;c._aData.DT_RowClass&&i(c.nTr).addClass(c._aData.DT_RowClass);for(var f=0,h=a.aoColumns.length;f<h;f++){var g=a.aoColumns[f];d=k.createElement("td");d.innerHTML="function"===typeof g.fnRender&& +(!g.bUseRendered||null===g.mDataProp)?R(a,b,f):w(a,b,f,"display");if(null!==g.sClass)d.className=g.sClass;g.bVisible?(c.nTr.appendChild(d),c._anHidden[f]=null):c._anHidden[f]=d;g.fnCreatedCell&&g.fnCreatedCell.call(a.oInstance,d,w(a,b,f,"display"),c._aData,b,f)}C(a,"aoRowCreatedCallback",null,[c.nTr,c._aData,b])}}function ua(a){var b,c,d;if(0!==a.nTHead.getElementsByTagName("th").length)for(b=0,d=a.aoColumns.length;b<d;b++){if(c=a.aoColumns[b].nTh,c.setAttribute("role","columnheader"),a.aoColumns[b].bSortable&& +(c.setAttribute("tabindex",a.iTabIndex),c.setAttribute("aria-controls",a.sTableId)),null!==a.aoColumns[b].sClass&&i(c).addClass(a.aoColumns[b].sClass),a.aoColumns[b].sTitle!=c.innerHTML)c.innerHTML=a.aoColumns[b].sTitle}else{var f=k.createElement("tr");for(b=0,d=a.aoColumns.length;b<d;b++)c=a.aoColumns[b].nTh,c.innerHTML=a.aoColumns[b].sTitle,c.setAttribute("tabindex","0"),null!==a.aoColumns[b].sClass&&i(c).addClass(a.aoColumns[b].sClass),f.appendChild(c);i(a.nTHead).html("")[0].appendChild(f);T(a.aoHeader, +a.nTHead)}i(a.nTHead).children("tr").attr("role","row");if(a.bJUI)for(b=0,d=a.aoColumns.length;b<d;b++){c=a.aoColumns[b].nTh;f=k.createElement("div");f.className=a.oClasses.sSortJUIWrapper;i(c).contents().appendTo(f);var h=k.createElement("span");h.className=a.oClasses.sSortIcon;f.appendChild(h);c.appendChild(f)}if(a.oFeatures.bSort)for(b=0;b<a.aoColumns.length;b++)!1!==a.aoColumns[b].bSortable?ga(a,a.aoColumns[b].nTh,b):i(a.aoColumns[b].nTh).addClass(a.oClasses.sSortableNone);""!==a.oClasses.sFooterTH&& +i(a.nTFoot).children("tr").children("th").addClass(a.oClasses.sFooterTH);if(null!==a.nTFoot){c=O(a,null,a.aoFooter);for(b=0,d=a.aoColumns.length;b<d;b++)if(c[b])a.aoColumns[b].nTf=c[b],a.aoColumns[b].sClass&&i(c[b]).addClass(a.aoColumns[b].sClass)}}function U(a,b,c){var d,f,h,g=[],e=[],i=a.aoColumns.length,m;c===l&&(c=!1);for(d=0,f=b.length;d<f;d++){g[d]=b[d].slice();g[d].nTr=b[d].nTr;for(h=i-1;0<=h;h--)!a.aoColumns[h].bVisible&&!c&&g[d].splice(h,1);e.push([])}for(d=0,f=g.length;d<f;d++){if(a=g[d].nTr)for(;h= +a.firstChild;)a.removeChild(h);for(h=0,b=g[d].length;h<b;h++)if(m=i=1,e[d][h]===l){a.appendChild(g[d][h].cell);for(e[d][h]=1;g[d+i]!==l&&g[d][h].cell==g[d+i][h].cell;)e[d+i][h]=1,i++;for(;g[d][h+m]!==l&&g[d][h].cell==g[d][h+m].cell;){for(c=0;c<i;c++)e[d+c][h+m]=1;m++}g[d][h].cell.rowSpan=i;g[d][h].cell.colSpan=m}}}function y(a){var b,c,d=[],f=0,h=a.asStripeClasses.length;b=a.aoOpenRows.length;c=C(a,"aoPreDrawCallback","preDraw",[a]);if(-1===i.inArray(!1,c)){a.bDrawing=!0;if(a.iInitDisplayStart!== +l&&-1!=a.iInitDisplayStart)a._iDisplayStart=a.oFeatures.bServerSide?a.iInitDisplayStart:a.iInitDisplayStart>=a.fnRecordsDisplay()?0:a.iInitDisplayStart,a.iInitDisplayStart=-1,z(a);if(a.bDeferLoading)a.bDeferLoading=!1,a.iDraw++;else if(a.oFeatures.bServerSide){if(!a.bDestroying&&!va(a))return}else a.iDraw++;if(0!==a.aiDisplay.length){var g=a._iDisplayStart;c=a._iDisplayEnd;if(a.oFeatures.bServerSide)g=0,c=a.aoData.length;for(;g<c;g++){var e=a.aoData[a.aiDisplay[g]];null===e.nTr&&ca(a,a.aiDisplay[g]); +var q=e.nTr;if(0!==h){var m=a.asStripeClasses[f%h];if(e._sRowStripe!=m)i(q).removeClass(e._sRowStripe).addClass(m),e._sRowStripe=m}C(a,"aoRowCallback",null,[q,a.aoData[a.aiDisplay[g]]._aData,f,g]);d.push(q);f++;if(0!==b)for(e=0;e<b;e++)if(q==a.aoOpenRows[e].nParent){d.push(a.aoOpenRows[e].nTr);break}}}else{d[0]=k.createElement("tr");if(a.asStripeClasses[0])d[0].className=a.asStripeClasses[0];h=a.oLanguage.sZeroRecords.replace("_MAX_",a.fnFormatNumber(a.fnRecordsTotal()));if(1==a.iDraw&&null!==a.sAjaxSource&& +!a.oFeatures.bServerSide)h=a.oLanguage.sLoadingRecords;else if(a.oLanguage.sEmptyTable&&0===a.fnRecordsTotal())h=a.oLanguage.sEmptyTable;b=k.createElement("td");b.setAttribute("valign","top");b.colSpan=v(a);b.className=a.oClasses.sRowEmpty;b.innerHTML=h;d[f].appendChild(b)}C(a,"aoHeaderCallback","header",[i(a.nTHead).children("tr")[0],X(a),a._iDisplayStart,a.fnDisplayEnd(),a.aiDisplay]);C(a,"aoFooterCallback","footer",[i(a.nTFoot).children("tr")[0],X(a),a._iDisplayStart,a.fnDisplayEnd(),a.aiDisplay]); +f=k.createDocumentFragment();b=k.createDocumentFragment();if(a.nTBody){h=a.nTBody.parentNode;b.appendChild(a.nTBody);if(!a.oScroll.bInfinite||!a._bInitComplete||a.bSorted||a.bFiltered)for(;b=a.nTBody.firstChild;)a.nTBody.removeChild(b);for(b=0,c=d.length;b<c;b++)f.appendChild(d[b]);a.nTBody.appendChild(f);null!==h&&h.appendChild(a.nTBody)}C(a,"aoDrawCallback","draw",[a]);a.bSorted=!1;a.bFiltered=!1;a.bDrawing=!1;a.oFeatures.bServerSide&&(H(a,!1),a._bInitComplete||Y(a))}}function Z(a){a.oFeatures.bSort? +P(a,a.oPreviousSearch):a.oFeatures.bFilter?M(a,a.oPreviousSearch):(z(a),y(a))}function wa(a){var b=i("<div></div>")[0];a.nTable.parentNode.insertBefore(b,a.nTable);a.nTableWrapper=i('<div id="'+a.sTableId+'_wrapper" class="'+a.oClasses.sWrapper+'" role="grid"></div>')[0];a.nTableReinsertBefore=a.nTable.nextSibling;for(var c=a.nTableWrapper,d=a.sDom.split(""),f,h,g,e,q,m,o,l=0;l<d.length;l++){h=0;g=d[l];if("<"==g){e=i("<div></div>")[0];q=d[l+1];if("'"==q||'"'==q){m="";for(o=2;d[l+o]!=q;)m+=d[l+o], +o++;"H"==m?m="fg-toolbar ui-toolbar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix":"F"==m&&(m="fg-toolbar ui-toolbar ui-widget-header ui-corner-bl ui-corner-br ui-helper-clearfix");-1!=m.indexOf(".")?(q=m.split("."),e.id=q[0].substr(1,q[0].length-1),e.className=q[1]):"#"==m.charAt(0)?e.id=m.substr(1,m.length-1):e.className=m;l+=o}c.appendChild(e);c=e}else if(">"==g)c=c.parentNode;else if("l"==g&&a.oFeatures.bPaginate&&a.oFeatures.bLengthChange)f=xa(a),h=1;else if("f"==g&&a.oFeatures.bFilter)f= +ya(a),h=1;else if("r"==g&&a.oFeatures.bProcessing)f=za(a),h=1;else if("t"==g)f=Aa(a),h=1;else if("i"==g&&a.oFeatures.bInfo)f=Ba(a),h=1;else if("p"==g&&a.oFeatures.bPaginate)f=Ca(a),h=1;else if(0!==j.ext.aoFeatures.length){e=j.ext.aoFeatures;o=0;for(q=e.length;o<q;o++)if(g==e[o].cFeature){(f=e[o].fnInit(a))&&(h=1);break}}1==h&&null!==f&&("object"!==typeof a.aanFeatures[g]&&(a.aanFeatures[g]=[]),a.aanFeatures[g].push(f),c.appendChild(f))}b.parentNode.replaceChild(a.nTableWrapper,b)}function T(a,b){var c= +i(b).children("tr"),d,f,h,g,e,q,m,j;a.splice(0,a.length);for(f=0,q=c.length;f<q;f++)a.push([]);for(f=0,q=c.length;f<q;f++)for(h=0,m=c[f].childNodes.length;h<m;h++)if(d=c[f].childNodes[h],"TD"==d.nodeName.toUpperCase()||"TH"==d.nodeName.toUpperCase()){var o=1*d.getAttribute("colspan"),l=1*d.getAttribute("rowspan"),o=!o||0===o||1===o?1:o,l=!l||0===l||1===l?1:l;for(g=0;a[f][g];)g++;j=g;for(e=0;e<o;e++)for(g=0;g<l;g++)a[f+g][j+e]={cell:d,unique:1==o?!0:!1},a[f+g].nTr=c[f]}}function O(a,b,c){var d=[]; +if(!c)c=a.aoHeader,b&&(c=[],T(c,b));for(var b=0,f=c.length;b<f;b++)for(var h=0,g=c[b].length;h<g;h++)if(c[b][h].unique&&(!d[h]||!a.bSortCellsTop))d[h]=c[b][h].cell;return d}function va(a){if(a.bAjaxDataGet){a.iDraw++;H(a,!0);var b=Da(a);ha(a,b);a.fnServerData.call(a.oInstance,a.sAjaxSource,b,function(b){Ea(a,b)},a);return!1}return!0}function Da(a){var b=a.aoColumns.length,c=[],d,f;c.push({name:"sEcho",value:a.iDraw});c.push({name:"iColumns",value:b});c.push({name:"sColumns",value:x(a)});c.push({name:"iDisplayStart", +value:a._iDisplayStart});c.push({name:"iDisplayLength",value:!1!==a.oFeatures.bPaginate?a._iDisplayLength:-1});for(f=0;f<b;f++)d=a.aoColumns[f].mDataProp,c.push({name:"mDataProp_"+f,value:"function"===typeof d?"function":d});if(!1!==a.oFeatures.bFilter){c.push({name:"sSearch",value:a.oPreviousSearch.sSearch});c.push({name:"bRegex",value:a.oPreviousSearch.bRegex});for(f=0;f<b;f++)c.push({name:"sSearch_"+f,value:a.aoPreSearchCols[f].sSearch}),c.push({name:"bRegex_"+f,value:a.aoPreSearchCols[f].bRegex}), +c.push({name:"bSearchable_"+f,value:a.aoColumns[f].bSearchable})}if(!1!==a.oFeatures.bSort){d=null!==a.aaSortingFixed?a.aaSortingFixed.length:0;var h=a.aaSorting.length;c.push({name:"iSortingCols",value:d+h});for(f=0;f<d;f++)c.push({name:"iSortCol_"+f,value:a.aaSortingFixed[f][0]}),c.push({name:"sSortDir_"+f,value:a.aaSortingFixed[f][1]});for(f=0;f<h;f++)c.push({name:"iSortCol_"+(f+d),value:a.aaSorting[f][0]}),c.push({name:"sSortDir_"+(f+d),value:a.aaSorting[f][1]});for(f=0;f<b;f++)c.push({name:"bSortable_"+ +f,value:a.aoColumns[f].bSortable})}return c}function ha(a,b){C(a,"aoServerParams","serverParams",[b])}function Ea(a,b){if(b.sEcho!==l){if(1*b.sEcho<a.iDraw)return;a.iDraw=1*b.sEcho}(!a.oScroll.bInfinite||a.oScroll.bInfinite&&(a.bSorted||a.bFiltered))&&ea(a);a._iRecordsTotal=parseInt(b.iTotalRecords,10);a._iRecordsDisplay=parseInt(b.iTotalDisplayRecords,10);var c=x(a),c=b.sColumns!==l&&""!==c&&b.sColumns!=c,d;c&&(d=D(a,b.sColumns));for(var f=V(a.sAjaxDataProp)(b),h=0,g=f.length;h<g;h++)if(c){for(var e= +[],i=0,m=a.aoColumns.length;i<m;i++)e.push(f[h][d[i]]);G(a,e)}else G(a,f[h]);a.aiDisplay=a.aiDisplayMaster.slice();a.bAjaxDataGet=!1;y(a);a.bAjaxDataGet=!0;H(a,!1)}function ya(a){var b=a.oPreviousSearch,c=a.oLanguage.sSearch,c=-1!==c.indexOf("_INPUT_")?c.replace("_INPUT_",'<input type="text" />'):""===c?'<input type="text" />':c+' <input type="text" />',d=k.createElement("div");d.className=a.oClasses.sFilter;d.innerHTML="<label>"+c+"</label>";if(!a.aanFeatures.f)d.id=a.sTableId+"_filter";c=i("input", +d);c.val(b.sSearch.replace('"',"""));c.bind("keyup.DT",function(){for(var c=a.aanFeatures.f,d=0,g=c.length;d<g;d++)c[d]!=i(this).parents("div.dataTables_filter")[0]&&i("input",c[d]).val(this.value);this.value!=b.sSearch&&M(a,{sSearch:this.value,bRegex:b.bRegex,bSmart:b.bSmart,bCaseInsensitive:b.bCaseInsensitive})});c.attr("aria-controls",a.sTableId).bind("keypress.DT",function(a){if(13==a.keyCode)return!1});return d}function M(a,b,c){var d=a.oPreviousSearch,f=a.aoPreSearchCols,h=function(a){d.sSearch= +a.sSearch;d.bRegex=a.bRegex;d.bSmart=a.bSmart;d.bCaseInsensitive=a.bCaseInsensitive};if(a.oFeatures.bServerSide)h(b);else{Fa(a,b.sSearch,c,b.bRegex,b.bSmart,b.bCaseInsensitive);h(b);for(b=0;b<a.aoPreSearchCols.length;b++)Ga(a,f[b].sSearch,b,f[b].bRegex,f[b].bSmart,f[b].bCaseInsensitive);Ha(a)}a.bFiltered=!0;i(a.oInstance).trigger("filter",a);a._iDisplayStart=0;z(a);y(a);ia(a,0)}function Ha(a){for(var b=j.ext.afnFiltering,c=0,d=b.length;c<d;c++)for(var f=0,h=0,g=a.aiDisplay.length;h<g;h++){var e=a.aiDisplay[h- +f];b[c](a,W(a,e,"filter"),e)||(a.aiDisplay.splice(h-f,1),f++)}}function Ga(a,b,c,d,f,h){if(""!==b)for(var g=0,b=ja(b,d,f,h),d=a.aiDisplay.length-1;0<=d;d--)f=ka(w(a,a.aiDisplay[d],c,"filter"),a.aoColumns[c].sType),b.test(f)||(a.aiDisplay.splice(d,1),g++)}function Fa(a,b,c,d,f,h){d=ja(b,d,f,h);f=a.oPreviousSearch;c||(c=0);0!==j.ext.afnFiltering.length&&(c=1);if(0>=b.length)a.aiDisplay.splice(0,a.aiDisplay.length),a.aiDisplay=a.aiDisplayMaster.slice();else if(a.aiDisplay.length==a.aiDisplayMaster.length|| +f.sSearch.length>b.length||1==c||0!==b.indexOf(f.sSearch)){a.aiDisplay.splice(0,a.aiDisplay.length);ia(a,1);for(b=0;b<a.aiDisplayMaster.length;b++)d.test(a.asDataSearch[b])&&a.aiDisplay.push(a.aiDisplayMaster[b])}else for(b=c=0;b<a.asDataSearch.length;b++)d.test(a.asDataSearch[b])||(a.aiDisplay.splice(b-c,1),c++)}function ia(a,b){if(!a.oFeatures.bServerSide){a.asDataSearch.splice(0,a.asDataSearch.length);for(var c=b&&1===b?a.aiDisplayMaster:a.aiDisplay,d=0,f=c.length;d<f;d++)a.asDataSearch[d]=la(a, +W(a,c[d],"filter"))}}function la(a,b){var c="";if(a.__nTmpFilter===l)a.__nTmpFilter=k.createElement("div");for(var d=a.__nTmpFilter,f=0,h=a.aoColumns.length;f<h;f++)a.aoColumns[f].bSearchable&&(c+=ka(b[f],a.aoColumns[f].sType)+" ");if(-1!==c.indexOf("&"))d.innerHTML=c,c=d.textContent?d.textContent:d.innerText,c=c.replace(/\n/g," ").replace(/\r/g,"");return c}function ja(a,b,c,d){if(c)return a=b?a.split(" "):ma(a).split(" "),a="^(?=.*?"+a.join(")(?=.*?")+").*$",RegExp(a,d?"i":"");a=b?a:ma(a);return RegExp(a, +d?"i":"")}function ka(a,b){return"function"===typeof j.ext.ofnSearch[b]?j.ext.ofnSearch[b](a):"html"==b?a.replace(/[\r\n]/g," ").replace(/<.*?>/g,""):"string"===typeof a?a.replace(/[\r\n]/g," "):null===a?"":a}function ma(a){return a.replace(RegExp("(\\/|\\.|\\*|\\+|\\?|\\||\\(|\\)|\\[|\\]|\\{|\\}|\\\\|\\$|\\^)","g"),"\\$1")}function Ba(a){var b=k.createElement("div");b.className=a.oClasses.sInfo;if(!a.aanFeatures.i)a.aoDrawCallback.push({fn:Ia,sName:"information"}),b.id=a.sTableId+"_info";a.nTable.setAttribute("aria-describedby", +a.sTableId+"_info");return b}function Ia(a){if(a.oFeatures.bInfo&&0!==a.aanFeatures.i.length){var b=a._iDisplayStart+1,c=a.fnDisplayEnd(),d=a.fnRecordsTotal(),f=a.fnRecordsDisplay(),h=a.fnFormatNumber(b),g=a.fnFormatNumber(c),e=a.fnFormatNumber(d),q=a.fnFormatNumber(f);a.oScroll.bInfinite&&(h=a.fnFormatNumber(1));h=0===a.fnRecordsDisplay()&&a.fnRecordsDisplay()==a.fnRecordsTotal()?a.oLanguage.sInfoEmpty+a.oLanguage.sInfoPostFix:0===a.fnRecordsDisplay()?a.oLanguage.sInfoEmpty+" "+a.oLanguage.sInfoFiltered.replace("_MAX_", +e)+a.oLanguage.sInfoPostFix:a.fnRecordsDisplay()==a.fnRecordsTotal()?a.oLanguage.sInfo.replace("_START_",h).replace("_END_",g).replace("_TOTAL_",q)+a.oLanguage.sInfoPostFix:a.oLanguage.sInfo.replace("_START_",h).replace("_END_",g).replace("_TOTAL_",q)+" "+a.oLanguage.sInfoFiltered.replace("_MAX_",a.fnFormatNumber(a.fnRecordsTotal()))+a.oLanguage.sInfoPostFix;null!==a.oLanguage.fnInfoCallback&&(h=a.oLanguage.fnInfoCallback.call(a.oInstance,a,b,c,d,f,h));a=a.aanFeatures.i;b=0;for(c=a.length;b<c;b++)i(a[b]).html(h)}} +function $(a){var b,c,d=a.iInitDisplayStart;if(!1===a.bInitialised)setTimeout(function(){$(a)},200);else{wa(a);ua(a);U(a,a.aoHeader);a.nTFoot&&U(a,a.aoFooter);H(a,!0);a.oFeatures.bAutoWidth&&ba(a);for(b=0,c=a.aoColumns.length;b<c;b++)if(null!==a.aoColumns[b].sWidth)a.aoColumns[b].nTh.style.width=p(a.aoColumns[b].sWidth);a.oFeatures.bSort?P(a):a.oFeatures.bFilter?M(a,a.oPreviousSearch):(a.aiDisplay=a.aiDisplayMaster.slice(),z(a),y(a));null!==a.sAjaxSource&&!a.oFeatures.bServerSide?(c=[],ha(a,c),a.fnServerData.call(a.oInstance, +a.sAjaxSource,c,function(c){var h=""!==a.sAjaxDataProp?V(a.sAjaxDataProp)(c):c;for(b=0;b<h.length;b++)G(a,h[b]);a.iInitDisplayStart=d;a.oFeatures.bSort?P(a):(a.aiDisplay=a.aiDisplayMaster.slice(),z(a),y(a));H(a,!1);Y(a,c)},a)):a.oFeatures.bServerSide||(H(a,!1),Y(a))}}function Y(a,b){a._bInitComplete=!0;C(a,"aoInitComplete","init",[a,b])}function na(a){!a.sEmptyTable&&a.sZeroRecords&&n(a,a,"sZeroRecords","sEmptyTable");!a.sLoadingRecords&&a.sZeroRecords&&n(a,a,"sZeroRecords","sLoadingRecords")}function xa(a){if(a.oScroll.bInfinite)return null; +var b='<select size="1" '+('name="'+a.sTableId+'_length"')+">",c,d,f=a.aLengthMenu;if(2==f.length&&"object"===typeof f[0]&&"object"===typeof f[1])for(c=0,d=f[0].length;c<d;c++)b+='<option value="'+f[0][c]+'">'+f[1][c]+"</option>";else for(c=0,d=f.length;c<d;c++)b+='<option value="'+f[c]+'">'+f[c]+"</option>";b+="</select>";f=k.createElement("div");if(!a.aanFeatures.l)f.id=a.sTableId+"_length";f.className=a.oClasses.sLength;f.innerHTML="<label>"+a.oLanguage.sLengthMenu.replace("_MENU_",b)+"</label>"; +i('select option[value="'+a._iDisplayLength+'"]',f).attr("selected",!0);i("select",f).bind("change.DT",function(){var b=i(this).val(),f=a.aanFeatures.l;for(c=0,d=f.length;c<d;c++)f[c]!=this.parentNode&&i("select",f[c]).val(b);a._iDisplayLength=parseInt(b,10);z(a);if(a.fnDisplayEnd()==a.fnRecordsDisplay()&&(a._iDisplayStart=a.fnDisplayEnd()-a._iDisplayLength,0>a._iDisplayStart))a._iDisplayStart=0;if(-1==a._iDisplayLength)a._iDisplayStart=0;y(a)});i("select",f).attr("aria-controls",a.sTableId);return f} +function z(a){a._iDisplayEnd=!1===a.oFeatures.bPaginate?a.aiDisplay.length:a._iDisplayStart+a._iDisplayLength>a.aiDisplay.length||-1==a._iDisplayLength?a.aiDisplay.length:a._iDisplayStart+a._iDisplayLength}function Ca(a){if(a.oScroll.bInfinite)return null;var b=k.createElement("div");b.className=a.oClasses.sPaging+a.sPaginationType;j.ext.oPagination[a.sPaginationType].fnInit(a,b,function(a){z(a);y(a)});a.aanFeatures.p||a.aoDrawCallback.push({fn:function(a){j.ext.oPagination[a.sPaginationType].fnUpdate(a, +function(a){z(a);y(a)})},sName:"pagination"});return b}function oa(a,b){var c=a._iDisplayStart;if("number"===typeof b){if(a._iDisplayStart=b*a._iDisplayLength,a._iDisplayStart>a.fnRecordsDisplay())a._iDisplayStart=0}else if("first"==b)a._iDisplayStart=0;else if("previous"==b){if(a._iDisplayStart=0<=a._iDisplayLength?a._iDisplayStart-a._iDisplayLength:0,0>a._iDisplayStart)a._iDisplayStart=0}else if("next"==b)0<=a._iDisplayLength?a._iDisplayStart+a._iDisplayLength<a.fnRecordsDisplay()&&(a._iDisplayStart+= +a._iDisplayLength):a._iDisplayStart=0;else if("last"==b)if(0<=a._iDisplayLength){var d=parseInt((a.fnRecordsDisplay()-1)/a._iDisplayLength,10)+1;a._iDisplayStart=(d-1)*a._iDisplayLength}else a._iDisplayStart=0;else F(a,0,"Unknown paging action: "+b);i(a.oInstance).trigger("page",a);return c!=a._iDisplayStart}function za(a){var b=k.createElement("div");if(!a.aanFeatures.r)b.id=a.sTableId+"_processing";b.innerHTML=a.oLanguage.sProcessing;b.className=a.oClasses.sProcessing;a.nTable.parentNode.insertBefore(b, +a.nTable);return b}function H(a,b){if(a.oFeatures.bProcessing)for(var c=a.aanFeatures.r,d=0,f=c.length;d<f;d++)c[d].style.visibility=b?"visible":"hidden";i(a.oInstance).trigger("processing",[a,b])}function Aa(a){if(""===a.oScroll.sX&&""===a.oScroll.sY)return a.nTable;var b=k.createElement("div"),c=k.createElement("div"),d=k.createElement("div"),f=k.createElement("div"),h=k.createElement("div"),g=k.createElement("div"),e=a.nTable.cloneNode(!1),q=a.nTable.cloneNode(!1),m=a.nTable.getElementsByTagName("thead")[0], +j=0===a.nTable.getElementsByTagName("tfoot").length?null:a.nTable.getElementsByTagName("tfoot")[0],o=a.oClasses;c.appendChild(d);h.appendChild(g);f.appendChild(a.nTable);b.appendChild(c);b.appendChild(f);d.appendChild(e);e.appendChild(m);null!==j&&(b.appendChild(h),g.appendChild(q),q.appendChild(j));b.className=o.sScrollWrapper;c.className=o.sScrollHead;d.className=o.sScrollHeadInner;f.className=o.sScrollBody;h.className=o.sScrollFoot;g.className=o.sScrollFootInner;if(a.oScroll.bAutoCss)c.style.overflow= +"hidden",c.style.position="relative",h.style.overflow="hidden",f.style.overflow="auto";c.style.border="0";c.style.width="100%";h.style.border="0";d.style.width="150%";e.removeAttribute("id");e.style.marginLeft="0";a.nTable.style.marginLeft="0";if(null!==j)q.removeAttribute("id"),q.style.marginLeft="0";d=i(a.nTable).children("caption");g=0;for(q=d.length;g<q;g++)e.appendChild(d[g]);if(""!==a.oScroll.sX){c.style.width=p(a.oScroll.sX);f.style.width=p(a.oScroll.sX);if(null!==j)h.style.width=p(a.oScroll.sX); +i(f).scroll(function(){c.scrollLeft=this.scrollLeft;if(null!==j)h.scrollLeft=this.scrollLeft})}if(""!==a.oScroll.sY)f.style.height=p(a.oScroll.sY);a.aoDrawCallback.push({fn:Ja,sName:"scrolling"});a.oScroll.bInfinite&&i(f).scroll(function(){!a.bDrawing&&0!==i(this).scrollTop()&&i(this).scrollTop()+i(this).height()>i(a.nTable).height()-a.oScroll.iLoadGap&&a.fnDisplayEnd()<a.fnRecordsDisplay()&&(oa(a,"next"),z(a),y(a))});a.nScrollHead=c;a.nScrollFoot=h;return b}function Ja(a){var b=a.nScrollHead.getElementsByTagName("div")[0], +c=b.getElementsByTagName("table")[0],d=a.nTable.parentNode,f,h,g,e,j,m,o,l,r=[],n=null!==a.nTFoot?a.nScrollFoot.getElementsByTagName("div")[0]:null,E=null!==a.nTFoot?n.getElementsByTagName("table")[0]:null,k=i.browser.msie&&7>=i.browser.version;g=a.nTable.getElementsByTagName("thead");0<g.length&&a.nTable.removeChild(g[0]);null!==a.nTFoot&&(j=a.nTable.getElementsByTagName("tfoot"),0<j.length&&a.nTable.removeChild(j[0]));g=a.nTHead.cloneNode(!0);a.nTable.insertBefore(g,a.nTable.childNodes[0]);null!== +a.nTFoot&&(j=a.nTFoot.cloneNode(!0),a.nTable.insertBefore(j,a.nTable.childNodes[1]));if(""===a.oScroll.sX)d.style.width="100%",b.parentNode.style.width="100%";var t=O(a,g);for(f=0,h=t.length;f<h;f++)o=s(a,f),t[f].style.width=a.aoColumns[o].sWidth;null!==a.nTFoot&&N(function(a){a.style.width=""},j.getElementsByTagName("tr"));f=i(a.nTable).outerWidth();if(""===a.oScroll.sX){if(a.nTable.style.width="100%",k&&(i("tbody",d).height()>d.offsetHeight||"scroll"==i(d).css("overflow-y")))a.nTable.style.width= +p(i(a.nTable).outerWidth()-a.oScroll.iBarWidth)}else if(""!==a.oScroll.sXInner)a.nTable.style.width=p(a.oScroll.sXInner);else if(f==i(d).width()&&i(d).height()<i(a.nTable).height()){if(a.nTable.style.width=p(f-a.oScroll.iBarWidth),i(a.nTable).outerWidth()>f-a.oScroll.iBarWidth)a.nTable.style.width=p(f)}else a.nTable.style.width=p(f);f=i(a.nTable).outerWidth();h=a.nTHead.getElementsByTagName("tr");g=g.getElementsByTagName("tr");N(function(a,b){m=a.style;m.paddingTop="0";m.paddingBottom="0";m.borderTopWidth= +"0";m.borderBottomWidth="0";m.height=0;l=i(a).width();b.style.width=p(l);r.push(l)},g,h);i(g).height(0);null!==a.nTFoot&&(e=j.getElementsByTagName("tr"),j=a.nTFoot.getElementsByTagName("tr"),N(function(a,b){m=a.style;m.paddingTop="0";m.paddingBottom="0";m.borderTopWidth="0";m.borderBottomWidth="0";m.height=0;l=i(a).width();b.style.width=p(l);r.push(l)},e,j),i(e).height(0));N(function(a){a.innerHTML="";a.style.width=p(r.shift())},g);null!==a.nTFoot&&N(function(a){a.innerHTML="";a.style.width=p(r.shift())}, +e);if(i(a.nTable).outerWidth()<f){e=d.scrollHeight>d.offsetHeight||"scroll"==i(d).css("overflow-y")?f+a.oScroll.iBarWidth:f;if(k&&(d.scrollHeight>d.offsetHeight||"scroll"==i(d).css("overflow-y")))a.nTable.style.width=p(e-a.oScroll.iBarWidth);d.style.width=p(e);b.parentNode.style.width=p(e);if(null!==a.nTFoot)n.parentNode.style.width=p(e);""===a.oScroll.sX?F(a,1,"The table cannot fit into the current element which will cause column misalignment. The table has been drawn at its minimum possible width."): +""!==a.oScroll.sXInner&&F(a,1,"The table cannot fit into the current element which will cause column misalignment. Increase the sScrollXInner value or remove it to allow automatic calculation")}else if(d.style.width=p("100%"),b.parentNode.style.width=p("100%"),null!==a.nTFoot)n.parentNode.style.width=p("100%");if(""===a.oScroll.sY&&k)d.style.height=p(a.nTable.offsetHeight+a.oScroll.iBarWidth);if(""!==a.oScroll.sY&&a.oScroll.bCollapse&&(d.style.height=p(a.oScroll.sY),k=""!==a.oScroll.sX&&a.nTable.offsetWidth> +d.offsetWidth?a.oScroll.iBarWidth:0,a.nTable.offsetHeight<d.offsetHeight))d.style.height=p(i(a.nTable).height()+k);k=i(a.nTable).outerWidth();c.style.width=p(k);b.style.width=p(k);if(null!==a.nTFoot)n.style.width=p(a.nTable.offsetWidth),E.style.width=p(a.nTable.offsetWidth);if(a.bSorted||a.bFiltered)d.scrollTop=0}function N(a,b,c){for(var d=0,f=b.length;d<f;d++)for(var h=0,g=b[d].childNodes.length;h<g;h++)1==b[d].childNodes[h].nodeType&&(c?a(b[d].childNodes[h],c[d].childNodes[h]):a(b[d].childNodes[h]))} +function Ka(a,b){if(!a||null===a||""===a)return 0;b||(b=k.getElementsByTagName("body")[0]);var c,d=k.createElement("div");d.style.width=p(a);b.appendChild(d);c=d.offsetWidth;b.removeChild(d);return c}function ba(a){var b=0,c,d=0,f=a.aoColumns.length,h,g=i("th",a.nTHead),e=a.nTable.getAttribute("width");for(h=0;h<f;h++)if(a.aoColumns[h].bVisible&&(d++,null!==a.aoColumns[h].sWidth)){c=Ka(a.aoColumns[h].sWidthOrig,a.nTable.parentNode);if(null!==c)a.aoColumns[h].sWidth=p(c);b++}if(f==g.length&&0===b&& +d==f&&""===a.oScroll.sX&&""===a.oScroll.sY)for(h=0;h<a.aoColumns.length;h++){if(c=i(g[h]).width(),null!==c)a.aoColumns[h].sWidth=p(c)}else{b=a.nTable.cloneNode(!1);h=a.nTHead.cloneNode(!0);d=k.createElement("tbody");c=k.createElement("tr");b.removeAttribute("id");b.appendChild(h);null!==a.nTFoot&&(b.appendChild(a.nTFoot.cloneNode(!0)),N(function(a){a.style.width=""},b.getElementsByTagName("tr")));b.appendChild(d);d.appendChild(c);d=i("thead th",b);0===d.length&&(d=i("tbody tr:eq(0)>td",b));g=O(a, +h);for(h=d=0;h<f;h++){var j=a.aoColumns[h];j.bVisible&&null!==j.sWidthOrig&&""!==j.sWidthOrig?g[h-d].style.width=p(j.sWidthOrig):j.bVisible?g[h-d].style.width="":d++}for(h=0;h<f;h++)a.aoColumns[h].bVisible&&(d=La(a,h),null!==d&&(d=d.cloneNode(!0),""!==a.aoColumns[h].sContentPadding&&(d.innerHTML+=a.aoColumns[h].sContentPadding),c.appendChild(d)));f=a.nTable.parentNode;f.appendChild(b);if(""!==a.oScroll.sX&&""!==a.oScroll.sXInner)b.style.width=p(a.oScroll.sXInner);else if(""!==a.oScroll.sX){if(b.style.width= +"",i(b).width()<f.offsetWidth)b.style.width=p(f.offsetWidth)}else if(""!==a.oScroll.sY)b.style.width=p(f.offsetWidth);else if(e)b.style.width=p(e);b.style.visibility="hidden";Ma(a,b);f=i("tbody tr:eq(0)",b).children();0===f.length&&(f=O(a,i("thead",b)[0]));if(""!==a.oScroll.sX){for(h=d=c=0;h<a.aoColumns.length;h++)a.aoColumns[h].bVisible&&(c=null===a.aoColumns[h].sWidthOrig?c+i(f[d]).outerWidth():c+(parseInt(a.aoColumns[h].sWidth.replace("px",""),10)+(i(f[d]).outerWidth()-i(f[d]).width())),d++);b.style.width= +p(c);a.nTable.style.width=p(c)}for(h=d=0;h<a.aoColumns.length;h++)if(a.aoColumns[h].bVisible){c=i(f[d]).width();if(null!==c&&0<c)a.aoColumns[h].sWidth=p(c);d++}f=i(b).css("width");a.nTable.style.width=-1!==f.indexOf("%")?f:p(i(b).outerWidth());b.parentNode.removeChild(b)}if(e)a.nTable.style.width=p(e)}function Ma(a,b){if(""===a.oScroll.sX&&""!==a.oScroll.sY)i(b).width(),b.style.width=p(i(b).outerWidth()-a.oScroll.iBarWidth);else if(""!==a.oScroll.sX)b.style.width=p(i(b).outerWidth())}function La(a, +b){var c=Na(a,b);if(0>c)return null;if(null===a.aoData[c].nTr){var d=k.createElement("td");d.innerHTML=w(a,c,b,"");return d}return L(a,c)[b]}function Na(a,b){for(var c=-1,d=-1,f=0;f<a.aoData.length;f++){var h=w(a,f,b,"display")+"",h=h.replace(/<.*?>/g,"");if(h.length>c)c=h.length,d=f}return d}function p(a){if(null===a)return"0px";if("number"==typeof a)return 0>a?"0px":a+"px";var b=a.charCodeAt(a.length-1);return 48>b||57<b?a:a+"px"}function Oa(){var a=k.createElement("p"),b=a.style;b.width="100%"; +b.height="200px";b.padding="0px";var c=k.createElement("div"),b=c.style;b.position="absolute";b.top="0px";b.left="0px";b.visibility="hidden";b.width="200px";b.height="150px";b.padding="0px";b.overflow="hidden";c.appendChild(a);k.body.appendChild(c);b=a.offsetWidth;c.style.overflow="scroll";a=a.offsetWidth;if(b==a)a=c.clientWidth;k.body.removeChild(c);return b-a}function P(a,b){var c,d,f,h,g,e,o=[],m=[],r=j.ext.oSort,n=a.aoData,k=a.aoColumns,E=a.oLanguage.oAria;if(!a.oFeatures.bServerSide&&(0!==a.aaSorting.length|| +null!==a.aaSortingFixed)){o=null!==a.aaSortingFixed?a.aaSortingFixed.concat(a.aaSorting):a.aaSorting.slice();for(c=0;c<o.length;c++)if(d=o[c][0],f=t(a,d),h=a.aoColumns[d].sSortDataType,j.ext.afnSortData[h]){g=j.ext.afnSortData[h](a,d,f);for(f=0,h=n.length;f<h;f++)J(a,f,d,g[f])}for(c=0,d=a.aiDisplayMaster.length;c<d;c++)m[a.aiDisplayMaster[c]]=c;var p=o.length,s;for(c=0,d=n.length;c<d;c++)for(f=0;f<p;f++){s=k[o[f][0]].aDataSort;for(g=0,e=s.length;g<e;g++)h=k[s[g]].sType,h=r[(h?h:"string")+"-pre"], +n[c]._aSortData[s[g]]=h?h(w(a,c,s[g],"sort")):w(a,c,s[g],"sort")}a.aiDisplayMaster.sort(function(a,b){var c,d,f,h,g;for(c=0;c<p;c++){g=k[o[c][0]].aDataSort;for(d=0,f=g.length;d<f;d++)if(h=k[g[d]].sType,h=r[(h?h:"string")+"-"+o[c][1]](n[a]._aSortData[g[d]],n[b]._aSortData[g[d]]),0!==h)return h}return r["numeric-asc"](m[a],m[b])})}(b===l||b)&&!a.oFeatures.bDeferRender&&Q(a);for(c=0,d=a.aoColumns.length;c<d;c++)f=k[c].nTh,f.removeAttribute("aria-sort"),f.removeAttribute("aria-label"),k[c].bSortable? +0<o.length&&o[0][0]==c?(f.setAttribute("aria-sort","asc"==o[0][1]?"ascending":"descending"),f.setAttribute("aria-label",k[c].sTitle+("asc"==(k[c].asSorting[o[0][2]+1]?k[c].asSorting[o[0][2]+1]:k[c].asSorting[0])?E.sSortAscending:E.sSortDescending))):f.setAttribute("aria-label",k[c].sTitle+("asc"==k[c].asSorting[0]?E.sSortAscending:E.sSortDescending)):f.setAttribute("aria-label",k[c].sTitle);a.bSorted=!0;i(a.oInstance).trigger("sort",a);a.oFeatures.bFilter?M(a,a.oPreviousSearch,1):(a.aiDisplay=a.aiDisplayMaster.slice(), +a._iDisplayStart=0,z(a),y(a))}function ga(a,b,c,d){Pa(b,{},function(b){if(!1!==a.aoColumns[c].bSortable){var h=function(){var d,h;if(b.shiftKey){for(var e=!1,i=0;i<a.aaSorting.length;i++)if(a.aaSorting[i][0]==c){e=!0;d=a.aaSorting[i][0];h=a.aaSorting[i][2]+1;a.aoColumns[d].asSorting[h]?(a.aaSorting[i][1]=a.aoColumns[d].asSorting[h],a.aaSorting[i][2]=h):a.aaSorting.splice(i,1);break}!1===e&&a.aaSorting.push([c,a.aoColumns[c].asSorting[0],0])}else 1==a.aaSorting.length&&a.aaSorting[0][0]==c?(d=a.aaSorting[0][0], +h=a.aaSorting[0][2]+1,a.aoColumns[d].asSorting[h]||(h=0),a.aaSorting[0][1]=a.aoColumns[d].asSorting[h],a.aaSorting[0][2]=h):(a.aaSorting.splice(0,a.aaSorting.length),a.aaSorting.push([c,a.aoColumns[c].asSorting[0],0]));P(a)};a.oFeatures.bProcessing?(H(a,!0),setTimeout(function(){h();a.oFeatures.bServerSide||H(a,!1)},0)):h();"function"==typeof d&&d(a)}})}function Q(a){var b,c,d,f,h,g=a.aoColumns.length,e=a.oClasses;for(b=0;b<g;b++)a.aoColumns[b].bSortable&&i(a.aoColumns[b].nTh).removeClass(e.sSortAsc+ +" "+e.sSortDesc+" "+a.aoColumns[b].sSortingClass);f=null!==a.aaSortingFixed?a.aaSortingFixed.concat(a.aaSorting):a.aaSorting.slice();for(b=0;b<a.aoColumns.length;b++)if(a.aoColumns[b].bSortable){h=a.aoColumns[b].sSortingClass;d=-1;for(c=0;c<f.length;c++)if(f[c][0]==b){h="asc"==f[c][1]?e.sSortAsc:e.sSortDesc;d=c;break}i(a.aoColumns[b].nTh).addClass(h);a.bJUI&&(c=i("span."+e.sSortIcon,a.aoColumns[b].nTh),c.removeClass(e.sSortJUIAsc+" "+e.sSortJUIDesc+" "+e.sSortJUI+" "+e.sSortJUIAscAllowed+" "+e.sSortJUIDescAllowed), +c.addClass(-1==d?a.aoColumns[b].sSortingClassJUI:"asc"==f[d][1]?e.sSortJUIAsc:e.sSortJUIDesc))}else i(a.aoColumns[b].nTh).addClass(a.aoColumns[b].sSortingClass);h=e.sSortColumn;if(a.oFeatures.bSort&&a.oFeatures.bSortClasses){d=L(a);if(a.oFeatures.bDeferRender)i(d).removeClass(h+"1 "+h+"2 "+h+"3");else if(d.length>=g)for(b=0;b<g;b++)if(-1!=d[b].className.indexOf(h+"1"))for(c=0,a=d.length/g;c<a;c++)d[g*c+b].className=i.trim(d[g*c+b].className.replace(h+"1",""));else if(-1!=d[b].className.indexOf(h+ +"2"))for(c=0,a=d.length/g;c<a;c++)d[g*c+b].className=i.trim(d[g*c+b].className.replace(h+"2",""));else if(-1!=d[b].className.indexOf(h+"3"))for(c=0,a=d.length/g;c<a;c++)d[g*c+b].className=i.trim(d[g*c+b].className.replace(" "+h+"3",""));var e=1,j;for(b=0;b<f.length;b++){j=parseInt(f[b][0],10);for(c=0,a=d.length/g;c<a;c++)d[g*c+j].className+=" "+h+e;3>e&&e++}}}function pa(a){if(a.oFeatures.bStateSave&&!a.bDestroying){var b,c;b=a.oScroll.bInfinite;var d={iCreate:(new Date).getTime(),iStart:b?0:a._iDisplayStart, +iEnd:b?a._iDisplayLength:a._iDisplayEnd,iLength:a._iDisplayLength,aaSorting:i.extend(!0,[],a.aaSorting),oSearch:i.extend(!0,{},a.oPreviousSearch),aoSearchCols:i.extend(!0,[],a.aoPreSearchCols),abVisCols:[]};for(b=0,c=a.aoColumns.length;b<c;b++)d.abVisCols.push(a.aoColumns[b].bVisible);C(a,"aoStateSaveParams","stateSaveParams",[a,d]);a.fnStateSave.call(a.oInstance,a,d)}}function Qa(a,b){if(a.oFeatures.bStateSave){var c=a.fnStateLoad.call(a.oInstance,a);if(c){var d=C(a,"aoStateLoadParams","stateLoadParams", +[a,c]);if(-1===i.inArray(!1,d)){a.oLoadedState=i.extend(!0,{},c);a._iDisplayStart=c.iStart;a.iInitDisplayStart=c.iStart;a._iDisplayEnd=c.iEnd;a._iDisplayLength=c.iLength;a.aaSorting=c.aaSorting.slice();a.saved_aaSorting=c.aaSorting.slice();i.extend(a.oPreviousSearch,c.oSearch);i.extend(!0,a.aoPreSearchCols,c.aoSearchCols);b.saved_aoColumns=[];for(d=0;d<c.abVisCols.length;d++)b.saved_aoColumns[d]={},b.saved_aoColumns[d].bVisible=c.abVisCols[d];C(a,"aoStateLoaded","stateLoaded",[a,c])}}}}function Ra(a){for(var b= +aa.location.pathname.split("/"),a=a+"_"+b[b.length-1].replace(/[\/:]/g,"").toLowerCase()+"=",b=k.cookie.split(";"),c=0;c<b.length;c++){for(var d=b[c];" "==d.charAt(0);)d=d.substring(1,d.length);if(0===d.indexOf(a))return decodeURIComponent(d.substring(a.length,d.length))}return null}function u(a){for(var b=0;b<j.settings.length;b++)if(j.settings[b].nTable===a)return j.settings[b];return null}function S(a){for(var b=[],a=a.aoData,c=0,d=a.length;c<d;c++)null!==a[c].nTr&&b.push(a[c].nTr);return b}function L(a, +b){var c=[],d,f,h,e,i,j;f=0;var o=a.aoData.length;b!==l&&(f=b,o=b+1);for(h=f;h<o;h++)if(j=a.aoData[h],null!==j.nTr){f=[];for(e=0,i=j.nTr.childNodes.length;e<i;e++)d=j.nTr.childNodes[e].nodeName.toLowerCase(),("td"==d||"th"==d)&&f.push(j.nTr.childNodes[e]);d=0;for(e=0,i=a.aoColumns.length;e<i;e++)a.aoColumns[e].bVisible?c.push(f[e-d]):(c.push(j._anHidden[e]),d++)}return c}function F(a,b,c){a=null===a?"DataTables warning: "+c:"DataTables warning (table id = '"+a.sTableId+"'): "+c;if(0===b)if("alert"== +j.ext.sErrMode)alert(a);else throw a;else console!==l&&console.log&&console.log(a)}function n(a,b,c,d){d===l&&(d=c);b[c]!==l&&(a[d]=b[c])}function Sa(a,b){for(var c in a)a.hasOwnProperty(c)&&b[c]!==l&&("object"===typeof e[c]&&!1===i.isArray(b[c])?i.extend(!0,a[c],b[c]):a[c]=b[c]);return a}function Pa(a,b,c){i(a).bind("click.DT",b,function(b){c(b);a.blur()}).bind("keypress.DT",b,function(a){13===a.which&&c(a)}).bind("selectstart.DT",function(){return!1})}function A(a,b,c,d){c&&a[b].push({fn:c,sName:d})} +function C(a,b,c,d){for(var b=a[b],f=[],h=b.length-1;0<=h;h--)f.push(b[h].fn.apply(a.oInstance,d));null!==c&&i(a.oInstance).trigger(c,d);return f}function Ta(a){return function(){var b=[u(this[j.ext.iApiIndex])].concat(Array.prototype.slice.call(arguments));return j.ext.oApi[a].apply(this,b)}}var Ua=aa.JSON?JSON.stringify:function(a){var b=typeof a;if("object"!==b||null===a)return"string"===b&&(a='"'+a+'"'),a+"";var c,d,f=[],h=i.isArray(a);for(c in a)d=a[c],b=typeof d,"string"===b?d='"'+d+'"':"object"=== +b&&null!==d&&(d=Ua(d)),f.push((h?"":'"'+c+'":')+d);return(h?"[":"{")+f+(h?"]":"}")};this.$=function(a,b){var c,d,f=[],h=u(this[j.ext.iApiIndex]);b||(b={});b=i.extend({},{filter:"none",order:"current",page:"all"},b);if("current"==b.page)for(c=h._iDisplayStart,d=h.fnDisplayEnd();c<d;c++)f.push(h.aoData[h.aiDisplay[c]].nTr);else if("current"==b.order&&"none"==b.filter)for(c=0,d=h.aiDisplayMaster.length;c<d;c++)f.push(h.aoData[h.aiDisplayMaster[c]].nTr);else if("current"==b.order&&"applied"==b.filter)for(c= +0,d=h.aiDisplay.length;c<d;c++)f.push(h.aoData[h.aiDisplay[c]].nTr);else if("original"==b.order&&"none"==b.filter)for(c=0,d=h.aoData.length;c<d;c++)f.push(h.aoData[c].nTr);else if("original"==b.order&&"applied"==b.filter)for(c=0,d=h.aoData.length;c<d;c++)-1!==i.inArray(c,h.aiDisplay)&&f.push(h.aoData[c].nTr);else F(h,1,"Unknown selection options");d=i(f);c=d.filter(a);d=d.find(a);return i([].concat(i.makeArray(c),i.makeArray(d)))};this._=function(a,b){var c=[],d,f,h=this.$(a,b);for(d=0,f=h.length;d< +f;d++)c.push(this.fnGetData(h[d]));return c};this.fnAddData=function(a,b){if(0===a.length)return[];var c=[],d,f=u(this[j.ext.iApiIndex]);if("object"===typeof a[0]&&null!==a[0])for(var h=0;h<a.length;h++){d=G(f,a[h]);if(-1==d)return c;c.push(d)}else{d=G(f,a);if(-1==d)return c;c.push(d)}f.aiDisplay=f.aiDisplayMaster.slice();(b===l||b)&&Z(f);return c};this.fnAdjustColumnSizing=function(a){var b=u(this[j.ext.iApiIndex]);r(b);a===l||a?this.fnDraw(!1):(""!==b.oScroll.sX||""!==b.oScroll.sY)&&this.oApi._fnScrollDraw(b)}; +this.fnClearTable=function(a){var b=u(this[j.ext.iApiIndex]);ea(b);(a===l||a)&&y(b)};this.fnClose=function(a){for(var b=u(this[j.ext.iApiIndex]),c=0;c<b.aoOpenRows.length;c++)if(b.aoOpenRows[c].nParent==a)return(a=b.aoOpenRows[c].nTr.parentNode)&&a.removeChild(b.aoOpenRows[c].nTr),b.aoOpenRows.splice(c,1),0;return 1};this.fnDeleteRow=function(a,b,c){var d=u(this[j.ext.iApiIndex]),f,h,a="object"===typeof a?K(d,a):a,e=d.aoData.splice(a,1);for(f=0,h=d.aoData.length;f<h;f++)if(null!==d.aoData[f].nTr)d.aoData[f].nTr._DT_RowIndex= +f;f=i.inArray(a,d.aiDisplay);d.asDataSearch.splice(f,1);fa(d.aiDisplayMaster,a);fa(d.aiDisplay,a);"function"===typeof b&&b.call(this,d,e);if(d._iDisplayStart>=d.aiDisplay.length&&(d._iDisplayStart-=d._iDisplayLength,0>d._iDisplayStart))d._iDisplayStart=0;if(c===l||c)z(d),y(d);return e};this.fnDestroy=function(a){var b=u(this[j.ext.iApiIndex]),c=b.nTableWrapper.parentNode,d=b.nTBody,f,e,a=a===l?!1:!0;b.bDestroying=!0;for(f=0,e=b.aoDestroyCallback.length;f<e;f++)b.aoDestroyCallback[f].fn();for(f=0, +e=b.aoColumns.length;f<e;f++)!1===b.aoColumns[f].bVisible&&this.fnSetColumnVis(f,!0);i(b.nTableWrapper).find("*").andSelf().unbind(".DT");i("tbody>tr>td."+b.oClasses.sRowEmpty,b.nTable).parent().remove();b.nTable!=b.nTHead.parentNode&&(i(b.nTable).children("thead").remove(),b.nTable.appendChild(b.nTHead));b.nTFoot&&b.nTable!=b.nTFoot.parentNode&&(i(b.nTable).children("tfoot").remove(),b.nTable.appendChild(b.nTFoot));b.nTable.parentNode.removeChild(b.nTable);i(b.nTableWrapper).remove();b.aaSorting= +[];b.aaSortingFixed=[];Q(b);i(S(b)).removeClass(b.asStripeClasses.join(" "));i("th, td",b.nTHead).removeClass([b.oClasses.sSortable,b.oClasses.sSortableAsc,b.oClasses.sSortableDesc,b.oClasses.sSortableNone].join(" "));b.bJUI&&(i("th span."+b.oClasses.sSortIcon+", td span."+b.oClasses.sSortIcon,b.nTHead).remove(),i("th, td",b.nTHead).each(function(){var a=i("div."+b.oClasses.sSortJUIWrapper,this),c=a.contents();i(this).append(c);a.remove()}));!a&&b.nTableReinsertBefore?c.insertBefore(b.nTable,b.nTableReinsertBefore): +a||c.appendChild(b.nTable);for(f=0,e=b.aoData.length;f<e;f++)null!==b.aoData[f].nTr&&d.appendChild(b.aoData[f].nTr);if(!0===b.oFeatures.bAutoWidth)b.nTable.style.width=p(b.sDestroyWidth);i(d).children("tr:even").addClass(b.asDestroyStripes[0]);i(d).children("tr:odd").addClass(b.asDestroyStripes[1]);for(f=0,e=j.settings.length;f<e;f++)j.settings[f]==b&&j.settings.splice(f,1);b=null};this.fnDraw=function(a){var b=u(this[j.ext.iApiIndex]);a?(z(b),y(b)):Z(b)};this.fnFilter=function(a,b,c,d,f,e){var g= +u(this[j.ext.iApiIndex]);if(g.oFeatures.bFilter){if(c===l||null===c)c=!1;if(d===l||null===d)d=!0;if(f===l||null===f)f=!0;if(e===l||null===e)e=!0;if(b===l||null===b){if(M(g,{sSearch:a+"",bRegex:c,bSmart:d,bCaseInsensitive:e},1),f&&g.aanFeatures.f){b=g.aanFeatures.f;c=0;for(d=b.length;c<d;c++)i("input",b[c]).val(a)}}else i.extend(g.aoPreSearchCols[b],{sSearch:a+"",bRegex:c,bSmart:d,bCaseInsensitive:e}),M(g,g.oPreviousSearch,1)}};this.fnGetData=function(a,b){var c=u(this[j.ext.iApiIndex]);if(a!==l){var d= +a;if("object"===typeof a){var f=a.nodeName.toLowerCase();"tr"===f?d=K(c,a):"td"===f&&(d=K(c,a.parentNode),b=da(c,d,a))}return b!==l?w(c,d,b,""):c.aoData[d]!==l?c.aoData[d]._aData:null}return X(c)};this.fnGetNodes=function(a){var b=u(this[j.ext.iApiIndex]);return a!==l?b.aoData[a]!==l?b.aoData[a].nTr:null:S(b)};this.fnGetPosition=function(a){var b=u(this[j.ext.iApiIndex]),c=a.nodeName.toUpperCase();if("TR"==c)return K(b,a);return"TD"==c||"TH"==c?(c=K(b,a.parentNode),a=da(b,c,a),[c,t(b,a),a]):null}; +this.fnIsOpen=function(a){for(var b=u(this[j.ext.iApiIndex]),c=0;c<b.aoOpenRows.length;c++)if(b.aoOpenRows[c].nParent==a)return!0;return!1};this.fnOpen=function(a,b,c){var d=u(this[j.ext.iApiIndex]),f=S(d);if(-1!==i.inArray(a,f)){this.fnClose(a);var f=k.createElement("tr"),e=k.createElement("td");f.appendChild(e);e.className=c;e.colSpan=v(d);"string"===typeof b?e.innerHTML=b:i(e).html(b);b=i("tr",d.nTBody);-1!=i.inArray(a,b)&&i(f).insertAfter(a);d.aoOpenRows.push({nTr:f,nParent:a});return f}};this.fnPageChange= +function(a,b){var c=u(this[j.ext.iApiIndex]);oa(c,a);z(c);(b===l||b)&&y(c)};this.fnSetColumnVis=function(a,b,c){var d=u(this[j.ext.iApiIndex]),f,e,g=d.aoColumns,i=d.aoData,o,m;if(g[a].bVisible!=b){if(b){for(f=e=0;f<a;f++)g[f].bVisible&&e++;m=e>=v(d);if(!m)for(f=a;f<g.length;f++)if(g[f].bVisible){o=f;break}for(f=0,e=i.length;f<e;f++)null!==i[f].nTr&&(m?i[f].nTr.appendChild(i[f]._anHidden[a]):i[f].nTr.insertBefore(i[f]._anHidden[a],L(d,f)[o]))}else for(f=0,e=i.length;f<e;f++)null!==i[f].nTr&&(o=L(d, +f)[a],i[f]._anHidden[a]=o,o.parentNode.removeChild(o));g[a].bVisible=b;U(d,d.aoHeader);d.nTFoot&&U(d,d.aoFooter);for(f=0,e=d.aoOpenRows.length;f<e;f++)d.aoOpenRows[f].nTr.colSpan=v(d);if(c===l||c)r(d),y(d);pa(d)}};this.fnSettings=function(){return u(this[j.ext.iApiIndex])};this.fnSort=function(a){var b=u(this[j.ext.iApiIndex]);b.aaSorting=a;P(b)};this.fnSortListener=function(a,b,c){ga(u(this[j.ext.iApiIndex]),a,b,c)};this.fnUpdate=function(a,b,c,d,f){var e=u(this[j.ext.iApiIndex]),b="object"===typeof b? +K(e,b):b;if(e.__fnUpdateDeep===l&&i.isArray(a)&&"object"===typeof a){e.aoData[b]._aData=a.slice();e.__fnUpdateDeep=!0;for(c=0;c<e.aoColumns.length;c++)this.fnUpdate(w(e,b,c),b,c,!1,!1);e.__fnUpdateDeep=l}else if(e.__fnUpdateDeep===l&&null!==a&&"object"===typeof a){e.aoData[b]._aData=i.extend(!0,{},a);e.__fnUpdateDeep=!0;for(c=0;c<e.aoColumns.length;c++)this.fnUpdate(w(e,b,c),b,c,!1,!1);e.__fnUpdateDeep=l}else{J(e,b,c,a);var a=w(e,b,c,"display"),g=e.aoColumns[c];null!==g.fnRender&&(a=R(e,b,c),g.bUseRendered&& +J(e,b,c,a));if(null!==e.aoData[b].nTr)L(e,b)[c].innerHTML=a}c=i.inArray(b,e.aiDisplay);e.asDataSearch[c]=la(e,W(e,b,"filter"));(f===l||f)&&r(e);(d===l||d)&&Z(e);return 0};this.fnVersionCheck=j.ext.fnVersionCheck;this.oApi={_fnExternApiFunc:Ta,_fnInitialise:$,_fnInitComplete:Y,_fnLanguageCompat:na,_fnAddColumn:o,_fnColumnOptions:E,_fnAddData:G,_fnCreateTr:ca,_fnGatherData:ta,_fnBuildHead:ua,_fnDrawHead:U,_fnDraw:y,_fnReDraw:Z,_fnAjaxUpdate:va,_fnAjaxParameters:Da,_fnAjaxUpdateDraw:Ea,_fnServerParams:ha, +_fnAddOptionsHtml:wa,_fnFeatureHtmlTable:Aa,_fnScrollDraw:Ja,_fnAdjustColumnSizing:r,_fnFeatureHtmlFilter:ya,_fnFilterComplete:M,_fnFilterCustom:Ha,_fnFilterColumn:Ga,_fnFilter:Fa,_fnBuildSearchArray:ia,_fnBuildSearchRow:la,_fnFilterCreateSearch:ja,_fnDataToSearch:ka,_fnSort:P,_fnSortAttachListener:ga,_fnSortingClasses:Q,_fnFeatureHtmlPaginate:Ca,_fnPageChange:oa,_fnFeatureHtmlInfo:Ba,_fnUpdateInfo:Ia,_fnFeatureHtmlLength:xa,_fnFeatureHtmlProcessing:za,_fnProcessingDisplay:H,_fnVisibleToColumnIndex:s, +_fnColumnIndexToVisible:t,_fnNodeToDataIndex:K,_fnVisbleColumns:v,_fnCalculateEnd:z,_fnConvertToWidth:Ka,_fnCalculateColumnWidths:ba,_fnScrollingWidthAdjust:Ma,_fnGetWidestNode:La,_fnGetMaxLenString:Na,_fnStringToCss:p,_fnDetectType:B,_fnSettingsFromNode:u,_fnGetDataMaster:X,_fnGetTrNodes:S,_fnGetTdNodes:L,_fnEscapeRegex:ma,_fnDeleteIndex:fa,_fnReOrderIndex:D,_fnColumnOrdering:x,_fnLog:F,_fnClearTable:ea,_fnSaveState:pa,_fnLoadState:Qa,_fnCreateCookie:function(a,b,c,d,e){var h=new Date;h.setTime(h.getTime()+ +1E3*c);var c=aa.location.pathname.split("/"),a=a+"_"+c.pop().replace(/[\/:]/g,"").toLowerCase(),g;null!==e?(g="function"===typeof i.parseJSON?i.parseJSON(b):eval("("+b+")"),b=e(a,g,h.toGMTString(),c.join("/")+"/")):b=a+"="+encodeURIComponent(b)+"; expires="+h.toGMTString()+"; path="+c.join("/")+"/";e="";h=9999999999999;if(4096<(null!==Ra(a)?k.cookie.length:b.length+k.cookie.length)+10){for(var a=k.cookie.split(";"),j=0,o=a.length;j<o;j++)if(-1!=a[j].indexOf(d)){var m=a[j].split("=");try{g=eval("("+ +decodeURIComponent(m[1])+")")}catch(l){continue}if(g.iCreate&&g.iCreate<h)e=m[0],h=g.iCreate}if(""!==e)k.cookie=e+"=; expires=Thu, 01-Jan-1970 00:00:01 GMT; path="+c.join("/")+"/"}k.cookie=b},_fnReadCookie:Ra,_fnDetectHeader:T,_fnGetUniqueThs:O,_fnScrollBarWidth:Oa,_fnApplyToChildren:N,_fnMap:n,_fnGetRowData:W,_fnGetCellData:w,_fnSetCellData:J,_fnGetObjectDataFn:V,_fnSetObjectDataFn:sa,_fnApplyColumnDefs:I,_fnBindAction:Pa,_fnExtend:Sa,_fnCallbackReg:A,_fnCallbackFire:C,_fnJsonString:Ua,_fnRender:R, +_fnNodeToColumnIndex:da};i.extend(j.ext.oApi,this.oApi);for(var qa in j.ext.oApi)qa&&(this[qa]=Ta(qa));var ra=this;return this.each(function(){var a=0,b,c,d;c=this.getAttribute("id");var f=!1,h=!1;if("table"!=this.nodeName.toLowerCase())F(null,0,"Attempted to initialise DataTables on a node which is not a table: "+this.nodeName);else{for(a=0,b=j.settings.length;a<b;a++){if(j.settings[a].nTable==this){if(e===l||e.bRetrieve)return j.settings[a].oInstance;if(e.bDestroy){j.settings[a].oInstance.fnDestroy(); +break}else{F(j.settings[a],0,"Cannot reinitialise DataTable.\n\nTo retrieve the DataTables object for this table, pass no arguments or see the docs for bRetrieve and bDestroy");return}}if(j.settings[a].sTableId==this.id){j.settings.splice(a,1);break}}if(null===c)this.id=c="DataTables_Table_"+j.ext._oExternConfig.iNextUnique++;var g=i.extend(!0,{},j.models.oSettings,{nTable:this,oApi:ra.oApi,oInit:e,sDestroyWidth:i(this).width(),sInstance:c,sTableId:c});j.settings.push(g);g.oInstance=1===ra.length? +ra:i(this).dataTable();e||(e={});e.oLanguage&&na(e.oLanguage);e=Sa(i.extend(!0,{},j.defaults),e);n(g.oFeatures,e,"bPaginate");n(g.oFeatures,e,"bLengthChange");n(g.oFeatures,e,"bFilter");n(g.oFeatures,e,"bSort");n(g.oFeatures,e,"bInfo");n(g.oFeatures,e,"bProcessing");n(g.oFeatures,e,"bAutoWidth");n(g.oFeatures,e,"bSortClasses");n(g.oFeatures,e,"bServerSide");n(g.oFeatures,e,"bDeferRender");n(g.oScroll,e,"sScrollX","sX");n(g.oScroll,e,"sScrollXInner","sXInner");n(g.oScroll,e,"sScrollY","sY");n(g.oScroll, +e,"bScrollCollapse","bCollapse");n(g.oScroll,e,"bScrollInfinite","bInfinite");n(g.oScroll,e,"iScrollLoadGap","iLoadGap");n(g.oScroll,e,"bScrollAutoCss","bAutoCss");n(g,e,"asStripClasses","asStripeClasses");n(g,e,"asStripeClasses");n(g,e,"fnServerData");n(g,e,"fnFormatNumber");n(g,e,"sServerMethod");n(g,e,"aaSorting");n(g,e,"aaSortingFixed");n(g,e,"aLengthMenu");n(g,e,"sPaginationType");n(g,e,"sAjaxSource");n(g,e,"sAjaxDataProp");n(g,e,"iCookieDuration");n(g,e,"sCookiePrefix");n(g,e,"sDom");n(g,e, +"bSortCellsTop");n(g,e,"iTabIndex");n(g,e,"oSearch","oPreviousSearch");n(g,e,"aoSearchCols","aoPreSearchCols");n(g,e,"iDisplayLength","_iDisplayLength");n(g,e,"bJQueryUI","bJUI");n(g,e,"fnCookieCallback");n(g,e,"fnStateLoad");n(g,e,"fnStateSave");n(g.oLanguage,e,"fnInfoCallback");A(g,"aoDrawCallback",e.fnDrawCallback,"user");A(g,"aoServerParams",e.fnServerParams,"user");A(g,"aoStateSaveParams",e.fnStateSaveParams,"user");A(g,"aoStateLoadParams",e.fnStateLoadParams,"user");A(g,"aoStateLoaded",e.fnStateLoaded, +"user");A(g,"aoRowCallback",e.fnRowCallback,"user");A(g,"aoRowCreatedCallback",e.fnCreatedRow,"user");A(g,"aoHeaderCallback",e.fnHeaderCallback,"user");A(g,"aoFooterCallback",e.fnFooterCallback,"user");A(g,"aoInitComplete",e.fnInitComplete,"user");A(g,"aoPreDrawCallback",e.fnPreDrawCallback,"user");g.oFeatures.bServerSide&&g.oFeatures.bSort&&g.oFeatures.bSortClasses?A(g,"aoDrawCallback",Q,"server_side_sort_classes"):g.oFeatures.bDeferRender&&A(g,"aoDrawCallback",Q,"defer_sort_classes");if(e.bJQueryUI){if(i.extend(g.oClasses, +j.ext.oJUIClasses),e.sDom===j.defaults.sDom&&"lfrtip"===j.defaults.sDom)g.sDom='<"H"lfr>t<"F"ip>'}else i.extend(g.oClasses,j.ext.oStdClasses);i(this).addClass(g.oClasses.sTable);if(""!==g.oScroll.sX||""!==g.oScroll.sY)g.oScroll.iBarWidth=Oa();if(g.iInitDisplayStart===l)g.iInitDisplayStart=e.iDisplayStart,g._iDisplayStart=e.iDisplayStart;if(e.bStateSave)g.oFeatures.bStateSave=!0,Qa(g,e),A(g,"aoDrawCallback",pa,"state_save");if(null!==e.iDeferLoading)g.bDeferLoading=!0,g._iRecordsTotal=e.iDeferLoading, +g._iRecordsDisplay=e.iDeferLoading;null!==e.aaData&&(h=!0);""!==e.oLanguage.sUrl?(g.oLanguage.sUrl=e.oLanguage.sUrl,i.getJSON(g.oLanguage.sUrl,null,function(a){na(a);i.extend(!0,g.oLanguage,e.oLanguage,a);$(g)}),f=!0):i.extend(!0,g.oLanguage,e.oLanguage);c=!1;d=i(this).children("tbody").children("tr");for(a=0,b=g.asStripeClasses.length;a<b;a++)if(d.filter(":lt(2)").hasClass(g.asStripeClasses[a])){c=!0;break}if(c)g.asDestroyStripes=["",""],i(d[0]).hasClass(g.oClasses.sStripeOdd)&&(g.asDestroyStripes[0]+= +g.oClasses.sStripeOdd+" "),i(d[0]).hasClass(g.oClasses.sStripeEven)&&(g.asDestroyStripes[0]+=g.oClasses.sStripeEven),i(d[1]).hasClass(g.oClasses.sStripeOdd)&&(g.asDestroyStripes[1]+=g.oClasses.sStripeOdd+" "),i(d[1]).hasClass(g.oClasses.sStripeEven)&&(g.asDestroyStripes[1]+=g.oClasses.sStripeEven),d.removeClass(g.asStripeClasses.join(" "));c=[];a=this.getElementsByTagName("thead");0!==a.length&&(T(g.aoHeader,a[0]),c=O(g));if(null===e.aoColumns){d=[];for(a=0,b=c.length;a<b;a++)d.push(null)}else d= +e.aoColumns;for(a=0,b=d.length;a<b;a++){if(e.saved_aoColumns!==l&&e.saved_aoColumns.length==b)null===d[a]&&(d[a]={}),d[a].bVisible=e.saved_aoColumns[a].bVisible;o(g,c?c[a]:null)}I(g,e.aoColumnDefs,d,function(a,b){E(g,a,b)});for(a=0,b=g.aaSorting.length;a<b;a++){g.aaSorting[a][0]>=g.aoColumns.length&&(g.aaSorting[a][0]=0);var r=g.aoColumns[g.aaSorting[a][0]];g.aaSorting[a][2]===l&&(g.aaSorting[a][2]=0);e.aaSorting===l&&g.saved_aaSorting===l&&(g.aaSorting[a][1]=r.asSorting[0]);for(c=0,d=r.asSorting.length;c< +d;c++)if(g.aaSorting[a][1]==r.asSorting[c]){g.aaSorting[a][2]=c;break}}Q(g);a=i(this).children("thead");0===a.length&&(a=[k.createElement("thead")],this.appendChild(a[0]));g.nTHead=a[0];a=i(this).children("tbody");0===a.length&&(a=[k.createElement("tbody")],this.appendChild(a[0]));g.nTBody=a[0];g.nTBody.setAttribute("role","alert");g.nTBody.setAttribute("aria-live","polite");g.nTBody.setAttribute("aria-relevant","all");a=i(this).children("tfoot");if(0<a.length)g.nTFoot=a[0],T(g.aoFooter,g.nTFoot); +if(h)for(a=0;a<e.aaData.length;a++)G(g,e.aaData[a]);else ta(g);g.aiDisplay=g.aiDisplayMaster.slice();g.bInitialised=!0;!1===f&&$(g)}})};j.version="1.9.0";j.settings=[];j.models={};j.models.ext={afnFiltering:[],afnSortData:[],aoFeatures:[],aTypes:[],fnVersionCheck:function(e){for(var i=function(e,i){for(;e.length<i;)e+="0";return e},l=j.ext.sVersion.split("."),e=e.split("."),r="",k="",t=0,v=e.length;t<v;t++)r+=i(l[t],3),k+=i(e[t],3);return parseInt(r,10)>=parseInt(k,10)},iApiIndex:0,ofnSearch:{},oApi:{}, +oStdClasses:{},oJUIClasses:{},oPagination:{},oSort:{},sVersion:j.version,sErrMode:"alert",_oExternConfig:{iNextUnique:0}};j.models.oSearch={bCaseInsensitive:!0,sSearch:"",bRegex:!1,bSmart:!0};j.models.oRow={nTr:null,_aData:[],_aSortData:[],_anHidden:[],_sRowStripe:""};j.models.oColumn={aDataSort:null,asSorting:null,bSearchable:null,bSortable:null,bUseRendered:null,bVisible:null,_bAutoType:!0,fnCreatedCell:null,fnGetData:null,fnRender:null,fnSetData:null,mDataProp:null,nTh:null,nTf:null,sClass:null, +sContentPadding:null,sDefaultContent:null,sName:null,sSortDataType:"std",sSortingClass:null,sSortingClassJUI:null,sTitle:null,sType:null,sWidth:null,sWidthOrig:null};j.defaults={aaData:null,aaSorting:[[0,"asc"]],aaSortingFixed:null,aLengthMenu:[10,25,50,100],aoColumns:null,aoColumnDefs:null,aoSearchCols:[],asStripeClasses:["odd","even"],bAutoWidth:!0,bDeferRender:!1,bDestroy:!1,bFilter:!0,bInfo:!0,bJQueryUI:!1,bLengthChange:!0,bPaginate:!0,bProcessing:!1,bRetrieve:!1,bScrollAutoCss:!0,bScrollCollapse:!1, +bScrollInfinite:!1,bServerSide:!1,bSort:!0,bSortCellsTop:!1,bSortClasses:!0,bStateSave:!1,fnCookieCallback:null,fnCreatedRow:null,fnDrawCallback:null,fnFooterCallback:null,fnFormatNumber:function(e){if(1E3>e)return e;for(var i=e+"",e=i.split(""),j="",i=i.length,l=0;l<i;l++)0===l%3&&0!==l&&(j=this.oLanguage.sInfoThousands+j),j=e[i-l-1]+j;return j},fnHeaderCallback:null,fnInfoCallback:null,fnInitComplete:null,fnPreDrawCallback:null,fnRowCallback:null,fnServerData:function(e,j,l,k){k.jqXHR=i.ajax({url:e, +data:j,success:function(e){i(k.oInstance).trigger("xhr",k);l(e)},dataType:"json",cache:!1,type:k.sServerMethod,error:function(e,i){"parsererror"==i&&alert("DataTables warning: JSON data from server could not be parsed. This is caused by a JSON formatting error.")}})},fnServerParams:null,fnStateLoad:function(e){var e=this.oApi._fnReadCookie(e.sCookiePrefix+e.sInstance),j;try{j="function"===typeof i.parseJSON?i.parseJSON(e):eval("("+e+")")}catch(l){j=null}return j},fnStateLoadParams:null,fnStateLoaded:null, +fnStateSave:function(e,i){this.oApi._fnCreateCookie(e.sCookiePrefix+e.sInstance,this.oApi._fnJsonString(i),e.iCookieDuration,e.sCookiePrefix,e.fnCookieCallback)},fnStateSaveParams:null,iCookieDuration:7200,iDeferLoading:null,iDisplayLength:10,iDisplayStart:0,iScrollLoadGap:100,iTabIndex:0,oLanguage:{oAria:{sSortAscending:": activate to sort column ascending",sSortDescending:": activate to sort column descending"},oPaginate:{sFirst:"First",sLast:"Last",sNext:"Next",sPrevious:"Previous"},sEmptyTable:"No data available in table", +sInfo:"Showing _START_ to _END_ of _TOTAL_ entries",sInfoEmpty:"Showing 0 to 0 of 0 entries",sInfoFiltered:"(filtered from _MAX_ total entries)",sInfoPostFix:"",sInfoThousands:",",sLengthMenu:"Show _MENU_ entries",sLoadingRecords:"Loading...",sProcessing:"Processing...",sSearch:"Search:",sUrl:"",sZeroRecords:"No matching records found"},oSearch:i.extend({},j.models.oSearch),sAjaxDataProp:"aaData",sAjaxSource:null,sCookiePrefix:"SpryMedia_DataTables_",sDom:"lfrtip",sPaginationType:"two_button",sScrollX:"", +sScrollXInner:"",sScrollY:"",sServerMethod:"GET"};j.defaults.columns={aDataSort:null,asSorting:["asc","desc"],bSearchable:!0,bSortable:!0,bUseRendered:!0,bVisible:!0,fnCreatedCell:null,fnRender:null,iDataSort:-1,mDataProp:null,sClass:"",sContentPadding:"",sDefaultContent:null,sName:"",sSortDataType:"std",sTitle:null,sType:null,sWidth:null};j.models.oSettings={oFeatures:{bAutoWidth:null,bDeferRender:null,bFilter:null,bInfo:null,bLengthChange:null,bPaginate:null,bProcessing:null,bServerSide:null,bSort:null, +bSortClasses:null,bStateSave:null},oScroll:{bAutoCss:null,bCollapse:null,bInfinite:null,iBarWidth:0,iLoadGap:null,sX:null,sXInner:null,sY:null},oLanguage:{fnInfoCallback:null},aanFeatures:[],aoData:[],aiDisplay:[],aiDisplayMaster:[],aoColumns:[],aoHeader:[],aoFooter:[],asDataSearch:[],oPreviousSearch:{},aoPreSearchCols:[],aaSorting:null,aaSortingFixed:null,asStripeClasses:null,asDestroyStripes:[],sDestroyWidth:0,aoRowCallback:[],aoHeaderCallback:[],aoFooterCallback:[],aoDrawCallback:[],aoRowCreatedCallback:[], +aoPreDrawCallback:[],aoInitComplete:[],aoStateSaveParams:[],aoStateLoadParams:[],aoStateLoaded:[],sTableId:"",nTable:null,nTHead:null,nTFoot:null,nTBody:null,nTableWrapper:null,bDeferLoading:!1,bInitialised:!1,aoOpenRows:[],sDom:null,sPaginationType:"two_button",iCookieDuration:0,sCookiePrefix:"",fnCookieCallback:null,aoStateSave:[],aoStateLoad:[],oLoadedState:null,sAjaxSource:null,sAjaxDataProp:null,bAjaxDataGet:!0,jqXHR:null,fnServerData:null,aoServerParams:[],sServerMethod:null,fnFormatNumber:null, +aLengthMenu:null,iDraw:0,bDrawing:!1,iDrawError:-1,_iDisplayLength:10,_iDisplayStart:0,_iDisplayEnd:10,_iRecordsTotal:0,_iRecordsDisplay:0,bJUI:null,oClasses:{},bFiltered:!1,bSorted:!1,bSortCellsTop:null,oInit:null,aoDestroyCallback:[],fnRecordsTotal:function(){return this.oFeatures.bServerSide?parseInt(this._iRecordsTotal,10):this.aiDisplayMaster.length},fnRecordsDisplay:function(){return this.oFeatures.bServerSide?parseInt(this._iRecordsDisplay,10):this.aiDisplay.length},fnDisplayEnd:function(){return this.oFeatures.bServerSide? +!1===this.oFeatures.bPaginate||-1==this._iDisplayLength?this._iDisplayStart+this.aiDisplay.length:Math.min(this._iDisplayStart+this._iDisplayLength,this._iRecordsDisplay):this._iDisplayEnd},oInstance:null,sInstance:null,iTabIndex:0};j.ext=i.extend(!0,{},j.models.ext);i.extend(j.ext.oStdClasses,{sTable:"dataTable",sPagePrevEnabled:"paginate_enabled_previous",sPagePrevDisabled:"paginate_disabled_previous",sPageNextEnabled:"paginate_enabled_next",sPageNextDisabled:"paginate_disabled_next",sPageJUINext:"", +sPageJUIPrev:"",sPageButton:"paginate_button",sPageButtonActive:"paginate_active",sPageButtonStaticDisabled:"paginate_button paginate_button_disabled",sPageFirst:"first",sPagePrevious:"previous",sPageNext:"next",sPageLast:"last",sStripeOdd:"odd",sStripeEven:"even",sRowEmpty:"dataTables_empty",sWrapper:"dataTables_wrapper",sFilter:"dataTables_filter",sInfo:"dataTables_info",sPaging:"dataTables_paginate paging_",sLength:"dataTables_length",sProcessing:"dataTables_processing",sSortAsc:"sorting_asc", +sSortDesc:"sorting_desc",sSortable:"sorting",sSortableAsc:"sorting_asc_disabled",sSortableDesc:"sorting_desc_disabled",sSortableNone:"sorting_disabled",sSortColumn:"sorting_",sSortJUIAsc:"",sSortJUIDesc:"",sSortJUI:"",sSortJUIAscAllowed:"",sSortJUIDescAllowed:"",sSortJUIWrapper:"",sSortIcon:"",sScrollWrapper:"dataTables_scroll",sScrollHead:"dataTables_scrollHead",sScrollHeadInner:"dataTables_scrollHeadInner",sScrollBody:"dataTables_scrollBody",sScrollFoot:"dataTables_scrollFoot",sScrollFootInner:"dataTables_scrollFootInner", +sFooterTH:""});i.extend(j.ext.oJUIClasses,j.ext.oStdClasses,{sPagePrevEnabled:"fg-button ui-button ui-state-default ui-corner-left",sPagePrevDisabled:"fg-button ui-button ui-state-default ui-corner-left ui-state-disabled",sPageNextEnabled:"fg-button ui-button ui-state-default ui-corner-right",sPageNextDisabled:"fg-button ui-button ui-state-default ui-corner-right ui-state-disabled",sPageJUINext:"ui-icon ui-icon-circle-arrow-e",sPageJUIPrev:"ui-icon ui-icon-circle-arrow-w",sPageButton:"fg-button ui-button ui-state-default", +sPageButtonActive:"fg-button ui-button ui-state-default ui-state-disabled",sPageButtonStaticDisabled:"fg-button ui-button ui-state-default ui-state-disabled",sPageFirst:"first ui-corner-tl ui-corner-bl",sPageLast:"last ui-corner-tr ui-corner-br",sPaging:"dataTables_paginate fg-buttonset ui-buttonset fg-buttonset-multi ui-buttonset-multi paging_",sSortAsc:"ui-state-default",sSortDesc:"ui-state-default",sSortable:"ui-state-default",sSortableAsc:"ui-state-default",sSortableDesc:"ui-state-default",sSortableNone:"ui-state-default", +sSortJUIAsc:"css_right ui-icon ui-icon-triangle-1-n",sSortJUIDesc:"css_right ui-icon ui-icon-triangle-1-s",sSortJUI:"css_right ui-icon ui-icon-carat-2-n-s",sSortJUIAscAllowed:"css_right ui-icon ui-icon-carat-1-n",sSortJUIDescAllowed:"css_right ui-icon ui-icon-carat-1-s",sSortJUIWrapper:"DataTables_sort_wrapper",sSortIcon:"DataTables_sort_icon",sScrollHead:"dataTables_scrollHead ui-state-default",sScrollFoot:"dataTables_scrollFoot ui-state-default",sFooterTH:"ui-state-default"});i.extend(j.ext.oPagination, +{two_button:{fnInit:function(e,j,l){var k=e.oLanguage.oPaginate,s=function(i){e.oApi._fnPageChange(e,i.data.action)&&l(e)},k=!e.bJUI?'<a class="'+e.oClasses.sPagePrevDisabled+'" tabindex="'+e.iTabIndex+'" role="button">'+k.sPrevious+'</a><a class="'+e.oClasses.sPageNextDisabled+'" tabindex="'+e.iTabIndex+'" role="button">'+k.sNext+"</a>":'<a class="'+e.oClasses.sPagePrevDisabled+'" tabindex="'+e.iTabIndex+'" role="button"><span class="'+e.oClasses.sPageJUIPrev+'"></span></a><a class="'+e.oClasses.sPageNextDisabled+ +'" tabindex="'+e.iTabIndex+'" role="button"><span class="'+e.oClasses.sPageJUINext+'"></span></a>';i(j).append(k);var t=i("a",j),k=t[0],t=t[1];e.oApi._fnBindAction(k,{action:"previous"},s);e.oApi._fnBindAction(t,{action:"next"},s);if(!e.aanFeatures.p)j.id=e.sTableId+"_paginate",k.id=e.sTableId+"_previous",t.id=e.sTableId+"_next",k.setAttribute("aria-controls",e.sTableId),t.setAttribute("aria-controls",e.sTableId)},fnUpdate:function(e){if(e.aanFeatures.p)for(var i=e.oClasses,j=e.aanFeatures.p,l=0, +k=j.length;l<k;l++)if(0!==j[l].childNodes.length)j[l].childNodes[0].className=0===e._iDisplayStart?i.sPagePrevDisabled:i.sPagePrevEnabled,j[l].childNodes[1].className=e.fnDisplayEnd()==e.fnRecordsDisplay()?i.sPageNextDisabled:i.sPageNextEnabled}},iFullNumbersShowPages:5,full_numbers:{fnInit:function(e,j,l){var k=e.oLanguage.oPaginate,s=e.oClasses,t=function(i){e.oApi._fnPageChange(e,i.data.action)&&l(e)};i(j).append('<a tabindex="'+e.iTabIndex+'" class="'+s.sPageButton+" "+s.sPageFirst+'">'+k.sFirst+ +'</a><a tabindex="'+e.iTabIndex+'" class="'+s.sPageButton+" "+s.sPagePrevious+'">'+k.sPrevious+'</a><span></span><a tabindex="'+e.iTabIndex+'" class="'+s.sPageButton+" "+s.sPageNext+'">'+k.sNext+'</a><a tabindex="'+e.iTabIndex+'" class="'+s.sPageButton+" "+s.sPageLast+'">'+k.sLast+"</a>");var v=i("a",j),k=v[0],s=v[1],B=v[2],v=v[3];e.oApi._fnBindAction(k,{action:"first"},t);e.oApi._fnBindAction(s,{action:"previous"},t);e.oApi._fnBindAction(B,{action:"next"},t);e.oApi._fnBindAction(v,{action:"last"}, +t);if(!e.aanFeatures.p)j.id=e.sTableId+"_paginate",k.id=e.sTableId+"_first",s.id=e.sTableId+"_previous",B.id=e.sTableId+"_next",v.id=e.sTableId+"_last"},fnUpdate:function(e,l){if(e.aanFeatures.p){var k=j.ext.oPagination.iFullNumbersShowPages,r=Math.floor(k/2),s=Math.ceil(e.fnRecordsDisplay()/e._iDisplayLength),t=Math.ceil(e._iDisplayStart/e._iDisplayLength)+1,v="",B,D=e.oClasses,x,I=e.aanFeatures.p,G=function(i){e.oApi._fnBindAction(this,{page:i+B-1},function(i){e.oApi._fnPageChange(e,i.data.page); +l(e);i.preventDefault()})};s<k?(B=1,r=s):t<=r?(B=1,r=k):t>=s-r?(B=s-k+1,r=s):(B=t-Math.ceil(k/2)+1,r=B+k-1);for(k=B;k<=r;k++)v+=t!==k?'<a tabindex="'+e.iTabIndex+'" class="'+D.sPageButton+'">'+e.fnFormatNumber(k)+"</a>":'<a tabindex="'+e.iTabIndex+'" class="'+D.sPageButtonActive+'">'+e.fnFormatNumber(k)+"</a>";for(k=0,r=I.length;k<r;k++)0!==I[k].childNodes.length&&(i("span:eq(0)",I[k]).html(v).children("a").each(G),x=I[k].getElementsByTagName("a"),x=[x[0],x[1],x[x.length-2],x[x.length-1]],i(x).removeClass(D.sPageButton+ +" "+D.sPageButtonActive+" "+D.sPageButtonStaticDisabled),i([x[0],x[1]]).addClass(1==t?D.sPageButtonStaticDisabled:D.sPageButton),i([x[2],x[3]]).addClass(0===s||t===s||-1===e._iDisplayLength?D.sPageButtonStaticDisabled:D.sPageButton))}}}});i.extend(j.ext.oSort,{"string-pre":function(e){"string"!=typeof e&&(e="");return e.toLowerCase()},"string-asc":function(e,i){return e<i?-1:e>i?1:0},"string-desc":function(e,i){return e<i?1:e>i?-1:0},"html-pre":function(e){return e.replace(/<.*?>/g,"").toLowerCase()}, +"html-asc":function(e,i){return e<i?-1:e>i?1:0},"html-desc":function(e,i){return e<i?1:e>i?-1:0},"date-pre":function(e){e=Date.parse(e);if(isNaN(e)||""===e)e=Date.parse("01/01/1970 00:00:00");return e},"date-asc":function(e,i){return e-i},"date-desc":function(e,i){return i-e},"numeric-pre":function(e){return"-"==e||""===e?0:1*e},"numeric-asc":function(e,i){return e-i},"numeric-desc":function(e,i){return i-e}});i.extend(j.ext.aTypes,[function(e){if("number"===typeof e)return"numeric";if("string"!== +typeof e)return null;var i,j=!1;i=e.charAt(0);if(-1=="0123456789-".indexOf(i))return null;for(var k=1;k<e.length;k++){i=e.charAt(k);if(-1=="0123456789.".indexOf(i))return null;if("."==i){if(j)return null;j=!0}}return"numeric"},function(e){var i=Date.parse(e);return null!==i&&!isNaN(i)||"string"===typeof e&&0===e.length?"date":null},function(e){return"string"===typeof e&&-1!=e.indexOf("<")&&-1!=e.indexOf(">")?"html":null}]);i.fn.DataTable=j;i.fn.dataTable=j;i.fn.dataTableSettings=j.settings;i.fn.dataTableExt= +j.ext})(jQuery,window,document,void 0); diff --git a/src/warden-server/contrib/wardenweb/datatables/jquery.js b/src/warden-server/contrib/wardenweb/datatables/jquery.js new file mode 100644 index 0000000..ee02337 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/jquery.js @@ -0,0 +1,4 @@ +/*! jQuery v1.7.1 jquery.com | jquery.org/license */ +(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cb(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function ca(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bE.test(a)?d(a,e):ca(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)ca(a+"["+e+"]",b[e],c,d);else d(a,b)}function b_(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function b$(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bT,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=b$(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=b$(a,c,d,e,"*",g));return l}function bZ(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bP),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bC(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bx:by,g=0,h=e.length;if(d>0){if(c!=="border")for(;g<h;g++)c||(d-=parseFloat(f.css(a,"padding"+e[g]))||0),c==="margin"?d+=parseFloat(f.css(a,c+e[g]))||0:d-=parseFloat(f.css(a,"border"+e[g]+"Width"))||0;return d+"px"}d=bz(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0;if(c)for(;g<h;g++)d+=parseFloat(f.css(a,"padding"+e[g]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+e[g]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+e[g]))||0);return d+"px"}function bp(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c+(i[c][d].namespace?".":"")+i[c][d].namespace,i[c][d],i[c][d].data)}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?m(g):h==="function"&&(!a.unique||!o.has(g))&&c.push(g)},n=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,l=j||0,j=0,k=c.length;for(;c&&l<k;l++)if(c[l].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}i=!1,c&&(a.once?e===!0?o.disable():c=[]:d&&d.length&&(e=d.shift(),o.fireWith(e[0],e[1])))},o={add:function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){i&&f<=k&&(k--,f<=l&&l--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&o.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(i?a.once||d.push([b,c]):(!a.once||!e)&&n(b,c));return this},fire:function(){o.fireWith(this,arguments);return this},fired:function(){return!!e}};return o};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p,q=c.createElement("div"),r=c.documentElement;q.setAttribute("className","t"),q.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="<div "+n+"><div></div></div>"+"<table "+n+" cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="<div style='width:4px;'></div>",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h=null;if(typeof a=="undefined"){if(this.length){h=f.data(this[0]);if(this[0].nodeType===1&&!f._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var i=0,j=e.length;i<j;i++)g=e[i].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),l(this[0],g,h[g]));f._data(this[0],"parsedAttrs",!0)}}return h}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split("."),d[1]=d[1]?"."+d[1]:"";if(c===b){h=this.triggerHandler("getData"+d[1]+"!",[d[0]]),h===b&&this.length&&(h=f.data(this[0],a),h=l(this[0],a,h));return h===b&&d[1]?this.data(d[0]):h}return this.each(function(){var b=f(this),e=[d[0],c];b.triggerHandler("setData"+d[1]+"!",e),f.data(this,a,c),b.triggerHandler("changeData"+d[1]+"!",e)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise()}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h<g;h++)e=d[h],e&&(c=f.propFix[e]||e,f.attr(a,e,""),a.removeAttribute(v?e:c),u.test(e)&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")}; +f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=[],j,k,l,m,n,o,p,q,r,s,t;g[0]=c,c.delegateTarget=this;if(e&&!c.target.disabled&&(!c.button||c.type!=="click")){m=f(this),m.context=this.ownerDocument||this;for(l=c.target;l!=this;l=l.parentNode||this){o={},q=[],m[0]=l;for(j=0;j<e;j++)r=d[j],s=r.selector,o[s]===b&&(o[s]=r.quick?H(l,r.quick):m.is(s)),o[s]&&q.push(r);q.length&&i.push({elem:l,matches:q})}}d.length>e&&i.push({elem:this,matches:d.slice(e)});for(j=0;j<i.length&&!c.isPropagationStopped();j++){p=i[j],c.currentTarget=p.elem;for(k=0;k<p.matches.length&&!c.isImmediatePropagationStopped();k++){r=p.matches[k];if(h||!c.namespace&&!r.namespace||c.namespace_re&&c.namespace_re.test(r.namespace))c.data=r.data,c.handleObj=r,n=((f.event.special[r.origType]||{}).handle||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))}}return c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!0)}),d._submit_attached=!0)})},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on.call(this,a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.type+"."+e.namespace:e.type,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1||d===9){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.POS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),"not",a)},filter:function(a){return this.pushStack(T(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp("<(?:"+V+")","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function() +{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bp)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bn(k[i]);else bn(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||be.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bq=/alpha\([^)]*\)/i,br=/opacity=([^)]*)/,bs=/([A-Z]|^ms)/g,bt=/^-?\d+(?:px)?$/i,bu=/^-?\d/,bv=/^([\-+])=([\-+.\de]+)/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Left","Right"],by=["Top","Bottom"],bz,bA,bB;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bz(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bv.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bz)return bz(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bC(a,b,d);f.swap(a,bw,function(){e=bC(a,b,d)});return e}},set:function(a,b){if(!bt.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cv(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cu("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cu("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cv(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cn.test(h)?(o=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),o?(f._data(this,"toggle"+i,o==="show"?"hide":"show"),j[o]()):j[h]()):(k=co.exec(h),l=j.cur(),k?(m=parseFloat(k[2]),n=k[3]||(f.cssNumber[i]?"":"px"),n!=="px"&&(f.style(this,i,(m||1)+n),l=(m||1)/j.cur()*l,f.style(this,i,l+n)),k[1]&&(m=(k[1]==="-="?-1:1)*m+l),j.custom(l,m,n)):j.custom(l,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:cu("show",1),slideUp:cu("hide",1),slideToggle:cu("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cr||cs(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){e.options.hide&&f._data(e.elem,"fxshow"+e.prop)===b&&f._data(e.elem,"fxshow"+e.prop,e.start)},h()&&f.timers.push(h)&&!cp&&(cp=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cr||cs(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cp),cp=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(["width","height"],function(a,b){f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cy(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.support.fixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.support.fixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/license-bsd.txt b/src/warden-server/contrib/wardenweb/datatables/license-bsd.txt new file mode 100644 index 0000000..cdb85aa --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/license-bsd.txt @@ -0,0 +1,10 @@ +Copyright (c) 2008-2010, Allan Jardine +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + * Neither the name of Allan Jardine nor SpryMedia UK may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/license-gpl2.txt b/src/warden-server/contrib/wardenweb/datatables/license-gpl2.txt new file mode 100644 index 0000000..d511905 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/license-gpl2.txt @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/src/warden-server/contrib/wardenweb/datatables/media/css/demo_page.css b/src/warden-server/contrib/wardenweb/datatables/media/css/demo_page.css new file mode 100644 index 0000000..89c62bb --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/css/demo_page.css @@ -0,0 +1,107 @@ + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * General page setup + */ +#dt_example { + font: 80%/1.45em "Lucida Grande", Verdana, Arial, Helvetica, sans-serif; + margin: 0; + padding: 0; + color: #333; + background-color: #fff; +} + + +#dt_example #container { + width: 800px; + margin: 30px auto; + padding: 0; +} + + +#dt_example #footer { + margin: 50px auto 0 auto; + padding: 0; +} + +#dt_example #demo { + margin: 30px auto 0 auto; +} + +#dt_example .demo_jui { + margin: 30px auto 0 auto; +} + +#dt_example .big { + font-size: 1.3em; + font-weight: bold; + line-height: 1.6em; + color: #4E6CA3; +} + +#dt_example .spacer { + height: 20px; + clear: both; +} + +#dt_example .clear { + clear: both; +} + +#dt_example pre { + padding: 15px; + background-color: #F5F5F5; + border: 1px solid #CCCCCC; +} + +#dt_example h1 { + margin-top: 2em; + font-size: 1.3em; + font-weight: normal; + line-height: 1.6em; + color: #4E6CA3; + border-bottom: 1px solid #B0BED9; + clear: both; +} + +#dt_example h2 { + font-size: 1.2em; + font-weight: normal; + line-height: 1.6em; + color: #4E6CA3; + clear: both; +} + +#dt_example a { + color: #0063DC; + text-decoration: none; +} + +#dt_example a:hover { + text-decoration: underline; +} + +#dt_example ul { + color: #4E6CA3; +} + +.css_right { + float: right; +} + +.css_left { + float: left; +} + +.demo_links { + float: left; + width: 50%; + margin-bottom: 1em; +} + +#demo_info { + padding: 5px; + border: 1px solid #B0BED9; + height: 100px; + width: 100%; + overflow: auto; +} \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/css/demo_table.css b/src/warden-server/contrib/wardenweb/datatables/media/css/demo_table.css new file mode 100644 index 0000000..5fad8e6 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/css/demo_table.css @@ -0,0 +1,575 @@ +/* + * File: demo_table.css + * CVS: $Id$ + * Description: CSS descriptions for DataTables demo pages + * Author: Allan Jardine + * Created: Tue May 12 06:47:22 BST 2009 + * Modified: $Date$ by $Author$ + * Language: CSS + * Project: DataTables + * + * Copyright 2009 Allan Jardine. All Rights Reserved. + * + * *************************************************************************** + * DESCRIPTION + * + * The styles given here are suitable for the demos that are used with the standard DataTables + * distribution (see www.datatables.net). You will most likely wish to modify these styles to + * meet the layout requirements of your site. + * + * Common issues: + * 'full_numbers' pagination - I use an extra selector on the body tag to ensure that there is + * no conflict between the two pagination types. If you want to use full_numbers pagination + * ensure that you either have "example_alt_pagination" as a body class name, or better yet, + * modify that selector. + * Note that the path used for Images is relative. All images are by default located in + * ../images/ - relative to this CSS file. + */ + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * DataTables features + */ + +.dataTables_wrapper { + position: relative; + clear: both; + zoom: 1; /* Feeling sorry for IE */ +} + +.dataTables_processing { + position: absolute; + top: 50%; + left: 50%; + width: 250px; + height: 30px; + margin-left: -125px; + margin-top: -15px; + padding: 14px 0 2px 0; + border: 1px solid #ddd; + text-align: center; + color: #999; + font-size: 14px; + background-color: white; +} + +.dataTables_length { + width: 40%; + float: left; +} + +.dataTables_filter { + width: 50%; + float: right; + text-align: right; +} + +.dataTables_info { + width: 60%; + float: left; +} + +.dataTables_paginate { + float: right; + text-align: right; +} + +/* Pagination nested */ +.paginate_disabled_previous, .paginate_enabled_previous, +.paginate_disabled_next, .paginate_enabled_next { + height: 19px; + float: left; + cursor: pointer; + *cursor: hand; + color: #111 !important; +} +.paginate_disabled_previous:hover, .paginate_enabled_previous:hover, +.paginate_disabled_next:hover, .paginate_enabled_next:hover { + text-decoration: none !important; +} +.paginate_disabled_previous:active, .paginate_enabled_previous:active, +.paginate_disabled_next:active, .paginate_enabled_next:active { + outline: none; +} + +.paginate_disabled_previous, +.paginate_disabled_next { + color: #666 !important; +} +.paginate_disabled_previous, .paginate_enabled_previous { + padding-left: 23px; +} +.paginate_disabled_next, .paginate_enabled_next { + padding-right: 23px; + margin-left: 10px; +} + +.paginate_disabled_previous { + background: url('../images/back_disabled.png') no-repeat top left; +} + +.paginate_enabled_previous { + background: url('../images/back_enabled.png') no-repeat top left; +} +.paginate_enabled_previous:hover { + background: url('../images/back_enabled_hover.png') no-repeat top left; +} + +.paginate_disabled_next { + background: url('../images/forward_disabled.png') no-repeat top right; +} + +.paginate_enabled_next { + background: url('../images/forward_enabled.png') no-repeat top right; +} +.paginate_enabled_next:hover { + background: url('../images/forward_enabled_hover.png') no-repeat top right; +} + + + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * DataTables display + */ +table.display { + margin: 0 auto; + clear: both; + width: 100%; + + /* Note Firefox 3.5 and before have a bug with border-collapse + * ( https://bugzilla.mozilla.org/show%5Fbug.cgi?id=155955 ) + * border-spacing: 0; is one possible option. Conditional-css.com is + * useful for this kind of thing + * + * Further note IE 6/7 has problems when calculating widths with border width. + * It subtracts one px relative to the other browsers from the first column, and + * adds one to the end... + * + * If you want that effect I'd suggest setting a border-top/left on th/td's and + * then filling in the gaps with other borders. + */ +} + +table.display thead th { + padding: 3px 18px 3px 10px; + border-bottom: 1px solid black; + font-weight: bold; + cursor: pointer; + * cursor: hand; +} + +table.display tfoot th { + padding: 3px 18px 3px 10px; + border-top: 1px solid black; + font-weight: bold; +} + +table.display tr.heading2 td { + border-bottom: 1px solid #aaa; +} + +table.display td { + padding: 3px 10px; +} + +table.display td.center { + text-align: center; +} + + + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * DataTables sorting + */ + +.sorting_asc { + background: url('../images/sort_asc.png') no-repeat center right; +} + +.sorting_desc { + background: url('../images/sort_desc.png') no-repeat center right; +} + +.sorting { + background: url('../images/sort_both.png') no-repeat center right; +} + +.sorting_asc_disabled { + background: url('../images/sort_asc_disabled.png') no-repeat center right; +} + +.sorting_desc_disabled { + background: url('../images/sort_desc_disabled.png') no-repeat center right; +} + +th:active { + outline: none; +} + + + + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * DataTables row classes + */ +table.display tr.odd.gradeA { + background-color: #ddffdd; +} + +table.display tr.even.gradeA { + background-color: #eeffee; +} + +table.display tr.odd.gradeC { + background-color: #ddddff; +} + +table.display tr.even.gradeC { + background-color: #eeeeff; +} + +table.display tr.odd.gradeX { + background-color: #ffdddd; +} + +table.display tr.even.gradeX { + background-color: #ffeeee; +} + +table.display tr.odd.gradeU { + background-color: #ddd; +} + +table.display tr.even.gradeU { + background-color: #eee; +} + + +tr.odd { + background-color: #E2E4FF; +} + +tr.even { + background-color: white; +} + + + + + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Misc + */ +.dataTables_scroll { + clear: both; +} + +.dataTables_scrollBody { + *margin-top: -1px; +} + +.top, .bottom { + padding: 15px; + background-color: #F5F5F5; + border: 1px solid #CCCCCC; +} + +.top .dataTables_info { + float: none; +} + +.clear { + clear: both; +} + +.dataTables_empty { + text-align: center; +} + +tfoot input { + margin: 0.5em 0; + width: 100%; + color: #444; +} + +tfoot input.search_init { + color: #999; +} + +td.group { + background-color: #d1cfd0; + border-bottom: 2px solid #A19B9E; + border-top: 2px solid #A19B9E; +} + +td.details { + background-color: #d1cfd0; + border: 2px solid #A19B9E; +} + + +.example_alt_pagination div.dataTables_info { + width: 40%; +} + +.paging_full_numbers { + width: 400px; + height: 22px; + line-height: 22px; +} + +.paging_full_numbers a:active { + outline: none +} + +.paging_full_numbers a:hover { + text-decoration: none; +} + +.paging_full_numbers a.paginate_button, + .paging_full_numbers a.paginate_active { + border: 1px solid #aaa; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + padding: 2px 5px; + margin: 0 3px; + cursor: pointer; + *cursor: hand; + color: #333 !important; +} + +.paging_full_numbers a.paginate_button { + background-color: #ddd; +} + +.paging_full_numbers a.paginate_button:hover { + background-color: #ccc; + text-decoration: none !important; +} + +.paging_full_numbers a.paginate_active { + background-color: #99B3FF; +} + +table.display tr.even.row_selected td { + background-color: #B0BED9; +} + +table.display tr.odd.row_selected td { + background-color: #9FAFD1; +} + + +/* + * Sorting classes for columns + */ +/* For the standard odd/even */ +tr.odd td.sorting_1 { + background-color: #D3D6FF; +} + +tr.odd td.sorting_2 { + background-color: #DADCFF; +} + +tr.odd td.sorting_3 { + background-color: #E0E2FF; +} + +tr.even td.sorting_1 { + background-color: #EAEBFF; +} + +tr.even td.sorting_2 { + background-color: #F2F3FF; +} + +tr.even td.sorting_3 { + background-color: #F9F9FF; +} + + +/* For the Conditional-CSS grading rows */ +/* + Colour calculations (based off the main row colours) + Level 1: + dd > c4 + ee > d5 + Level 2: + dd > d1 + ee > e2 + */ +tr.odd.gradeA td.sorting_1 { + background-color: #c4ffc4; +} + +tr.odd.gradeA td.sorting_2 { + background-color: #d1ffd1; +} + +tr.odd.gradeA td.sorting_3 { + background-color: #d1ffd1; +} + +tr.even.gradeA td.sorting_1 { + background-color: #d5ffd5; +} + +tr.even.gradeA td.sorting_2 { + background-color: #e2ffe2; +} + +tr.even.gradeA td.sorting_3 { + background-color: #e2ffe2; +} + +tr.odd.gradeC td.sorting_1 { + background-color: #c4c4ff; +} + +tr.odd.gradeC td.sorting_2 { + background-color: #d1d1ff; +} + +tr.odd.gradeC td.sorting_3 { + background-color: #d1d1ff; +} + +tr.even.gradeC td.sorting_1 { + background-color: #d5d5ff; +} + +tr.even.gradeC td.sorting_2 { + background-color: #e2e2ff; +} + +tr.even.gradeC td.sorting_3 { + background-color: #e2e2ff; +} + +tr.odd.gradeX td.sorting_1 { + background-color: #ffc4c4; +} + +tr.odd.gradeX td.sorting_2 { + background-color: #ffd1d1; +} + +tr.odd.gradeX td.sorting_3 { + background-color: #ffd1d1; +} + +tr.even.gradeX td.sorting_1 { + background-color: #ffd5d5; +} + +tr.even.gradeX td.sorting_2 { + background-color: #ffe2e2; +} + +tr.even.gradeX td.sorting_3 { + background-color: #ffe2e2; +} + +tr.odd.gradeU td.sorting_1 { + background-color: #c4c4c4; +} + +tr.odd.gradeU td.sorting_2 { + background-color: #d1d1d1; +} + +tr.odd.gradeU td.sorting_3 { + background-color: #d1d1d1; +} + +tr.even.gradeU td.sorting_1 { + background-color: #d5d5d5; +} + +tr.even.gradeU td.sorting_2 { + background-color: #e2e2e2; +} + +tr.even.gradeU td.sorting_3 { + background-color: #e2e2e2; +} + + +/* + * Row highlighting example + */ +.ex_highlight #example tbody tr.even:hover, #example tbody tr.even td.highlighted { + background-color: #ECFFB3; +} + +.ex_highlight #example tbody tr.odd:hover, #example tbody tr.odd td.highlighted { + background-color: #E6FF99; +} + +.ex_highlight_row #example tr.even:hover { + background-color: #ECFFB3; +} + +.ex_highlight_row #example tr.even:hover td.sorting_1 { + background-color: #DDFF75; +} + +.ex_highlight_row #example tr.even:hover td.sorting_2 { + background-color: #E7FF9E; +} + +.ex_highlight_row #example tr.even:hover td.sorting_3 { + background-color: #E2FF89; +} + +.ex_highlight_row #example tr.odd:hover { + background-color: #E6FF99; +} + +.ex_highlight_row #example tr.odd:hover td.sorting_1 { + background-color: #D6FF5C; +} + +.ex_highlight_row #example tr.odd:hover td.sorting_2 { + background-color: #E0FF84; +} + +.ex_highlight_row #example tr.odd:hover td.sorting_3 { + background-color: #DBFF70; +} + + +/* + * KeyTable + */ +table.KeyTable td { + border: 3px solid transparent; +} + +table.KeyTable td.focus { + border: 3px solid #3366FF; +} + +table.display tr.gradeA { + background-color: #eeffee; +} + +table.display tr.gradeC { + background-color: #ddddff; +} + +table.display tr.gradeX { + background-color: #ffdddd; +} + +table.display tr.gradeU { + background-color: #ddd; +} + +div.box { + height: 100px; + padding: 10px; + overflow: auto; + border: 1px solid #8080FF; + background-color: #E5E5FF; +} diff --git a/src/warden-server/contrib/wardenweb/datatables/media/css/demo_table_jui.css b/src/warden-server/contrib/wardenweb/datatables/media/css/demo_table_jui.css new file mode 100644 index 0000000..30ea5d1 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/css/demo_table_jui.css @@ -0,0 +1,522 @@ +/* + * File: demo_table_jui.css + * CVS: $Id$ + * Description: CSS descriptions for DataTables demo pages + * Author: Allan Jardine + * Created: Tue May 12 06:47:22 BST 2009 + * Modified: $Date$ by $Author$ + * Language: CSS + * Project: DataTables + * + * Copyright 2009 Allan Jardine. All Rights Reserved. + * + * *************************************************************************** + * DESCRIPTION + * + * The styles given here are suitable for the demos that are used with the standard DataTables + * distribution (see www.datatables.net). You will most likely wish to modify these styles to + * meet the layout requirements of your site. + * + * Common issues: + * 'full_numbers' pagination - I use an extra selector on the body tag to ensure that there is + * no conflict between the two pagination types. If you want to use full_numbers pagination + * ensure that you either have "example_alt_pagination" as a body class name, or better yet, + * modify that selector. + * Note that the path used for Images is relative. All images are by default located in + * ../images/ - relative to this CSS file. + */ + + +/* + * jQuery UI specific styling + */ + +.paging_two_button .ui-button { + float: left; + cursor: pointer; + * cursor: hand; +} + +.paging_full_numbers .ui-button { + padding: 2px 6px; + margin: 0; + cursor: pointer; + * cursor: hand; + color: #333 !important; +} + +.dataTables_paginate .ui-button { + margin-right: -0.1em !important; +} + +.paging_full_numbers { + width: 350px !important; +} + +.dataTables_wrapper .ui-toolbar { + padding: 5px; +} + +.dataTables_paginate { + width: auto; +} + +.dataTables_info { + padding-top: 3px; +} + +table.display thead th { + padding: 3px 0px 3px 10px; + cursor: pointer; + * cursor: hand; +} + +div.dataTables_wrapper .ui-widget-header { + font-weight: normal; +} + + +/* + * Sort arrow icon positioning + */ +table.display thead th div.DataTables_sort_wrapper { + position: relative; + padding-right: 20px; + padding-right: 20px; +} + +table.display thead th div.DataTables_sort_wrapper span { + position: absolute; + top: 50%; + margin-top: -8px; + right: 0; +} + + + + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * + * Everything below this line is the same as demo_table.css. This file is + * required for 'cleanliness' of the markup + * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + + + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * DataTables features + */ + +.dataTables_wrapper { + position: relative; + clear: both; +} + +.dataTables_processing { + position: absolute; + top: 0px; + left: 50%; + width: 250px; + margin-left: -125px; + border: 1px solid #ddd; + text-align: center; + color: #999; + font-size: 11px; + padding: 2px 0; +} + +.dataTables_length { + width: 40%; + float: left; +} + +.dataTables_filter { + width: 50%; + float: right; + text-align: right; +} + +.dataTables_info { + width: 50%; + float: left; +} + +.dataTables_paginate { + float: right; + text-align: right; +} + +/* Pagination nested */ +.paginate_disabled_previous, .paginate_enabled_previous, .paginate_disabled_next, .paginate_enabled_next { + height: 19px; + width: 19px; + margin-left: 3px; + float: left; +} + +.paginate_disabled_previous { + background-image: url('../images/back_disabled.jpg'); +} + +.paginate_enabled_previous { + background-image: url('../images/back_enabled.jpg'); +} + +.paginate_disabled_next { + background-image: url('../images/forward_disabled.jpg'); +} + +.paginate_enabled_next { + background-image: url('../images/forward_enabled.jpg'); +} + + + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * DataTables display + */ +table.display { + margin: 0 auto; + width: 100%; + clear: both; + border-collapse: collapse; +} + +table.display tfoot th { + padding: 3px 0px 3px 10px; + font-weight: bold; + font-weight: normal; +} + +table.display tr.heading2 td { + border-bottom: 1px solid #aaa; +} + +table.display td { + padding: 3px 10px; +} + +table.display td.center { + text-align: center; +} + + + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * DataTables sorting + */ + +.sorting_asc { + background: url('../images/sort_asc.png') no-repeat center right; +} + +.sorting_desc { + background: url('../images/sort_desc.png') no-repeat center right; +} + +.sorting { + background: url('../images/sort_both.png') no-repeat center right; +} + +.sorting_asc_disabled { + background: url('../images/sort_asc_disabled.png') no-repeat center right; +} + +.sorting_desc_disabled { + background: url('../images/sort_desc_disabled.png') no-repeat center right; +} + + + + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * DataTables row classes + */ +table.display tr.odd.gradeA { + background-color: #ddffdd; +} + +table.display tr.even.gradeA { + background-color: #eeffee; +} + + + + +table.display tr.odd.gradeA { + background-color: #ddffdd; +} + +table.display tr.even.gradeA { + background-color: #eeffee; +} + +table.display tr.odd.gradeC { + background-color: #ddddff; +} + +table.display tr.even.gradeC { + background-color: #eeeeff; +} + +table.display tr.odd.gradeX { + background-color: #ffdddd; +} + +table.display tr.even.gradeX { + background-color: #ffeeee; +} + +table.display tr.odd.gradeU { + background-color: #ddd; +} + +table.display tr.even.gradeU { + background-color: #eee; +} + + +tr.odd { + background-color: #E2E4FF; +} + +tr.even { + background-color: white; +} + + + + + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Misc + */ +.dataTables_scroll { + clear: both; +} + +.top, .bottom { + padding: 15px; + background-color: #F5F5F5; + border: 1px solid #CCCCCC; +} + +.top .dataTables_info { + float: none; +} + +.clear { + clear: both; +} + +.dataTables_empty { + text-align: center; +} + +tfoot input { + margin: 0.5em 0; + width: 100%; + color: #444; +} + +tfoot input.search_init { + color: #999; +} + +td.group { + background-color: #d1cfd0; + border-bottom: 2px solid #A19B9E; + border-top: 2px solid #A19B9E; +} + +td.details { + background-color: #d1cfd0; + border: 2px solid #A19B9E; +} + + +.example_alt_pagination div.dataTables_info { + width: 40%; +} + +.paging_full_numbers a.paginate_button, + .paging_full_numbers a.paginate_active { + border: 1px solid #aaa; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + padding: 2px 5px; + margin: 0 3px; + cursor: pointer; + *cursor: hand; + color: #333 !important; +} + +.paging_full_numbers a.paginate_button { + background-color: #ddd; +} + +.paging_full_numbers a.paginate_button:hover { + background-color: #ccc; + text-decoration: none !important; +} + +.paging_full_numbers a.paginate_active { + background-color: #99B3FF; +} + +table.display tr.even.row_selected td { + background-color: #B0BED9; +} + +table.display tr.odd.row_selected td { + background-color: #9FAFD1; +} + + +/* + * Sorting classes for columns + */ +/* For the standard odd/even */ +tr.odd td.sorting_1 { + background-color: #D3D6FF; +} + +tr.odd td.sorting_2 { + background-color: #DADCFF; +} + +tr.odd td.sorting_3 { + background-color: #E0E2FF; +} + +tr.even td.sorting_1 { + background-color: #EAEBFF; +} + +tr.even td.sorting_2 { + background-color: #F2F3FF; +} + +tr.even td.sorting_3 { + background-color: #F9F9FF; +} + + +/* For the Conditional-CSS grading rows */ +/* + Colour calculations (based off the main row colours) + Level 1: + dd > c4 + ee > d5 + Level 2: + dd > d1 + ee > e2 + */ +tr.odd.gradeA td.sorting_1 { + background-color: #c4ffc4; +} + +tr.odd.gradeA td.sorting_2 { + background-color: #d1ffd1; +} + +tr.odd.gradeA td.sorting_3 { + background-color: #d1ffd1; +} + +tr.even.gradeA td.sorting_1 { + background-color: #d5ffd5; +} + +tr.even.gradeA td.sorting_2 { + background-color: #e2ffe2; +} + +tr.even.gradeA td.sorting_3 { + background-color: #e2ffe2; +} + +tr.odd.gradeC td.sorting_1 { + background-color: #c4c4ff; +} + +tr.odd.gradeC td.sorting_2 { + background-color: #d1d1ff; +} + +tr.odd.gradeC td.sorting_3 { + background-color: #d1d1ff; +} + +tr.even.gradeC td.sorting_1 { + background-color: #d5d5ff; +} + +tr.even.gradeC td.sorting_2 { + background-color: #e2e2ff; +} + +tr.even.gradeC td.sorting_3 { + background-color: #e2e2ff; +} + +tr.odd.gradeX td.sorting_1 { + background-color: #ffc4c4; +} + +tr.odd.gradeX td.sorting_2 { + background-color: #ffd1d1; +} + +tr.odd.gradeX td.sorting_3 { + background-color: #ffd1d1; +} + +tr.even.gradeX td.sorting_1 { + background-color: #ffd5d5; +} + +tr.even.gradeX td.sorting_2 { + background-color: #ffe2e2; +} + +tr.even.gradeX td.sorting_3 { + background-color: #ffe2e2; +} + +tr.odd.gradeU td.sorting_1 { + background-color: #c4c4c4; +} + +tr.odd.gradeU td.sorting_2 { + background-color: #d1d1d1; +} + +tr.odd.gradeU td.sorting_3 { + background-color: #d1d1d1; +} + +tr.even.gradeU td.sorting_1 { + background-color: #d5d5d5; +} + +tr.even.gradeU td.sorting_2 { + background-color: #e2e2e2; +} + +tr.even.gradeU td.sorting_3 { + background-color: #e2e2e2; +} + + +/* + * Row highlighting example + */ +.ex_highlight #example tbody tr.even:hover, #example tbody tr.even td.highlighted { + background-color: #ECFFB3; +} + +.ex_highlight #example tbody tr.odd:hover, #example tbody tr.odd td.highlighted { + background-color: #E6FF99; +} \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/css/jquery.dataTables.css b/src/warden-server/contrib/wardenweb/datatables/media/css/jquery.dataTables.css new file mode 100644 index 0000000..dda16c4 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/css/jquery.dataTables.css @@ -0,0 +1,219 @@ + +/* + * Table + */ +table.dataTable { + margin: 0 auto; + clear: both; + width: 100%; +} + +table.dataTable thead th { + padding: 3px 18px 3px 10px; + border-bottom: 1px solid black; + font-weight: bold; + cursor: pointer; + *cursor: hand; +} + +table.dataTable tfoot th { + padding: 3px 18px 3px 10px; + border-top: 1px solid black; + font-weight: bold; +} + +table.dataTable td { + padding: 3px 10px; +} + +table.dataTable td.center, +table.dataTable td.dataTables_empty { + text-align: center; +} + +table.dataTable tr.odd { background-color: #E2E4FF; } +table.dataTable tr.even { background-color: white; } + +table.dataTable tr.odd td.sorting_1 { background-color: #D3D6FF; } +table.dataTable tr.odd td.sorting_2 { background-color: #DADCFF; } +table.dataTable tr.odd td.sorting_3 { background-color: #E0E2FF; } +table.dataTable tr.even td.sorting_1 { background-color: #EAEBFF; } +table.dataTable tr.even td.sorting_2 { background-color: #F2F3FF; } +table.dataTable tr.even td.sorting_3 { background-color: #F9F9FF; } + + +/* + * Table wrapper + */ +.dataTables_wrapper { + position: relative; + clear: both; + *zoom: 1; +} + + +/* + * Page length menu + */ +.dataTables_length { + float: left; +} + + +/* + * Filter + */ +.dataTables_filter { + float: right; + text-align: right; +} + + +/* + * Table information + */ +.dataTables_info { + clear: both; + float: left; +} + + +/* + * Pagination + */ +.dataTables_paginate { + float: right; + text-align: right; +} + +/* Two button pagination - previous / next */ +.paginate_disabled_previous, +.paginate_enabled_previous, +.paginate_disabled_next, +.paginate_enabled_next { + height: 19px; + float: left; + cursor: pointer; + *cursor: hand; + color: #111 !important; +} +.paginate_disabled_previous:hover, +.paginate_enabled_previous:hover, +.paginate_disabled_next:hover, +.paginate_enabled_next:hover { + text-decoration: none !important; +} +.paginate_disabled_previous:active, +.paginate_enabled_previous:active, +.paginate_disabled_next:active, +.paginate_enabled_next:active { + outline: none; +} + +.paginate_disabled_previous, +.paginate_disabled_next { + color: #666 !important; +} +.paginate_disabled_previous, +.paginate_enabled_previous { + padding-left: 23px; +} +.paginate_disabled_next, +.paginate_enabled_next { + padding-right: 23px; + margin-left: 10px; +} + +.paginate_enabled_previous { background: url('../images/back_enabled.png') no-repeat top left; } +.paginate_enabled_previous:hover { background: url('../images/back_enabled_hover.png') no-repeat top left; } +.paginate_disabled_previous { background: url('../images/back_disabled.png') no-repeat top left; } + +.paginate_enabled_next { background: url('../images/forward_enabled.png') no-repeat top right; } +.paginate_enabled_next:hover { background: url('../images/forward_enabled_hover.png') no-repeat top right; } +.paginate_disabled_next { background: url('../images/forward_disabled.png') no-repeat top right; } + +/* Full number pagination */ +.paging_full_numbers { + height: 22px; + line-height: 22px; +} +.paging_full_numbers a:active { + outline: none +} +.paging_full_numbers a:hover { + text-decoration: none; +} + +.paging_full_numbers a.paginate_button, +.paging_full_numbers a.paginate_active { + border: 1px solid #aaa; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + padding: 2px 5px; + margin: 0 3px; + cursor: pointer; + *cursor: hand; + color: #333 !important; +} + +.paging_full_numbers a.paginate_button { + background-color: #ddd; +} + +.paging_full_numbers a.paginate_button:hover { + background-color: #ccc; + text-decoration: none !important; +} + +.paging_full_numbers a.paginate_active { + background-color: #99B3FF; +} + + +/* + * Processing indicator + */ +.dataTables_processing { + position: absolute; + top: 50%; + left: 50%; + width: 250px; + height: 30px; + margin-left: -125px; + margin-top: -15px; + padding: 14px 0 2px 0; + border: 1px solid #ddd; + text-align: center; + color: #999; + font-size: 14px; + background-color: white; +} + + +/* + * Sorting + */ +.sorting { background: url('../images/sort_both.png') no-repeat center right; } +.sorting_asc { background: url('../images/sort_asc.png') no-repeat center right; } +.sorting_desc { background: url('../images/sort_desc.png') no-repeat center right; } + +.sorting_asc_disabled { background: url('../images/sort_asc_disabled.png') no-repeat center right; } +.sorting_desc_disabled { background: url('../images/sort_desc_disabled.png') no-repeat center right; } + +table.dataTable th:active { + outline: none; +} + + +/* + * Scrolling + */ +.dataTables_scroll { + clear: both; +} + +.dataTables_scrollBody { + *margin-top: -1px; +} + diff --git a/src/warden-server/contrib/wardenweb/datatables/media/css/jquery.dataTables_themeroller.css b/src/warden-server/contrib/wardenweb/datatables/media/css/jquery.dataTables_themeroller.css new file mode 100644 index 0000000..94a24c8 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/css/jquery.dataTables_themeroller.css @@ -0,0 +1,243 @@ + + +/* + * Table + */ +table.dataTable { + margin: 0 auto; + clear: both; + width: 100%; +} + +table.dataTable thead th { + padding: 3px 0px 3px 10px; + cursor: pointer; + *cursor: hand; +} + +table.dataTable tfoot th { + padding: 3px 10px; +} + +table.dataTable td { + padding: 3px 10px; +} + +table.dataTable td.center, +table.dataTable td.dataTables_empty { + text-align: center; +} + +table.dataTable tr.odd { background-color: #E2E4FF; } +table.dataTable tr.even { background-color: white; } + +table.dataTable tr.odd td.sorting_1 { background-color: #D3D6FF; } +table.dataTable tr.odd td.sorting_2 { background-color: #DADCFF; } +table.dataTable tr.odd td.sorting_3 { background-color: #E0E2FF; } +table.dataTable tr.even td.sorting_1 { background-color: #EAEBFF; } +table.dataTable tr.even td.sorting_2 { background-color: #F2F3FF; } +table.dataTable tr.even td.sorting_3 { background-color: #F9F9FF; } + + +/* + * Table wrapper + */ +.dataTables_wrapper { + position: relative; + clear: both; + *zoom: 1; +} +.dataTables_wrapper .ui-widget-header { + font-weight: normal; +} +.dataTables_wrapper .ui-toolbar { + padding: 5px; +} + + +/* + * Page length menu + */ +.dataTables_length { + float: left; +} + + +/* + * Filter + */ +.dataTables_filter { + float: right; + text-align: right; +} + + +/* + * Table information + */ +.dataTables_info { + padding-top: 3px; + clear: both; + float: left; +} + + +/* + * Pagination + */ +.dataTables_paginate { + float: right; + text-align: right; +} + +.dataTables_paginate .ui-button { + margin-right: -0.1em !important; +} + +.paging_two_button .ui-button { + float: left; + cursor: pointer; + * cursor: hand; +} + +.paging_full_numbers .ui-button { + padding: 2px 6px; + margin: 0; + cursor: pointer; + * cursor: hand; + color: #333 !important; +} + +/* Two button pagination - previous / next */ +.paginate_disabled_previous, +.paginate_enabled_previous, +.paginate_disabled_next, +.paginate_enabled_next { + height: 19px; + float: left; + cursor: pointer; + *cursor: hand; + color: #111 !important; +} +.paginate_disabled_previous:hover, +.paginate_enabled_previous:hover, +.paginate_disabled_next:hover, +.paginate_enabled_next:hover { + text-decoration: none !important; +} +.paginate_disabled_previous:active, +.paginate_enabled_previous:active, +.paginate_disabled_next:active, +.paginate_enabled_next:active { + outline: none; +} + +.paginate_disabled_previous, +.paginate_disabled_next { + color: #666 !important; +} +.paginate_disabled_previous, +.paginate_enabled_previous { + padding-left: 23px; +} +.paginate_disabled_next, +.paginate_enabled_next { + padding-right: 23px; + margin-left: 10px; +} + +.paginate_enabled_previous { background: url('../images/back_enabled.png') no-repeat top left; } +.paginate_enabled_previous:hover { background: url('../images/back_enabled_hover.png') no-repeat top left; } +.paginate_disabled_previous { background: url('../images/back_disabled.png') no-repeat top left; } + +.paginate_enabled_next { background: url('../images/forward_enabled.png') no-repeat top right; } +.paginate_enabled_next:hover { background: url('../images/forward_enabled_hover.png') no-repeat top right; } +.paginate_disabled_next { background: url('../images/forward_disabled.png') no-repeat top right; } + +/* Full number pagination */ +.paging_full_numbers a:active { + outline: none +} +.paging_full_numbers a:hover { + text-decoration: none; +} + +.paging_full_numbers a.paginate_button, +.paging_full_numbers a.paginate_active { + border: 1px solid #aaa; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + padding: 2px 5px; + margin: 0 3px; + cursor: pointer; + *cursor: hand; + color: #333 !important; +} + +.paging_full_numbers a.paginate_button { + background-color: #ddd; +} + +.paging_full_numbers a.paginate_button:hover { + background-color: #ccc; + text-decoration: none !important; +} + +.paging_full_numbers a.paginate_active { + background-color: #99B3FF; +} + + +/* + * Processing indicator + */ +.dataTables_processing { + position: absolute; + top: 50%; + left: 50%; + width: 250px; + height: 30px; + margin-left: -125px; + margin-top: -15px; + padding: 14px 0 2px 0; + border: 1px solid #ddd; + text-align: center; + color: #999; + font-size: 14px; + background-color: white; +} + + +/* + * Sorting + */ +table.dataTable thead th div.DataTables_sort_wrapper { + position: relative; + padding-right: 20px; + padding-right: 20px; +} + +table.dataTable thead th div.DataTables_sort_wrapper span { + position: absolute; + top: 50%; + margin-top: -8px; + right: 0; +} + +table.dataTable th:active { + outline: none; +} + + +/* + * Scrolling + */ +.dataTables_scroll { + clear: both; +} + +.dataTables_scrollBody { + *margin-top: -1px; +} + diff --git a/src/warden-server/contrib/wardenweb/datatables/media/images/Sorting icons.psd b/src/warden-server/contrib/wardenweb/datatables/media/images/Sorting icons.psd new file mode 100644 index 0000000000000000000000000000000000000000..53b2e06850767cb57c52b316f0b845b1a8e0ca0e GIT binary patch literal 27490 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 Y16@Zf7?Q8!JB-NJ(KYBs*Ff|C0Zg4MIsgCw literal 0 HcmV?d00001 diff --git a/src/warden-server/contrib/wardenweb/datatables/media/images/back_disabled.png b/src/warden-server/contrib/wardenweb/datatables/media/images/back_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..881de7976ff98955e2a5487dca66e618a0655f3d GIT binary patch literal 1361 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S1|*9D%+3HQ$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%u1Od5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8<fR&VF+bTgE72zA8;GAESs$i;Tpqp%9W}skZsAp(w zVs37(qhMrUXrOOkq;F`XYiMp|Y-D9%pa2C*K--E^(yW49+@N*=dA3R!B_#z``ugSN z<$C4Ddih1^`i7R4mLM~XjC6r2bc-wVN)jt{^NN*WCb*;)Cl_TFlw{`TDS%8&Ov*1U zu~h=P6yk;40=Thx#n4~^2AF<DVu8M)o&m^9FonLp_?717!c`ZS1f?R}i`C%bkjjEo z{h-w1{L-RiV8o><gRCmBaxO|uEXgkl$<NP$g<?QPeo20DMt*^UbFis`Z(?$09*7TC z@9S&jnO9trn3tUD>0+w{G(j&jGsVin+1c5}%-r12$=KP@(AChw*vQht)WY1&)XmVs z#Kj1v*Cju>G&eP`1g19yq1OVZUQklVEdbi=l3J8mmYU*Ll%J~r_OewbZnv1?G!Lpb z1-DzwaO%|uIz}H9u}BdO69T3l5EGtkfgE_kPt60S_99@i-f{BMZ3YI$qn<8~Ar-gQ zOt$tu93XPMc=CmoA1oW4o1+WYIB!k3r72K4*@xA>;l+b1ClB@qaOE!8@r8RwiN1wc zl+_Cb3(lEQAv#$bmh>Mfe(I7Woy4{G!}EFf?)^FUc%F02^;EH~5owLt3k}+qS-P)U z616t%^wT0PX2liq$807FHoQ4d$0`5rkQ{U2Kkgclu0)Awnd5T>ob((vrABTq*u(RS z>E?oy`!@uw+@i*D$dKV&#I(EL&;9;u$GTQAMM5faVZejQCzo(NvvlZ75dZt%IYnd( z*RL;GX3W}R-P)5>-Zsu`&nUT&Ho^GzHq{#}Ya$hT91>M0@O`!9^}b&yQ@87fac$Vj zkb72h`!2pMTYunpu!r@;1)uFRXDvH<C2MQCLB5EqVe!tGxM@$<Xmq^}jH~^{nDM>O zu{mw?PmW#JOy1f}J}ILj)G2cQ^TrhhTtyr5@7eCYm=Uoy?6qTPsOnt5?2i>S(pg>~ z>M~M93=YlxcD}*xKl_@hz5j0IZGT@9Yu_^8_RN8=&YkAdFR(fGAAWd4CvkG#0^hlN z8>(g;?I=2=cEEAHaL+WiOvRp~fl`n5dTf5V)bNv|ZcjyzLHRnz@2)SdPWo#3tF@Nf ZfT6u;&2Oo-XD5RSIZszVmvv4FO#nm}^+Nyv literal 0 HcmV?d00001 diff --git a/src/warden-server/contrib/wardenweb/datatables/media/images/back_enabled.png b/src/warden-server/contrib/wardenweb/datatables/media/images/back_enabled.png new file mode 100644 index 0000000000000000000000000000000000000000..c608682b04a6d9b8002602450c8ef7e80ebba099 GIT binary patch literal 1379 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S1|*9D%+3HQ$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%u1Od5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8<fR&VF+bTgE72zA8;GAESs$i;Tpqp%9W}skZsAp(w zVs37(qhMrUXrOOkq;F`XYiMp|Y-D9%pa2C*K--E^(yW49+@N*=dA3R!B_#z``ugSN z<$C4Ddih1^`i7R4mLM~XjC6r2bc-wVN)jt{^NN*WCb*;)Cl_TFlw{`TDS%8&Ov*1U zu~h=P6yk;40=Thx#n4~^2AF<DVu8M)o&m^9FonLp_?717!c`ZS1f?R}i`C%bkjjEo z{h-w1{L-RiV8o><gRCmBaxO|uEXgkl$<NP$g<?QPeo20DMt*^UbFis`Z(?$09*7TC z@9S&jnO9trn3tUD>0+w{G(j&jGsVin+1c5}%-q<}$=KP@(AChw*vQht)WY1&)XmVs z#Kj1v*Cju>G&eP`1g19yq1ObbUQklVEdbi=l3J8mmYU*Ll%J~r_Oewb7Ppv~yBe68 zyO`lL52`l>w_A*G>eUB2MjsThND&Pa0;V1i6P|2=9C*S{%>$<PB4D!4X%u8)U|_uN z>EaktaVzQ1|Nr*PTN#9zMHxeRlNl-}v#d8N^Zk>0_uB7B{#OES8f>#2yG~0qw!L6p zdFucF|1%kW<~W?`S<}!e5q#_SzEeiVo81hJjGh}A8F|(J{8J?#FoV5gKjTM#g@4`` zHat7G{ZGytn}0n$K9W8@XQml^^p~IC#Pg_K>J#_+(?*}aZPd`ZZNa#A3a7~tW{o3_ zI{&|(mY(2P<M2mPEKQ=#bld(%PoD@Gu%2pXjuqzkGD*Yibltx{hgg@~SeV#$)xa&` zKoMiI>V%myRe9%s|Nr;*;U>8s5-)SkmAo$(Keu+yr%y+}MlE>zy+BR9?SIdWBY}H< zKKU5g_O$y^9OKN@zGsEyW<{&Edwac(+`RcS*M!N;4lBR&3)I`!79H%>{JYJ#JU4sR zw=W-e8rT2-_sjK!ftX42KgY{w-6eiM*mqC=xu5>dtj80wm*z`6(^6Ws=-8Pfr#M2- zH|Sq%;`zb5)KTvzU)R6$^W*Do?c4e6>`&v<`V~L7?ymp$=Mn1__Wu)kQ(K;TCm0<N zV>xpn=P<ADl0yMzCpKMo_`~$7`@TZ)ho=qo0nz`RV!4Z+imyoYxv=I7_o}`XdpJKI z%U5yU?-2WkJ?lpOBqOUy+=+=NTT%q?7&I_2GgR!^?CWPQ?*l6KJYD@<);T3K0RWQ{ B1v&r# literal 0 HcmV?d00001 diff --git a/src/warden-server/contrib/wardenweb/datatables/media/images/back_enabled_hover.png b/src/warden-server/contrib/wardenweb/datatables/media/images/back_enabled_hover.png new file mode 100644 index 0000000000000000000000000000000000000000..d300f1064b3beac1d7d5274e294494d3143e53a2 GIT binary patch literal 1375 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S1|*9D%+3HQ$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%u1Od5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8<fR&VF+bTgE72zA8;GAESs$i;Tpqp%9W}skZsAp(w zVs37(qhMrUXrOOkq;F`XYiMp|Y-D9%pa2C*K--E^(yW49+@N*=dA3R!B_#z``ugSN z<$C4Ddih1^`i7R4mLM~XjC6r2bc-wVN)jt{^NN*WCb*;)Cl_TFlw{`TDS%8&Ov*1U zu~h=P6yk;40=Thx#n4~^2AF<DVu8M)o&m^9FonLp_?717!c`ZS1f?R}i`C%bkjjEo z{h-w1{L-RiV8o><gRCmBaxO|uEXgkl$<NP$g<?QPeo20DMt*^UbFis`Z(?$09*7TC z@9S&jnO9trn3tUD>0+w{G(j&jGsVi#&A{2f&C=D-$=KD<(AChw*vQht)WY1&)XmVs z#Kj1v*Cju>G&eP`1g19yq1O$kUQklVEdbi=l3J8mmYU*Ll%J~r_OewbZnrq&G!Lpb z1-DyVaO%|uIz}H9u}BdO69T3l5EGtkfgE_kPt60S_99@io@8}5n}LDxvZsq<NX4zB zKmY&RGjC-OW)@`(<xOU&oXoP`h|Tr>#&7*Qma&&|D2p_oRXCd3<KX<IF+??BIp>7) zY)8(V;EL!lR8{!YrXwuuEuySktariS<$U}5@0hthGki2x_{Vvqo>S_XblJrDt*y7` zPn>AToH0Sw=g;r$;tI__7PkF4^xDY!x~Ps)lA51GcnTBmM+UA!h136k{gg`)kQb<L zYn5zEv|ISR;^vJXK8>Fq_VoBPIz)-gPOY!2f65f}=7PcDED2?Ugq;l&g-#qfGN<kQ z@Bjb)r#kZ2^pup9#2?zN&TsDj^Up`WxAX1e-#_#W=(*t%xaa4;yQyuL-MQl#XRdxa z)mct!l}pQK?u@9-8;ZCmOlEdi`JG?mklel4;>QQhO_+II&v(YRhj*tM|Nr;*pX&(& zF_Y$hj+f86OZ@)!^=7=>-T3-YSLKUdZuf3aZ4Y<s?VQ*uxN06_{32G#57J)EF`r~b z{@T~?`C0PS>HF;C{AO_%40X!?e|-Fvdj<bLW$9BKr>7ri>D1+zvG8V_^em6og*g*a z*EjxPy&}Hf@!5mZjQ<yG``5Zl?8zzpfWtEuM7|UckqxXAe%5>6qphxS*AM<H8~&@L nmZ*pyIy8y%q|%N=21YgpNrScB1<wOzK}DXYtDnm{r-UW|8K3s} literal 0 HcmV?d00001 diff --git a/src/warden-server/contrib/wardenweb/datatables/media/images/favicon.ico b/src/warden-server/contrib/wardenweb/datatables/media/images/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..6eeaa2a0d393190ce748107222d9a026f992e4a7 GIT binary patch literal 894 zcmZQzU<5(|0R|u`!H~hsz#zuJz@P!dKp_SNAO?xUfG{@$0|>*we<X0{?!DZ?LR&jK zJ4*`(D+_yj`}mZUV<%4{DS<No{rlI{+GcBJTomZJrYz@lN9~2?%3V3hT|wRfwpN+B zxv$^6LDrRDRAizmzo(`AZg1n=>Y}F;x;`B~@Mg`jC-vo5%k$%{OoKy1zkdA+(K2o3 zEDKGQQ~gcX+N!Tt<ln6-e!X((x9eB`|NHmj>Ej1|9e2tL(rheJva*5dKY#gZsIRxM zB;!h7<JJ1on-%#_W>5Wi?9l5?>z>S-`t`=OAFp5C?(007k>qM(bnVuyja#;c*qL9N z(Q%=@`f7d2?T&^wySIHjy#MKh?rZrO7i!Bt-@f(!@WDrwB`uD&)%Eqcd3o(gVV7ri zp6ji@(BF7(+uE0x&)(R!?s#YIg_7JW1=-KHZv1@s(DS<L4gNk(j*fnQelrS_FV5;Z zF}eA|vYC(19e;50(BU}~*0+>xD9<^am-%+f#!uU}z9=j>5*%b{WE2`20#tutPWS1# zz4s39d~xOMwaqJzOl{rMU%#oo=xj&xyY1WF&71o?Hs-LOkA<OOT|+}_QrMM+6RvMw z{^IiKhevmxo!@_KTI>D^4SRbV?yXz(e#efNwKXpT1J^s+yE;1`KXoe5&f?1A$<NLo z|MBttt(|L+O=>tYso}un=1c3AzCL>B&D=RpqN3i1hL&lnclP!D`u*G0#bsJv!oAH) z-rc|T`^Wdkrw?7(xb)_p%`Y#WdAn`Pvz+W#0Rbo6-Ha3zp1gPgjDkZ)k6Gz!@9D0( zG^hL4?)Be4zWep#`{$>RUhUoaq@wgyfd9*oU{6tz+SXQhl3284sj;T&{L=I*bGxt4 z@4vfX%A<*$FN^a&MMa!<bG7B?%PuH@D~2#OZ`<zU;hyB_*c#=(G&yozSimf6i&AxU ucVnZ@2@}v1L%4tb{$0CaV_ZU_m8GSrv9VuZ;G~(e-hB9gtQeLL$fW`Ph4SP8 literal 0 HcmV?d00001 diff --git a/src/warden-server/contrib/wardenweb/datatables/media/images/forward_disabled.png b/src/warden-server/contrib/wardenweb/datatables/media/images/forward_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..6a6ded7de821619aedc71d1738c0b73463a4452e GIT binary patch literal 1363 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S1|*9D%+3HQ$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%u1Od5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8<fR&VF+bTgE72zA8;GAESs$i;Tpqp%9W}skZsAp(w zVs37(qhMrUXrOOkq;F`XYiMp|Y-D9%pa2C*K--E^(yW49+@N*=dA3R!B_#z``ugSN z<$C4Ddih1^`i7R4mLM~XjC6r2bc-wVN)jt{^NN*WCb*;)Cl_TFlw{`TDS%8&Ov*1U zu~h=P6yk;40=Thx#n4~^2AF<DVu8M)o&m^9FonLp_?717!c`ZS1f?R}i`C%bkjjEo z{h-w1{L-RiV8o><gRCmBaxO|uEXgkl$<NP$g<?QPeo20DMt*^UbFis`Z(?$09*7TC z@9S&jnO9trn3tUD>0+w{G(j&jGsVin+1c5}%-qS)$=KP@(AChw*vQht)WY1&)XmVs z#Kj1v*Cju>G&eP`1g19yq1PFwUQklVEdbi=l3J8mmYU*Ll%J~r_OewbZns$CG!Lpb z1-Dxqaq86vIz}H9u}BdO69T3l5EGtkfgE_kPt60S_99@ies{+CJ_7^eaZeY=kcwMt zrucd@1&XviUp=W&hC_Vigxz9qe=+JQiRZ>#-OmxVbJNmo0?O0%xE7^$7hDVzS=7nq zBvt-aWrpIMi;ByGX0JatRXb+C`iBGE*Nwm1%=tcVr*ri@cU^6Xtj>)g66P@%1db+s zWSF+QYf((v=9^+`Y}d3l_I1DM*_La4%-~F<iqOupPmA17rUW(EbkF;HUG47s@9eHR zr{8fl70mTeS!Xo!jNOv34{^8jdm7J095R#VVBvFKc)@pJzz&b)m#u$9NW?Q2$h6PB zall}<&3SqE#TR$i*ws(+TAC!FeR-G6#+SR^`AEwg&t-2u__@HMMymh#c8=GRFUN>X zOD#3=6_)Nj)~$1T^@J$qollO4A6gI{9eUN=bCTSutFMe5M0p+_TYIkc<*t8mtFJEc zTKXwVqK$2(et`HF?-Em4wsu<!<_gzaU#tGEjL|!t;N5yfeTD0a=52`&N+cpS`CP8i znd<d@k%rWcW-~^|3;8^oj^}f5ex7x98BduHL+yj~6Vv#NKJ02wGkiVk;$eS*Jxf+p z$Zlz@mz~hL`(;vx_3L#?=RDGP)Q0?N?yipLo6qfkC??74@c(mr@}3>kSTsY4VW0ic bdL|wQU%!)=<|i%z6_yO1u6{1-oD!M<;V$ow literal 0 HcmV?d00001 diff --git a/src/warden-server/contrib/wardenweb/datatables/media/images/forward_enabled.png b/src/warden-server/contrib/wardenweb/datatables/media/images/forward_enabled.png new file mode 100644 index 0000000000000000000000000000000000000000..a4e6b5384b8454ee7f44a8f7c75b0321b7eeb9b1 GIT binary patch literal 1380 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S1|*9D%+3HQ$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%u1Od5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8<fR&VF+bTgE72zA8;GAESs$i;Tpqp%9W}skZsAp(w zVs37(qhMrUXrOOkq;F`XYiMp|Y-D9%pa2C*K--E^(yW49+@N*=dA3R!B_#z``ugSN z<$C4Ddih1^`i7R4mLM~XjC6r2bc-wVN)jt{^NN*WCb*;)Cl_TFlw{`TDS%8&Ov*1U zu~h=P6yk;40=Thx#n4~^2AF<DVu8M)o&m^9FonLp_?717!c`ZS1f?R}i`C%bkjjEo z{h-w1{L-RiV8o><gRCmBaxO|uEXgkl$<NP$g<?QPeo20DMt*^UbFis`Z(?$09*7TC z@9S&jnO9trn3tUD>0+w{G(j&jGsVip+||I$+{MJu$=KP@(AChw*vQht)WY1&)XmVs z#Kj1v*Cju>G&eP`1g19yq1P0rUQklVEdbi=l3J8mmYU*Ll%J~r_OewbZnqfWG!Lpb z1-Dy_aq86vIz}H9u}BdO69T3l5EGtkfgE_kPt60S_99@iW_)h2mVtrshNp{TNX4zB zKmY&RGjC-OW)@`(<xOrhlxSR#{V1QGt?hr?`T4Q)?%vP*Bc}03zKfG7pg?hV&&T)k z=YR6?(OD}r$x1tWwtV}J%B!E5kIr-~T2eLn<MZ?S3BG5}tm&)yGwJi&xn0jfuG}qR z<J#zS)kr8?;`06d`)3H=OM8@*{+w4#C@kW}ouAwE_kWopW)d-@qpQKbUZCxusKG{$ zf+Ef|Z?Bi@*5=nvn?AMPA<pgE4AI%zfqQ-e9Xsb<LSkb0<EN8f2u{DSYTE|Csm`CQ z(sG2D>g)dh`10)R-NpU#bM1=1eo8Z2AYd)<-?^`_sqOFY@6XS7KM&8JXTA5$g^A9S z{TX;`xlCJF@2;-kt^WS)-(qj^YjbRh3Qo21zn9<7##PJs=)J=q?vtT6c$tqWSn$;S z{q^hJt*2*?^Szy4@bTi|;PVYm@{K=qh5oS|v0uoRWd7#=|NZ;-*VL7!+<x}z?DD?z zwfv<AtyP>I+Ui=RzOdW2D@cF)|8@0kar@euUy>OYxL3%Wh|X{LVLRn7b4UH-Q)xXL zlsIOXI?k$WjNtJ4&-&<m!1bDTsZadjajY|&9~rIq>^N(`qv`*KNBfVYRHPjKr+8GT t=fC*;><^O18kWptJjt-AJE?(znPJ1m)BPofdH;jTJx^CZmvv4FO#l_Q2A%)_ literal 0 HcmV?d00001 diff --git a/src/warden-server/contrib/wardenweb/datatables/media/images/forward_enabled_hover.png b/src/warden-server/contrib/wardenweb/datatables/media/images/forward_enabled_hover.png new file mode 100644 index 0000000000000000000000000000000000000000..fc46c5ebf0524b72a509fe2d7c1bc74995cb8a9d GIT binary patch literal 1379 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S1|*9D%+3HQ$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%u1Od5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8<fR&VF+bTgE72zA8;GAESs$i;Tpqp%9W}skZsAp(w zVs37(qhMrUXrOOkq;F`XYiMp|Y-D9%pa2C*K--E^(yW49+@N*=dA3R!B_#z``ugSN z<$C4Ddih1^`i7R4mLM~XjC6r2bc-wVN)jt{^NN*WCb*;)Cl_TFlw{`TDS%8&Ov*1U zu~h=P6yk;40=Thx#n4~^2AF<DVu8M)o&m^9FonLp_?717!c`ZS1f?R}i`C%bkjjEo z{h-w1{L-RiV8o><gRCmBaxO|uEXgkl$<NP$g<?QPeo20DMt*^UbFis`Z(?$09*7TC z@9S&jnO9trn3tUD>0+w{G(j&jGsVi#&A{2f&C=1($=KD<(AChw*vQht)WY1&)XmVs z#Kj1v*Cju>G&eP`1g19yq1OqgUQklVEdbi=l3J8mmYU*Ll%J~r_OewbZns$AG!Lpb z1-Dx)aq86vIz}H9u}BdO69T3l5EGtkfgE_kPt60S_99@imN7BvVqjpr?&;zfQgJKk z&;S4S%v%{AKQQkR<Y-#-zRJMhkNKY;|DL_sdwb7)rq=(?hK>wI?VL9s)YsRaG&b6_ z<rC+M^<TKG1Q#t0Kfo`N&UR8TS)nVj{$CAqc2ZJO;gbg<v)8YhX?6VW{|4iL4$)Q9 zCPo~d@$c{Nqdev_Cw6wXPPLvf+dXYz{*9w{>gRo<91_J$Y%O?`e|&#$ZtS+eXp_f= zjUUrLb7!pi%4at>{rxttxB!poqO-MU1}Hz4_scgh+`O`|pzGU*Ppd<;SGk>1td!-8 z=;-~nzrMci*RP)sFMiM0pIiAYg<m?LL-vW}6Nz+1nWsS4{VMqVZ1HbtzPo#OK47_U zVR?Xa#D%?G*Eg(>m$R?>m2vx|wYgZ#kAH7}W-quPuJDiV$o>g2t#=I)c$y9~%y7A9 zTfgc1jk&Lj_4ZX)f0PV(p)9c9_0ar=AL>^e-n9Mw|Nr~<^YZ!qF*`48{dsWi)b|VZ zD%w*xPFz?Y(EM+~bAgn@|LT8!dGP4_dwn}*-YUka%$2Ws1@^aZs%Q9^A9It(GQY{> zGt)+aDgU^S%wM?fC!gsP`E`4^jM#4)q-B&8J6^t!zrwrDf%l)k#^S|Oq%QdIe*R^@ tLh*lxrsW37V+~Wv{w==9!pqEIz%cpgo%)U5J^Y|z&(qb<Wt~$(69B7>2Z8_q literal 0 HcmV?d00001 diff --git a/src/warden-server/contrib/wardenweb/datatables/media/images/sort_asc.png b/src/warden-server/contrib/wardenweb/datatables/media/images/sort_asc.png new file mode 100644 index 0000000000000000000000000000000000000000..a88d7975fe9017e4e5f2289a94bd1ed66a5f59dc GIT binary patch literal 1118 zcmbVLO=#0l98awuV{<Z@!!LxlD0<K~@1>uMt6P_}u4rcI3idKFP2SpU%ZJIE?RL`X zK?Oyo=*5GG2SxDYK=7akJqV&hrl{aWJa`y*5xh+1%i2y4V}gO?edPc9{r;a9vjc}) zn|Cxb4AYwFmvVG%_ui)U^y_4!ujsO!qzYuv8YUIR!Aw%KiWp=JrG#@>(I!s4#N7<z zAJ+2)Qjm`ds$~Qf&n8$kY>H->?w+cxsH2#GA};A>g8lyFDGPKh!5)vuP_{)}*83+N zJUBU!S0_i+E{*Lu1iGsNB``2iK-CyCU7?y_mv{xb_pUh>ESZqe1Y2{eAZLMSIT%EO zFrdOH1W^=3p>Qk~I{<iyAP0F4@c|SQLc9PWs6Q-KbF^V0C#CCJ^ps%BgxCVdRVtNW zB^0!r5{J6Fx;ze^4^WGMJ7E%~8Zh164F(Cjs-xRPw@lzMDn)CYBv|TcEd;}s<z-^i zttX16jH@a(hk}qZ3@@%FYnSBkA2(LCcJmW9=5pAz#vPT`V|aH1OmnxokY`A}5so=J zEs8QGS?aifO_GrkEd3MIbWMOL4iSolVT^~-I6{4)IG>J+k#s5zQ@j{%aIA!l^GQjJ zqA1Uc2%!{8qBKfMNh#9DCnKS_*uZ8?mnf!+8@f8xtz#prVg=E`3bCBLWsNmDAX~PG z<(4fQh=UOzE2?gKXRkc9XeI3Er?HlHECVd%SI}3`hy1_du3@$R$r(qT;k@Sft63UX zv;)2Ea_iH>^6+4jPK-lG<IPpyQ94#vGEy>M{Zw37T<r1BFzx;hUrXn@cb9)YK9k?s zc5~+a{$F?I@W<X;>z>~~zlHzO61x51(V4jcaKrcIVDG$-d>)z}S|7f!xxYhfUE}Kj zug_h&HZN}go22$5Ym1}P8~vYNx7-~$TWFJ;_nh!wFYSAQJF{CCo=xpK8^7?iY1^!H haOA^1<p<mdo-xN}_lDcv4t?_`K9d@d9`>D_`VC7fU=jcT literal 0 HcmV?d00001 diff --git a/src/warden-server/contrib/wardenweb/datatables/media/images/sort_asc_disabled.png b/src/warden-server/contrib/wardenweb/datatables/media/images/sort_asc_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..4e144cf0b1f786a9248a2998311e8109998d8a2d GIT binary patch literal 1050 zcmaJ=O-K|`93R^(@goeAz6hRU)S-61)?IaU({*Myml|8vh4x}JJM&z}b>>Yo&vx~s z*1>{0Sk$FMM28~iln?~vp$<WaghdHmq(cXxOVGuzH|wr;a2t5@-v9CY{r;ctMq=P> zL+z1TilQ3g{c@7*P2Q^6L;g-8^nq-LaWstw(J;=d4x}PF%0Lh|)htXxRiC)>9(Gfd zk2X?ioL0_@8ZsHx!!QNYCTxo8?kU)+mV+2%VAin0^v_psXkh4J`eIPw6kCELM*pM( z2PX$o+GI}a)ajlxpt~Rv0TW^s6wEQp6$@dys4J4Qcg@nE2*J59y%|(mNdO5s5Cj>{ zuW=y`gm{Jzw6(Xlp9TWQb1WyYyx`~C#eg7k94LJ>@#g5mVp5Kkd=V>5k6>(zESt~g znS6jjPL}06J3BoMLGTlV-<`0qTJT$LYgs{tuI3mvHjo88MKy!QahN8NZl++`Te6m0 zDibLfTTpG5XE-mVGEh<e4>ip#w2PB)JKi0I-PD8)*(7w)xTBHA4Yzu(Y*BKcijk8- zXslet#0bL39YHpb27^FRHN*1kB3@C%xaDHi(qLQ;(?o$W3|;IHBC-_Xc|nkPo{#bo zKE_Anh#c$_BEdk1ROZS^8#kea%Upe%D^%oqqhQ*^vkV>MD%4{RGC?tA(byrDwm?jZ z#$wTmdL^!2ITo%WmnFflUSt1hboq)*k9XV}TViYtKD5ZRJ7lb1H!ZJ`CviJ2M^c5A z%=*Sgk8hr8@-<i0wN!t)_50;i>S*Kr`Ol~RJX(fddmmK4eR}<Xuv!;*`0T~h@&LG3 zwc6FYR)xO}%?<5oo88~vEH&(^Y6gqfZr)i__JVzK)4AQ5++4kHWwGw@=ybYKsXczl zcQ<?T9c)P)Twj<uHr+A%z2?x8+%@{;iTaDH2Mg4Nr4wz9ABTQ;uQeVWke~Nmp7{$- C^G(eF literal 0 HcmV?d00001 diff --git a/src/warden-server/contrib/wardenweb/datatables/media/images/sort_both.png b/src/warden-server/contrib/wardenweb/datatables/media/images/sort_both.png new file mode 100644 index 0000000000000000000000000000000000000000..18670406bc01ab2721781822dd6478917745ff54 GIT binary patch literal 1136 zcmaJ>O=#0l98WD1Hz^GK+C=e@fhgE~b#2$Ux^~T`1v5)mw1NlI<aG^O^0MU3c0+I# z#fe@;J&02TMMOL(%n#JD4N=Dg5kZe*c<?fIng?~h%yoLO29o#wkKgb2|9m;0>e}zC z+ge9alrMQeN|SYi`>tC{zIG}!O_oO7k;UC8kBf>8sknx65F`zy2d1H-4fel=trX>@ z^-LCL<%6P%3`TJ=Ov$hao1$9VN|vJbLJV@SM>nJN{L>dS(6uOiBq(#Tm4F5Pz>p2Q zhq^NAP_G)%=(c^JwImV&17Zb~j6Ty5OHq1RS0sD)n5Dro1ouYi-$7;N6i6T&f*`~B zRW8JV5YO;|=5RQ?2M8R`v7Es2f}anI0YT(Au=3Evo2})=wA8uci&#;*fUzaAY_V8m ziU9`MJuDxIL|hF)@DqgJ88op{@|#XmML~j&YU>u(kqKNyC5HxZlqQk>PQkENWld+L zOr&6JNwHX-;oOueKw17j)G$`j4o<^A@%~fT$qZVMO+yC_*eYpUzR7iEi3uAj7}*(w z`YKgS6%a;F0a+l?9R#wX>ZWTi<7HV)nhsV>6(*%9O%xbi*F?TK!383rh#(|*p6}q} zd?z25;!?0(hzA2Li3(Rj>VN@FT;Xbexbdo7cN7eZc$T28pMYAYjSR4yvZz;&C0tc+ zg{xJMrKKvDCBd+6WB+P&<%mp=yImbyVyq56G|9BvWUP^I>ms=lb4e+lDSgg;Us`JO zKB6{wH+j~F#-A4FY3K3qm~Z6m@V6}oQ%8?p-E$dw`#0C$PJfmCV8)v}3>Ydha%`fZ zJk~G*M^A3LGk$Td;R`icF67R~`sBOHv)Hlqlc%$jy~9_oZJcNyWxkbb_O9u#|7hLF z-<-NMLzh3S0YA@8gd1Pt(Df|3@16Y-n=aSvsF@AkI`ioeFg>&H3bXU&vBnE6<F`Dv z=gE<e-UW~SzHwK6r)OdNuBF=g#rCP!Z@NaewRuKPC4A32?Y^7kPqBM-lijtuwQUd2 cHpPZL)Z9?>gIChkL+(Ey+0iB4Z$Eze7t_CX>Hq)$ literal 0 HcmV?d00001 diff --git a/src/warden-server/contrib/wardenweb/datatables/media/images/sort_desc.png b/src/warden-server/contrib/wardenweb/datatables/media/images/sort_desc.png new file mode 100644 index 0000000000000000000000000000000000000000..def071ed5afd264a036f6d9e75856366fd6ad153 GIT binary patch literal 1127 zcmbVMOK8+U7*1U&zKRu5sR)h{1;yRWWV^4}ShvZpU2*HWU2!iy(qy)cZ89;Lb+`3m zMbruv!GjkO!3qksP*5)lD)k}=Dp*ht-n@8G5m8XoN!zU+ih_Y;=AZe$?|)|~*Ri8v z(dtDU$2DZy)jV65`|pB!_H}d7Cv0h=sUqzpC0fy3%q0!dg+a#Bx^W(BM*oq=xP{{a zC9_bZ#q2IgCss)FbwX9kVQ7wPX{|b%-is;d!ri7V^Y8E8=YeU+{JuyQW*r6hnC$~D z?i}bS=mWia!r)uCftISo2rNuBP__DOPpZoN6tBeg{;|M=DHYl)^V3chvpJv;7lTL$ z26Y&PAc{gL+#HL=wg3?#C_qs_Vi3iouqZ(YW*(kdbB&UeSJN}Lm?ZN(lsb|iR4SEF zB^)Adw}29fgwG+0L8cM(`faLJgSNN6#-L(PcTI<y#0Ea2)<w!x=9#C{Ay`f}J4<YP zGl^m;6RMgcpb!)+%a3bH+oO5>+l@K3y+Xf(g*^61+0|J+O6zN2mb<?j@)emk(r(ve zMbY|HqL(df(~K(f>?UNGh6GU@A{1+eF%d@N2(^XdVmhis(y25|iAr;gV=io5OsYy0 zB}Gv|2&GUGrBPB%s*yG^841Ug8a88lRI_zlvuiTDGuXsmv6A9qjS{y&NMEf3ay^6+ zuZK85>5PD^rkl1e`{kLAR>iJ)6dP%mSYRr@k~xQcDE=$%X{_--ITM&Og5Ml}G)wJ> zb)dhUZG9%p4iC23#JFrUCcmwHz{cugMoku~ue-kg{Mj0~%`FeCcz9jAdg}QET-kSG za`+2B_+lRTaeAVz>E`F1pN7h>B=BbGqcz13d%ywZR&4OjkNNrF_U}#EcXDGa@V52B z>JnIW<rtP5*FLy5xa{DKx+PmNxE(mN_xRU^jduh4%fq8D=O4becw{5@k$}r5pMp!{ qL-nP=_~ypl8%E9_dA9N#SI7Pv4V%u6t+Pk{(a)qh)UmchCw>7#s%CHi literal 0 HcmV?d00001 diff --git a/src/warden-server/contrib/wardenweb/datatables/media/images/sort_desc_disabled.png b/src/warden-server/contrib/wardenweb/datatables/media/images/sort_desc_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..7824973cc60fc1841b16f2cb39323cefcdc3f942 GIT binary patch literal 1045 zcmaJ=&rj1(9IuWjVlWt@h#q(rlc~7%$2P_q>KN??ODrK{#&I!}_Kh{rzS=%m2N%F- zAW={L0VZBJnRrkSCK{q1NKA||(ZmA>6Hgw9o;Z-;>)3_|u*vIt-<Qwl^Zof&M@NQQ zTh6yo6xEs?mUCop_gC{V@^?miKa#Bzrwe!t6>(X0AeGY5Bm`Mgoq{>2>Xkbiu%Ds= zw2?31f^tL9kQr8eOxQDR!ltPHq-U$zG{j&MP8pU+Z@qp?149?-TQP-IYzdZ(;duv+ z&5z`@`Drbo)5+_g-xG*{39$-1bH;K7Po%550y+EF3=OIfJT20DK^2ryARz~WSeOlI zY%dFXxiA-r#^dp8fM+?DVR?q*LtI>l@B+(%+D8*_j$RaUa;D~sSR!4**cKS3TrP*p zkuY+m7%q`W_!>MPB8ZS%v9RieEVsL^AVXJk3>zEB0=}X;iDt1#lSubcFztq{<<`nX z3dVS<&2VAXPpJ-6l>b9bvw?PT4(`W$ps<^-*pSIV7tJ~vX<V_}cV!Eb167QiJVG<| zDvp*AMs5k&KpKkyMb!+;x2t$X5wezxRZD|eS)_?V*f4Y<8p%lMOeV_n6320AF2!ZI zl$?@dgM2C$>67YQ8ELa7v~ZoP?{i~^a{W;-ZQ@ymjxh)IjDt*2O<6Dwh=q$vY$VY; zc&J{Ds~-?cjVm3>Wk@iL-`IZ|UB4pJ;~yJiON_?gLyJtiL&kbxZhV_OiPfx}%6s1@ zcXoG^ffrPJ;LQ4(`t<(ickJ1j<?`0%!=~KH#qF+B$MwrSJ)eSK;jcw6+2&5H4=s7E zS2lM}yblfRbSgVyTU<LGJXZuAPZprq)&+t`2R>|E0&fC8lSh8sUh5lwUg=l~QoqsK t`nTanN|e2@a&yVMdhy<ayD#mgW|oR{f-jF3U;XhPYBoJ0KO3A_{tM)BOYZ;x literal 0 HcmV?d00001 diff --git a/src/warden-server/contrib/wardenweb/datatables/media/js/jquery.dataTables.js b/src/warden-server/contrib/wardenweb/datatables/media/js/jquery.dataTables.js new file mode 100644 index 0000000..35b8d1b --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/js/jquery.dataTables.js @@ -0,0 +1,11612 @@ +/** + * @summary DataTables + * @description Paginate, search and sort HTML tables + * @version 1.9.0 + * @file jquery.dataTables.js + * @author Allan Jardine (www.sprymedia.co.uk) + * @contact www.sprymedia.co.uk/contact + * + * @copyright Copyright 2008-2012 Allan Jardine, all rights reserved. + * + * This source file is free software, under either the GPL v2 license or a + * BSD style license, available at: + * http://datatables.net/license_gpl2 + * http://datatables.net/license_bsd + * + * This source file is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details. + * + * For details please refer to: http://www.datatables.net + */ + +/*jslint evil: true, undef: true, browser: true */ +/*globals $, jQuery,_fnExternApiFunc,_fnInitialise,_fnInitComplete,_fnLanguageCompat,_fnAddColumn,_fnColumnOptions,_fnAddData,_fnCreateTr,_fnGatherData,_fnBuildHead,_fnDrawHead,_fnDraw,_fnReDraw,_fnAjaxUpdate,_fnAjaxParameters,_fnAjaxUpdateDraw,_fnServerParams,_fnAddOptionsHtml,_fnFeatureHtmlTable,_fnScrollDraw,_fnAdjustColumnSizing,_fnFeatureHtmlFilter,_fnFilterComplete,_fnFilterCustom,_fnFilterColumn,_fnFilter,_fnBuildSearchArray,_fnBuildSearchRow,_fnFilterCreateSearch,_fnDataToSearch,_fnSort,_fnSortAttachListener,_fnSortingClasses,_fnFeatureHtmlPaginate,_fnPageChange,_fnFeatureHtmlInfo,_fnUpdateInfo,_fnFeatureHtmlLength,_fnFeatureHtmlProcessing,_fnProcessingDisplay,_fnVisibleToColumnIndex,_fnColumnIndexToVisible,_fnNodeToDataIndex,_fnVisbleColumns,_fnCalculateEnd,_fnConvertToWidth,_fnCalculateColumnWidths,_fnScrollingWidthAdjust,_fnGetWidestNode,_fnGetMaxLenString,_fnStringToCss,_fnDetectType,_fnSettingsFromNode,_fnGetDataMaster,_fnGetTrNodes,_fnGetTdNodes,_fnEscapeRegex,_fnDeleteIndex,_fnReOrderIndex,_fnColumnOrdering,_fnLog,_fnClearTable,_fnSaveState,_fnLoadState,_fnCreateCookie,_fnReadCookie,_fnDetectHeader,_fnGetUniqueThs,_fnScrollBarWidth,_fnApplyToChildren,_fnMap,_fnGetRowData,_fnGetCellData,_fnSetCellData,_fnGetObjectDataFn,_fnSetObjectDataFn,_fnApplyColumnDefs,_fnBindAction,_fnCallbackReg,_fnCallbackFire,_fnJsonString,_fnRender,_fnNodeToColumnIndex*/ + +(/** @lends <global> */function($, window, document, undefined) { + /** + * DataTables is a plug-in for the jQuery Javascript library. It is a + * highly flexible tool, based upon the foundations of progressive + * enhancement, which will add advanced interaction controls to any + * HTML table. For a full list of features please refer to + * <a href="http://datatables.net">DataTables.net</a>. + * + * Note that the <i>DataTable</i> object is not a global variable but is + * aliased to <i>jQuery.fn.DataTable</i> and <i>jQuery.fn.dataTable</i> through which + * it may be accessed. + * + * @class + * @param {object} [oInit={}] Configuration object for DataTables. Options + * are defined by {@link DataTable.defaults} + * @requires jQuery 1.3+ + * + * @example + * // Basic initialisation + * $(document).ready( function { + * $('#example').dataTable(); + * } ); + * + * @example + * // Initialisation with configuration options - in this case, disable + * // pagination and sorting. + * $(document).ready( function { + * $('#example').dataTable( { + * "bPaginate": false, + * "bSort": false + * } ); + * } ); + */ + var DataTable = function( oInit ) + { + + + /** + * Add a column to the list used for the table with default values + * @param {object} oSettings dataTables settings object + * @param {node} nTh The th element for this column + * @memberof DataTable#oApi + */ + function _fnAddColumn( oSettings, nTh ) + { + var oDefaults = DataTable.defaults.columns; + var iCol = oSettings.aoColumns.length; + var oCol = $.extend( {}, DataTable.models.oColumn, oDefaults, { + "sSortingClass": oSettings.oClasses.sSortable, + "sSortingClassJUI": oSettings.oClasses.sSortJUI, + "nTh": nTh ? nTh : document.createElement('th'), + "sTitle": oDefaults.sTitle ? oDefaults.sTitle : nTh ? nTh.innerHTML : '', + "aDataSort": oDefaults.aDataSort ? oDefaults.aDataSort : [iCol], + "mDataProp": oDefaults.mDataProp ? oDefaults.oDefaults : iCol + } ); + oSettings.aoColumns.push( oCol ); + + /* Add a column specific filter */ + if ( oSettings.aoPreSearchCols[ iCol ] === undefined || oSettings.aoPreSearchCols[ iCol ] === null ) + { + oSettings.aoPreSearchCols[ iCol ] = $.extend( {}, DataTable.models.oSearch ); + } + else + { + var oPre = oSettings.aoPreSearchCols[ iCol ]; + + /* Don't require that the user must specify bRegex, bSmart or bCaseInsensitive */ + if ( oPre.bRegex === undefined ) + { + oPre.bRegex = true; + } + + if ( oPre.bSmart === undefined ) + { + oPre.bSmart = true; + } + + if ( oPre.bCaseInsensitive === undefined ) + { + oPre.bCaseInsensitive = true; + } + } + + /* Use the column options function to initialise classes etc */ + _fnColumnOptions( oSettings, iCol, null ); + } + + + /** + * Apply options for a column + * @param {object} oSettings dataTables settings object + * @param {int} iCol column index to consider + * @param {object} oOptions object with sType, bVisible and bSearchable + * @memberof DataTable#oApi + */ + function _fnColumnOptions( oSettings, iCol, oOptions ) + { + var oCol = oSettings.aoColumns[ iCol ]; + + /* User specified column options */ + if ( oOptions !== undefined && oOptions !== null ) + { + if ( oOptions.sType !== undefined ) + { + oCol.sType = oOptions.sType; + oCol._bAutoType = false; + } + + $.extend( oCol, oOptions ); + _fnMap( oCol, oOptions, "sWidth", "sWidthOrig" ); + + /* iDataSort to be applied (backwards compatibility), but aDataSort will take + * priority if defined + */ + if ( oOptions.iDataSort !== undefined ) + { + oCol.aDataSort = [ oOptions.iDataSort ]; + } + _fnMap( oCol, oOptions, "aDataSort" ); + } + + /* Cache the data get and set functions for speed */ + oCol.fnGetData = _fnGetObjectDataFn( oCol.mDataProp ); + oCol.fnSetData = _fnSetObjectDataFn( oCol.mDataProp ); + + /* Feature sorting overrides column specific when off */ + if ( !oSettings.oFeatures.bSort ) + { + oCol.bSortable = false; + } + + /* Check that the class assignment is correct for sorting */ + if ( !oCol.bSortable || + ($.inArray('asc', oCol.asSorting) == -1 && $.inArray('desc', oCol.asSorting) == -1) ) + { + oCol.sSortingClass = oSettings.oClasses.sSortableNone; + oCol.sSortingClassJUI = ""; + } + else if ( oCol.bSortable || + ($.inArray('asc', oCol.asSorting) == -1 && $.inArray('desc', oCol.asSorting) == -1) ) + { + oCol.sSortingClass = oSettings.oClasses.sSortable; + oCol.sSortingClassJUI = oSettings.oClasses.sSortJUI; + } + else if ( $.inArray('asc', oCol.asSorting) != -1 && $.inArray('desc', oCol.asSorting) == -1 ) + { + oCol.sSortingClass = oSettings.oClasses.sSortableAsc; + oCol.sSortingClassJUI = oSettings.oClasses.sSortJUIAscAllowed; + } + else if ( $.inArray('asc', oCol.asSorting) == -1 && $.inArray('desc', oCol.asSorting) != -1 ) + { + oCol.sSortingClass = oSettings.oClasses.sSortableDesc; + oCol.sSortingClassJUI = oSettings.oClasses.sSortJUIDescAllowed; + } + } + + + /** + * Adjust the table column widths for new data. Note: you would probably want to + * do a redraw after calling this function! + * @param {object} oSettings dataTables settings object + * @memberof DataTable#oApi + */ + function _fnAdjustColumnSizing ( oSettings ) + { + /* Not interested in doing column width calculation if autowidth is disabled */ + if ( oSettings.oFeatures.bAutoWidth === false ) + { + return false; + } + + _fnCalculateColumnWidths( oSettings ); + for ( var i=0 , iLen=oSettings.aoColumns.length ; i<iLen ; i++ ) + { + oSettings.aoColumns[i].nTh.style.width = oSettings.aoColumns[i].sWidth; + } + } + + + /** + * Covert the index of a visible column to the index in the data array (take account + * of hidden columns) + * @param {object} oSettings dataTables settings object + * @param {int} iMatch Visible column index to lookup + * @returns {int} i the data index + * @memberof DataTable#oApi + */ + function _fnVisibleToColumnIndex( oSettings, iMatch ) + { + var iColumn = -1; + + for ( var i=0 ; i<oSettings.aoColumns.length ; i++ ) + { + if ( oSettings.aoColumns[i].bVisible === true ) + { + iColumn++; + } + + if ( iColumn == iMatch ) + { + return i; + } + } + + return null; + } + + + /** + * Covert the index of an index in the data array and convert it to the visible + * column index (take account of hidden columns) + * @param {int} iMatch Column index to lookup + * @param {object} oSettings dataTables settings object + * @returns {int} i the data index + * @memberof DataTable#oApi + */ + function _fnColumnIndexToVisible( oSettings, iMatch ) + { + var iVisible = -1; + for ( var i=0 ; i<oSettings.aoColumns.length ; i++ ) + { + if ( oSettings.aoColumns[i].bVisible === true ) + { + iVisible++; + } + + if ( i == iMatch ) + { + return oSettings.aoColumns[i].bVisible === true ? iVisible : null; + } + } + + return null; + } + + + /** + * Get the number of visible columns + * @returns {int} i the number of visible columns + * @param {object} oS dataTables settings object + * @memberof DataTable#oApi + */ + function _fnVisbleColumns( oS ) + { + var iVis = 0; + for ( var i=0 ; i<oS.aoColumns.length ; i++ ) + { + if ( oS.aoColumns[i].bVisible === true ) + { + iVis++; + } + } + return iVis; + } + + + /** + * Get the sort type based on an input string + * @param {string} sData data we wish to know the type of + * @returns {string} type (defaults to 'string' if no type can be detected) + * @memberof DataTable#oApi + */ + function _fnDetectType( sData ) + { + var aTypes = DataTable.ext.aTypes; + var iLen = aTypes.length; + + for ( var i=0 ; i<iLen ; i++ ) + { + var sType = aTypes[i]( sData ); + if ( sType !== null ) + { + return sType; + } + } + + return 'string'; + } + + + /** + * Figure out how to reorder a display list + * @param {object} oSettings dataTables settings object + * @returns array {int} aiReturn index list for reordering + * @memberof DataTable#oApi + */ + function _fnReOrderIndex ( oSettings, sColumns ) + { + var aColumns = sColumns.split(','); + var aiReturn = []; + + for ( var i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ ) + { + for ( var j=0 ; j<iLen ; j++ ) + { + if ( oSettings.aoColumns[i].sName == aColumns[j] ) + { + aiReturn.push( j ); + break; + } + } + } + + return aiReturn; + } + + + /** + * Get the column ordering that DataTables expects + * @param {object} oSettings dataTables settings object + * @returns {string} comma separated list of names + * @memberof DataTable#oApi + */ + function _fnColumnOrdering ( oSettings ) + { + var sNames = ''; + for ( var i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ ) + { + sNames += oSettings.aoColumns[i].sName+','; + } + if ( sNames.length == iLen ) + { + return ""; + } + return sNames.slice(0, -1); + } + + + /** + * Take the column definitions and static columns arrays and calculate how + * they relate to column indexes. The callback function will then apply the + * definition found for a column to a suitable configuration object. + * @param {object} oSettings dataTables settings object + * @param {array} aoColDefs The aoColumnDefs array that is to be applied + * @param {array} aoCols The aoColumns array that defines columns individually + * @param {function} fn Callback function - takes two parameters, the calculated + * column index and the definition for that column. + * @memberof DataTable#oApi + */ + function _fnApplyColumnDefs( oSettings, aoColDefs, aoCols, fn ) + { + var i, iLen, j, jLen, k, kLen; + + // Column definitions with aTargets + if ( aoColDefs ) + { + /* Loop over the definitions array - loop in reverse so first instance has priority */ + for ( i=aoColDefs.length-1 ; i>=0 ; i-- ) + { + /* Each definition can target multiple columns, as it is an array */ + var aTargets = aoColDefs[i].aTargets; + if ( !$.isArray( aTargets ) ) + { + _fnLog( oSettings, 1, 'aTargets must be an array of targets, not a '+(typeof aTargets) ); + } + + for ( j=0, jLen=aTargets.length ; j<jLen ; j++ ) + { + if ( typeof aTargets[j] === 'number' && aTargets[j] >= 0 ) + { + /* Add columns that we don't yet know about */ + while( oSettings.aoColumns.length <= aTargets[j] ) + { + _fnAddColumn( oSettings ); + } + + /* Integer, basic index */ + fn( aTargets[j], aoColDefs[i] ); + } + else if ( typeof aTargets[j] === 'number' && aTargets[j] < 0 ) + { + /* Negative integer, right to left column counting */ + fn( oSettings.aoColumns.length+aTargets[j], aoColDefs[i] ); + } + else if ( typeof aTargets[j] === 'string' ) + { + /* Class name matching on TH element */ + for ( k=0, kLen=oSettings.aoColumns.length ; k<kLen ; k++ ) + { + if ( aTargets[j] == "_all" || + $(oSettings.aoColumns[k].nTh).hasClass( aTargets[j] ) ) + { + fn( k, aoColDefs[i] ); + } + } + } + } + } + } + + // Statically defined columns array + if ( aoCols ) + { + for ( i=0, iLen=aoCols.length ; i<iLen ; i++ ) + { + fn( i, aoCols[i] ); + } + } + } + + + + /** + * Add a data array to the table, creating DOM node etc. This is the parallel to + * _fnGatherData, but for adding rows from a Javascript source, rather than a + * DOM source. + * @param {object} oSettings dataTables settings object + * @param {array} aData data array to be added + * @returns {int} >=0 if successful (index of new aoData entry), -1 if failed + * @memberof DataTable#oApi + */ + function _fnAddData ( oSettings, aDataSupplied ) + { + var oCol; + + /* Take an independent copy of the data source so we can bash it about as we wish */ + var aDataIn = ($.isArray(aDataSupplied)) ? + aDataSupplied.slice() : + $.extend( true, {}, aDataSupplied ); + + /* Create the object for storing information about this new row */ + var iRow = oSettings.aoData.length; + var oData = $.extend( true, {}, DataTable.models.oRow, { + "_aData": aDataIn + } ); + oSettings.aoData.push( oData ); + + /* Create the cells */ + var nTd, sThisType; + for ( var i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ ) + { + oCol = oSettings.aoColumns[i]; + + /* Use rendered data for filtering/sorting */ + if ( typeof oCol.fnRender === 'function' && oCol.bUseRendered && oCol.mDataProp !== null ) + { + _fnSetCellData( oSettings, iRow, i, _fnRender(oSettings, iRow, i) ); + } + + /* See if we should auto-detect the column type */ + if ( oCol._bAutoType && oCol.sType != 'string' ) + { + /* Attempt to auto detect the type - same as _fnGatherData() */ + var sVarType = _fnGetCellData( oSettings, iRow, i, 'type' ); + if ( sVarType !== null && sVarType !== '' ) + { + sThisType = _fnDetectType( sVarType ); + if ( oCol.sType === null ) + { + oCol.sType = sThisType; + } + else if ( oCol.sType != sThisType && oCol.sType != "html" ) + { + /* String is always the 'fallback' option */ + oCol.sType = 'string'; + } + } + } + } + + /* Add to the display array */ + oSettings.aiDisplayMaster.push( iRow ); + + /* Create the DOM imformation */ + if ( !oSettings.oFeatures.bDeferRender ) + { + _fnCreateTr( oSettings, iRow ); + } + + return iRow; + } + + + /** + * Read in the data from the target table from the DOM + * @param {object} oSettings dataTables settings object + * @memberof DataTable#oApi + */ + function _fnGatherData( oSettings ) + { + var iLoop, i, iLen, j, jLen, jInner, + nTds, nTrs, nTd, aLocalData, iThisIndex, + iRow, iRows, iColumn, iColumns, sNodeName, + oCol, oData; + + /* + * Process by row first + * Add the data object for the whole table - storing the tr node. Note - no point in getting + * DOM based data if we are going to go and replace it with Ajax source data. + */ + if ( oSettings.bDeferLoading || oSettings.sAjaxSource === null ) + { + nTrs = oSettings.nTBody.childNodes; + for ( i=0, iLen=nTrs.length ; i<iLen ; i++ ) + { + if ( nTrs[i].nodeName.toUpperCase() == "TR" ) + { + iThisIndex = oSettings.aoData.length; + nTrs[i]._DT_RowIndex = iThisIndex; + oSettings.aoData.push( $.extend( true, {}, DataTable.models.oRow, { + "nTr": nTrs[i] + } ) ); + + oSettings.aiDisplayMaster.push( iThisIndex ); + nTds = nTrs[i].childNodes; + jInner = 0; + + for ( j=0, jLen=nTds.length ; j<jLen ; j++ ) + { + sNodeName = nTds[j].nodeName.toUpperCase(); + if ( sNodeName == "TD" || sNodeName == "TH" ) + { + _fnSetCellData( oSettings, iThisIndex, jInner, $.trim(nTds[j].innerHTML) ); + jInner++; + } + } + } + } + } + + /* Gather in the TD elements of the Table - note that this is basically the same as + * fnGetTdNodes, but that function takes account of hidden columns, which we haven't yet + * setup! + */ + nTrs = _fnGetTrNodes( oSettings ); + nTds = []; + for ( i=0, iLen=nTrs.length ; i<iLen ; i++ ) + { + for ( j=0, jLen=nTrs[i].childNodes.length ; j<jLen ; j++ ) + { + nTd = nTrs[i].childNodes[j]; + sNodeName = nTd.nodeName.toUpperCase(); + if ( sNodeName == "TD" || sNodeName == "TH" ) + { + nTds.push( nTd ); + } + } + } + + /* Now process by column */ + for ( iColumn=0, iColumns=oSettings.aoColumns.length ; iColumn<iColumns ; iColumn++ ) + { + oCol = oSettings.aoColumns[iColumn]; + + /* Get the title of the column - unless there is a user set one */ + if ( oCol.sTitle === null ) + { + oCol.sTitle = oCol.nTh.innerHTML; + } + + var + bAutoType = oCol._bAutoType, + bRender = typeof oCol.fnRender === 'function', + bClass = oCol.sClass !== null, + bVisible = oCol.bVisible, + nCell, sThisType, sRendered, sValType; + + /* A single loop to rule them all (and be more efficient) */ + if ( bAutoType || bRender || bClass || !bVisible ) + { + for ( iRow=0, iRows=oSettings.aoData.length ; iRow<iRows ; iRow++ ) + { + oData = oSettings.aoData[iRow]; + nCell = nTds[ (iRow*iColumns) + iColumn ]; + + /* Type detection */ + if ( bAutoType && oCol.sType != 'string' ) + { + sValType = _fnGetCellData( oSettings, iRow, iColumn, 'type' ); + if ( sValType !== '' ) + { + sThisType = _fnDetectType( sValType ); + if ( oCol.sType === null ) + { + oCol.sType = sThisType; + } + else if ( oCol.sType != sThisType && + oCol.sType != "html" ) + { + /* String is always the 'fallback' option */ + oCol.sType = 'string'; + } + } + } + + if ( typeof oCol.mDataProp === 'function' ) + { + nCell.innerHTML = _fnGetCellData( oSettings, iRow, iColumn, 'display' ); + } + + /* Rendering */ + if ( bRender ) + { + sRendered = _fnRender( oSettings, iRow, iColumn ); + nCell.innerHTML = sRendered; + if ( oCol.bUseRendered ) + { + /* Use the rendered data for filtering/sorting */ + _fnSetCellData( oSettings, iRow, iColumn, sRendered ); + } + } + + /* Classes */ + if ( bClass ) + { + nCell.className += ' '+oCol.sClass; + } + + /* Column visability */ + if ( !bVisible ) + { + oData._anHidden[iColumn] = nCell; + nCell.parentNode.removeChild( nCell ); + } + else + { + oData._anHidden[iColumn] = null; + } + + if ( oCol.fnCreatedCell ) + { + oCol.fnCreatedCell.call( oSettings.oInstance, + nCell, _fnGetCellData( oSettings, iRow, iColumn, 'display' ), oData._aData, iRow, iColumn + ); + } + } + } + } + + /* Row created callbacks */ + if ( oSettings.aoRowCreatedCallback.length !== 0 ) + { + for ( i=0, iLen=oSettings.aoData.length ; i<iLen ; i++ ) + { + oData = oSettings.aoData[i]; + _fnCallbackFire( oSettings, 'aoRowCreatedCallback', null, [oData.nTr, oData._aData, i] ); + } + } + } + + + /** + * Take a TR element and convert it to an index in aoData + * @param {object} oSettings dataTables settings object + * @param {node} n the TR element to find + * @returns {int} index if the node is found, null if not + * @memberof DataTable#oApi + */ + function _fnNodeToDataIndex( oSettings, n ) + { + return (n._DT_RowIndex!==undefined) ? n._DT_RowIndex : null; + } + + + /** + * Take a TD element and convert it into a column data index (not the visible index) + * @param {object} oSettings dataTables settings object + * @param {int} iRow The row number the TD/TH can be found in + * @param {node} n The TD/TH element to find + * @returns {int} index if the node is found, -1 if not + * @memberof DataTable#oApi + */ + function _fnNodeToColumnIndex( oSettings, iRow, n ) + { + var anCells = _fnGetTdNodes( oSettings, iRow ); + + for ( var i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ ) + { + if ( anCells[i] === n ) + { + return i; + } + } + return -1; + } + + + /** + * Get an array of data for a given row from the internal data cache + * @param {object} oSettings dataTables settings object + * @param {int} iRow aoData row id + * @param {string} sSpecific data get type ('type' 'filter' 'sort') + * @returns {array} Data array + * @memberof DataTable#oApi + */ + function _fnGetRowData( oSettings, iRow, sSpecific ) + { + var out = []; + for ( var i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ ) + { + out.push( _fnGetCellData( oSettings, iRow, i, sSpecific ) ); + } + return out; + } + + + /** + * Get the data for a given cell from the internal cache, taking into account data mapping + * @param {object} oSettings dataTables settings object + * @param {int} iRow aoData row id + * @param {int} iCol Column index + * @param {string} sSpecific data get type ('display', 'type' 'filter' 'sort') + * @returns {*} Cell data + * @memberof DataTable#oApi + */ + function _fnGetCellData( oSettings, iRow, iCol, sSpecific ) + { + var sData; + var oCol = oSettings.aoColumns[iCol]; + var oData = oSettings.aoData[iRow]._aData; + + if ( (sData=oCol.fnGetData( oData, sSpecific )) === undefined ) + { + if ( oSettings.iDrawError != oSettings.iDraw && oCol.sDefaultContent === null ) + { + _fnLog( oSettings, 0, "Requested unknown parameter '"+oCol.mDataProp+ + "' from the data source for row "+iRow ); + oSettings.iDrawError = oSettings.iDraw; + } + return oCol.sDefaultContent; + } + + /* When the data source is null, we can use default column data */ + if ( sData === null && oCol.sDefaultContent !== null ) + { + sData = oCol.sDefaultContent; + } + else if ( typeof sData === 'function' ) + { + /* If the data source is a function, then we run it and use the return */ + return sData(); + } + + if ( sSpecific == 'display' && sData === null ) + { + return ''; + } + return sData; + } + + + /** + * Set the value for a specific cell, into the internal data cache + * @param {object} oSettings dataTables settings object + * @param {int} iRow aoData row id + * @param {int} iCol Column index + * @param {*} val Value to set + * @memberof DataTable#oApi + */ + function _fnSetCellData( oSettings, iRow, iCol, val ) + { + var oCol = oSettings.aoColumns[iCol]; + var oData = oSettings.aoData[iRow]._aData; + + oCol.fnSetData( oData, val ); + } + + + /** + * Return a function that can be used to get data from a source object, taking + * into account the ability to use nested objects as a source + * @param {string|int|function} mSource The data source for the object + * @returns {function} Data get function + * @memberof DataTable#oApi + */ + function _fnGetObjectDataFn( mSource ) + { + if ( mSource === null ) + { + /* Give an empty string for rendering / sorting etc */ + return function (data, type) { + return null; + }; + } + else if ( typeof mSource === 'function' ) + { + return function (data, type) { + return mSource( data, type ); + }; + } + else if ( typeof mSource === 'string' && mSource.indexOf('.') != -1 ) + { + /* If there is a . in the source string then the data source is in a + * nested object so we loop over the data for each level to get the next + * level down. On each loop we test for undefined, and if found immediatly + * return. This allows entire objects to be missing and sDefaultContent to + * be used if defined, rather than throwing an error + */ + var a = mSource.split('.'); + return function (data, type) { + for ( var i=0, iLen=a.length ; i<iLen ; i++ ) + { + data = data[ a[i] ]; + if ( data === undefined ) + { + return undefined; + } + } + return data; + }; + } + else + { + /* Array or flat object mapping */ + return function (data, type) { + return data[mSource]; + }; + } + } + + + /** + * Return a function that can be used to set data from a source object, taking + * into account the ability to use nested objects as a source + * @param {string|int|function} mSource The data source for the object + * @returns {function} Data set function + * @memberof DataTable#oApi + */ + function _fnSetObjectDataFn( mSource ) + { + if ( mSource === null ) + { + /* Nothing to do when the data source is null */ + return function (data, val) {}; + } + else if ( typeof mSource === 'function' ) + { + return function (data, val) { + mSource( data, 'set', val ); + }; + } + else if ( typeof mSource === 'string' && mSource.indexOf('.') != -1 ) + { + /* Like the get, we need to get data from a nested object. */ + var a = mSource.split('.'); + return function (data, val) { + for ( var i=0, iLen=a.length-1 ; i<iLen ; i++ ) + { + data = data[ a[i] ]; + } + data[ a[a.length-1] ] = val; + }; + } + else + { + /* Array or flat object mapping */ + return function (data, val) { + data[mSource] = val; + }; + } + } + + + /** + * Return an array with the full table data + * @param {object} oSettings dataTables settings object + * @returns array {array} aData Master data array + * @memberof DataTable#oApi + */ + function _fnGetDataMaster ( oSettings ) + { + var aData = []; + var iLen = oSettings.aoData.length; + for ( var i=0 ; i<iLen; i++ ) + { + aData.push( oSettings.aoData[i]._aData ); + } + return aData; + } + + + /** + * Nuke the table + * @param {object} oSettings dataTables settings object + * @memberof DataTable#oApi + */ + function _fnClearTable( oSettings ) + { + oSettings.aoData.splice( 0, oSettings.aoData.length ); + oSettings.aiDisplayMaster.splice( 0, oSettings.aiDisplayMaster.length ); + oSettings.aiDisplay.splice( 0, oSettings.aiDisplay.length ); + _fnCalculateEnd( oSettings ); + } + + + /** + * Take an array of integers (index array) and remove a target integer (value - not + * the key!) + * @param {array} a Index array to target + * @param {int} iTarget value to find + * @memberof DataTable#oApi + */ + function _fnDeleteIndex( a, iTarget ) + { + var iTargetIndex = -1; + + for ( var i=0, iLen=a.length ; i<iLen ; i++ ) + { + if ( a[i] == iTarget ) + { + iTargetIndex = i; + } + else if ( a[i] > iTarget ) + { + a[i]--; + } + } + + if ( iTargetIndex != -1 ) + { + a.splice( iTargetIndex, 1 ); + } + } + + + /** + * Call the developer defined fnRender function for a given cell (row/column) with + * the required parameters and return the result. + * @param {object} oSettings dataTables settings object + * @param {int} iRow aoData index for the row + * @param {int} iCol aoColumns index for the column + * @returns {*} Return of the developer's fnRender function + * @memberof DataTable#oApi + */ + function _fnRender( oSettings, iRow, iCol ) + { + var oCol = oSettings.aoColumns[iCol]; + + return oCol.fnRender( { + "iDataRow": iRow, + "iDataColumn": iCol, + "oSettings": oSettings, + "aData": oSettings.aoData[iRow]._aData, + "mDataProp": oCol.mDataProp + }, _fnGetCellData(oSettings, iRow, iCol, 'display') ); + } + + + /** + * Create a new TR element (and it's TD children) for a row + * @param {object} oSettings dataTables settings object + * @param {int} iRow Row to consider + * @memberof DataTable#oApi + */ + function _fnCreateTr ( oSettings, iRow ) + { + var oData = oSettings.aoData[iRow]; + var nTd; + + if ( oData.nTr === null ) + { + oData.nTr = document.createElement('tr'); + + /* Use a private property on the node to allow reserve mapping from the node + * to the aoData array for fast look up + */ + oData.nTr._DT_RowIndex = iRow; + + /* Special parameters can be given by the data source to be used on the row */ + if ( oData._aData.DT_RowId ) + { + oData.nTr.id = oData._aData.DT_RowId; + } + + if ( oData._aData.DT_RowClass ) + { + $(oData.nTr).addClass( oData._aData.DT_RowClass ); + } + + /* Process each column */ + for ( var i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ ) + { + var oCol = oSettings.aoColumns[i]; + nTd = document.createElement('td'); + + /* Render if needed - if bUseRendered is true then we already have the rendered + * value in the data source - so can just use that + */ + nTd.innerHTML = (typeof oCol.fnRender === 'function' && (!oCol.bUseRendered || oCol.mDataProp === null)) ? + _fnRender( oSettings, iRow, i ) : + _fnGetCellData( oSettings, iRow, i, 'display' ); + + /* Add user defined class */ + if ( oCol.sClass !== null ) + { + nTd.className = oCol.sClass; + } + + if ( oCol.bVisible ) + { + oData.nTr.appendChild( nTd ); + oData._anHidden[i] = null; + } + else + { + oData._anHidden[i] = nTd; + } + + if ( oCol.fnCreatedCell ) + { + oCol.fnCreatedCell.call( oSettings.oInstance, + nTd, _fnGetCellData( oSettings, iRow, i, 'display' ), oData._aData, iRow, i + ); + } + } + + _fnCallbackFire( oSettings, 'aoRowCreatedCallback', null, [oData.nTr, oData._aData, iRow] ); + } + } + + + /** + * Create the HTML header for the table + * @param {object} oSettings dataTables settings object + * @memberof DataTable#oApi + */ + function _fnBuildHead( oSettings ) + { + var i, nTh, iLen, j, jLen; + var iThs = oSettings.nTHead.getElementsByTagName('th').length; + var iCorrector = 0; + var jqChildren; + + /* If there is a header in place - then use it - otherwise it's going to get nuked... */ + if ( iThs !== 0 ) + { + /* We've got a thead from the DOM, so remove hidden columns and apply width to vis cols */ + for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ ) + { + nTh = oSettings.aoColumns[i].nTh; + nTh.setAttribute('role', 'columnheader'); + if ( oSettings.aoColumns[i].bSortable ) + { + nTh.setAttribute('tabindex', oSettings.iTabIndex); + nTh.setAttribute('aria-controls', oSettings.sTableId); + } + + if ( oSettings.aoColumns[i].sClass !== null ) + { + $(nTh).addClass( oSettings.aoColumns[i].sClass ); + } + + /* Set the title of the column if it is user defined (not what was auto detected) */ + if ( oSettings.aoColumns[i].sTitle != nTh.innerHTML ) + { + nTh.innerHTML = oSettings.aoColumns[i].sTitle; + } + } + } + else + { + /* We don't have a header in the DOM - so we are going to have to create one */ + var nTr = document.createElement( "tr" ); + + for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ ) + { + nTh = oSettings.aoColumns[i].nTh; + nTh.innerHTML = oSettings.aoColumns[i].sTitle; + nTh.setAttribute('tabindex', '0'); + + if ( oSettings.aoColumns[i].sClass !== null ) + { + $(nTh).addClass( oSettings.aoColumns[i].sClass ); + } + + nTr.appendChild( nTh ); + } + $(oSettings.nTHead).html( '' )[0].appendChild( nTr ); + _fnDetectHeader( oSettings.aoHeader, oSettings.nTHead ); + } + + /* ARIA role for the rows */ + $(oSettings.nTHead).children('tr').attr('role', 'row'); + + /* Add the extra markup needed by jQuery UI's themes */ + if ( oSettings.bJUI ) + { + for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ ) + { + nTh = oSettings.aoColumns[i].nTh; + + var nDiv = document.createElement('div'); + nDiv.className = oSettings.oClasses.sSortJUIWrapper; + $(nTh).contents().appendTo(nDiv); + + var nSpan = document.createElement('span'); + nSpan.className = oSettings.oClasses.sSortIcon; + nDiv.appendChild( nSpan ); + nTh.appendChild( nDiv ); + } + } + + if ( oSettings.oFeatures.bSort ) + { + for ( i=0 ; i<oSettings.aoColumns.length ; i++ ) + { + if ( oSettings.aoColumns[i].bSortable !== false ) + { + _fnSortAttachListener( oSettings, oSettings.aoColumns[i].nTh, i ); + } + else + { + $(oSettings.aoColumns[i].nTh).addClass( oSettings.oClasses.sSortableNone ); + } + } + } + + /* Deal with the footer - add classes if required */ + if ( oSettings.oClasses.sFooterTH !== "" ) + { + $(oSettings.nTFoot).children('tr').children('th').addClass( oSettings.oClasses.sFooterTH ); + } + + /* Cache the footer elements */ + if ( oSettings.nTFoot !== null ) + { + var anCells = _fnGetUniqueThs( oSettings, null, oSettings.aoFooter ); + for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ ) + { + if ( anCells[i] ) + { + oSettings.aoColumns[i].nTf = anCells[i]; + if ( oSettings.aoColumns[i].sClass ) + { + $(anCells[i]).addClass( oSettings.aoColumns[i].sClass ); + } + } + } + } + } + + + /** + * Draw the header (or footer) element based on the column visibility states. The + * methodology here is to use the layout array from _fnDetectHeader, modified for + * the instantaneous column visibility, to construct the new layout. The grid is + * traversed over cell at a time in a rows x columns grid fashion, although each + * cell insert can cover multiple elements in the grid - which is tracks using the + * aApplied array. Cell inserts in the grid will only occur where there isn't + * already a cell in that position. + * @param {object} oSettings dataTables settings object + * @param array {objects} aoSource Layout array from _fnDetectHeader + * @param {boolean} [bIncludeHidden=false] If true then include the hidden columns in the calc, + * @memberof DataTable#oApi + */ + function _fnDrawHead( oSettings, aoSource, bIncludeHidden ) + { + var i, iLen, j, jLen, k, kLen, n, nLocalTr; + var aoLocal = []; + var aApplied = []; + var iColumns = oSettings.aoColumns.length; + var iRowspan, iColspan; + + if ( bIncludeHidden === undefined ) + { + bIncludeHidden = false; + } + + /* Make a copy of the master layout array, but without the visible columns in it */ + for ( i=0, iLen=aoSource.length ; i<iLen ; i++ ) + { + aoLocal[i] = aoSource[i].slice(); + aoLocal[i].nTr = aoSource[i].nTr; + + /* Remove any columns which are currently hidden */ + for ( j=iColumns-1 ; j>=0 ; j-- ) + { + if ( !oSettings.aoColumns[j].bVisible && !bIncludeHidden ) + { + aoLocal[i].splice( j, 1 ); + } + } + + /* Prep the applied array - it needs an element for each row */ + aApplied.push( [] ); + } + + for ( i=0, iLen=aoLocal.length ; i<iLen ; i++ ) + { + nLocalTr = aoLocal[i].nTr; + + /* All cells are going to be replaced, so empty out the row */ + if ( nLocalTr ) + { + while( (n = nLocalTr.firstChild) ) + { + nLocalTr.removeChild( n ); + } + } + + for ( j=0, jLen=aoLocal[i].length ; j<jLen ; j++ ) + { + iRowspan = 1; + iColspan = 1; + + /* Check to see if there is already a cell (row/colspan) covering our target + * insert point. If there is, then there is nothing to do. + */ + if ( aApplied[i][j] === undefined ) + { + nLocalTr.appendChild( aoLocal[i][j].cell ); + aApplied[i][j] = 1; + + /* Expand the cell to cover as many rows as needed */ + while ( aoLocal[i+iRowspan] !== undefined && + aoLocal[i][j].cell == aoLocal[i+iRowspan][j].cell ) + { + aApplied[i+iRowspan][j] = 1; + iRowspan++; + } + + /* Expand the cell to cover as many columns as needed */ + while ( aoLocal[i][j+iColspan] !== undefined && + aoLocal[i][j].cell == aoLocal[i][j+iColspan].cell ) + { + /* Must update the applied array over the rows for the columns */ + for ( k=0 ; k<iRowspan ; k++ ) + { + aApplied[i+k][j+iColspan] = 1; + } + iColspan++; + } + + /* Do the actual expansion in the DOM */ + aoLocal[i][j].cell.rowSpan = iRowspan; + aoLocal[i][j].cell.colSpan = iColspan; + } + } + } + } + + + /** + * Insert the required TR nodes into the table for display + * @param {object} oSettings dataTables settings object + * @memberof DataTable#oApi + */ + function _fnDraw( oSettings ) + { + var i, iLen, n; + var anRows = []; + var iRowCount = 0; + var iStripes = oSettings.asStripeClasses.length; + var iOpenRows = oSettings.aoOpenRows.length; + + /* Provide a pre-callback function which can be used to cancel the draw is false is returned */ + var aPreDraw = _fnCallbackFire( oSettings, 'aoPreDrawCallback', 'preDraw', [oSettings] ); + if ( $.inArray( false, aPreDraw ) !== -1 ) + { + return; + } + + oSettings.bDrawing = true; + + /* Check and see if we have an initial draw position from state saving */ + if ( oSettings.iInitDisplayStart !== undefined && oSettings.iInitDisplayStart != -1 ) + { + if ( oSettings.oFeatures.bServerSide ) + { + oSettings._iDisplayStart = oSettings.iInitDisplayStart; + } + else + { + oSettings._iDisplayStart = (oSettings.iInitDisplayStart >= oSettings.fnRecordsDisplay()) ? + 0 : oSettings.iInitDisplayStart; + } + oSettings.iInitDisplayStart = -1; + _fnCalculateEnd( oSettings ); + } + + /* Server-side processing draw intercept */ + if ( oSettings.bDeferLoading ) + { + oSettings.bDeferLoading = false; + oSettings.iDraw++; + } + else if ( !oSettings.oFeatures.bServerSide ) + { + oSettings.iDraw++; + } + else if ( !oSettings.bDestroying && !_fnAjaxUpdate( oSettings ) ) + { + return; + } + + if ( oSettings.aiDisplay.length !== 0 ) + { + var iStart = oSettings._iDisplayStart; + var iEnd = oSettings._iDisplayEnd; + + if ( oSettings.oFeatures.bServerSide ) + { + iStart = 0; + iEnd = oSettings.aoData.length; + } + + for ( var j=iStart ; j<iEnd ; j++ ) + { + var aoData = oSettings.aoData[ oSettings.aiDisplay[j] ]; + if ( aoData.nTr === null ) + { + _fnCreateTr( oSettings, oSettings.aiDisplay[j] ); + } + + var nRow = aoData.nTr; + + /* Remove the old striping classes and then add the new one */ + if ( iStripes !== 0 ) + { + var sStripe = oSettings.asStripeClasses[ iRowCount % iStripes ]; + if ( aoData._sRowStripe != sStripe ) + { + $(nRow).removeClass( aoData._sRowStripe ).addClass( sStripe ); + aoData._sRowStripe = sStripe; + } + } + + /* Row callback functions - might want to manipule the row */ + _fnCallbackFire( oSettings, 'aoRowCallback', null, + [nRow, oSettings.aoData[ oSettings.aiDisplay[j] ]._aData, iRowCount, j] ); + + anRows.push( nRow ); + iRowCount++; + + /* If there is an open row - and it is attached to this parent - attach it on redraw */ + if ( iOpenRows !== 0 ) + { + for ( var k=0 ; k<iOpenRows ; k++ ) + { + if ( nRow == oSettings.aoOpenRows[k].nParent ) + { + anRows.push( oSettings.aoOpenRows[k].nTr ); + break; + } + } + } + } + } + else + { + /* Table is empty - create a row with an empty message in it */ + anRows[ 0 ] = document.createElement( 'tr' ); + + if ( oSettings.asStripeClasses[0] ) + { + anRows[ 0 ].className = oSettings.asStripeClasses[0]; + } + + var sZero = oSettings.oLanguage.sZeroRecords.replace( + '_MAX_', oSettings.fnFormatNumber(oSettings.fnRecordsTotal()) ); + if ( oSettings.iDraw == 1 && oSettings.sAjaxSource !== null && !oSettings.oFeatures.bServerSide ) + { + sZero = oSettings.oLanguage.sLoadingRecords; + } + else if ( oSettings.oLanguage.sEmptyTable && oSettings.fnRecordsTotal() === 0 ) + { + sZero = oSettings.oLanguage.sEmptyTable; + } + + var nTd = document.createElement( 'td' ); + nTd.setAttribute( 'valign', "top" ); + nTd.colSpan = _fnVisbleColumns( oSettings ); + nTd.className = oSettings.oClasses.sRowEmpty; + nTd.innerHTML = sZero; + + anRows[ iRowCount ].appendChild( nTd ); + } + + /* Header and footer callbacks */ + _fnCallbackFire( oSettings, 'aoHeaderCallback', 'header', [ $(oSettings.nTHead).children('tr')[0], + _fnGetDataMaster( oSettings ), oSettings._iDisplayStart, oSettings.fnDisplayEnd(), oSettings.aiDisplay ] ); + + _fnCallbackFire( oSettings, 'aoFooterCallback', 'footer', [ $(oSettings.nTFoot).children('tr')[0], + _fnGetDataMaster( oSettings ), oSettings._iDisplayStart, oSettings.fnDisplayEnd(), oSettings.aiDisplay ] ); + + /* + * Need to remove any old row from the display - note we can't just empty the tbody using + * $().html('') since this will unbind the jQuery event handlers (even although the node + * still exists!) - equally we can't use innerHTML, since IE throws an exception. + */ + var + nAddFrag = document.createDocumentFragment(), + nRemoveFrag = document.createDocumentFragment(), + nBodyPar, nTrs; + + if ( oSettings.nTBody ) + { + nBodyPar = oSettings.nTBody.parentNode; + nRemoveFrag.appendChild( oSettings.nTBody ); + + /* When doing infinite scrolling, only remove child rows when sorting, filtering or start + * up. When not infinite scroll, always do it. + */ + if ( !oSettings.oScroll.bInfinite || !oSettings._bInitComplete || + oSettings.bSorted || oSettings.bFiltered ) + { + while( (n = oSettings.nTBody.firstChild) ) + { + oSettings.nTBody.removeChild( n ); + } + } + + /* Put the draw table into the dom */ + for ( i=0, iLen=anRows.length ; i<iLen ; i++ ) + { + nAddFrag.appendChild( anRows[i] ); + } + + oSettings.nTBody.appendChild( nAddFrag ); + if ( nBodyPar !== null ) + { + nBodyPar.appendChild( oSettings.nTBody ); + } + } + + /* Call all required callback functions for the end of a draw */ + _fnCallbackFire( oSettings, 'aoDrawCallback', 'draw', [oSettings] ); + + /* Draw is complete, sorting and filtering must be as well */ + oSettings.bSorted = false; + oSettings.bFiltered = false; + oSettings.bDrawing = false; + + if ( oSettings.oFeatures.bServerSide ) + { + _fnProcessingDisplay( oSettings, false ); + if ( !oSettings._bInitComplete ) + { + _fnInitComplete( oSettings ); + } + } + } + + + /** + * Redraw the table - taking account of the various features which are enabled + * @param {object} oSettings dataTables settings object + * @memberof DataTable#oApi + */ + function _fnReDraw( oSettings ) + { + if ( oSettings.oFeatures.bSort ) + { + /* Sorting will refilter and draw for us */ + _fnSort( oSettings, oSettings.oPreviousSearch ); + } + else if ( oSettings.oFeatures.bFilter ) + { + /* Filtering will redraw for us */ + _fnFilterComplete( oSettings, oSettings.oPreviousSearch ); + } + else + { + _fnCalculateEnd( oSettings ); + _fnDraw( oSettings ); + } + } + + + /** + * Add the options to the page HTML for the table + * @param {object} oSettings dataTables settings object + * @memberof DataTable#oApi + */ + function _fnAddOptionsHtml ( oSettings ) + { + /* + * Create a temporary, empty, div which we can later on replace with what we have generated + * we do it this way to rendering the 'options' html offline - speed :-) + */ + var nHolding = $('<div></div>')[0]; + oSettings.nTable.parentNode.insertBefore( nHolding, oSettings.nTable ); + + /* + * All DataTables are wrapped in a div + */ + oSettings.nTableWrapper = $('<div id="'+oSettings.sTableId+'_wrapper" class="'+oSettings.oClasses.sWrapper+'" role="grid"></div>')[0]; + oSettings.nTableReinsertBefore = oSettings.nTable.nextSibling; + + /* Track where we want to insert the option */ + var nInsertNode = oSettings.nTableWrapper; + + /* Loop over the user set positioning and place the elements as needed */ + var aDom = oSettings.sDom.split(''); + var nTmp, iPushFeature, cOption, nNewNode, cNext, sAttr, j; + for ( var i=0 ; i<aDom.length ; i++ ) + { + iPushFeature = 0; + cOption = aDom[i]; + + if ( cOption == '<' ) + { + /* New container div */ + nNewNode = $('<div></div>')[0]; + + /* Check to see if we should append an id and/or a class name to the container */ + cNext = aDom[i+1]; + if ( cNext == "'" || cNext == '"' ) + { + sAttr = ""; + j = 2; + while ( aDom[i+j] != cNext ) + { + sAttr += aDom[i+j]; + j++; + } + + /* Replace jQuery UI constants */ + if ( sAttr == "H" ) + { + sAttr = "fg-toolbar ui-toolbar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix"; + } + else if ( sAttr == "F" ) + { + sAttr = "fg-toolbar ui-toolbar ui-widget-header ui-corner-bl ui-corner-br ui-helper-clearfix"; + } + + /* The attribute can be in the format of "#id.class", "#id" or "class" This logic + * breaks the string into parts and applies them as needed + */ + if ( sAttr.indexOf('.') != -1 ) + { + var aSplit = sAttr.split('.'); + nNewNode.id = aSplit[0].substr(1, aSplit[0].length-1); + nNewNode.className = aSplit[1]; + } + else if ( sAttr.charAt(0) == "#" ) + { + nNewNode.id = sAttr.substr(1, sAttr.length-1); + } + else + { + nNewNode.className = sAttr; + } + + i += j; /* Move along the position array */ + } + + nInsertNode.appendChild( nNewNode ); + nInsertNode = nNewNode; + } + else if ( cOption == '>' ) + { + /* End container div */ + nInsertNode = nInsertNode.parentNode; + } + else if ( cOption == 'l' && oSettings.oFeatures.bPaginate && oSettings.oFeatures.bLengthChange ) + { + /* Length */ + nTmp = _fnFeatureHtmlLength( oSettings ); + iPushFeature = 1; + } + else if ( cOption == 'f' && oSettings.oFeatures.bFilter ) + { + /* Filter */ + nTmp = _fnFeatureHtmlFilter( oSettings ); + iPushFeature = 1; + } + else if ( cOption == 'r' && oSettings.oFeatures.bProcessing ) + { + /* pRocessing */ + nTmp = _fnFeatureHtmlProcessing( oSettings ); + iPushFeature = 1; + } + else if ( cOption == 't' ) + { + /* Table */ + nTmp = _fnFeatureHtmlTable( oSettings ); + iPushFeature = 1; + } + else if ( cOption == 'i' && oSettings.oFeatures.bInfo ) + { + /* Info */ + nTmp = _fnFeatureHtmlInfo( oSettings ); + iPushFeature = 1; + } + else if ( cOption == 'p' && oSettings.oFeatures.bPaginate ) + { + /* Pagination */ + nTmp = _fnFeatureHtmlPaginate( oSettings ); + iPushFeature = 1; + } + else if ( DataTable.ext.aoFeatures.length !== 0 ) + { + /* Plug-in features */ + var aoFeatures = DataTable.ext.aoFeatures; + for ( var k=0, kLen=aoFeatures.length ; k<kLen ; k++ ) + { + if ( cOption == aoFeatures[k].cFeature ) + { + nTmp = aoFeatures[k].fnInit( oSettings ); + if ( nTmp ) + { + iPushFeature = 1; + } + break; + } + } + } + + /* Add to the 2D features array */ + if ( iPushFeature == 1 && nTmp !== null ) + { + if ( typeof oSettings.aanFeatures[cOption] !== 'object' ) + { + oSettings.aanFeatures[cOption] = []; + } + oSettings.aanFeatures[cOption].push( nTmp ); + nInsertNode.appendChild( nTmp ); + } + } + + /* Built our DOM structure - replace the holding div with what we want */ + nHolding.parentNode.replaceChild( oSettings.nTableWrapper, nHolding ); + } + + + /** + * Use the DOM source to create up an array of header cells. The idea here is to + * create a layout grid (array) of rows x columns, which contains a reference + * to the cell that that point in the grid (regardless of col/rowspan), such that + * any column / row could be removed and the new grid constructed + * @param array {object} aLayout Array to store the calculated layout in + * @param {node} nThead The header/footer element for the table + * @memberof DataTable#oApi + */ + function _fnDetectHeader ( aLayout, nThead ) + { + var nTrs = $(nThead).children('tr'); + var nCell; + var i, j, k, l, iLen, jLen, iColShifted; + var fnShiftCol = function ( a, i, j ) { + while ( a[i][j] ) { + j++; + } + return j; + }; + + aLayout.splice( 0, aLayout.length ); + + /* We know how many rows there are in the layout - so prep it */ + for ( i=0, iLen=nTrs.length ; i<iLen ; i++ ) + { + aLayout.push( [] ); + } + + /* Calculate a layout array */ + for ( i=0, iLen=nTrs.length ; i<iLen ; i++ ) + { + var iColumn = 0; + + /* For every cell in the row... */ + for ( j=0, jLen=nTrs[i].childNodes.length ; j<jLen ; j++ ) + { + nCell = nTrs[i].childNodes[j]; + + if ( nCell.nodeName.toUpperCase() == "TD" || + nCell.nodeName.toUpperCase() == "TH" ) + { + /* Get the col and rowspan attributes from the DOM and sanitise them */ + var iColspan = nCell.getAttribute('colspan') * 1; + var iRowspan = nCell.getAttribute('rowspan') * 1; + iColspan = (!iColspan || iColspan===0 || iColspan===1) ? 1 : iColspan; + iRowspan = (!iRowspan || iRowspan===0 || iRowspan===1) ? 1 : iRowspan; + + /* There might be colspan cells already in this row, so shift our target + * accordingly + */ + iColShifted = fnShiftCol( aLayout, i, iColumn ); + + /* If there is col / rowspan, copy the information into the layout grid */ + for ( l=0 ; l<iColspan ; l++ ) + { + for ( k=0 ; k<iRowspan ; k++ ) + { + aLayout[i+k][iColShifted+l] = { + "cell": nCell, + "unique": iColspan == 1 ? true : false + }; + aLayout[i+k].nTr = nTrs[i]; + } + } + } + } + } + } + + + /** + * Get an array of unique th elements, one for each column + * @param {object} oSettings dataTables settings object + * @param {node} nHeader automatically detect the layout from this node - optional + * @param {array} aLayout thead/tfoot layout from _fnDetectHeader - optional + * @returns array {node} aReturn list of unique ths + * @memberof DataTable#oApi + */ + function _fnGetUniqueThs ( oSettings, nHeader, aLayout ) + { + var aReturn = []; + if ( !aLayout ) + { + aLayout = oSettings.aoHeader; + if ( nHeader ) + { + aLayout = []; + _fnDetectHeader( aLayout, nHeader ); + } + } + + for ( var i=0, iLen=aLayout.length ; i<iLen ; i++ ) + { + for ( var j=0, jLen=aLayout[i].length ; j<jLen ; j++ ) + { + if ( aLayout[i][j].unique && + (!aReturn[j] || !oSettings.bSortCellsTop) ) + { + aReturn[j] = aLayout[i][j].cell; + } + } + } + + return aReturn; + } + + + + /** + * Update the table using an Ajax call + * @param {object} oSettings dataTables settings object + * @returns {boolean} Block the table drawing or not + * @memberof DataTable#oApi + */ + function _fnAjaxUpdate( oSettings ) + { + if ( oSettings.bAjaxDataGet ) + { + oSettings.iDraw++; + _fnProcessingDisplay( oSettings, true ); + var iColumns = oSettings.aoColumns.length; + var aoData = _fnAjaxParameters( oSettings ); + _fnServerParams( oSettings, aoData ); + + oSettings.fnServerData.call( oSettings.oInstance, oSettings.sAjaxSource, aoData, + function(json) { + _fnAjaxUpdateDraw( oSettings, json ); + }, oSettings ); + return false; + } + else + { + return true; + } + } + + + /** + * Build up the parameters in an object needed for a server-side processing request + * @param {object} oSettings dataTables settings object + * @returns {bool} block the table drawing or not + * @memberof DataTable#oApi + */ + function _fnAjaxParameters( oSettings ) + { + var iColumns = oSettings.aoColumns.length; + var aoData = [], mDataProp; + var i; + + aoData.push( { "name": "sEcho", "value": oSettings.iDraw } ); + aoData.push( { "name": "iColumns", "value": iColumns } ); + aoData.push( { "name": "sColumns", "value": _fnColumnOrdering(oSettings) } ); + aoData.push( { "name": "iDisplayStart", "value": oSettings._iDisplayStart } ); + aoData.push( { "name": "iDisplayLength", "value": oSettings.oFeatures.bPaginate !== false ? + oSettings._iDisplayLength : -1 } ); + + for ( i=0 ; i<iColumns ; i++ ) + { + mDataProp = oSettings.aoColumns[i].mDataProp; + aoData.push( { "name": "mDataProp_"+i, "value": typeof(mDataProp)==="function" ? 'function' : mDataProp } ); + } + + /* Filtering */ + if ( oSettings.oFeatures.bFilter !== false ) + { + aoData.push( { "name": "sSearch", "value": oSettings.oPreviousSearch.sSearch } ); + aoData.push( { "name": "bRegex", "value": oSettings.oPreviousSearch.bRegex } ); + for ( i=0 ; i<iColumns ; i++ ) + { + aoData.push( { "name": "sSearch_"+i, "value": oSettings.aoPreSearchCols[i].sSearch } ); + aoData.push( { "name": "bRegex_"+i, "value": oSettings.aoPreSearchCols[i].bRegex } ); + aoData.push( { "name": "bSearchable_"+i, "value": oSettings.aoColumns[i].bSearchable } ); + } + } + + /* Sorting */ + if ( oSettings.oFeatures.bSort !== false ) + { + var iFixed = oSettings.aaSortingFixed !== null ? oSettings.aaSortingFixed.length : 0; + var iUser = oSettings.aaSorting.length; + aoData.push( { "name": "iSortingCols", "value": iFixed+iUser } ); + for ( i=0 ; i<iFixed ; i++ ) + { + aoData.push( { "name": "iSortCol_"+i, "value": oSettings.aaSortingFixed[i][0] } ); + aoData.push( { "name": "sSortDir_"+i, "value": oSettings.aaSortingFixed[i][1] } ); + } + + for ( i=0 ; i<iUser ; i++ ) + { + aoData.push( { "name": "iSortCol_"+(i+iFixed), "value": oSettings.aaSorting[i][0] } ); + aoData.push( { "name": "sSortDir_"+(i+iFixed), "value": oSettings.aaSorting[i][1] } ); + } + + for ( i=0 ; i<iColumns ; i++ ) + { + aoData.push( { "name": "bSortable_"+i, "value": oSettings.aoColumns[i].bSortable } ); + } + } + + return aoData; + } + + + /** + * Add Ajax parameters from plugins + * @param {object} oSettings dataTables settings object + * @param array {objects} aoData name/value pairs to send to the server + * @memberof DataTable#oApi + */ + function _fnServerParams( oSettings, aoData ) + { + _fnCallbackFire( oSettings, 'aoServerParams', 'serverParams', [aoData] ); + } + + + /** + * Data the data from the server (nuking the old) and redraw the table + * @param {object} oSettings dataTables settings object + * @param {object} json json data return from the server. + * @param {string} json.sEcho Tracking flag for DataTables to match requests + * @param {int} json.iTotalRecords Number of records in the data set, not accounting for filtering + * @param {int} json.iTotalDisplayRecords Number of records in the data set, accounting for filtering + * @param {array} json.aaData The data to display on this page + * @param {string} [json.sColumns] Column ordering (sName, comma separated) + * @memberof DataTable#oApi + */ + function _fnAjaxUpdateDraw ( oSettings, json ) + { + if ( json.sEcho !== undefined ) + { + /* Protect against old returns over-writing a new one. Possible when you get + * very fast interaction, and later queires are completed much faster + */ + if ( json.sEcho*1 < oSettings.iDraw ) + { + return; + } + else + { + oSettings.iDraw = json.sEcho * 1; + } + } + + if ( !oSettings.oScroll.bInfinite || + (oSettings.oScroll.bInfinite && (oSettings.bSorted || oSettings.bFiltered)) ) + { + _fnClearTable( oSettings ); + } + oSettings._iRecordsTotal = parseInt(json.iTotalRecords, 10); + oSettings._iRecordsDisplay = parseInt(json.iTotalDisplayRecords, 10); + + /* Determine if reordering is required */ + var sOrdering = _fnColumnOrdering(oSettings); + var bReOrder = (json.sColumns !== undefined && sOrdering !== "" && json.sColumns != sOrdering ); + var aiIndex; + if ( bReOrder ) + { + aiIndex = _fnReOrderIndex( oSettings, json.sColumns ); + } + + var aData = _fnGetObjectDataFn( oSettings.sAjaxDataProp )( json ); + for ( var i=0, iLen=aData.length ; i<iLen ; i++ ) + { + if ( bReOrder ) + { + /* If we need to re-order, then create a new array with the correct order and add it */ + var aDataSorted = []; + for ( var j=0, jLen=oSettings.aoColumns.length ; j<jLen ; j++ ) + { + aDataSorted.push( aData[i][ aiIndex[j] ] ); + } + _fnAddData( oSettings, aDataSorted ); + } + else + { + /* No re-order required, sever got it "right" - just straight add */ + _fnAddData( oSettings, aData[i] ); + } + } + oSettings.aiDisplay = oSettings.aiDisplayMaster.slice(); + + oSettings.bAjaxDataGet = false; + _fnDraw( oSettings ); + oSettings.bAjaxDataGet = true; + _fnProcessingDisplay( oSettings, false ); + } + + + + /** + * Generate the node required for filtering text + * @returns {node} Filter control element + * @param {object} oSettings dataTables settings object + * @memberof DataTable#oApi + */ + function _fnFeatureHtmlFilter ( oSettings ) + { + var oPreviousSearch = oSettings.oPreviousSearch; + + var sSearchStr = oSettings.oLanguage.sSearch; + sSearchStr = (sSearchStr.indexOf('_INPUT_') !== -1) ? + sSearchStr.replace('_INPUT_', '<input type="text" />') : + sSearchStr==="" ? '<input type="text" />' : sSearchStr+' <input type="text" />'; + + var nFilter = document.createElement( 'div' ); + nFilter.className = oSettings.oClasses.sFilter; + nFilter.innerHTML = '<label>'+sSearchStr+'</label>'; + if ( !oSettings.aanFeatures.f ) + { + nFilter.id = oSettings.sTableId+'_filter'; + } + + var jqFilter = $("input", nFilter); + jqFilter.val( oPreviousSearch.sSearch.replace('"','"') ); + jqFilter.bind( 'keyup.DT', function(e) { + /* Update all other filter input elements for the new display */ + var n = oSettings.aanFeatures.f; + for ( var i=0, iLen=n.length ; i<iLen ; i++ ) + { + if ( n[i] != $(this).parents('div.dataTables_filter')[0] ) + { + $('input', n[i]).val( this.value ); + } + } + + /* Now do the filter */ + if ( this.value != oPreviousSearch.sSearch ) + { + _fnFilterComplete( oSettings, { + "sSearch": this.value, + "bRegex": oPreviousSearch.bRegex, + "bSmart": oPreviousSearch.bSmart , + "bCaseInsensitive": oPreviousSearch.bCaseInsensitive + } ); + } + } ); + + jqFilter + .attr('aria-controls', oSettings.sTableId) + .bind( 'keypress.DT', function(e) { + /* Prevent form submission */ + if ( e.keyCode == 13 ) + { + return false; + } + } + ); + + return nFilter; + } + + + /** + * Filter the table using both the global filter and column based filtering + * @param {object} oSettings dataTables settings object + * @param {object} oSearch search information + * @param {int} [iForce] force a research of the master array (1) or not (undefined or 0) + * @memberof DataTable#oApi + */ + function _fnFilterComplete ( oSettings, oInput, iForce ) + { + var oPrevSearch = oSettings.oPreviousSearch; + var aoPrevSearch = oSettings.aoPreSearchCols; + var fnSaveFilter = function ( oFilter ) { + /* Save the filtering values */ + oPrevSearch.sSearch = oFilter.sSearch; + oPrevSearch.bRegex = oFilter.bRegex; + oPrevSearch.bSmart = oFilter.bSmart; + oPrevSearch.bCaseInsensitive = oFilter.bCaseInsensitive; + }; + + /* In server-side processing all filtering is done by the server, so no point hanging around here */ + if ( !oSettings.oFeatures.bServerSide ) + { + /* Global filter */ + _fnFilter( oSettings, oInput.sSearch, iForce, oInput.bRegex, oInput.bSmart, oInput.bCaseInsensitive ); + fnSaveFilter( oInput ); + + /* Now do the individual column filter */ + for ( var i=0 ; i<oSettings.aoPreSearchCols.length ; i++ ) + { + _fnFilterColumn( oSettings, aoPrevSearch[i].sSearch, i, aoPrevSearch[i].bRegex, + aoPrevSearch[i].bSmart, aoPrevSearch[i].bCaseInsensitive ); + } + + /* Custom filtering */ + _fnFilterCustom( oSettings ); + } + else + { + fnSaveFilter( oInput ); + } + + /* Tell the draw function we have been filtering */ + oSettings.bFiltered = true; + $(oSettings.oInstance).trigger('filter', oSettings); + + /* Redraw the table */ + oSettings._iDisplayStart = 0; + _fnCalculateEnd( oSettings ); + _fnDraw( oSettings ); + + /* Rebuild search array 'offline' */ + _fnBuildSearchArray( oSettings, 0 ); + } + + + /** + * Apply custom filtering functions + * @param {object} oSettings dataTables settings object + * @memberof DataTable#oApi + */ + function _fnFilterCustom( oSettings ) + { + var afnFilters = DataTable.ext.afnFiltering; + for ( var i=0, iLen=afnFilters.length ; i<iLen ; i++ ) + { + var iCorrector = 0; + for ( var j=0, jLen=oSettings.aiDisplay.length ; j<jLen ; j++ ) + { + var iDisIndex = oSettings.aiDisplay[j-iCorrector]; + + /* Check if we should use this row based on the filtering function */ + if ( !afnFilters[i]( oSettings, _fnGetRowData( oSettings, iDisIndex, 'filter' ), iDisIndex ) ) + { + oSettings.aiDisplay.splice( j-iCorrector, 1 ); + iCorrector++; + } + } + } + } + + + /** + * Filter the table on a per-column basis + * @param {object} oSettings dataTables settings object + * @param {string} sInput string to filter on + * @param {int} iColumn column to filter + * @param {bool} bRegex treat search string as a regular expression or not + * @param {bool} bSmart use smart filtering or not + * @param {bool} bCaseInsensitive Do case insenstive matching or not + * @memberof DataTable#oApi + */ + function _fnFilterColumn ( oSettings, sInput, iColumn, bRegex, bSmart, bCaseInsensitive ) + { + if ( sInput === "" ) + { + return; + } + + var iIndexCorrector = 0; + var rpSearch = _fnFilterCreateSearch( sInput, bRegex, bSmart, bCaseInsensitive ); + + for ( var i=oSettings.aiDisplay.length-1 ; i>=0 ; i-- ) + { + var sData = _fnDataToSearch( _fnGetCellData( oSettings, oSettings.aiDisplay[i], iColumn, 'filter' ), + oSettings.aoColumns[iColumn].sType ); + if ( ! rpSearch.test( sData ) ) + { + oSettings.aiDisplay.splice( i, 1 ); + iIndexCorrector++; + } + } + } + + + /** + * Filter the data table based on user input and draw the table + * @param {object} oSettings dataTables settings object + * @param {string} sInput string to filter on + * @param {int} iForce optional - force a research of the master array (1) or not (undefined or 0) + * @param {bool} bRegex treat as a regular expression or not + * @param {bool} bSmart perform smart filtering or not + * @param {bool} bCaseInsensitive Do case insenstive matching or not + * @memberof DataTable#oApi + */ + function _fnFilter( oSettings, sInput, iForce, bRegex, bSmart, bCaseInsensitive ) + { + var i; + var rpSearch = _fnFilterCreateSearch( sInput, bRegex, bSmart, bCaseInsensitive ); + var oPrevSearch = oSettings.oPreviousSearch; + + /* Check if we are forcing or not - optional parameter */ + if ( !iForce ) + { + iForce = 0; + } + + /* Need to take account of custom filtering functions - always filter */ + if ( DataTable.ext.afnFiltering.length !== 0 ) + { + iForce = 1; + } + + /* + * If the input is blank - we want the full data set + */ + if ( sInput.length <= 0 ) + { + oSettings.aiDisplay.splice( 0, oSettings.aiDisplay.length); + oSettings.aiDisplay = oSettings.aiDisplayMaster.slice(); + } + else + { + /* + * We are starting a new search or the new search string is smaller + * then the old one (i.e. delete). Search from the master array + */ + if ( oSettings.aiDisplay.length == oSettings.aiDisplayMaster.length || + oPrevSearch.sSearch.length > sInput.length || iForce == 1 || + sInput.indexOf(oPrevSearch.sSearch) !== 0 ) + { + /* Nuke the old display array - we are going to rebuild it */ + oSettings.aiDisplay.splice( 0, oSettings.aiDisplay.length); + + /* Force a rebuild of the search array */ + _fnBuildSearchArray( oSettings, 1 ); + + /* Search through all records to populate the search array + * The the oSettings.aiDisplayMaster and asDataSearch arrays have 1 to 1 + * mapping + */ + for ( i=0 ; i<oSettings.aiDisplayMaster.length ; i++ ) + { + if ( rpSearch.test(oSettings.asDataSearch[i]) ) + { + oSettings.aiDisplay.push( oSettings.aiDisplayMaster[i] ); + } + } + } + else + { + /* Using old search array - refine it - do it this way for speed + * Don't have to search the whole master array again + */ + var iIndexCorrector = 0; + + /* Search the current results */ + for ( i=0 ; i<oSettings.asDataSearch.length ; i++ ) + { + if ( ! rpSearch.test(oSettings.asDataSearch[i]) ) + { + oSettings.aiDisplay.splice( i-iIndexCorrector, 1 ); + iIndexCorrector++; + } + } + } + } + } + + + /** + * Create an array which can be quickly search through + * @param {object} oSettings dataTables settings object + * @param {int} iMaster use the master data array - optional + * @memberof DataTable#oApi + */ + function _fnBuildSearchArray ( oSettings, iMaster ) + { + if ( !oSettings.oFeatures.bServerSide ) + { + /* Clear out the old data */ + oSettings.asDataSearch.splice( 0, oSettings.asDataSearch.length ); + + var aArray = (iMaster && iMaster===1) ? + oSettings.aiDisplayMaster : oSettings.aiDisplay; + + for ( var i=0, iLen=aArray.length ; i<iLen ; i++ ) + { + oSettings.asDataSearch[i] = _fnBuildSearchRow( oSettings, + _fnGetRowData( oSettings, aArray[i], 'filter' ) ); + } + } + } + + + /** + * Create a searchable string from a single data row + * @param {object} oSettings dataTables settings object + * @param {array} aData Row data array to use for the data to search + * @memberof DataTable#oApi + */ + function _fnBuildSearchRow( oSettings, aData ) + { + var sSearch = ''; + if ( oSettings.__nTmpFilter === undefined ) + { + oSettings.__nTmpFilter = document.createElement('div'); + } + var nTmp = oSettings.__nTmpFilter; + + for ( var j=0, jLen=oSettings.aoColumns.length ; j<jLen ; j++ ) + { + if ( oSettings.aoColumns[j].bSearchable ) + { + var sData = aData[j]; + sSearch += _fnDataToSearch( sData, oSettings.aoColumns[j].sType )+' '; + } + } + + /* If it looks like there is an HTML entity in the string, attempt to decode it */ + if ( sSearch.indexOf('&') !== -1 ) + { + nTmp.innerHTML = sSearch; + sSearch = nTmp.textContent ? nTmp.textContent : nTmp.innerText; + + /* IE and Opera appear to put an newline where there is a <br> tag - remove it */ + sSearch = sSearch.replace(/\n/g," ").replace(/\r/g,""); + } + + return sSearch; + } + + /** + * Build a regular expression object suitable for searching a table + * @param {string} sSearch string to search for + * @param {bool} bRegex treat as a regular expression or not + * @param {bool} bSmart perform smart filtering or not + * @param {bool} bCaseInsensitive Do case insenstive matching or not + * @returns {RegExp} constructed object + * @memberof DataTable#oApi + */ + function _fnFilterCreateSearch( sSearch, bRegex, bSmart, bCaseInsensitive ) + { + var asSearch, sRegExpString; + + if ( bSmart ) + { + /* Generate the regular expression to use. Something along the lines of: + * ^(?=.*?\bone\b)(?=.*?\btwo\b)(?=.*?\bthree\b).*$ + */ + asSearch = bRegex ? sSearch.split( ' ' ) : _fnEscapeRegex( sSearch ).split( ' ' ); + sRegExpString = '^(?=.*?'+asSearch.join( ')(?=.*?' )+').*$'; + return new RegExp( sRegExpString, bCaseInsensitive ? "i" : "" ); + } + else + { + sSearch = bRegex ? sSearch : _fnEscapeRegex( sSearch ); + return new RegExp( sSearch, bCaseInsensitive ? "i" : "" ); + } + } + + + /** + * Convert raw data into something that the user can search on + * @param {string} sData data to be modified + * @param {string} sType data type + * @returns {string} search string + * @memberof DataTable#oApi + */ + function _fnDataToSearch ( sData, sType ) + { + if ( typeof DataTable.ext.ofnSearch[sType] === "function" ) + { + return DataTable.ext.ofnSearch[sType]( sData ); + } + else if ( sType == "html" ) + { + return sData.replace(/[\r\n]/g," ").replace( /<.*?>/g, "" ); + } + else if ( typeof sData === "string" ) + { + return sData.replace(/[\r\n]/g," "); + } + else if ( sData === null ) + { + return ''; + } + return sData; + } + + + /** + * scape a string stuch that it can be used in a regular expression + * @param {string} sVal string to escape + * @returns {string} escaped string + * @memberof DataTable#oApi + */ + function _fnEscapeRegex ( sVal ) + { + var acEscape = [ '/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\', '$', '^' ]; + var reReplace = new RegExp( '(\\' + acEscape.join('|\\') + ')', 'g' ); + return sVal.replace(reReplace, '\\$1'); + } + + + + /** + * Generate the node required for the info display + * @param {object} oSettings dataTables settings object + * @returns {node} Information element + * @memberof DataTable#oApi + */ + function _fnFeatureHtmlInfo ( oSettings ) + { + var nInfo = document.createElement( 'div' ); + nInfo.className = oSettings.oClasses.sInfo; + + /* Actions that are to be taken once only for this feature */ + if ( !oSettings.aanFeatures.i ) + { + /* Add draw callback */ + oSettings.aoDrawCallback.push( { + "fn": _fnUpdateInfo, + "sName": "information" + } ); + + /* Add id */ + nInfo.id = oSettings.sTableId+'_info'; + } + oSettings.nTable.setAttribute( 'aria-describedby', oSettings.sTableId+'_info' ); + + return nInfo; + } + + + /** + * Update the information elements in the display + * @param {object} oSettings dataTables settings object + * @memberof DataTable#oApi + */ + function _fnUpdateInfo ( oSettings ) + { + /* Show information about the table */ + if ( !oSettings.oFeatures.bInfo || oSettings.aanFeatures.i.length === 0 ) + { + return; + } + + var + iStart = oSettings._iDisplayStart+1, iEnd = oSettings.fnDisplayEnd(), + iMax = oSettings.fnRecordsTotal(), iTotal = oSettings.fnRecordsDisplay(), + sStart = oSettings.fnFormatNumber( iStart ), sEnd = oSettings.fnFormatNumber( iEnd ), + sMax = oSettings.fnFormatNumber( iMax ), sTotal = oSettings.fnFormatNumber( iTotal ), + sOut; + + /* When infinite scrolling, we are always starting at 1. _iDisplayStart is used only + * internally + */ + if ( oSettings.oScroll.bInfinite ) + { + sStart = oSettings.fnFormatNumber( 1 ); + } + + if ( oSettings.fnRecordsDisplay() === 0 && + oSettings.fnRecordsDisplay() == oSettings.fnRecordsTotal() ) + { + /* Empty record set */ + sOut = oSettings.oLanguage.sInfoEmpty+ oSettings.oLanguage.sInfoPostFix; + } + else if ( oSettings.fnRecordsDisplay() === 0 ) + { + /* Rmpty record set after filtering */ + sOut = oSettings.oLanguage.sInfoEmpty +' '+ + oSettings.oLanguage.sInfoFiltered.replace('_MAX_', sMax)+ + oSettings.oLanguage.sInfoPostFix; + } + else if ( oSettings.fnRecordsDisplay() == oSettings.fnRecordsTotal() ) + { + /* Normal record set */ + sOut = oSettings.oLanguage.sInfo. + replace('_START_', sStart). + replace('_END_', sEnd). + replace('_TOTAL_', sTotal)+ + oSettings.oLanguage.sInfoPostFix; + } + else + { + /* Record set after filtering */ + sOut = oSettings.oLanguage.sInfo. + replace('_START_', sStart). + replace('_END_', sEnd). + replace('_TOTAL_', sTotal) +' '+ + oSettings.oLanguage.sInfoFiltered.replace('_MAX_', + oSettings.fnFormatNumber(oSettings.fnRecordsTotal()))+ + oSettings.oLanguage.sInfoPostFix; + } + + if ( oSettings.oLanguage.fnInfoCallback !== null ) + { + sOut = oSettings.oLanguage.fnInfoCallback.call( oSettings.oInstance, + oSettings, iStart, iEnd, iMax, iTotal, sOut ); + } + + var n = oSettings.aanFeatures.i; + for ( var i=0, iLen=n.length ; i<iLen ; i++ ) + { + $(n[i]).html( sOut ); + } + } + + + + /** + * Draw the table for the first time, adding all required features + * @param {object} oSettings dataTables settings object + * @memberof DataTable#oApi + */ + function _fnInitialise ( oSettings ) + { + var i, iLen, iAjaxStart=oSettings.iInitDisplayStart; + + /* Ensure that the table data is fully initialised */ + if ( oSettings.bInitialised === false ) + { + setTimeout( function(){ _fnInitialise( oSettings ); }, 200 ); + return; + } + + /* Show the display HTML options */ + _fnAddOptionsHtml( oSettings ); + + /* Build and draw the header / footer for the table */ + _fnBuildHead( oSettings ); + _fnDrawHead( oSettings, oSettings.aoHeader ); + if ( oSettings.nTFoot ) + { + _fnDrawHead( oSettings, oSettings.aoFooter ); + } + + /* Okay to show that something is going on now */ + _fnProcessingDisplay( oSettings, true ); + + /* Calculate sizes for columns */ + if ( oSettings.oFeatures.bAutoWidth ) + { + _fnCalculateColumnWidths( oSettings ); + } + + for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ ) + { + if ( oSettings.aoColumns[i].sWidth !== null ) + { + oSettings.aoColumns[i].nTh.style.width = _fnStringToCss( oSettings.aoColumns[i].sWidth ); + } + } + + /* If there is default sorting required - let's do it. The sort function will do the + * drawing for us. Otherwise we draw the table regardless of the Ajax source - this allows + * the table to look initialised for Ajax sourcing data (show 'loading' message possibly) + */ + if ( oSettings.oFeatures.bSort ) + { + _fnSort( oSettings ); + } + else if ( oSettings.oFeatures.bFilter ) + { + _fnFilterComplete( oSettings, oSettings.oPreviousSearch ); + } + else + { + oSettings.aiDisplay = oSettings.aiDisplayMaster.slice(); + _fnCalculateEnd( oSettings ); + _fnDraw( oSettings ); + } + + /* if there is an ajax source load the data */ + if ( oSettings.sAjaxSource !== null && !oSettings.oFeatures.bServerSide ) + { + var aoData = []; + _fnServerParams( oSettings, aoData ); + oSettings.fnServerData.call( oSettings.oInstance, oSettings.sAjaxSource, aoData, function(json) { + var aData = (oSettings.sAjaxDataProp !== "") ? + _fnGetObjectDataFn( oSettings.sAjaxDataProp )(json) : json; + + /* Got the data - add it to the table */ + for ( i=0 ; i<aData.length ; i++ ) + { + _fnAddData( oSettings, aData[i] ); + } + + /* Reset the init display for cookie saving. We've already done a filter, and + * therefore cleared it before. So we need to make it appear 'fresh' + */ + oSettings.iInitDisplayStart = iAjaxStart; + + if ( oSettings.oFeatures.bSort ) + { + _fnSort( oSettings ); + } + else + { + oSettings.aiDisplay = oSettings.aiDisplayMaster.slice(); + _fnCalculateEnd( oSettings ); + _fnDraw( oSettings ); + } + + _fnProcessingDisplay( oSettings, false ); + _fnInitComplete( oSettings, json ); + }, oSettings ); + return; + } + + /* Server-side processing initialisation complete is done at the end of _fnDraw */ + if ( !oSettings.oFeatures.bServerSide ) + { + _fnProcessingDisplay( oSettings, false ); + _fnInitComplete( oSettings ); + } + } + + + /** + * Draw the table for the first time, adding all required features + * @param {object} oSettings dataTables settings object + * @param {object} [json] JSON from the server that completed the table, if using Ajax source + * with client-side processing (optional) + * @memberof DataTable#oApi + */ + function _fnInitComplete ( oSettings, json ) + { + oSettings._bInitComplete = true; + _fnCallbackFire( oSettings, 'aoInitComplete', 'init', [oSettings, json] ); + } + + + /** + * Language compatibility - when certain options are given, and others aren't, we + * need to duplicate the values over, in order to provide backwards compatibility + * with older language files. + * @param {object} oSettings dataTables settings object + * @memberof DataTable#oApi + */ + function _fnLanguageCompat( oLanguage ) + { + /* Backwards compatibility - if there is no sEmptyTable given, then use the same as + * sZeroRecords - assuming that is given. + */ + if ( !oLanguage.sEmptyTable && oLanguage.sZeroRecords ) + { + _fnMap( oLanguage, oLanguage, 'sZeroRecords', 'sEmptyTable' ); + } + + /* Likewise with loading records */ + if ( !oLanguage.sLoadingRecords && oLanguage.sZeroRecords ) + { + _fnMap( oLanguage, oLanguage, 'sZeroRecords', 'sLoadingRecords' ); + } + } + + + + /** + * Generate the node required for user display length changing + * @param {object} oSettings dataTables settings object + * @returns {node} Display length feature node + * @memberof DataTable#oApi + */ + function _fnFeatureHtmlLength ( oSettings ) + { + if ( oSettings.oScroll.bInfinite ) + { + return null; + } + + /* This can be overruled by not using the _MENU_ var/macro in the language variable */ + var sName = 'name="'+oSettings.sTableId+'_length"'; + var sStdMenu = '<select size="1" '+sName+'>'; + var i, iLen; + var aLengthMenu = oSettings.aLengthMenu; + + if ( aLengthMenu.length == 2 && typeof aLengthMenu[0] === 'object' && + typeof aLengthMenu[1] === 'object' ) + { + for ( i=0, iLen=aLengthMenu[0].length ; i<iLen ; i++ ) + { + sStdMenu += '<option value="'+aLengthMenu[0][i]+'">'+aLengthMenu[1][i]+'</option>'; + } + } + else + { + for ( i=0, iLen=aLengthMenu.length ; i<iLen ; i++ ) + { + sStdMenu += '<option value="'+aLengthMenu[i]+'">'+aLengthMenu[i]+'</option>'; + } + } + sStdMenu += '</select>'; + + var nLength = document.createElement( 'div' ); + if ( !oSettings.aanFeatures.l ) + { + nLength.id = oSettings.sTableId+'_length'; + } + nLength.className = oSettings.oClasses.sLength; + nLength.innerHTML = '<label>'+oSettings.oLanguage.sLengthMenu.replace( '_MENU_', sStdMenu )+'</label>'; + + /* + * Set the length to the current display length - thanks to Andrea Pavlovic for this fix, + * and Stefan Skopnik for fixing the fix! + */ + $('select option[value="'+oSettings._iDisplayLength+'"]', nLength).attr("selected", true); + + $('select', nLength).bind( 'change.DT', function(e) { + var iVal = $(this).val(); + + /* Update all other length options for the new display */ + var n = oSettings.aanFeatures.l; + for ( i=0, iLen=n.length ; i<iLen ; i++ ) + { + if ( n[i] != this.parentNode ) + { + $('select', n[i]).val( iVal ); + } + } + + /* Redraw the table */ + oSettings._iDisplayLength = parseInt(iVal, 10); + _fnCalculateEnd( oSettings ); + + /* If we have space to show extra rows (backing up from the end point - then do so */ + if ( oSettings.fnDisplayEnd() == oSettings.fnRecordsDisplay() ) + { + oSettings._iDisplayStart = oSettings.fnDisplayEnd() - oSettings._iDisplayLength; + if ( oSettings._iDisplayStart < 0 ) + { + oSettings._iDisplayStart = 0; + } + } + + if ( oSettings._iDisplayLength == -1 ) + { + oSettings._iDisplayStart = 0; + } + + _fnDraw( oSettings ); + } ); + + + $('select', nLength).attr('aria-controls', oSettings.sTableId); + + return nLength; + } + + + /** + * Rcalculate the end point based on the start point + * @param {object} oSettings dataTables settings object + * @memberof DataTable#oApi + */ + function _fnCalculateEnd( oSettings ) + { + if ( oSettings.oFeatures.bPaginate === false ) + { + oSettings._iDisplayEnd = oSettings.aiDisplay.length; + } + else + { + /* Set the end point of the display - based on how many elements there are + * still to display + */ + if ( oSettings._iDisplayStart + oSettings._iDisplayLength > oSettings.aiDisplay.length || + oSettings._iDisplayLength == -1 ) + { + oSettings._iDisplayEnd = oSettings.aiDisplay.length; + } + else + { + oSettings._iDisplayEnd = oSettings._iDisplayStart + oSettings._iDisplayLength; + } + } + } + + + + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Note that most of the paging logic is done in + * DataTable.ext.oPagination + */ + + /** + * Generate the node required for default pagination + * @param {object} oSettings dataTables settings object + * @returns {node} Pagination feature node + * @memberof DataTable#oApi + */ + function _fnFeatureHtmlPaginate ( oSettings ) + { + if ( oSettings.oScroll.bInfinite ) + { + return null; + } + + var nPaginate = document.createElement( 'div' ); + nPaginate.className = oSettings.oClasses.sPaging+oSettings.sPaginationType; + + DataTable.ext.oPagination[ oSettings.sPaginationType ].fnInit( oSettings, nPaginate, + function( oSettings ) { + _fnCalculateEnd( oSettings ); + _fnDraw( oSettings ); + } + ); + + /* Add a draw callback for the pagination on first instance, to update the paging display */ + if ( !oSettings.aanFeatures.p ) + { + oSettings.aoDrawCallback.push( { + "fn": function( oSettings ) { + DataTable.ext.oPagination[ oSettings.sPaginationType ].fnUpdate( oSettings, function( oSettings ) { + _fnCalculateEnd( oSettings ); + _fnDraw( oSettings ); + } ); + }, + "sName": "pagination" + } ); + } + return nPaginate; + } + + + /** + * Alter the display settings to change the page + * @param {object} oSettings dataTables settings object + * @param {string|int} mAction Paging action to take: "first", "previous", "next" or "last" + * or page number to jump to (integer) + * @returns {bool} true page has changed, false - no change (no effect) eg 'first' on page 1 + * @memberof DataTable#oApi + */ + function _fnPageChange ( oSettings, mAction ) + { + var iOldStart = oSettings._iDisplayStart; + + if ( typeof mAction === "number" ) + { + oSettings._iDisplayStart = mAction * oSettings._iDisplayLength; + if ( oSettings._iDisplayStart > oSettings.fnRecordsDisplay() ) + { + oSettings._iDisplayStart = 0; + } + } + else if ( mAction == "first" ) + { + oSettings._iDisplayStart = 0; + } + else if ( mAction == "previous" ) + { + oSettings._iDisplayStart = oSettings._iDisplayLength>=0 ? + oSettings._iDisplayStart - oSettings._iDisplayLength : + 0; + + /* Correct for underrun */ + if ( oSettings._iDisplayStart < 0 ) + { + oSettings._iDisplayStart = 0; + } + } + else if ( mAction == "next" ) + { + if ( oSettings._iDisplayLength >= 0 ) + { + /* Make sure we are not over running the display array */ + if ( oSettings._iDisplayStart + oSettings._iDisplayLength < oSettings.fnRecordsDisplay() ) + { + oSettings._iDisplayStart += oSettings._iDisplayLength; + } + } + else + { + oSettings._iDisplayStart = 0; + } + } + else if ( mAction == "last" ) + { + if ( oSettings._iDisplayLength >= 0 ) + { + var iPages = parseInt( (oSettings.fnRecordsDisplay()-1) / oSettings._iDisplayLength, 10 ) + 1; + oSettings._iDisplayStart = (iPages-1) * oSettings._iDisplayLength; + } + else + { + oSettings._iDisplayStart = 0; + } + } + else + { + _fnLog( oSettings, 0, "Unknown paging action: "+mAction ); + } + $(oSettings.oInstance).trigger('page', oSettings); + + return iOldStart != oSettings._iDisplayStart; + } + + + + /** + * Generate the node required for the processing node + * @param {object} oSettings dataTables settings object + * @returns {node} Processing element + * @memberof DataTable#oApi + */ + function _fnFeatureHtmlProcessing ( oSettings ) + { + var nProcessing = document.createElement( 'div' ); + + if ( !oSettings.aanFeatures.r ) + { + nProcessing.id = oSettings.sTableId+'_processing'; + } + nProcessing.innerHTML = oSettings.oLanguage.sProcessing; + nProcessing.className = oSettings.oClasses.sProcessing; + oSettings.nTable.parentNode.insertBefore( nProcessing, oSettings.nTable ); + + return nProcessing; + } + + + /** + * Display or hide the processing indicator + * @param {object} oSettings dataTables settings object + * @param {bool} bShow Show the processing indicator (true) or not (false) + * @memberof DataTable#oApi + */ + function _fnProcessingDisplay ( oSettings, bShow ) + { + if ( oSettings.oFeatures.bProcessing ) + { + var an = oSettings.aanFeatures.r; + for ( var i=0, iLen=an.length ; i<iLen ; i++ ) + { + an[i].style.visibility = bShow ? "visible" : "hidden"; + } + } + + $(oSettings.oInstance).trigger('processing', [oSettings, bShow]); + } + + + + /** + * Add any control elements for the table - specifically scrolling + * @param {object} oSettings dataTables settings object + * @returns {node} Node to add to the DOM + * @memberof DataTable#oApi + */ + function _fnFeatureHtmlTable ( oSettings ) + { + /* Check if scrolling is enabled or not - if not then leave the DOM unaltered */ + if ( oSettings.oScroll.sX === "" && oSettings.oScroll.sY === "" ) + { + return oSettings.nTable; + } + + /* + * The HTML structure that we want to generate in this function is: + * div - nScroller + * div - nScrollHead + * div - nScrollHeadInner + * table - nScrollHeadTable + * thead - nThead + * div - nScrollBody + * table - oSettings.nTable + * thead - nTheadSize + * tbody - nTbody + * div - nScrollFoot + * div - nScrollFootInner + * table - nScrollFootTable + * tfoot - nTfoot + */ + var + nScroller = document.createElement('div'), + nScrollHead = document.createElement('div'), + nScrollHeadInner = document.createElement('div'), + nScrollBody = document.createElement('div'), + nScrollFoot = document.createElement('div'), + nScrollFootInner = document.createElement('div'), + nScrollHeadTable = oSettings.nTable.cloneNode(false), + nScrollFootTable = oSettings.nTable.cloneNode(false), + nThead = oSettings.nTable.getElementsByTagName('thead')[0], + nTfoot = oSettings.nTable.getElementsByTagName('tfoot').length === 0 ? null : + oSettings.nTable.getElementsByTagName('tfoot')[0], + oClasses = oSettings.oClasses; + + nScrollHead.appendChild( nScrollHeadInner ); + nScrollFoot.appendChild( nScrollFootInner ); + nScrollBody.appendChild( oSettings.nTable ); + nScroller.appendChild( nScrollHead ); + nScroller.appendChild( nScrollBody ); + nScrollHeadInner.appendChild( nScrollHeadTable ); + nScrollHeadTable.appendChild( nThead ); + if ( nTfoot !== null ) + { + nScroller.appendChild( nScrollFoot ); + nScrollFootInner.appendChild( nScrollFootTable ); + nScrollFootTable.appendChild( nTfoot ); + } + + nScroller.className = oClasses.sScrollWrapper; + nScrollHead.className = oClasses.sScrollHead; + nScrollHeadInner.className = oClasses.sScrollHeadInner; + nScrollBody.className = oClasses.sScrollBody; + nScrollFoot.className = oClasses.sScrollFoot; + nScrollFootInner.className = oClasses.sScrollFootInner; + + if ( oSettings.oScroll.bAutoCss ) + { + nScrollHead.style.overflow = "hidden"; + nScrollHead.style.position = "relative"; + nScrollFoot.style.overflow = "hidden"; + nScrollBody.style.overflow = "auto"; + } + + nScrollHead.style.border = "0"; + nScrollHead.style.width = "100%"; + nScrollFoot.style.border = "0"; + nScrollHeadInner.style.width = "150%"; /* will be overwritten */ + + /* Modify attributes to respect the clones */ + nScrollHeadTable.removeAttribute('id'); + nScrollHeadTable.style.marginLeft = "0"; + oSettings.nTable.style.marginLeft = "0"; + if ( nTfoot !== null ) + { + nScrollFootTable.removeAttribute('id'); + nScrollFootTable.style.marginLeft = "0"; + } + + /* Move any caption elements from the body to the header */ + var nCaptions = $(oSettings.nTable).children('caption'); + for ( var i=0, iLen=nCaptions.length ; i<iLen ; i++ ) + { + nScrollHeadTable.appendChild( nCaptions[i] ); + } + + /* + * Sizing + */ + /* When xscrolling add the width and a scroller to move the header with the body */ + if ( oSettings.oScroll.sX !== "" ) + { + nScrollHead.style.width = _fnStringToCss( oSettings.oScroll.sX ); + nScrollBody.style.width = _fnStringToCss( oSettings.oScroll.sX ); + + if ( nTfoot !== null ) + { + nScrollFoot.style.width = _fnStringToCss( oSettings.oScroll.sX ); + } + + /* When the body is scrolled, then we also want to scroll the headers */ + $(nScrollBody).scroll( function (e) { + nScrollHead.scrollLeft = this.scrollLeft; + + if ( nTfoot !== null ) + { + nScrollFoot.scrollLeft = this.scrollLeft; + } + } ); + } + + /* When yscrolling, add the height */ + if ( oSettings.oScroll.sY !== "" ) + { + nScrollBody.style.height = _fnStringToCss( oSettings.oScroll.sY ); + } + + /* Redraw - align columns across the tables */ + oSettings.aoDrawCallback.push( { + "fn": _fnScrollDraw, + "sName": "scrolling" + } ); + + /* Infinite scrolling event handlers */ + if ( oSettings.oScroll.bInfinite ) + { + $(nScrollBody).scroll( function() { + /* Use a blocker to stop scrolling from loading more data while other data is still loading */ + if ( !oSettings.bDrawing && $(this).scrollTop() !== 0 ) + { + /* Check if we should load the next data set */ + if ( $(this).scrollTop() + $(this).height() > + $(oSettings.nTable).height() - oSettings.oScroll.iLoadGap ) + { + /* Only do the redraw if we have to - we might be at the end of the data */ + if ( oSettings.fnDisplayEnd() < oSettings.fnRecordsDisplay() ) + { + _fnPageChange( oSettings, 'next' ); + _fnCalculateEnd( oSettings ); + _fnDraw( oSettings ); + } + } + } + } ); + } + + oSettings.nScrollHead = nScrollHead; + oSettings.nScrollFoot = nScrollFoot; + + return nScroller; + } + + + /** + * Update the various tables for resizing. It's a bit of a pig this function, but + * basically the idea to: + * 1. Re-create the table inside the scrolling div + * 2. Take live measurements from the DOM + * 3. Apply the measurements + * 4. Clean up + * @param {object} o dataTables settings object + * @returns {node} Node to add to the DOM + * @memberof DataTable#oApi + */ + function _fnScrollDraw ( o ) + { + var + nScrollHeadInner = o.nScrollHead.getElementsByTagName('div')[0], + nScrollHeadTable = nScrollHeadInner.getElementsByTagName('table')[0], + nScrollBody = o.nTable.parentNode, + i, iLen, j, jLen, anHeadToSize, anHeadSizers, anFootSizers, anFootToSize, oStyle, iVis, + iWidth, aApplied=[], iSanityWidth, + nScrollFootInner = (o.nTFoot !== null) ? o.nScrollFoot.getElementsByTagName('div')[0] : null, + nScrollFootTable = (o.nTFoot !== null) ? nScrollFootInner.getElementsByTagName('table')[0] : null, + ie67 = $.browser.msie && $.browser.version <= 7; + + /* + * 1. Re-create the table inside the scrolling div + */ + + /* Remove the old minimised thead and tfoot elements in the inner table */ + var nTheadSize = o.nTable.getElementsByTagName('thead'); + if ( nTheadSize.length > 0 ) + { + o.nTable.removeChild( nTheadSize[0] ); + } + + var nTfootSize; + if ( o.nTFoot !== null ) + { + /* Remove the old minimised footer element in the cloned header */ + nTfootSize = o.nTable.getElementsByTagName('tfoot'); + if ( nTfootSize.length > 0 ) + { + o.nTable.removeChild( nTfootSize[0] ); + } + } + + /* Clone the current header and footer elements and then place it into the inner table */ + nTheadSize = o.nTHead.cloneNode(true); + o.nTable.insertBefore( nTheadSize, o.nTable.childNodes[0] ); + + if ( o.nTFoot !== null ) + { + nTfootSize = o.nTFoot.cloneNode(true); + o.nTable.insertBefore( nTfootSize, o.nTable.childNodes[1] ); + } + + /* + * 2. Take live measurements from the DOM - do not alter the DOM itself! + */ + + /* Remove old sizing and apply the calculated column widths + * Get the unique column headers in the newly created (cloned) header. We want to apply the + * calclated sizes to this header + */ + if ( o.oScroll.sX === "" ) + { + nScrollBody.style.width = '100%'; + nScrollHeadInner.parentNode.style.width = '100%'; + } + + var nThs = _fnGetUniqueThs( o, nTheadSize ); + for ( i=0, iLen=nThs.length ; i<iLen ; i++ ) + { + iVis = _fnVisibleToColumnIndex( o, i ); + nThs[i].style.width = o.aoColumns[iVis].sWidth; + } + + if ( o.nTFoot !== null ) + { + _fnApplyToChildren( function(n) { + n.style.width = ""; + }, nTfootSize.getElementsByTagName('tr') ); + } + + /* Size the table as a whole */ + iSanityWidth = $(o.nTable).outerWidth(); + if ( o.oScroll.sX === "" ) + { + /* No x scrolling */ + o.nTable.style.width = "100%"; + + /* I know this is rubbish - but IE7 will make the width of the table when 100% include + * the scrollbar - which is shouldn't. When there is a scrollbar we need to take this + * into account. + */ + if ( ie67 && ($('tbody', nScrollBody).height() > nScrollBody.offsetHeight || + $(nScrollBody).css('overflow-y') == "scroll") ) + { + o.nTable.style.width = _fnStringToCss( $(o.nTable).outerWidth()-o.oScroll.iBarWidth ); + } + } + else + { + if ( o.oScroll.sXInner !== "" ) + { + /* x scroll inner has been given - use it */ + o.nTable.style.width = _fnStringToCss(o.oScroll.sXInner); + } + else if ( iSanityWidth == $(nScrollBody).width() && + $(nScrollBody).height() < $(o.nTable).height() ) + { + /* There is y-scrolling - try to take account of the y scroll bar */ + o.nTable.style.width = _fnStringToCss( iSanityWidth-o.oScroll.iBarWidth ); + if ( $(o.nTable).outerWidth() > iSanityWidth-o.oScroll.iBarWidth ) + { + /* Not possible to take account of it */ + o.nTable.style.width = _fnStringToCss( iSanityWidth ); + } + } + else + { + /* All else fails */ + o.nTable.style.width = _fnStringToCss( iSanityWidth ); + } + } + + /* Recalculate the sanity width - now that we've applied the required width, before it was + * a temporary variable. This is required because the column width calculation is done + * before this table DOM is created. + */ + iSanityWidth = $(o.nTable).outerWidth(); + + /* We want the hidden header to have zero height, so remove padding and borders. Then + * set the width based on the real headers + */ + anHeadToSize = o.nTHead.getElementsByTagName('tr'); + anHeadSizers = nTheadSize.getElementsByTagName('tr'); + + _fnApplyToChildren( function(nSizer, nToSize) { + oStyle = nSizer.style; + oStyle.paddingTop = "0"; + oStyle.paddingBottom = "0"; + oStyle.borderTopWidth = "0"; + oStyle.borderBottomWidth = "0"; + oStyle.height = 0; + + iWidth = $(nSizer).width(); + nToSize.style.width = _fnStringToCss( iWidth ); + aApplied.push( iWidth ); + }, anHeadSizers, anHeadToSize ); + $(anHeadSizers).height(0); + + if ( o.nTFoot !== null ) + { + /* Clone the current footer and then place it into the body table as a "hidden header" */ + anFootSizers = nTfootSize.getElementsByTagName('tr'); + anFootToSize = o.nTFoot.getElementsByTagName('tr'); + + _fnApplyToChildren( function(nSizer, nToSize) { + oStyle = nSizer.style; + oStyle.paddingTop = "0"; + oStyle.paddingBottom = "0"; + oStyle.borderTopWidth = "0"; + oStyle.borderBottomWidth = "0"; + oStyle.height = 0; + + iWidth = $(nSizer).width(); + nToSize.style.width = _fnStringToCss( iWidth ); + aApplied.push( iWidth ); + }, anFootSizers, anFootToSize ); + $(anFootSizers).height(0); + } + + /* + * 3. Apply the measurements + */ + + /* "Hide" the header and footer that we used for the sizing. We want to also fix their width + * to what they currently are + */ + _fnApplyToChildren( function(nSizer) { + nSizer.innerHTML = ""; + nSizer.style.width = _fnStringToCss( aApplied.shift() ); + }, anHeadSizers ); + + if ( o.nTFoot !== null ) + { + _fnApplyToChildren( function(nSizer) { + nSizer.innerHTML = ""; + nSizer.style.width = _fnStringToCss( aApplied.shift() ); + }, anFootSizers ); + } + + /* Sanity check that the table is of a sensible width. If not then we are going to get + * misalignment - try to prevent this by not allowing the table to shrink below its min width + */ + if ( $(o.nTable).outerWidth() < iSanityWidth ) + { + /* The min width depends upon if we have a vertical scrollbar visible or not */ + var iCorrection = ((nScrollBody.scrollHeight > nScrollBody.offsetHeight || + $(nScrollBody).css('overflow-y') == "scroll")) ? + iSanityWidth+o.oScroll.iBarWidth : iSanityWidth; + + /* IE6/7 are a law unto themselves... */ + if ( ie67 && (nScrollBody.scrollHeight > + nScrollBody.offsetHeight || $(nScrollBody).css('overflow-y') == "scroll") ) + { + o.nTable.style.width = _fnStringToCss( iCorrection-o.oScroll.iBarWidth ); + } + + /* Apply the calculated minimum width to the table wrappers */ + nScrollBody.style.width = _fnStringToCss( iCorrection ); + nScrollHeadInner.parentNode.style.width = _fnStringToCss( iCorrection ); + + if ( o.nTFoot !== null ) + { + nScrollFootInner.parentNode.style.width = _fnStringToCss( iCorrection ); + } + + /* And give the user a warning that we've stopped the table getting too small */ + if ( o.oScroll.sX === "" ) + { + _fnLog( o, 1, "The table cannot fit into the current element which will cause column"+ + " misalignment. The table has been drawn at its minimum possible width." ); + } + else if ( o.oScroll.sXInner !== "" ) + { + _fnLog( o, 1, "The table cannot fit into the current element which will cause column"+ + " misalignment. Increase the sScrollXInner value or remove it to allow automatic"+ + " calculation" ); + } + } + else + { + nScrollBody.style.width = _fnStringToCss( '100%' ); + nScrollHeadInner.parentNode.style.width = _fnStringToCss( '100%' ); + + if ( o.nTFoot !== null ) + { + nScrollFootInner.parentNode.style.width = _fnStringToCss( '100%' ); + } + } + + + /* + * 4. Clean up + */ + if ( o.oScroll.sY === "" ) + { + /* IE7< puts a vertical scrollbar in place (when it shouldn't be) due to subtracting + * the scrollbar height from the visible display, rather than adding it on. We need to + * set the height in order to sort this. Don't want to do it in any other browsers. + */ + if ( ie67 ) + { + nScrollBody.style.height = _fnStringToCss( o.nTable.offsetHeight+o.oScroll.iBarWidth ); + } + } + + if ( o.oScroll.sY !== "" && o.oScroll.bCollapse ) + { + nScrollBody.style.height = _fnStringToCss( o.oScroll.sY ); + + var iExtra = (o.oScroll.sX !== "" && o.nTable.offsetWidth > nScrollBody.offsetWidth) ? + o.oScroll.iBarWidth : 0; + if ( o.nTable.offsetHeight < nScrollBody.offsetHeight ) + { + nScrollBody.style.height = _fnStringToCss( $(o.nTable).height()+iExtra ); + } + } + + /* Finally set the width's of the header and footer tables */ + var iOuterWidth = $(o.nTable).outerWidth(); + nScrollHeadTable.style.width = _fnStringToCss( iOuterWidth ); + nScrollHeadInner.style.width = _fnStringToCss( iOuterWidth ); + + if ( o.nTFoot !== null ) + { + nScrollFootInner.style.width = _fnStringToCss( o.nTable.offsetWidth ); + nScrollFootTable.style.width = _fnStringToCss( o.nTable.offsetWidth ); + } + + /* If sorting or filtering has occurred, jump the scrolling back to the top */ + if ( o.bSorted || o.bFiltered ) + { + nScrollBody.scrollTop = 0; + } + } + + + /** + * Apply a given function to the display child nodes of an element array (typically + * TD children of TR rows + * @param {function} fn Method to apply to the objects + * @param array {nodes} an1 List of elements to look through for display children + * @param array {nodes} an2 Another list (identical structure to the first) - optional + * @memberof DataTable#oApi + */ + function _fnApplyToChildren( fn, an1, an2 ) + { + for ( var i=0, iLen=an1.length ; i<iLen ; i++ ) + { + for ( var j=0, jLen=an1[i].childNodes.length ; j<jLen ; j++ ) + { + if ( an1[i].childNodes[j].nodeType == 1 ) + { + if ( an2 ) + { + fn( an1[i].childNodes[j], an2[i].childNodes[j] ); + } + else + { + fn( an1[i].childNodes[j] ); + } + } + } + } + } + + + + /** + * Convert a CSS unit width to pixels (e.g. 2em) + * @param {string} sWidth width to be converted + * @param {node} nParent parent to get the with for (required for relative widths) - optional + * @returns {int} iWidth width in pixels + * @memberof DataTable#oApi + */ + function _fnConvertToWidth ( sWidth, nParent ) + { + if ( !sWidth || sWidth === null || sWidth === '' ) + { + return 0; + } + + if ( !nParent ) + { + nParent = document.getElementsByTagName('body')[0]; + } + + var iWidth; + var nTmp = document.createElement( "div" ); + nTmp.style.width = _fnStringToCss( sWidth ); + + nParent.appendChild( nTmp ); + iWidth = nTmp.offsetWidth; + nParent.removeChild( nTmp ); + + return ( iWidth ); + } + + + /** + * Calculate the width of columns for the table + * @param {object} oSettings dataTables settings object + * @memberof DataTable#oApi + */ + function _fnCalculateColumnWidths ( oSettings ) + { + var iTableWidth = oSettings.nTable.offsetWidth; + var iUserInputs = 0; + var iTmpWidth; + var iVisibleColumns = 0; + var iColums = oSettings.aoColumns.length; + var i, iIndex, iCorrector, iWidth; + var oHeaders = $('th', oSettings.nTHead); + var widthAttr = oSettings.nTable.getAttribute('width'); + + /* Convert any user input sizes into pixel sizes */ + for ( i=0 ; i<iColums ; i++ ) + { + if ( oSettings.aoColumns[i].bVisible ) + { + iVisibleColumns++; + + if ( oSettings.aoColumns[i].sWidth !== null ) + { + iTmpWidth = _fnConvertToWidth( oSettings.aoColumns[i].sWidthOrig, + oSettings.nTable.parentNode ); + if ( iTmpWidth !== null ) + { + oSettings.aoColumns[i].sWidth = _fnStringToCss( iTmpWidth ); + } + + iUserInputs++; + } + } + } + + /* If the number of columns in the DOM equals the number that we have to process in + * DataTables, then we can use the offsets that are created by the web-browser. No custom + * sizes can be set in order for this to happen, nor scrolling used + */ + if ( iColums == oHeaders.length && iUserInputs === 0 && iVisibleColumns == iColums && + oSettings.oScroll.sX === "" && oSettings.oScroll.sY === "" ) + { + for ( i=0 ; i<oSettings.aoColumns.length ; i++ ) + { + iTmpWidth = $(oHeaders[i]).width(); + if ( iTmpWidth !== null ) + { + oSettings.aoColumns[i].sWidth = _fnStringToCss( iTmpWidth ); + } + } + } + else + { + /* Otherwise we are going to have to do some calculations to get the width of each column. + * Construct a 1 row table with the widest node in the data, and any user defined widths, + * then insert it into the DOM and allow the browser to do all the hard work of + * calculating table widths. + */ + var + nCalcTmp = oSettings.nTable.cloneNode( false ), + nTheadClone = oSettings.nTHead.cloneNode(true), + nBody = document.createElement( 'tbody' ), + nTr = document.createElement( 'tr' ), + nDivSizing; + + nCalcTmp.removeAttribute( "id" ); + nCalcTmp.appendChild( nTheadClone ); + if ( oSettings.nTFoot !== null ) + { + nCalcTmp.appendChild( oSettings.nTFoot.cloneNode(true) ); + _fnApplyToChildren( function(n) { + n.style.width = ""; + }, nCalcTmp.getElementsByTagName('tr') ); + } + + nCalcTmp.appendChild( nBody ); + nBody.appendChild( nTr ); + + /* Remove any sizing that was previously applied by the styles */ + var jqColSizing = $('thead th', nCalcTmp); + if ( jqColSizing.length === 0 ) + { + jqColSizing = $('tbody tr:eq(0)>td', nCalcTmp); + } + + /* Apply custom sizing to the cloned header */ + var nThs = _fnGetUniqueThs( oSettings, nTheadClone ); + iCorrector = 0; + for ( i=0 ; i<iColums ; i++ ) + { + var oColumn = oSettings.aoColumns[i]; + if ( oColumn.bVisible && oColumn.sWidthOrig !== null && oColumn.sWidthOrig !== "" ) + { + nThs[i-iCorrector].style.width = _fnStringToCss( oColumn.sWidthOrig ); + } + else if ( oColumn.bVisible ) + { + nThs[i-iCorrector].style.width = ""; + } + else + { + iCorrector++; + } + } + + /* Find the biggest td for each column and put it into the table */ + for ( i=0 ; i<iColums ; i++ ) + { + if ( oSettings.aoColumns[i].bVisible ) + { + var nTd = _fnGetWidestNode( oSettings, i ); + if ( nTd !== null ) + { + nTd = nTd.cloneNode(true); + if ( oSettings.aoColumns[i].sContentPadding !== "" ) + { + nTd.innerHTML += oSettings.aoColumns[i].sContentPadding; + } + nTr.appendChild( nTd ); + } + } + } + + /* Build the table and 'display' it */ + var nWrapper = oSettings.nTable.parentNode; + nWrapper.appendChild( nCalcTmp ); + + /* When scrolling (X or Y) we want to set the width of the table as appropriate. However, + * when not scrolling leave the table width as it is. This results in slightly different, + * but I think correct behaviour + */ + if ( oSettings.oScroll.sX !== "" && oSettings.oScroll.sXInner !== "" ) + { + nCalcTmp.style.width = _fnStringToCss(oSettings.oScroll.sXInner); + } + else if ( oSettings.oScroll.sX !== "" ) + { + nCalcTmp.style.width = ""; + if ( $(nCalcTmp).width() < nWrapper.offsetWidth ) + { + nCalcTmp.style.width = _fnStringToCss( nWrapper.offsetWidth ); + } + } + else if ( oSettings.oScroll.sY !== "" ) + { + nCalcTmp.style.width = _fnStringToCss( nWrapper.offsetWidth ); + } + else if ( widthAttr ) + { + nCalcTmp.style.width = _fnStringToCss( widthAttr ); + } + nCalcTmp.style.visibility = "hidden"; + + /* Scrolling considerations */ + _fnScrollingWidthAdjust( oSettings, nCalcTmp ); + + /* Read the width's calculated by the browser and store them for use by the caller. We + * first of all try to use the elements in the body, but it is possible that there are + * no elements there, under which circumstances we use the header elements + */ + var oNodes = $("tbody tr:eq(0)", nCalcTmp).children(); + if ( oNodes.length === 0 ) + { + oNodes = _fnGetUniqueThs( oSettings, $('thead', nCalcTmp)[0] ); + } + + /* Browsers need a bit of a hand when a width is assigned to any columns when + * x-scrolling as they tend to collapse the table to the min-width, even if + * we sent the column widths. So we need to keep track of what the table width + * should be by summing the user given values, and the automatic values + */ + if ( oSettings.oScroll.sX !== "" ) + { + var iTotal = 0; + iCorrector = 0; + for ( i=0 ; i<oSettings.aoColumns.length ; i++ ) + { + if ( oSettings.aoColumns[i].bVisible ) + { + if ( oSettings.aoColumns[i].sWidthOrig === null ) + { + iTotal += $(oNodes[iCorrector]).outerWidth(); + } + else + { + iTotal += parseInt(oSettings.aoColumns[i].sWidth.replace('px',''), 10) + + ($(oNodes[iCorrector]).outerWidth() - $(oNodes[iCorrector]).width()); + } + iCorrector++; + } + } + + nCalcTmp.style.width = _fnStringToCss( iTotal ); + oSettings.nTable.style.width = _fnStringToCss( iTotal ); + } + + iCorrector = 0; + for ( i=0 ; i<oSettings.aoColumns.length ; i++ ) + { + if ( oSettings.aoColumns[i].bVisible ) + { + iWidth = $(oNodes[iCorrector]).width(); + if ( iWidth !== null && iWidth > 0 ) + { + oSettings.aoColumns[i].sWidth = _fnStringToCss( iWidth ); + } + iCorrector++; + } + } + + var cssWidth = $(nCalcTmp).css('width'); + oSettings.nTable.style.width = (cssWidth.indexOf('%') !== -1) ? + cssWidth : _fnStringToCss( $(nCalcTmp).outerWidth() ); + nCalcTmp.parentNode.removeChild( nCalcTmp ); + } + + if ( widthAttr ) + { + oSettings.nTable.style.width = _fnStringToCss( widthAttr ); + } + } + + + /** + * Adjust a table's width to take account of scrolling + * @param {object} oSettings dataTables settings object + * @param {node} n table node + * @memberof DataTable#oApi + */ + function _fnScrollingWidthAdjust ( oSettings, n ) + { + if ( oSettings.oScroll.sX === "" && oSettings.oScroll.sY !== "" ) + { + /* When y-scrolling only, we want to remove the width of the scroll bar so the table + * + scroll bar will fit into the area avaialble. + */ + var iOrigWidth = $(n).width(); + n.style.width = _fnStringToCss( $(n).outerWidth()-oSettings.oScroll.iBarWidth ); + } + else if ( oSettings.oScroll.sX !== "" ) + { + /* When x-scrolling both ways, fix the table at it's current size, without adjusting */ + n.style.width = _fnStringToCss( $(n).outerWidth() ); + } + } + + + /** + * Get the widest node + * @param {object} oSettings dataTables settings object + * @param {int} iCol column of interest + * @returns {string} max strlens for each column + * @memberof DataTable#oApi + */ + function _fnGetWidestNode( oSettings, iCol ) + { + var iMaxIndex = _fnGetMaxLenString( oSettings, iCol ); + if ( iMaxIndex < 0 ) + { + return null; + } + + if ( oSettings.aoData[iMaxIndex].nTr === null ) + { + var n = document.createElement('td'); + n.innerHTML = _fnGetCellData( oSettings, iMaxIndex, iCol, '' ); + return n; + } + return _fnGetTdNodes(oSettings, iMaxIndex)[iCol]; + } + + + /** + * Get the maximum strlen for each data column + * @param {object} oSettings dataTables settings object + * @param {int} iCol column of interest + * @returns {string} max strlens for each column + * @memberof DataTable#oApi + */ + function _fnGetMaxLenString( oSettings, iCol ) + { + var iMax = -1; + var iMaxIndex = -1; + + for ( var i=0 ; i<oSettings.aoData.length ; i++ ) + { + var s = _fnGetCellData( oSettings, i, iCol, 'display' )+""; + s = s.replace( /<.*?>/g, "" ); + if ( s.length > iMax ) + { + iMax = s.length; + iMaxIndex = i; + } + } + + return iMaxIndex; + } + + + /** + * Append a CSS unit (only if required) to a string + * @param {array} aArray1 first array + * @param {array} aArray2 second array + * @returns {int} 0 if match, 1 if length is different, 2 if no match + * @memberof DataTable#oApi + */ + function _fnStringToCss( s ) + { + if ( s === null ) + { + return "0px"; + } + + if ( typeof s == 'number' ) + { + if ( s < 0 ) + { + return "0px"; + } + return s+"px"; + } + + /* Check if the last character is not 0-9 */ + var c = s.charCodeAt( s.length-1 ); + if (c < 0x30 || c > 0x39) + { + return s; + } + return s+"px"; + } + + + /** + * Get the width of a scroll bar in this browser being used + * @returns {int} width in pixels + * @memberof DataTable#oApi + */ + function _fnScrollBarWidth () + { + var inner = document.createElement('p'); + var style = inner.style; + style.width = "100%"; + style.height = "200px"; + style.padding = "0px"; + + var outer = document.createElement('div'); + style = outer.style; + style.position = "absolute"; + style.top = "0px"; + style.left = "0px"; + style.visibility = "hidden"; + style.width = "200px"; + style.height = "150px"; + style.padding = "0px"; + style.overflow = "hidden"; + outer.appendChild(inner); + + document.body.appendChild(outer); + var w1 = inner.offsetWidth; + outer.style.overflow = 'scroll'; + var w2 = inner.offsetWidth; + if ( w1 == w2 ) + { + w2 = outer.clientWidth; + } + + document.body.removeChild(outer); + return (w1 - w2); + } + + + + /** + * Change the order of the table + * @param {object} oSettings dataTables settings object + * @param {bool} bApplyClasses optional - should we apply classes or not + * @memberof DataTable#oApi + */ + function _fnSort ( oSettings, bApplyClasses ) + { + var + i, iLen, j, jLen, k, kLen, + sDataType, nTh, + aaSort = [], + aiOrig = [], + oSort = DataTable.ext.oSort, + aoData = oSettings.aoData, + aoColumns = oSettings.aoColumns, + oAria = oSettings.oLanguage.oAria; + + /* No sorting required if server-side or no sorting array */ + if ( !oSettings.oFeatures.bServerSide && + (oSettings.aaSorting.length !== 0 || oSettings.aaSortingFixed !== null) ) + { + if ( oSettings.aaSortingFixed !== null ) + { + aaSort = oSettings.aaSortingFixed.concat( oSettings.aaSorting ); + } + else + { + aaSort = oSettings.aaSorting.slice(); + } + + /* If there is a sorting data type, and a fuction belonging to it, then we need to + * get the data from the developer's function and apply it for this column + */ + for ( i=0 ; i<aaSort.length ; i++ ) + { + var iColumn = aaSort[i][0]; + var iVisColumn = _fnColumnIndexToVisible( oSettings, iColumn ); + sDataType = oSettings.aoColumns[ iColumn ].sSortDataType; + if ( DataTable.ext.afnSortData[sDataType] ) + { + var aData = DataTable.ext.afnSortData[sDataType]( oSettings, iColumn, iVisColumn ); + for ( j=0, jLen=aoData.length ; j<jLen ; j++ ) + { + _fnSetCellData( oSettings, j, iColumn, aData[j] ); + } + } + } + + /* Create a value - key array of the current row positions such that we can use their + * current position during the sort, if values match, in order to perform stable sorting + */ + for ( i=0, iLen=oSettings.aiDisplayMaster.length ; i<iLen ; i++ ) + { + aiOrig[ oSettings.aiDisplayMaster[i] ] = i; + } + + /* Build an internal data array which is specific to the sort, so we can get and prep + * the data to be sorted only once, rather than needing to do it every time the sorting + * function runs. This make the sorting function a very simple comparison + */ + var iSortLen = aaSort.length; + var fnSortFormat, aDataSort; + for ( i=0, iLen=aoData.length ; i<iLen ; i++ ) + { + for ( j=0 ; j<iSortLen ; j++ ) + { + aDataSort = aoColumns[ aaSort[j][0] ].aDataSort; + + for ( k=0, kLen=aDataSort.length ; k<kLen ; k++ ) + { + sDataType = aoColumns[ aDataSort[k] ].sType; + fnSortFormat = oSort[ (sDataType ? sDataType : 'string')+"-pre" ]; + + aoData[i]._aSortData[ aDataSort[k] ] = fnSortFormat ? + fnSortFormat( _fnGetCellData( oSettings, i, aDataSort[k], 'sort' ) ) : + _fnGetCellData( oSettings, i, aDataSort[k], 'sort' ); + } + } + } + + /* Do the sort - here we want multi-column sorting based on a given data source (column) + * and sorting function (from oSort) in a certain direction. It's reasonably complex to + * follow on it's own, but this is what we want (example two column sorting): + * fnLocalSorting = function(a,b){ + * var iTest; + * iTest = oSort['string-asc']('data11', 'data12'); + * if (iTest !== 0) + * return iTest; + * iTest = oSort['numeric-desc']('data21', 'data22'); + * if (iTest !== 0) + * return iTest; + * return oSort['numeric-asc']( aiOrig[a], aiOrig[b] ); + * } + * Basically we have a test for each sorting column, if the data in that column is equal, + * test the next column. If all columns match, then we use a numeric sort on the row + * positions in the original data array to provide a stable sort. + */ + oSettings.aiDisplayMaster.sort( function ( a, b ) { + var k, l, lLen, iTest, aDataSort, sDataType; + for ( k=0 ; k<iSortLen ; k++ ) + { + aDataSort = aoColumns[ aaSort[k][0] ].aDataSort; + + for ( l=0, lLen=aDataSort.length ; l<lLen ; l++ ) + { + sDataType = aoColumns[ aDataSort[l] ].sType; + + iTest = oSort[ (sDataType ? sDataType : 'string')+"-"+aaSort[k][1] ]( + aoData[a]._aSortData[ aDataSort[l] ], + aoData[b]._aSortData[ aDataSort[l] ] + ); + + if ( iTest !== 0 ) + { + return iTest; + } + } + } + + return oSort['numeric-asc']( aiOrig[a], aiOrig[b] ); + } ); + } + + /* Alter the sorting classes to take account of the changes */ + if ( (bApplyClasses === undefined || bApplyClasses) && !oSettings.oFeatures.bDeferRender ) + { + _fnSortingClasses( oSettings ); + } + + for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ ) + { + nTh = aoColumns[i].nTh; + nTh.removeAttribute('aria-sort'); + nTh.removeAttribute('aria-label'); + + /* In ARIA only the first sorting column can be marked as sorting - no multi-sort option */ + if ( aoColumns[i].bSortable ) + { + if ( aaSort.length > 0 && aaSort[0][0] == i ) + { + nTh.setAttribute('aria-sort', aaSort[0][1]=="asc" ? "ascending" : "descending" ); + + var nextSort = (aoColumns[i].asSorting[ aaSort[0][2]+1 ]) ? + aoColumns[i].asSorting[ aaSort[0][2]+1 ] : aoColumns[i].asSorting[0]; + nTh.setAttribute('aria-label', aoColumns[i].sTitle+ + (nextSort=="asc" ? oAria.sSortAscending : oAria.sSortDescending) ); + } + else + { + nTh.setAttribute('aria-label', aoColumns[i].sTitle+ + (aoColumns[i].asSorting[0]=="asc" ? oAria.sSortAscending : oAria.sSortDescending) ); + } + } + else + { + nTh.setAttribute('aria-label', aoColumns[i].sTitle); + } + } + + /* Tell the draw function that we have sorted the data */ + oSettings.bSorted = true; + $(oSettings.oInstance).trigger('sort', oSettings); + + /* Copy the master data into the draw array and re-draw */ + if ( oSettings.oFeatures.bFilter ) + { + /* _fnFilter() will redraw the table for us */ + _fnFilterComplete( oSettings, oSettings.oPreviousSearch, 1 ); + } + else + { + oSettings.aiDisplay = oSettings.aiDisplayMaster.slice(); + oSettings._iDisplayStart = 0; /* reset display back to page 0 */ + _fnCalculateEnd( oSettings ); + _fnDraw( oSettings ); + } + } + + + /** + * Attach a sort handler (click) to a node + * @param {object} oSettings dataTables settings object + * @param {node} nNode node to attach the handler to + * @param {int} iDataIndex column sorting index + * @param {function} [fnCallback] callback function + * @memberof DataTable#oApi + */ + function _fnSortAttachListener ( oSettings, nNode, iDataIndex, fnCallback ) + { + _fnBindAction( nNode, {}, function (e) { + /* If the column is not sortable - don't to anything */ + if ( oSettings.aoColumns[iDataIndex].bSortable === false ) + { + return; + } + + /* + * This is a little bit odd I admit... I declare a temporary function inside the scope of + * _fnBuildHead and the click handler in order that the code presented here can be used + * twice - once for when bProcessing is enabled, and another time for when it is + * disabled, as we need to perform slightly different actions. + * Basically the issue here is that the Javascript engine in modern browsers don't + * appear to allow the rendering engine to update the display while it is still excuting + * it's thread (well - it does but only after long intervals). This means that the + * 'processing' display doesn't appear for a table sort. To break the js thread up a bit + * I force an execution break by using setTimeout - but this breaks the expected + * thread continuation for the end-developer's point of view (their code would execute + * too early), so we on;y do it when we absolutely have to. + */ + var fnInnerSorting = function () { + var iColumn, iNextSort; + + /* If the shift key is pressed then we are multipe column sorting */ + if ( e.shiftKey ) + { + /* Are we already doing some kind of sort on this column? */ + var bFound = false; + for ( var i=0 ; i<oSettings.aaSorting.length ; i++ ) + { + if ( oSettings.aaSorting[i][0] == iDataIndex ) + { + bFound = true; + iColumn = oSettings.aaSorting[i][0]; + iNextSort = oSettings.aaSorting[i][2]+1; + + if ( !oSettings.aoColumns[iColumn].asSorting[iNextSort] ) + { + /* Reached the end of the sorting options, remove from multi-col sort */ + oSettings.aaSorting.splice( i, 1 ); + } + else + { + /* Move onto next sorting direction */ + oSettings.aaSorting[i][1] = oSettings.aoColumns[iColumn].asSorting[iNextSort]; + oSettings.aaSorting[i][2] = iNextSort; + } + break; + } + } + + /* No sort yet - add it in */ + if ( bFound === false ) + { + oSettings.aaSorting.push( [ iDataIndex, + oSettings.aoColumns[iDataIndex].asSorting[0], 0 ] ); + } + } + else + { + /* If no shift key then single column sort */ + if ( oSettings.aaSorting.length == 1 && oSettings.aaSorting[0][0] == iDataIndex ) + { + iColumn = oSettings.aaSorting[0][0]; + iNextSort = oSettings.aaSorting[0][2]+1; + if ( !oSettings.aoColumns[iColumn].asSorting[iNextSort] ) + { + iNextSort = 0; + } + oSettings.aaSorting[0][1] = oSettings.aoColumns[iColumn].asSorting[iNextSort]; + oSettings.aaSorting[0][2] = iNextSort; + } + else + { + oSettings.aaSorting.splice( 0, oSettings.aaSorting.length ); + oSettings.aaSorting.push( [ iDataIndex, + oSettings.aoColumns[iDataIndex].asSorting[0], 0 ] ); + } + } + + /* Run the sort */ + _fnSort( oSettings ); + }; /* /fnInnerSorting */ + + if ( !oSettings.oFeatures.bProcessing ) + { + fnInnerSorting(); + } + else + { + _fnProcessingDisplay( oSettings, true ); + setTimeout( function() { + fnInnerSorting(); + if ( !oSettings.oFeatures.bServerSide ) + { + _fnProcessingDisplay( oSettings, false ); + } + }, 0 ); + } + + /* Call the user specified callback function - used for async user interaction */ + if ( typeof fnCallback == 'function' ) + { + fnCallback( oSettings ); + } + } ); + } + + + /** + * Set the sorting classes on the header, Note: it is safe to call this function + * when bSort and bSortClasses are false + * @param {object} oSettings dataTables settings object + * @memberof DataTable#oApi + */ + function _fnSortingClasses( oSettings ) + { + var i, iLen, j, jLen, iFound; + var aaSort, sClass; + var iColumns = oSettings.aoColumns.length; + var oClasses = oSettings.oClasses; + + for ( i=0 ; i<iColumns ; i++ ) + { + if ( oSettings.aoColumns[i].bSortable ) + { + $(oSettings.aoColumns[i].nTh).removeClass( oClasses.sSortAsc +" "+ oClasses.sSortDesc + + " "+ oSettings.aoColumns[i].sSortingClass ); + } + } + + if ( oSettings.aaSortingFixed !== null ) + { + aaSort = oSettings.aaSortingFixed.concat( oSettings.aaSorting ); + } + else + { + aaSort = oSettings.aaSorting.slice(); + } + + /* Apply the required classes to the header */ + for ( i=0 ; i<oSettings.aoColumns.length ; i++ ) + { + if ( oSettings.aoColumns[i].bSortable ) + { + sClass = oSettings.aoColumns[i].sSortingClass; + iFound = -1; + for ( j=0 ; j<aaSort.length ; j++ ) + { + if ( aaSort[j][0] == i ) + { + sClass = ( aaSort[j][1] == "asc" ) ? + oClasses.sSortAsc : oClasses.sSortDesc; + iFound = j; + break; + } + } + $(oSettings.aoColumns[i].nTh).addClass( sClass ); + + if ( oSettings.bJUI ) + { + /* jQuery UI uses extra markup */ + var jqSpan = $("span."+oClasses.sSortIcon, oSettings.aoColumns[i].nTh); + jqSpan.removeClass(oClasses.sSortJUIAsc +" "+ oClasses.sSortJUIDesc +" "+ + oClasses.sSortJUI +" "+ oClasses.sSortJUIAscAllowed +" "+ oClasses.sSortJUIDescAllowed ); + + var sSpanClass; + if ( iFound == -1 ) + { + sSpanClass = oSettings.aoColumns[i].sSortingClassJUI; + } + else if ( aaSort[iFound][1] == "asc" ) + { + sSpanClass = oClasses.sSortJUIAsc; + } + else + { + sSpanClass = oClasses.sSortJUIDesc; + } + + jqSpan.addClass( sSpanClass ); + } + } + else + { + /* No sorting on this column, so add the base class. This will have been assigned by + * _fnAddColumn + */ + $(oSettings.aoColumns[i].nTh).addClass( oSettings.aoColumns[i].sSortingClass ); + } + } + + /* + * Apply the required classes to the table body + * Note that this is given as a feature switch since it can significantly slow down a sort + * on large data sets (adding and removing of classes is always slow at the best of times..) + * Further to this, note that this code is admitadly fairly ugly. It could be made a lot + * simpiler using jQuery selectors and add/removeClass, but that is significantly slower + * (on the order of 5 times slower) - hence the direct DOM manipulation here. + * Note that for defered drawing we do use jQuery - the reason being that taking the first + * row found to see if the whole column needs processed can miss classes since the first + * column might be new. + */ + sClass = oClasses.sSortColumn; + + if ( oSettings.oFeatures.bSort && oSettings.oFeatures.bSortClasses ) + { + var nTds = _fnGetTdNodes( oSettings ); + + /* Remove the old classes */ + if ( oSettings.oFeatures.bDeferRender ) + { + $(nTds).removeClass(sClass+'1 '+sClass+'2 '+sClass+'3'); + } + else if ( nTds.length >= iColumns ) + { + for ( i=0 ; i<iColumns ; i++ ) + { + if ( nTds[i].className.indexOf(sClass+"1") != -1 ) + { + for ( j=0, jLen=(nTds.length/iColumns) ; j<jLen ; j++ ) + { + nTds[(iColumns*j)+i].className = + $.trim( nTds[(iColumns*j)+i].className.replace( sClass+"1", "" ) ); + } + } + else if ( nTds[i].className.indexOf(sClass+"2") != -1 ) + { + for ( j=0, jLen=(nTds.length/iColumns) ; j<jLen ; j++ ) + { + nTds[(iColumns*j)+i].className = + $.trim( nTds[(iColumns*j)+i].className.replace( sClass+"2", "" ) ); + } + } + else if ( nTds[i].className.indexOf(sClass+"3") != -1 ) + { + for ( j=0, jLen=(nTds.length/iColumns) ; j<jLen ; j++ ) + { + nTds[(iColumns*j)+i].className = + $.trim( nTds[(iColumns*j)+i].className.replace( " "+sClass+"3", "" ) ); + } + } + } + } + + /* Add the new classes to the table */ + var iClass = 1, iTargetCol; + for ( i=0 ; i<aaSort.length ; i++ ) + { + iTargetCol = parseInt( aaSort[i][0], 10 ); + for ( j=0, jLen=(nTds.length/iColumns) ; j<jLen ; j++ ) + { + nTds[(iColumns*j)+iTargetCol].className += " "+sClass+iClass; + } + + if ( iClass < 3 ) + { + iClass++; + } + } + } + } + + + + /** + * Save the state of a table in a cookie such that the page can be reloaded + * @param {object} oSettings dataTables settings object + * @memberof DataTable#oApi + */ + function _fnSaveState ( oSettings ) + { + if ( !oSettings.oFeatures.bStateSave || oSettings.bDestroying ) + { + return; + } + + /* Store the interesting variables */ + var i, iLen, bInfinite=oSettings.oScroll.bInfinite; + var oState = { + "iCreate": new Date().getTime(), + "iStart": (bInfinite ? 0 : oSettings._iDisplayStart), + "iEnd": (bInfinite ? oSettings._iDisplayLength : oSettings._iDisplayEnd), + "iLength": oSettings._iDisplayLength, + "aaSorting": $.extend( true, [], oSettings.aaSorting ), + "oSearch": $.extend( true, {}, oSettings.oPreviousSearch ), + "aoSearchCols": $.extend( true, [], oSettings.aoPreSearchCols ), + "abVisCols": [] + }; + + for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ ) + { + oState.abVisCols.push( oSettings.aoColumns[i].bVisible ); + } + + _fnCallbackFire( oSettings, "aoStateSaveParams", 'stateSaveParams', [oSettings, oState] ); + + oSettings.fnStateSave.call( oSettings.oInstance, oSettings, oState ); + } + + + /** + * Attempt to load a saved table state from a cookie + * @param {object} oSettings dataTables settings object + * @param {object} oInit DataTables init object so we can override settings + * @memberof DataTable#oApi + */ + function _fnLoadState ( oSettings, oInit ) + { + if ( !oSettings.oFeatures.bStateSave ) + { + return; + } + + var oData = oSettings.fnStateLoad.call( oSettings.oInstance, oSettings ); + if ( !oData ) + { + return; + } + + /* Allow custom and plug-in manipulation functions to alter the saved data set and + * cancelling of loading by returning false + */ + var abStateLoad = _fnCallbackFire( oSettings, 'aoStateLoadParams', 'stateLoadParams', [oSettings, oData] ); + if ( $.inArray( false, abStateLoad ) !== -1 ) + { + return; + } + + /* Store the saved state so it might be accessed at any time */ + oSettings.oLoadedState = $.extend( true, {}, oData ); + + /* Restore key features */ + oSettings._iDisplayStart = oData.iStart; + oSettings.iInitDisplayStart = oData.iStart; + oSettings._iDisplayEnd = oData.iEnd; + oSettings._iDisplayLength = oData.iLength; + oSettings.aaSorting = oData.aaSorting.slice(); + oSettings.saved_aaSorting = oData.aaSorting.slice(); + + /* Search filtering */ + $.extend( oSettings.oPreviousSearch, oData.oSearch ); + $.extend( true, oSettings.aoPreSearchCols, oData.aoSearchCols ); + + /* Column visibility state + * Pass back visibiliy settings to the init handler, but to do not here override + * the init object that the user might have passed in + */ + oInit.saved_aoColumns = []; + for ( var i=0 ; i<oData.abVisCols.length ; i++ ) + { + oInit.saved_aoColumns[i] = {}; + oInit.saved_aoColumns[i].bVisible = oData.abVisCols[i]; + } + + _fnCallbackFire( oSettings, 'aoStateLoaded', 'stateLoaded', [oSettings, oData] ); + } + + + /** + * Create a new cookie with a value to store the state of a table + * @param {string} sName name of the cookie to create + * @param {string} sValue the value the cookie should take + * @param {int} iSecs duration of the cookie + * @param {string} sBaseName sName is made up of the base + file name - this is the base + * @param {function} fnCallback User definable function to modify the cookie + * @memberof DataTable#oApi + */ + function _fnCreateCookie ( sName, sValue, iSecs, sBaseName, fnCallback ) + { + var date = new Date(); + date.setTime( date.getTime()+(iSecs*1000) ); + + /* + * Shocking but true - it would appear IE has major issues with having the path not having + * a trailing slash on it. We need the cookie to be available based on the path, so we + * have to append the file name to the cookie name. Appalling. Thanks to vex for adding the + * patch to use at least some of the path + */ + var aParts = window.location.pathname.split('/'); + var sNameFile = sName + '_' + aParts.pop().replace(/[\/:]/g,"").toLowerCase(); + var sFullCookie, oData; + + if ( fnCallback !== null ) + { + oData = (typeof $.parseJSON === 'function') ? + $.parseJSON( sValue ) : eval( '('+sValue+')' ); + sFullCookie = fnCallback( sNameFile, oData, date.toGMTString(), + aParts.join('/')+"/" ); + } + else + { + sFullCookie = sNameFile + "=" + encodeURIComponent(sValue) + + "; expires=" + date.toGMTString() +"; path=" + aParts.join('/')+"/"; + } + + /* Are we going to go over the cookie limit of 4KiB? If so, try to delete a cookies + * belonging to DataTables. This is FAR from bullet proof + */ + var sOldName="", iOldTime=9999999999999; + var iLength = _fnReadCookie( sNameFile )!==null ? document.cookie.length : + sFullCookie.length + document.cookie.length; + + if ( iLength+10 > 4096 ) /* Magic 10 for padding */ + { + var aCookies =document.cookie.split(';'); + for ( var i=0, iLen=aCookies.length ; i<iLen ; i++ ) + { + if ( aCookies[i].indexOf( sBaseName ) != -1 ) + { + /* It's a DataTables cookie, so eval it and check the time stamp */ + var aSplitCookie = aCookies[i].split('='); + try { oData = eval( '('+decodeURIComponent(aSplitCookie[1])+')' ); } + catch( e ) { continue; } + + if ( oData.iCreate && oData.iCreate < iOldTime ) + { + sOldName = aSplitCookie[0]; + iOldTime = oData.iCreate; + } + } + } + + if ( sOldName !== "" ) + { + document.cookie = sOldName+"=; expires=Thu, 01-Jan-1970 00:00:01 GMT; path="+ + aParts.join('/') + "/"; + } + } + + document.cookie = sFullCookie; + } + + + /** + * Read an old cookie to get a cookie with an old table state + * @param {string} sName name of the cookie to read + * @returns {string} contents of the cookie - or null if no cookie with that name found + * @memberof DataTable#oApi + */ + function _fnReadCookie ( sName ) + { + var + aParts = window.location.pathname.split('/'), + sNameEQ = sName + '_' + aParts[aParts.length-1].replace(/[\/:]/g,"").toLowerCase() + '=', + sCookieContents = document.cookie.split(';'); + + for( var i=0 ; i<sCookieContents.length ; i++ ) + { + var c = sCookieContents[i]; + + while (c.charAt(0)==' ') + { + c = c.substring(1,c.length); + } + + if (c.indexOf(sNameEQ) === 0) + { + return decodeURIComponent( c.substring(sNameEQ.length,c.length) ); + } + } + return null; + } + + + + /** + * Return the settings object for a particular table + * @param {node} nTable table we are using as a dataTable + * @returns {object} Settings object - or null if not found + * @memberof DataTable#oApi + */ + function _fnSettingsFromNode ( nTable ) + { + for ( var i=0 ; i<DataTable.settings.length ; i++ ) + { + if ( DataTable.settings[i].nTable === nTable ) + { + return DataTable.settings[i]; + } + } + + return null; + } + + + /** + * Return an array with the TR nodes for the table + * @param {object} oSettings dataTables settings object + * @returns {array} TR array + * @memberof DataTable#oApi + */ + function _fnGetTrNodes ( oSettings ) + { + var aNodes = []; + var aoData = oSettings.aoData; + for ( var i=0, iLen=aoData.length ; i<iLen ; i++ ) + { + if ( aoData[i].nTr !== null ) + { + aNodes.push( aoData[i].nTr ); + } + } + return aNodes; + } + + + /** + * Return an flat array with all TD nodes for the table, or row + * @param {object} oSettings dataTables settings object + * @param {int} [iIndividualRow] aoData index to get the nodes for - optional + * if not given then the return array will contain all nodes for the table + * @returns {array} TD array + * @memberof DataTable#oApi + */ + function _fnGetTdNodes ( oSettings, iIndividualRow ) + { + var anReturn = []; + var iCorrector; + var anTds; + var iRow, iRows=oSettings.aoData.length, + iColumn, iColumns, oData, sNodeName, iStart=0, iEnd=iRows; + + /* Allow the collection to be limited to just one row */ + if ( iIndividualRow !== undefined ) + { + iStart = iIndividualRow; + iEnd = iIndividualRow+1; + } + + for ( iRow=iStart ; iRow<iEnd ; iRow++ ) + { + oData = oSettings.aoData[iRow]; + if ( oData.nTr !== null ) + { + /* get the TD child nodes - taking into account text etc nodes */ + anTds = []; + for ( iColumn=0, iColumns=oData.nTr.childNodes.length ; iColumn<iColumns ; iColumn++ ) + { + sNodeName = oData.nTr.childNodes[iColumn].nodeName.toLowerCase(); + if ( sNodeName == 'td' || sNodeName == 'th' ) + { + anTds.push( oData.nTr.childNodes[iColumn] ); + } + } + + iCorrector = 0; + for ( iColumn=0, iColumns=oSettings.aoColumns.length ; iColumn<iColumns ; iColumn++ ) + { + if ( oSettings.aoColumns[iColumn].bVisible ) + { + anReturn.push( anTds[iColumn-iCorrector] ); + } + else + { + anReturn.push( oData._anHidden[iColumn] ); + iCorrector++; + } + } + } + } + + return anReturn; + } + + + /** + * Log an error message + * @param {object} oSettings dataTables settings object + * @param {int} iLevel log error messages, or display them to the user + * @param {string} sMesg error message + * @memberof DataTable#oApi + */ + function _fnLog( oSettings, iLevel, sMesg ) + { + var sAlert = (oSettings===null) ? + "DataTables warning: "+sMesg : + "DataTables warning (table id = '"+oSettings.sTableId+"'): "+sMesg; + + if ( iLevel === 0 ) + { + if ( DataTable.ext.sErrMode == 'alert' ) + { + alert( sAlert ); + } + else + { + throw sAlert; + } + return; + } + else if ( console !== undefined && console.log ) + { + console.log( sAlert ); + } + } + + + /** + * See if a property is defined on one object, if so assign it to the other object + * @param {object} oRet target object + * @param {object} oSrc source object + * @param {string} sName property + * @param {string} [sMappedName] name to map too - optional, sName used if not given + * @memberof DataTable#oApi + */ + function _fnMap( oRet, oSrc, sName, sMappedName ) + { + if ( sMappedName === undefined ) + { + sMappedName = sName; + } + if ( oSrc[sName] !== undefined ) + { + oRet[sMappedName] = oSrc[sName]; + } + } + + + /** + * Extend objects - very similar to jQuery.extend, but deep copy objects, and shallow + * copy arrays. The reason we need to do this, is that we don't want to deep copy array + * init values (such as aaSorting) since the dev wouldn't be able to override them, but + * we do want to deep copy arrays. + * @param {object} oOut Object to extend + * @param {object} oExtender Object from which the properties will be applied to oOut + * @returns {object} oOut Reference, just for convenience - oOut === the return. + * @memberof DataTable#oApi + * @todo This doesn't take account of arrays inside the deep copied objects. + */ + function _fnExtend( oOut, oExtender ) + { + for ( var prop in oOut ) + { + if ( oOut.hasOwnProperty(prop) && oExtender[prop] !== undefined ) + { + if ( typeof oInit[prop] === 'object' && $.isArray(oExtender[prop]) === false ) + { + $.extend( true, oOut[prop], oExtender[prop] ); + } + else + { + oOut[prop] = oExtender[prop]; + } + } + } + + return oOut; + } + + + /** + * Bind an event handers to allow a click or return key to activate the callback. + * This is good for accessability since a return on the keyboard will have the + * same effect as a click, if the element has focus. + * @param {element} n Element to bind the action to + * @param {object} oData Data object to pass to the triggered function + * @param {function) fn Callback function for when the event is triggered + * @memberof DataTable#oApi + */ + function _fnBindAction( n, oData, fn ) + { + $(n) + .bind( 'click.DT', oData, function (e) { + fn(e); + n.blur(); // Remove focus outline for mouse users + } ) + .bind( 'keypress.DT', oData, function (e){ + if ( e.which === 13 ) { + fn(e); + } } ) + .bind( 'selectstart.DT', function () { + /* Take the brutal approach to cancelling text selection */ + return false; + } ); + } + + + /** + * Register a callback function. Easily allows a callback function to be added to + * an array store of callback functions that can then all be called together. + * @param {object} oSettings dataTables settings object + * @param {string} sStore Name of the array storeage for the callbacks in oSettings + * @param {function} fn Function to be called back + * @param {string) sName Identifying name for the callback (i.e. a label) + * @memberof DataTable#oApi + */ + function _fnCallbackReg( oSettings, sStore, fn, sName ) + { + if ( fn ) + { + oSettings[sStore].push( { + "fn": fn, + "sName": sName + } ); + } + } + + + /** + * Fire callback functions and trigger events. Note that the loop over the callback + * array store is done backwards! Further note that you do not want to fire off triggers + * in time sensitive applications (for example cell creation) as its slow. + * @param {object} oSettings dataTables settings object + * @param {string} sStore Name of the array storeage for the callbacks in oSettings + * @param {string} sTrigger Name of the jQuery custom event to trigger. If null no trigger + * is fired + * @param {array) aArgs Array of arguments to pass to the callback function / trigger + * @memberof DataTable#oApi + */ + function _fnCallbackFire( oSettings, sStore, sTrigger, aArgs ) + { + var aoStore = oSettings[sStore]; + var aRet =[]; + + for ( var i=aoStore.length-1 ; i>=0 ; i-- ) + { + aRet.push( aoStore[i].fn.apply( oSettings.oInstance, aArgs ) ); + } + + if ( sTrigger !== null ) + { + $(oSettings.oInstance).trigger(sTrigger, aArgs); + } + + return aRet; + } + + + /** + * JSON stringify. If JSON.stringify it provided by the browser, json2.js or any other + * library, then we use that as it is fast, safe and accurate. If the function isn't + * available then we need to built it ourselves - the insperation for this function comes + * from Craig Buckler ( http://www.sitepoint.com/javascript-json-serialization/ ). It is + * not perfect and absolutely should not be used as a replacement to json2.js - but it does + * do what we need, without requiring a dependency for DataTables. + * @param {object} o JSON object to be converted + * @returns {string} JSON string + * @memberof DataTable#oApi + */ + var _fnJsonString = (window.JSON) ? JSON.stringify : function( o ) + { + /* Not an object or array */ + var sType = typeof o; + if (sType !== "object" || o === null) + { + // simple data type + if (sType === "string") + { + o = '"'+o+'"'; + } + return o+""; + } + + /* If object or array, need to recurse over it */ + var + sProp, mValue, + json = [], + bArr = $.isArray(o); + + for (sProp in o) + { + mValue = o[sProp]; + sType = typeof mValue; + + if (sType === "string") + { + mValue = '"'+mValue+'"'; + } + else if (sType === "object" && mValue !== null) + { + mValue = _fnJsonString(mValue); + } + + json.push((bArr ? "" : '"'+sProp+'":') + mValue); + } + + return (bArr ? "[" : "{") + json + (bArr ? "]" : "}"); + }; + + + + + /** + * Perform a jQuery selector action on the table's TR elements (from the tbody) and + * return the resulting jQuery object. + * @param {string|node|jQuery} sSelector jQuery selector or node collection to act on + * @param {object} [oOpts] Optional parameters for modifying the rows to be included + * @param {string} [oOpts.filter=none] Select TR elements that meet the current filter + * criterion ("applied") or all TR elements (i.e. no filter). + * @param {string} [oOpts.order=current] Order of the TR elements in the processed array. + * Can be either 'current', whereby the current sorting of the table is used, or + * 'original' whereby the original order the data was read into the table is used. + * @param {string} [oOpts.page=all] Limit the selection to the currently displayed page + * ("current") or not ("all"). If 'current' is given, then order is assumed to be + * 'current' and filter is 'applied', regardless of what they might be given as. + * @returns {object} jQuery object, filtered by the given selector. + * @dtopt API + * + * @example + * $(document).ready(function() { + * var oTable = $('#example').dataTable(); + * + * // Highlight every second row + * oTable.$('tr:odd').css('backgroundColor', 'blue'); + * } ); + * + * @example + * $(document).ready(function() { + * var oTable = $('#example').dataTable(); + * + * // Filter to rows with 'Webkit' in them, add a background colour and then + * // remove the filter, thus highlighting the 'Webkit' rows only. + * oTable.fnFilter('Webkit'); + * oTable.$('tr', {"filter": "applied"}).css('backgroundColor', 'blue'); + * oTable.fnFilter(''); + * } ); + */ + this.$ = function ( sSelector, oOpts ) + { + var i, iLen, a = []; + var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); + + if ( !oOpts ) + { + oOpts = {}; + } + + oOpts = $.extend( {}, { + "filter": "none", // applied + "order": "current", // "original" + "page": "all" // current + }, oOpts ); + + // Current page implies that order=current and fitler=applied, since it is fairly + // senseless otherwise + if ( oOpts.page == 'current' ) + { + for ( i=oSettings._iDisplayStart, iLen=oSettings.fnDisplayEnd() ; i<iLen ; i++ ) + { + a.push( oSettings.aoData[ oSettings.aiDisplay[i] ].nTr ); + } + } + else if ( oOpts.order == "current" && oOpts.filter == "none" ) + { + for ( i=0, iLen=oSettings.aiDisplayMaster.length ; i<iLen ; i++ ) + { + a.push( oSettings.aoData[ oSettings.aiDisplayMaster[i] ].nTr ); + } + } + else if ( oOpts.order == "current" && oOpts.filter == "applied" ) + { + for ( i=0, iLen=oSettings.aiDisplay.length ; i<iLen ; i++ ) + { + a.push( oSettings.aoData[ oSettings.aiDisplay[i] ].nTr ); + } + } + else if ( oOpts.order == "original" && oOpts.filter == "none" ) + { + for ( i=0, iLen=oSettings.aoData.length ; i<iLen ; i++ ) + { + a.push( oSettings.aoData[ i ].nTr ); + } + } + else if ( oOpts.order == "original" && oOpts.filter == "applied" ) + { + for ( i=0, iLen=oSettings.aoData.length ; i<iLen ; i++ ) + { + if ( $.inArray( i, oSettings.aiDisplay ) !== -1 ) + { + a.push( oSettings.aoData[ i ].nTr ); + } + } + } + else + { + _fnLog( oSettings, 1, "Unknown selection options" ); + } + + /* We need to filter on the TR elements and also 'find' in their descendants + * to make the selector act like it would in a full table - so we need + * to build both results and then combine them together + */ + var jqA = $(a); + var jqTRs = jqA.filter( sSelector ); + var jqDescendants = jqA.find( sSelector ); + + return $( [].concat($.makeArray(jqTRs), $.makeArray(jqDescendants)) ); + }; + + + /** + * Almost identical to $ in operation, but in this case returns the data for the matched + * rows - as such, the jQuery selector used should match TR row nodes or TD/TH cell nodes + * rather than any decendents, so the data can be obtained for the row/cell. If matching + * rows are found, the data returned is the original data array/object that was used to + * create the row (or a generated array if from a DOM source). + * + * This method is often useful incombination with $ where both functions are given the + * same parameters and the array indexes will match identically. + * @param {string|node|jQuery} sSelector jQuery selector or node collection to act on + * @param {object} [oOpts] Optional parameters for modifying the rows to be included + * @param {string} [oOpts.filter=none] Select elements that meet the current filter + * criterion ("applied") or all elements (i.e. no filter). + * @param {string} [oOpts.order=current] Order of the data in the processed array. + * Can be either 'current', whereby the current sorting of the table is used, or + * 'original' whereby the original order the data was read into the table is used. + * @param {string} [oOpts.page=all] Limit the selection to the currently displayed page + * ("current") or not ("all"). If 'current' is given, then order is assumed to be + * 'current' and filter is 'applied', regardless of what they might be given as. + * @returns {array} Data for the matched elements. If any elements, as a result of the + * selector, were not TR, TD or TH elements in the DataTable, they will have a null + * entry in the array. + * @dtopt API + * + * @example + * $(document).ready(function() { + * var oTable = $('#example').dataTable(); + * + * // Get the data from the first row in the table + * var data = oTable._('tr:first'); + * + * // Do something useful with the data + * alert( "First cell is: "+data[0] ); + * } ); + * + * @example + * $(document).ready(function() { + * var oTable = $('#example').dataTable(); + * + * // Filter to 'Webkit' and get all data for + * oTable.fnFilter('Webkit'); + * var data = oTable._('tr', {"filter": "applied"}); + * + * // Do something with the data + * alert( data.length+" rows matched the filter" ); + * } ); + */ + this._ = function ( sSelector, oOpts ) + { + var aOut = []; + var i, iLen, iIndex; + var aTrs = this.$( sSelector, oOpts ); + + for ( i=0, iLen=aTrs.length ; i<iLen ; i++ ) + { + aOut.push( this.fnGetData(aTrs[i]) ); + } + + return aOut; + }; + + + /** + * Add a single new row or multiple rows of data to the table. Please note + * that this is suitable for client-side processing only - if you are using + * server-side processing (i.e. "bServerSide": true), then to add data, you + * must add it to the data source, i.e. the server-side, through an Ajax call. + * @param {array|object} mData The data to be added to the table. This can be: + * <ul> + * <li>1D array of data - add a single row with the data provided</li> + * <li>2D array of arrays - add multiple rows in a single call</li> + * <li>object - data object when using <i>mDataProp</i></li> + * <li>array of objects - multiple data objects when using <i>mDataProp</i></li> + * </ul> + * @param {bool} [bRedraw=true] redraw the table or not + * @returns {array} An array of integers, representing the list of indexes in + * <i>aoData</i> ({@link DataTable.models.oSettings}) that have been added to + * the table. + * @dtopt API + * + * @example + * // Global var for counter + * var giCount = 2; + * + * $(document).ready(function() { + * $('#example').dataTable(); + * } ); + * + * function fnClickAddRow() { + * $('#example').dataTable().fnAddData( [ + * giCount+".1", + * giCount+".2", + * giCount+".3", + * giCount+".4" ] + * ); + * + * giCount++; + * } + */ + this.fnAddData = function( mData, bRedraw ) + { + if ( mData.length === 0 ) + { + return []; + } + + var aiReturn = []; + var iTest; + + /* Find settings from table node */ + var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); + + /* Check if we want to add multiple rows or not */ + if ( typeof mData[0] === "object" && mData[0] !== null ) + { + for ( var i=0 ; i<mData.length ; i++ ) + { + iTest = _fnAddData( oSettings, mData[i] ); + if ( iTest == -1 ) + { + return aiReturn; + } + aiReturn.push( iTest ); + } + } + else + { + iTest = _fnAddData( oSettings, mData ); + if ( iTest == -1 ) + { + return aiReturn; + } + aiReturn.push( iTest ); + } + + oSettings.aiDisplay = oSettings.aiDisplayMaster.slice(); + + if ( bRedraw === undefined || bRedraw ) + { + _fnReDraw( oSettings ); + } + return aiReturn; + }; + + + /** + * This function will make DataTables recalculate the column sizes, based on the data + * contained in the table and the sizes applied to the columns (in the DOM, CSS or + * through the sWidth parameter). This can be useful when the width of the table's + * parent element changes (for example a window resize). + * @param {boolean} [bRedraw=true] Redraw the table or not, you will typically want to + * @dtopt API + * + * @example + * $(document).ready(function() { + * var oTable = $('#example').dataTable( { + * "sScrollY": "200px", + * "bPaginate": false + * } ); + * + * $(window).bind('resize', function () { + * oTable.fnAdjustColumnSizing(); + * } ); + * } ); + */ + this.fnAdjustColumnSizing = function ( bRedraw ) + { + var oSettings = _fnSettingsFromNode(this[DataTable.ext.iApiIndex]); + _fnAdjustColumnSizing( oSettings ); + + if ( bRedraw === undefined || bRedraw ) + { + this.fnDraw( false ); + } + else if ( oSettings.oScroll.sX !== "" || oSettings.oScroll.sY !== "" ) + { + /* If not redrawing, but scrolling, we want to apply the new column sizes anyway */ + this.oApi._fnScrollDraw(oSettings); + } + }; + + + /** + * Quickly and simply clear a table + * @param {bool} [bRedraw=true] redraw the table or not + * @dtopt API + * + * @example + * $(document).ready(function() { + * var oTable = $('#example').dataTable(); + * + * // Immediately 'nuke' the current rows (perhaps waiting for an Ajax callback...) + * oTable.fnClearTable(); + * } ); + */ + this.fnClearTable = function( bRedraw ) + { + /* Find settings from table node */ + var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); + _fnClearTable( oSettings ); + + if ( bRedraw === undefined || bRedraw ) + { + _fnDraw( oSettings ); + } + }; + + + /** + * The exact opposite of 'opening' a row, this function will close any rows which + * are currently 'open'. + * @param {node} nTr the table row to 'close' + * @returns {int} 0 on success, or 1 if failed (can't find the row) + * @dtopt API + * + * @example + * $(document).ready(function() { + * var oTable; + * + * // 'open' an information row when a row is clicked on + * $('#example tbody tr').click( function () { + * if ( oTable.fnIsOpen(this) ) { + * oTable.fnClose( this ); + * } else { + * oTable.fnOpen( this, "Temporary row opened", "info_row" ); + * } + * } ); + * + * oTable = $('#example').dataTable(); + * } ); + */ + this.fnClose = function( nTr ) + { + /* Find settings from table node */ + var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); + + for ( var i=0 ; i<oSettings.aoOpenRows.length ; i++ ) + { + if ( oSettings.aoOpenRows[i].nParent == nTr ) + { + var nTrParent = oSettings.aoOpenRows[i].nTr.parentNode; + if ( nTrParent ) + { + /* Remove it if it is currently on display */ + nTrParent.removeChild( oSettings.aoOpenRows[i].nTr ); + } + oSettings.aoOpenRows.splice( i, 1 ); + return 0; + } + } + return 1; + }; + + + /** + * Remove a row for the table + * @param {mixed} mTarget The index of the row from aoData to be deleted, or + * the TR element you want to delete + * @param {function|null} [fnCallBack] Callback function + * @param {bool} [bRedraw=true] Redraw the table or not + * @returns {array} The row that was deleted + * @dtopt API + * + * @example + * $(document).ready(function() { + * var oTable = $('#example').dataTable(); + * + * // Immediately remove the first row + * oTable.fnDeleteRow( 0 ); + * } ); + */ + this.fnDeleteRow = function( mTarget, fnCallBack, bRedraw ) + { + /* Find settings from table node */ + var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); + var i, iLen, iAODataIndex; + + iAODataIndex = (typeof mTarget === 'object') ? + _fnNodeToDataIndex(oSettings, mTarget) : mTarget; + + /* Return the data array from this row */ + var oData = oSettings.aoData.splice( iAODataIndex, 1 ); + + /* Update the _DT_RowIndex parameter */ + for ( i=0, iLen=oSettings.aoData.length ; i<iLen ; i++ ) + { + if ( oSettings.aoData[i].nTr !== null ) + { + oSettings.aoData[i].nTr._DT_RowIndex = i; + } + } + + /* Remove the target row from the search array */ + var iDisplayIndex = $.inArray( iAODataIndex, oSettings.aiDisplay ); + oSettings.asDataSearch.splice( iDisplayIndex, 1 ); + + /* Delete from the display arrays */ + _fnDeleteIndex( oSettings.aiDisplayMaster, iAODataIndex ); + _fnDeleteIndex( oSettings.aiDisplay, iAODataIndex ); + + /* If there is a user callback function - call it */ + if ( typeof fnCallBack === "function" ) + { + fnCallBack.call( this, oSettings, oData ); + } + + /* Check for an 'overflow' they case for dislaying the table */ + if ( oSettings._iDisplayStart >= oSettings.aiDisplay.length ) + { + oSettings._iDisplayStart -= oSettings._iDisplayLength; + if ( oSettings._iDisplayStart < 0 ) + { + oSettings._iDisplayStart = 0; + } + } + + if ( bRedraw === undefined || bRedraw ) + { + _fnCalculateEnd( oSettings ); + _fnDraw( oSettings ); + } + + return oData; + }; + + + /** + * Restore the table to it's original state in the DOM by removing all of DataTables + * enhancements, alterations to the DOM structure of the table and event listeners. + * @param {boolean} [bRemove=false] Completely remove the table from the DOM + * @dtopt API + * + * @example + * $(document).ready(function() { + * // This example is fairly pointless in reality, but shows how fnDestroy can be used + * var oTable = $('#example').dataTable(); + * oTable.fnDestroy(); + * } ); + */ + this.fnDestroy = function ( bRemove ) + { + var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); + var nOrig = oSettings.nTableWrapper.parentNode; + var nBody = oSettings.nTBody; + var i, iLen; + + bRemove = (bRemove===undefined) ? false : true; + + /* Flag to note that the table is currently being destroyed - no action should be taken */ + oSettings.bDestroying = true; + + /* Restore hidden columns */ + for ( i=0, iLen=oSettings.aoDestroyCallback.length ; i<iLen ; i++ ) { + oSettings.aoDestroyCallback[i].fn(); + } + + /* Restore hidden columns */ + for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ ) + { + if ( oSettings.aoColumns[i].bVisible === false ) + { + this.fnSetColumnVis( i, true ); + } + } + + /* Blitz all DT events */ + $(oSettings.nTableWrapper).find('*').andSelf().unbind('.DT'); + + /* If there is an 'empty' indicator row, remove it */ + $('tbody>tr>td.'+oSettings.oClasses.sRowEmpty, oSettings.nTable).parent().remove(); + + /* When scrolling we had to break the table up - restore it */ + if ( oSettings.nTable != oSettings.nTHead.parentNode ) + { + $(oSettings.nTable).children('thead').remove(); + oSettings.nTable.appendChild( oSettings.nTHead ); + } + + if ( oSettings.nTFoot && oSettings.nTable != oSettings.nTFoot.parentNode ) + { + $(oSettings.nTable).children('tfoot').remove(); + oSettings.nTable.appendChild( oSettings.nTFoot ); + } + + /* Remove the DataTables generated nodes, events and classes */ + oSettings.nTable.parentNode.removeChild( oSettings.nTable ); + $(oSettings.nTableWrapper).remove(); + + oSettings.aaSorting = []; + oSettings.aaSortingFixed = []; + _fnSortingClasses( oSettings ); + + $(_fnGetTrNodes( oSettings )).removeClass( oSettings.asStripeClasses.join(' ') ); + + $('th, td', oSettings.nTHead).removeClass( [ + oSettings.oClasses.sSortable, + oSettings.oClasses.sSortableAsc, + oSettings.oClasses.sSortableDesc, + oSettings.oClasses.sSortableNone ].join(' ') + ); + if ( oSettings.bJUI ) + { + $('th span.'+oSettings.oClasses.sSortIcon + + ', td span.'+oSettings.oClasses.sSortIcon, oSettings.nTHead).remove(); + + $('th, td', oSettings.nTHead).each( function () { + var jqWrapper = $('div.'+oSettings.oClasses.sSortJUIWrapper, this); + var kids = jqWrapper.contents(); + $(this).append( kids ); + jqWrapper.remove(); + } ); + } + + /* Add the TR elements back into the table in their original order */ + if ( !bRemove && oSettings.nTableReinsertBefore ) + { + nOrig.insertBefore( oSettings.nTable, oSettings.nTableReinsertBefore ); + } + else if ( !bRemove ) + { + nOrig.appendChild( oSettings.nTable ); + } + + for ( i=0, iLen=oSettings.aoData.length ; i<iLen ; i++ ) + { + if ( oSettings.aoData[i].nTr !== null ) + { + nBody.appendChild( oSettings.aoData[i].nTr ); + } + } + + /* Restore the width of the original table */ + if ( oSettings.oFeatures.bAutoWidth === true ) + { + oSettings.nTable.style.width = _fnStringToCss(oSettings.sDestroyWidth); + } + + /* If the were originally odd/even type classes - then we add them back here. Note + * this is not fool proof (for example if not all rows as odd/even classes - but + * it's a good effort without getting carried away + */ + $(nBody).children('tr:even').addClass( oSettings.asDestroyStripes[0] ); + $(nBody).children('tr:odd').addClass( oSettings.asDestroyStripes[1] ); + + /* Remove the settings object from the settings array */ + for ( i=0, iLen=DataTable.settings.length ; i<iLen ; i++ ) + { + if ( DataTable.settings[i] == oSettings ) + { + DataTable.settings.splice( i, 1 ); + } + } + + /* End it all */ + oSettings = null; + }; + + + /** + * Redraw the table + * @param {bool} [bComplete=true] Re-filter and resort (if enabled) the table before the draw. + * @dtopt API + * + * @example + * $(document).ready(function() { + * var oTable = $('#example').dataTable(); + * + * // Re-draw the table - you wouldn't want to do it here, but it's an example :-) + * oTable.fnDraw(); + * } ); + */ + this.fnDraw = function( bComplete ) + { + var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); + if ( bComplete ) + { + _fnCalculateEnd( oSettings ); + _fnDraw( oSettings ); + } + else + { + _fnReDraw( oSettings ); + } + }; + + + /** + * Filter the input based on data + * @param {string} sInput String to filter the table on + * @param {int|null} [iColumn] Column to limit filtering to + * @param {bool} [bRegex=false] Treat as regular expression or not + * @param {bool} [bSmart=true] Perform smart filtering or not + * @param {bool} [bShowGlobal=true] Show the input global filter in it's input box(es) + * @param {bool} [bCaseInsensitive=true] Do case-insensitive matching (true) or not (false) + * @dtopt API + * + * @example + * $(document).ready(function() { + * var oTable = $('#example').dataTable(); + * + * // Sometime later - filter... + * oTable.fnFilter( 'test string' ); + * } ); + */ + this.fnFilter = function( sInput, iColumn, bRegex, bSmart, bShowGlobal, bCaseInsensitive ) + { + var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); + + if ( !oSettings.oFeatures.bFilter ) + { + return; + } + + if ( bRegex === undefined || bRegex === null ) + { + bRegex = false; + } + + if ( bSmart === undefined || bSmart === null ) + { + bSmart = true; + } + + if ( bShowGlobal === undefined || bShowGlobal === null ) + { + bShowGlobal = true; + } + + if ( bCaseInsensitive === undefined || bCaseInsensitive === null ) + { + bCaseInsensitive = true; + } + + if ( iColumn === undefined || iColumn === null ) + { + /* Global filter */ + _fnFilterComplete( oSettings, { + "sSearch":sInput+"", + "bRegex": bRegex, + "bSmart": bSmart, + "bCaseInsensitive": bCaseInsensitive + }, 1 ); + + if ( bShowGlobal && oSettings.aanFeatures.f ) + { + var n = oSettings.aanFeatures.f; + for ( var i=0, iLen=n.length ; i<iLen ; i++ ) + { + $('input', n[i]).val( sInput ); + } + } + } + else + { + /* Single column filter */ + $.extend( oSettings.aoPreSearchCols[ iColumn ], { + "sSearch": sInput+"", + "bRegex": bRegex, + "bSmart": bSmart, + "bCaseInsensitive": bCaseInsensitive + } ); + _fnFilterComplete( oSettings, oSettings.oPreviousSearch, 1 ); + } + }; + + + /** + * Get the data for the whole table, an individual row or an individual cell based on the + * provided parameters. + * @param {int|node} [mRow] A TR row node, TD/TH cell node or an integer. If given as + * a TR node then the data source for the whole row will be returned. If given as a + * TD/TH cell node then iCol will be automatically calculated and the data for the + * cell returned. If given as an integer, then this is treated as the aoData internal + * data index for the row (see fnGetPosition) and the data for that row used. + * @param {int} [iCol] Optional column index that you want the data of. + * @returns {array|object|string} If mRow is undefined, then the data for all rows is + * returned. If mRow is defined, just data for that row, and is iCol is + * defined, only data for the designated cell is returned. + * @dtopt API + * + * @example + * // Row data + * $(document).ready(function() { + * oTable = $('#example').dataTable(); + * + * oTable.$('tr').click( function () { + * var data = oTable.fnGetData( this ); + * // ... do something with the array / object of data for the row + * } ); + * } ); + * + * @example + * // Individual cell data + * $(document).ready(function() { + * oTable = $('#example').dataTable(); + * + * oTable.$('td').click( function () { + * var sData = oTable.fnGetData( this ); + * alert( 'The cell clicked on had the value of '+sData ); + * } ); + * } ); + */ + this.fnGetData = function( mRow, iCol ) + { + var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); + + if ( mRow !== undefined ) + { + var iRow = mRow; + if ( typeof mRow === 'object' ) + { + var sNode = mRow.nodeName.toLowerCase(); + if (sNode === "tr" ) + { + iRow = _fnNodeToDataIndex(oSettings, mRow); + } + else if ( sNode === "td" ) + { + iRow = _fnNodeToDataIndex(oSettings, mRow.parentNode); + iCol = _fnNodeToColumnIndex( oSettings, iRow, mRow ); + } + } + + if ( iCol !== undefined ) + { + return _fnGetCellData( oSettings, iRow, iCol, '' ); + } + return (oSettings.aoData[iRow]!==undefined) ? + oSettings.aoData[iRow]._aData : null; + } + return _fnGetDataMaster( oSettings ); + }; + + + /** + * Get an array of the TR nodes that are used in the table's body. Note that you will + * typically want to use the '$' API method in preference to this as it is more + * flexible. + * @param {int} [iRow] Optional row index for the TR element you want + * @returns {array|node} If iRow is undefined, returns an array of all TR elements + * in the table's body, or iRow is defined, just the TR element requested. + * @dtopt API + * + * @example + * $(document).ready(function() { + * var oTable = $('#example').dataTable(); + * + * // Get the nodes from the table + * var nNodes = oTable.fnGetNodes( ); + * } ); + */ + this.fnGetNodes = function( iRow ) + { + var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); + + if ( iRow !== undefined ) { + return (oSettings.aoData[iRow]!==undefined) ? + oSettings.aoData[iRow].nTr : null; + } + return _fnGetTrNodes( oSettings ); + }; + + + /** + * Get the array indexes of a particular cell from it's DOM element + * and column index including hidden columns + * @param {node} nNode this can either be a TR, TD or TH in the table's body + * @returns {int} If nNode is given as a TR, then a single index is returned, or + * if given as a cell, an array of [row index, column index (visible)] is given. + * @dtopt API + * + * @example + * $(document).ready(function() { + * $('#example tbody td').click( function () { + * // Get the position of the current data from the node + * var aPos = oTable.fnGetPosition( this ); + * + * // Get the data array for this row + * var aData = oTable.fnGetData( aPos[0] ); + * + * // Update the data array and return the value + * aData[ aPos[1] ] = 'clicked'; + * this.innerHTML = 'clicked'; + * } ); + * + * // Init DataTables + * oTable = $('#example').dataTable(); + * } ); + */ + this.fnGetPosition = function( nNode ) + { + var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); + var sNodeName = nNode.nodeName.toUpperCase(); + + if ( sNodeName == "TR" ) + { + return _fnNodeToDataIndex(oSettings, nNode); + } + else if ( sNodeName == "TD" || sNodeName == "TH" ) + { + var iDataIndex = _fnNodeToDataIndex( oSettings, nNode.parentNode ); + var iColumnIndex = _fnNodeToColumnIndex( oSettings, iDataIndex, nNode ); + return [ iDataIndex, _fnColumnIndexToVisible(oSettings, iColumnIndex ), iColumnIndex ]; + } + return null; + }; + + + /** + * Check to see if a row is 'open' or not. + * @param {node} nTr the table row to check + * @returns {boolean} true if the row is currently open, false otherwise + * @dtopt API + * + * @example + * $(document).ready(function() { + * var oTable; + * + * // 'open' an information row when a row is clicked on + * $('#example tbody tr').click( function () { + * if ( oTable.fnIsOpen(this) ) { + * oTable.fnClose( this ); + * } else { + * oTable.fnOpen( this, "Temporary row opened", "info_row" ); + * } + * } ); + * + * oTable = $('#example').dataTable(); + * } ); + */ + this.fnIsOpen = function( nTr ) + { + var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); + var aoOpenRows = oSettings.aoOpenRows; + + for ( var i=0 ; i<oSettings.aoOpenRows.length ; i++ ) + { + if ( oSettings.aoOpenRows[i].nParent == nTr ) + { + return true; + } + } + return false; + }; + + + /** + * This function will place a new row directly after a row which is currently + * on display on the page, with the HTML contents that is passed into the + * function. This can be used, for example, to ask for confirmation that a + * particular record should be deleted. + * @param {node} nTr The table row to 'open' + * @param {string|node|jQuery} mHtml The HTML to put into the row + * @param {string} sClass Class to give the new TD cell + * @returns {node} The row opened. Note that if the table row passed in as the + * first parameter, is not found in the table, this method will silently + * return. + * @dtopt API + * + * @example + * $(document).ready(function() { + * var oTable; + * + * // 'open' an information row when a row is clicked on + * $('#example tbody tr').click( function () { + * if ( oTable.fnIsOpen(this) ) { + * oTable.fnClose( this ); + * } else { + * oTable.fnOpen( this, "Temporary row opened", "info_row" ); + * } + * } ); + * + * oTable = $('#example').dataTable(); + * } ); + */ + this.fnOpen = function( nTr, mHtml, sClass ) + { + /* Find settings from table node */ + var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); + + /* Check that the row given is in the table */ + var nTableRows = _fnGetTrNodes( oSettings ); + if ( $.inArray(nTr, nTableRows) === -1 ) + { + return; + } + + /* the old open one if there is one */ + this.fnClose( nTr ); + + var nNewRow = document.createElement("tr"); + var nNewCell = document.createElement("td"); + nNewRow.appendChild( nNewCell ); + nNewCell.className = sClass; + nNewCell.colSpan = _fnVisbleColumns( oSettings ); + + if (typeof mHtml === "string") + { + nNewCell.innerHTML = mHtml; + } + else + { + $(nNewCell).html( mHtml ); + } + + /* If the nTr isn't on the page at the moment - then we don't insert at the moment */ + var nTrs = $('tr', oSettings.nTBody); + if ( $.inArray(nTr, nTrs) != -1 ) + { + $(nNewRow).insertAfter(nTr); + } + + oSettings.aoOpenRows.push( { + "nTr": nNewRow, + "nParent": nTr + } ); + + return nNewRow; + }; + + + /** + * Change the pagination - provides the internal logic for pagination in a simple API + * function. With this function you can have a DataTables table go to the next, + * previous, first or last pages. + * @param {string|int} mAction Paging action to take: "first", "previous", "next" or "last" + * or page number to jump to (integer), note that page 0 is the first page. + * @param {bool} [bRedraw=true] Redraw the table or not + * @dtopt API + * + * @example + * $(document).ready(function() { + * var oTable = $('#example').dataTable(); + * oTable.fnPageChange( 'next' ); + * } ); + */ + this.fnPageChange = function ( mAction, bRedraw ) + { + var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); + _fnPageChange( oSettings, mAction ); + _fnCalculateEnd( oSettings ); + + if ( bRedraw === undefined || bRedraw ) + { + _fnDraw( oSettings ); + } + }; + + + /** + * Show a particular column + * @param {int} iCol The column whose display should be changed + * @param {bool} bShow Show (true) or hide (false) the column + * @param {bool} [bRedraw=true] Redraw the table or not + * @dtopt API + * + * @example + * $(document).ready(function() { + * var oTable = $('#example').dataTable(); + * + * // Hide the second column after initialisation + * oTable.fnSetColumnVis( 1, false ); + * } ); + */ + this.fnSetColumnVis = function ( iCol, bShow, bRedraw ) + { + var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); + var i, iLen; + var aoColumns = oSettings.aoColumns; + var aoData = oSettings.aoData; + var nTd, nCell, anTrs, jqChildren, bAppend, iBefore; + + /* No point in doing anything if we are requesting what is already true */ + if ( aoColumns[iCol].bVisible == bShow ) + { + return; + } + + /* Show the column */ + if ( bShow ) + { + var iInsert = 0; + for ( i=0 ; i<iCol ; i++ ) + { + if ( aoColumns[i].bVisible ) + { + iInsert++; + } + } + + /* Need to decide if we should use appendChild or insertBefore */ + bAppend = (iInsert >= _fnVisbleColumns( oSettings )); + + /* Which coloumn should we be inserting before? */ + if ( !bAppend ) + { + for ( i=iCol ; i<aoColumns.length ; i++ ) + { + if ( aoColumns[i].bVisible ) + { + iBefore = i; + break; + } + } + } + + for ( i=0, iLen=aoData.length ; i<iLen ; i++ ) + { + if ( aoData[i].nTr !== null ) + { + if ( bAppend ) + { + aoData[i].nTr.appendChild( + aoData[i]._anHidden[iCol] + ); + } + else + { + aoData[i].nTr.insertBefore( + aoData[i]._anHidden[iCol], + _fnGetTdNodes( oSettings, i )[iBefore] ); + } + } + } + } + else + { + /* Remove a column from display */ + for ( i=0, iLen=aoData.length ; i<iLen ; i++ ) + { + if ( aoData[i].nTr !== null ) + { + nTd = _fnGetTdNodes( oSettings, i )[iCol]; + aoData[i]._anHidden[iCol] = nTd; + nTd.parentNode.removeChild( nTd ); + } + } + } + + /* Clear to set the visible flag */ + aoColumns[iCol].bVisible = bShow; + + /* Redraw the header and footer based on the new column visibility */ + _fnDrawHead( oSettings, oSettings.aoHeader ); + if ( oSettings.nTFoot ) + { + _fnDrawHead( oSettings, oSettings.aoFooter ); + } + + /* If there are any 'open' rows, then we need to alter the colspan for this col change */ + for ( i=0, iLen=oSettings.aoOpenRows.length ; i<iLen ; i++ ) + { + oSettings.aoOpenRows[i].nTr.colSpan = _fnVisbleColumns( oSettings ); + } + + /* Do a redraw incase anything depending on the table columns needs it + * (built-in: scrolling) + */ + if ( bRedraw === undefined || bRedraw ) + { + _fnAdjustColumnSizing( oSettings ); + _fnDraw( oSettings ); + } + + _fnSaveState( oSettings ); + }; + + + /** + * Get the settings for a particular table for external manipulation + * @returns {object} DataTables settings object. See + * {@link DataTable.models.oSettings} + * @dtopt API + * + * @example + * $(document).ready(function() { + * var oTable = $('#example').dataTable(); + * var oSettings = oTable.fnSettings(); + * + * // Show an example parameter from the settings + * alert( oSettings._iDisplayStart ); + * } ); + */ + this.fnSettings = function() + { + return _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); + }; + + + /** + * Sort the table by a particular row + * @param {int} iCol the data index to sort on. Note that this will not match the + * 'display index' if you have hidden data entries + * @dtopt API + * + * @example + * $(document).ready(function() { + * var oTable = $('#example').dataTable(); + * + * // Sort immediately with columns 0 and 1 + * oTable.fnSort( [ [0,'asc'], [1,'asc'] ] ); + * } ); + */ + this.fnSort = function( aaSort ) + { + var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); + oSettings.aaSorting = aaSort; + _fnSort( oSettings ); + }; + + + /** + * Attach a sort listener to an element for a given column + * @param {node} nNode the element to attach the sort listener to + * @param {int} iColumn the column that a click on this node will sort on + * @param {function} [fnCallback] callback function when sort is run + * @dtopt API + * + * @example + * $(document).ready(function() { + * var oTable = $('#example').dataTable(); + * + * // Sort on column 1, when 'sorter' is clicked on + * oTable.fnSortListener( document.getElementById('sorter'), 1 ); + * } ); + */ + this.fnSortListener = function( nNode, iColumn, fnCallback ) + { + _fnSortAttachListener( _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ), nNode, iColumn, + fnCallback ); + }; + + + /** + * Update a table cell or row - this method will accept either a single value to + * update the cell with, an array of values with one element for each column or + * an object in the same format as the original data source. The function is + * self-referencing in order to make the multi column updates easier. + * @param {object|array|string} mData Data to update the cell/row with + * @param {node|int} mRow TR element you want to update or the aoData index + * @param {int} [iColumn] The column to update (not used of mData is an array or object) + * @param {bool} [bRedraw=true] Redraw the table or not + * @param {bool} [bAction=true] Perform predraw actions or not + * @returns {int} 0 on success, 1 on error + * @dtopt API + * + * @example + * $(document).ready(function() { + * var oTable = $('#example').dataTable(); + * oTable.fnUpdate( 'Example update', 0, 0 ); // Single cell + * oTable.fnUpdate( ['a', 'b', 'c', 'd', 'e'], 1, 0 ); // Row + * } ); + */ + this.fnUpdate = function( mData, mRow, iColumn, bRedraw, bAction ) + { + var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); + var iVisibleColumn, i, iLen, sDisplay; + var iRow = (typeof mRow === 'object') ? + _fnNodeToDataIndex(oSettings, mRow) : mRow; + + if ( oSettings.__fnUpdateDeep === undefined && $.isArray(mData) && typeof mData === 'object' ) + { + /* Array update - update the whole row */ + oSettings.aoData[iRow]._aData = mData.slice(); + + /* Flag to the function that we are recursing */ + oSettings.__fnUpdateDeep = true; + for ( i=0 ; i<oSettings.aoColumns.length ; i++ ) + { + this.fnUpdate( _fnGetCellData( oSettings, iRow, i ), iRow, i, false, false ); + } + oSettings.__fnUpdateDeep = undefined; + } + else if ( oSettings.__fnUpdateDeep === undefined && mData !== null && typeof mData === 'object' ) + { + /* Object update - update the whole row - assume the developer gets the object right */ + oSettings.aoData[iRow]._aData = $.extend( true, {}, mData ); + + oSettings.__fnUpdateDeep = true; + for ( i=0 ; i<oSettings.aoColumns.length ; i++ ) + { + this.fnUpdate( _fnGetCellData( oSettings, iRow, i ), iRow, i, false, false ); + } + oSettings.__fnUpdateDeep = undefined; + } + else + { + /* Individual cell update */ + _fnSetCellData( oSettings, iRow, iColumn, mData ); + sDisplay = _fnGetCellData( oSettings, iRow, iColumn, 'display' ); + + var oCol = oSettings.aoColumns[iColumn]; + if ( oCol.fnRender !== null ) + { + sDisplay = _fnRender( oSettings, iRow, iColumn ); + if ( oCol.bUseRendered ) + { + _fnSetCellData( oSettings, iRow, iColumn, sDisplay ); + } + } + + if ( oSettings.aoData[iRow].nTr !== null ) + { + /* Do the actual HTML update */ + _fnGetTdNodes( oSettings, iRow )[iColumn].innerHTML = sDisplay; + } + } + + /* Modify the search index for this row (strictly this is likely not needed, since fnReDraw + * will rebuild the search array - however, the redraw might be disabled by the user) + */ + var iDisplayIndex = $.inArray( iRow, oSettings.aiDisplay ); + oSettings.asDataSearch[iDisplayIndex] = _fnBuildSearchRow( oSettings, + _fnGetRowData( oSettings, iRow, 'filter' ) ); + + /* Perform pre-draw actions */ + if ( bAction === undefined || bAction ) + { + _fnAdjustColumnSizing( oSettings ); + } + + /* Redraw the table */ + if ( bRedraw === undefined || bRedraw ) + { + _fnReDraw( oSettings ); + } + return 0; + }; + + + /** + * Provide a common method for plug-ins to check the version of DataTables being used, in order + * to ensure compatibility. + * @param {string} sVersion Version string to check for, in the format "X.Y.Z". Note that the + * formats "X" and "X.Y" are also acceptable. + * @returns {boolean} true if this version of DataTables is greater or equal to the required + * version, or false if this version of DataTales is not suitable + * @method + * @dtopt API + * + * @example + * $(document).ready(function() { + * var oTable = $('#example').dataTable(); + * alert( oTable.fnVersionCheck( '1.9.0' ) ); + * } ); + */ + this.fnVersionCheck = DataTable.ext.fnVersionCheck; + + + /* + * This is really a good bit rubbish this method of exposing the internal methods + * publically... - To be fixed in 2.0 using methods on the prototype + */ + + + /** + * Create a wrapper function for exporting an internal functions to an external API. + * @param {string} sFunc API function name + * @returns {function} wrapped function + * @memberof DataTable#oApi + */ + function _fnExternApiFunc (sFunc) + { + return function() { + var aArgs = [_fnSettingsFromNode(this[DataTable.ext.iApiIndex])].concat( + Array.prototype.slice.call(arguments) ); + return DataTable.ext.oApi[sFunc].apply( this, aArgs ); + }; + } + + + /** + * Reference to internal functions for use by plug-in developers. Note that these + * methods are references to internal functions and are considered to be private. + * If you use these methods, be aware that they are liable to change between versions + * (check the upgrade notes). + * @namespace + */ + this.oApi = { + "_fnExternApiFunc": _fnExternApiFunc, + "_fnInitialise": _fnInitialise, + "_fnInitComplete": _fnInitComplete, + "_fnLanguageCompat": _fnLanguageCompat, + "_fnAddColumn": _fnAddColumn, + "_fnColumnOptions": _fnColumnOptions, + "_fnAddData": _fnAddData, + "_fnCreateTr": _fnCreateTr, + "_fnGatherData": _fnGatherData, + "_fnBuildHead": _fnBuildHead, + "_fnDrawHead": _fnDrawHead, + "_fnDraw": _fnDraw, + "_fnReDraw": _fnReDraw, + "_fnAjaxUpdate": _fnAjaxUpdate, + "_fnAjaxParameters": _fnAjaxParameters, + "_fnAjaxUpdateDraw": _fnAjaxUpdateDraw, + "_fnServerParams": _fnServerParams, + "_fnAddOptionsHtml": _fnAddOptionsHtml, + "_fnFeatureHtmlTable": _fnFeatureHtmlTable, + "_fnScrollDraw": _fnScrollDraw, + "_fnAdjustColumnSizing": _fnAdjustColumnSizing, + "_fnFeatureHtmlFilter": _fnFeatureHtmlFilter, + "_fnFilterComplete": _fnFilterComplete, + "_fnFilterCustom": _fnFilterCustom, + "_fnFilterColumn": _fnFilterColumn, + "_fnFilter": _fnFilter, + "_fnBuildSearchArray": _fnBuildSearchArray, + "_fnBuildSearchRow": _fnBuildSearchRow, + "_fnFilterCreateSearch": _fnFilterCreateSearch, + "_fnDataToSearch": _fnDataToSearch, + "_fnSort": _fnSort, + "_fnSortAttachListener": _fnSortAttachListener, + "_fnSortingClasses": _fnSortingClasses, + "_fnFeatureHtmlPaginate": _fnFeatureHtmlPaginate, + "_fnPageChange": _fnPageChange, + "_fnFeatureHtmlInfo": _fnFeatureHtmlInfo, + "_fnUpdateInfo": _fnUpdateInfo, + "_fnFeatureHtmlLength": _fnFeatureHtmlLength, + "_fnFeatureHtmlProcessing": _fnFeatureHtmlProcessing, + "_fnProcessingDisplay": _fnProcessingDisplay, + "_fnVisibleToColumnIndex": _fnVisibleToColumnIndex, + "_fnColumnIndexToVisible": _fnColumnIndexToVisible, + "_fnNodeToDataIndex": _fnNodeToDataIndex, + "_fnVisbleColumns": _fnVisbleColumns, + "_fnCalculateEnd": _fnCalculateEnd, + "_fnConvertToWidth": _fnConvertToWidth, + "_fnCalculateColumnWidths": _fnCalculateColumnWidths, + "_fnScrollingWidthAdjust": _fnScrollingWidthAdjust, + "_fnGetWidestNode": _fnGetWidestNode, + "_fnGetMaxLenString": _fnGetMaxLenString, + "_fnStringToCss": _fnStringToCss, + "_fnDetectType": _fnDetectType, + "_fnSettingsFromNode": _fnSettingsFromNode, + "_fnGetDataMaster": _fnGetDataMaster, + "_fnGetTrNodes": _fnGetTrNodes, + "_fnGetTdNodes": _fnGetTdNodes, + "_fnEscapeRegex": _fnEscapeRegex, + "_fnDeleteIndex": _fnDeleteIndex, + "_fnReOrderIndex": _fnReOrderIndex, + "_fnColumnOrdering": _fnColumnOrdering, + "_fnLog": _fnLog, + "_fnClearTable": _fnClearTable, + "_fnSaveState": _fnSaveState, + "_fnLoadState": _fnLoadState, + "_fnCreateCookie": _fnCreateCookie, + "_fnReadCookie": _fnReadCookie, + "_fnDetectHeader": _fnDetectHeader, + "_fnGetUniqueThs": _fnGetUniqueThs, + "_fnScrollBarWidth": _fnScrollBarWidth, + "_fnApplyToChildren": _fnApplyToChildren, + "_fnMap": _fnMap, + "_fnGetRowData": _fnGetRowData, + "_fnGetCellData": _fnGetCellData, + "_fnSetCellData": _fnSetCellData, + "_fnGetObjectDataFn": _fnGetObjectDataFn, + "_fnSetObjectDataFn": _fnSetObjectDataFn, + "_fnApplyColumnDefs": _fnApplyColumnDefs, + "_fnBindAction": _fnBindAction, + "_fnExtend": _fnExtend, + "_fnCallbackReg": _fnCallbackReg, + "_fnCallbackFire": _fnCallbackFire, + "_fnJsonString": _fnJsonString, + "_fnRender": _fnRender, + "_fnNodeToColumnIndex": _fnNodeToColumnIndex + }; + + $.extend( DataTable.ext.oApi, this.oApi ); + + for ( var sFunc in DataTable.ext.oApi ) + { + if ( sFunc ) + { + this[sFunc] = _fnExternApiFunc(sFunc); + } + } + + + var _that = this; + return this.each(function() { + + var i=0, iLen, j, jLen, k, kLen; + var sId = this.getAttribute( 'id' ); + var bInitHandedOff = false; + var bUsePassedData = false; + + + /* Sanity check */ + if ( this.nodeName.toLowerCase() != 'table' ) + { + _fnLog( null, 0, "Attempted to initialise DataTables on a node which is not a "+ + "table: "+this.nodeName ); + return; + } + + /* Check to see if we are re-initialising a table */ + for ( i=0, iLen=DataTable.settings.length ; i<iLen ; i++ ) + { + /* Base check on table node */ + if ( DataTable.settings[i].nTable == this ) + { + if ( oInit === undefined || oInit.bRetrieve ) + { + return DataTable.settings[i].oInstance; + } + else if ( oInit.bDestroy ) + { + DataTable.settings[i].oInstance.fnDestroy(); + break; + } + else + { + _fnLog( DataTable.settings[i], 0, "Cannot reinitialise DataTable.\n\n"+ + "To retrieve the DataTables object for this table, pass no arguments or see "+ + "the docs for bRetrieve and bDestroy" ); + return; + } + } + + /* If the element we are initialising has the same ID as a table which was previously + * initialised, but the table nodes don't match (from before) then we destroy the old + * instance by simply deleting it. This is under the assumption that the table has been + * destroyed by other methods. Anyone using non-id selectors will need to do this manually + */ + if ( DataTable.settings[i].sTableId == this.id ) + { + DataTable.settings.splice( i, 1 ); + break; + } + } + + /* Ensure the table has an ID - required for accessibility */ + if ( sId === null ) + { + sId = "DataTables_Table_"+(DataTable.ext._oExternConfig.iNextUnique++); + this.id = sId; + } + + /* Create the settings object for this table and set some of the default parameters */ + var oSettings = $.extend( true, {}, DataTable.models.oSettings, { + "nTable": this, + "oApi": _that.oApi, + "oInit": oInit, + "sDestroyWidth": $(this).width(), + "sInstance": sId, + "sTableId": sId + } ); + DataTable.settings.push( oSettings ); + + // Need to add the instance after the instance after the settings object has been added + // to the settings array, so we can self reference the table instance if more than one + oSettings.oInstance = (_that.length===1) ? _that : $(this).dataTable(); + + /* Setting up the initialisation object */ + if ( !oInit ) + { + oInit = {}; + } + + // Backwards compatibility, before we apply all the defaults + if ( oInit.oLanguage ) + { + _fnLanguageCompat( oInit.oLanguage ); + } + + oInit = _fnExtend( $.extend(true, {}, DataTable.defaults), oInit ); + + // Map the initialisation options onto the settings object + _fnMap( oSettings.oFeatures, oInit, "bPaginate" ); + _fnMap( oSettings.oFeatures, oInit, "bLengthChange" ); + _fnMap( oSettings.oFeatures, oInit, "bFilter" ); + _fnMap( oSettings.oFeatures, oInit, "bSort" ); + _fnMap( oSettings.oFeatures, oInit, "bInfo" ); + _fnMap( oSettings.oFeatures, oInit, "bProcessing" ); + _fnMap( oSettings.oFeatures, oInit, "bAutoWidth" ); + _fnMap( oSettings.oFeatures, oInit, "bSortClasses" ); + _fnMap( oSettings.oFeatures, oInit, "bServerSide" ); + _fnMap( oSettings.oFeatures, oInit, "bDeferRender" ); + _fnMap( oSettings.oScroll, oInit, "sScrollX", "sX" ); + _fnMap( oSettings.oScroll, oInit, "sScrollXInner", "sXInner" ); + _fnMap( oSettings.oScroll, oInit, "sScrollY", "sY" ); + _fnMap( oSettings.oScroll, oInit, "bScrollCollapse", "bCollapse" ); + _fnMap( oSettings.oScroll, oInit, "bScrollInfinite", "bInfinite" ); + _fnMap( oSettings.oScroll, oInit, "iScrollLoadGap", "iLoadGap" ); + _fnMap( oSettings.oScroll, oInit, "bScrollAutoCss", "bAutoCss" ); + _fnMap( oSettings, oInit, "asStripClasses", "asStripeClasses" ); // legacy + _fnMap( oSettings, oInit, "asStripeClasses" ); + _fnMap( oSettings, oInit, "fnServerData" ); + _fnMap( oSettings, oInit, "fnFormatNumber" ); + _fnMap( oSettings, oInit, "sServerMethod" ); + _fnMap( oSettings, oInit, "aaSorting" ); + _fnMap( oSettings, oInit, "aaSortingFixed" ); + _fnMap( oSettings, oInit, "aLengthMenu" ); + _fnMap( oSettings, oInit, "sPaginationType" ); + _fnMap( oSettings, oInit, "sAjaxSource" ); + _fnMap( oSettings, oInit, "sAjaxDataProp" ); + _fnMap( oSettings, oInit, "iCookieDuration" ); + _fnMap( oSettings, oInit, "sCookiePrefix" ); + _fnMap( oSettings, oInit, "sDom" ); + _fnMap( oSettings, oInit, "bSortCellsTop" ); + _fnMap( oSettings, oInit, "iTabIndex" ); + _fnMap( oSettings, oInit, "oSearch", "oPreviousSearch" ); + _fnMap( oSettings, oInit, "aoSearchCols", "aoPreSearchCols" ); + _fnMap( oSettings, oInit, "iDisplayLength", "_iDisplayLength" ); + _fnMap( oSettings, oInit, "bJQueryUI", "bJUI" ); + _fnMap( oSettings, oInit, "fnCookieCallback" ); + _fnMap( oSettings, oInit, "fnStateLoad" ); + _fnMap( oSettings, oInit, "fnStateSave" ); + _fnMap( oSettings.oLanguage, oInit, "fnInfoCallback" ); + + /* Callback functions which are array driven */ + _fnCallbackReg( oSettings, 'aoDrawCallback', oInit.fnDrawCallback, 'user' ); + _fnCallbackReg( oSettings, 'aoServerParams', oInit.fnServerParams, 'user' ); + _fnCallbackReg( oSettings, 'aoStateSaveParams', oInit.fnStateSaveParams, 'user' ); + _fnCallbackReg( oSettings, 'aoStateLoadParams', oInit.fnStateLoadParams, 'user' ); + _fnCallbackReg( oSettings, 'aoStateLoaded', oInit.fnStateLoaded, 'user' ); + _fnCallbackReg( oSettings, 'aoRowCallback', oInit.fnRowCallback, 'user' ); + _fnCallbackReg( oSettings, 'aoRowCreatedCallback', oInit.fnCreatedRow, 'user' ); + _fnCallbackReg( oSettings, 'aoHeaderCallback', oInit.fnHeaderCallback, 'user' ); + _fnCallbackReg( oSettings, 'aoFooterCallback', oInit.fnFooterCallback, 'user' ); + _fnCallbackReg( oSettings, 'aoInitComplete', oInit.fnInitComplete, 'user' ); + _fnCallbackReg( oSettings, 'aoPreDrawCallback', oInit.fnPreDrawCallback, 'user' ); + + if ( oSettings.oFeatures.bServerSide && oSettings.oFeatures.bSort && + oSettings.oFeatures.bSortClasses ) + { + /* Enable sort classes for server-side processing. Safe to do it here, since server-side + * processing must be enabled by the developer + */ + _fnCallbackReg( oSettings, 'aoDrawCallback', _fnSortingClasses, 'server_side_sort_classes' ); + } + else if ( oSettings.oFeatures.bDeferRender ) + { + _fnCallbackReg( oSettings, 'aoDrawCallback', _fnSortingClasses, 'defer_sort_classes' ); + } + + if ( oInit.bJQueryUI ) + { + /* Use the JUI classes object for display. You could clone the oStdClasses object if + * you want to have multiple tables with multiple independent classes + */ + $.extend( oSettings.oClasses, DataTable.ext.oJUIClasses ); + + if ( oInit.sDom === DataTable.defaults.sDom && DataTable.defaults.sDom === "lfrtip" ) + { + /* Set the DOM to use a layout suitable for jQuery UI's theming */ + oSettings.sDom = '<"H"lfr>t<"F"ip>'; + } + } + else + { + $.extend( oSettings.oClasses, DataTable.ext.oStdClasses ); + } + $(this).addClass( oSettings.oClasses.sTable ); + + /* Calculate the scroll bar width and cache it for use later on */ + if ( oSettings.oScroll.sX !== "" || oSettings.oScroll.sY !== "" ) + { + oSettings.oScroll.iBarWidth = _fnScrollBarWidth(); + } + + if ( oSettings.iInitDisplayStart === undefined ) + { + /* Display start point, taking into account the save saving */ + oSettings.iInitDisplayStart = oInit.iDisplayStart; + oSettings._iDisplayStart = oInit.iDisplayStart; + } + + /* Must be done after everything which can be overridden by a cookie! */ + if ( oInit.bStateSave ) + { + oSettings.oFeatures.bStateSave = true; + _fnLoadState( oSettings, oInit ); + _fnCallbackReg( oSettings, 'aoDrawCallback', _fnSaveState, 'state_save' ); + } + + if ( oInit.iDeferLoading !== null ) + { + oSettings.bDeferLoading = true; + oSettings._iRecordsTotal = oInit.iDeferLoading; + oSettings._iRecordsDisplay = oInit.iDeferLoading; + } + + if ( oInit.aaData !== null ) + { + bUsePassedData = true; + } + + /* Language definitions */ + if ( oInit.oLanguage.sUrl !== "" ) + { + /* Get the language definitions from a file - because this Ajax call makes the language + * get async to the remainder of this function we use bInitHandedOff to indicate that + * _fnInitialise will be fired by the returned Ajax handler, rather than the constructor + */ + oSettings.oLanguage.sUrl = oInit.oLanguage.sUrl; + $.getJSON( oSettings.oLanguage.sUrl, null, function( json ) { + _fnLanguageCompat( json ); + $.extend( true, oSettings.oLanguage, oInit.oLanguage, json ); + _fnInitialise( oSettings ); + } ); + bInitHandedOff = true; + } + else + { + $.extend( true, oSettings.oLanguage, oInit.oLanguage ); + } + + + /* + * Stripes + */ + + /* Remove row stripe classes if they are already on the table row */ + var bStripeRemove = false; + var anRows = $(this).children('tbody').children('tr'); + for ( i=0, iLen=oSettings.asStripeClasses.length ; i<iLen ; i++ ) + { + if ( anRows.filter(":lt(2)").hasClass( oSettings.asStripeClasses[i]) ) + { + bStripeRemove = true; + break; + } + } + + if ( bStripeRemove ) + { + /* Store the classes which we are about to remove so they can be readded on destroy */ + oSettings.asDestroyStripes = [ '', '' ]; + if ( $(anRows[0]).hasClass(oSettings.oClasses.sStripeOdd) ) + { + oSettings.asDestroyStripes[0] += oSettings.oClasses.sStripeOdd+" "; + } + if ( $(anRows[0]).hasClass(oSettings.oClasses.sStripeEven) ) + { + oSettings.asDestroyStripes[0] += oSettings.oClasses.sStripeEven; + } + if ( $(anRows[1]).hasClass(oSettings.oClasses.sStripeOdd) ) + { + oSettings.asDestroyStripes[1] += oSettings.oClasses.sStripeOdd+" "; + } + if ( $(anRows[1]).hasClass(oSettings.oClasses.sStripeEven) ) + { + oSettings.asDestroyStripes[1] += oSettings.oClasses.sStripeEven; + } + + anRows.removeClass( oSettings.asStripeClasses.join(' ') ); + } + + + /* + * Columns + * See if we should load columns automatically or use defined ones + */ + var anThs = []; + var aoColumnsInit; + var nThead = this.getElementsByTagName('thead'); + if ( nThead.length !== 0 ) + { + _fnDetectHeader( oSettings.aoHeader, nThead[0] ); + anThs = _fnGetUniqueThs( oSettings ); + } + + /* If not given a column array, generate one with nulls */ + if ( oInit.aoColumns === null ) + { + aoColumnsInit = []; + for ( i=0, iLen=anThs.length ; i<iLen ; i++ ) + { + aoColumnsInit.push( null ); + } + } + else + { + aoColumnsInit = oInit.aoColumns; + } + + /* Add the columns */ + for ( i=0, iLen=aoColumnsInit.length ; i<iLen ; i++ ) + { + /* Short cut - use the loop to check if we have column visibility state to restore */ + if ( oInit.saved_aoColumns !== undefined && oInit.saved_aoColumns.length == iLen ) + { + if ( aoColumnsInit[i] === null ) + { + aoColumnsInit[i] = {}; + } + aoColumnsInit[i].bVisible = oInit.saved_aoColumns[i].bVisible; + } + + _fnAddColumn( oSettings, anThs ? anThs[i] : null ); + } + + /* Apply the column definitions */ + _fnApplyColumnDefs( oSettings, oInit.aoColumnDefs, aoColumnsInit, function (iCol, oDef) { + _fnColumnOptions( oSettings, iCol, oDef ); + } ); + + + /* + * Sorting + * Check the aaSorting array + */ + for ( i=0, iLen=oSettings.aaSorting.length ; i<iLen ; i++ ) + { + if ( oSettings.aaSorting[i][0] >= oSettings.aoColumns.length ) + { + oSettings.aaSorting[i][0] = 0; + } + var oColumn = oSettings.aoColumns[ oSettings.aaSorting[i][0] ]; + + /* Add a default sorting index */ + if ( oSettings.aaSorting[i][2] === undefined ) + { + oSettings.aaSorting[i][2] = 0; + } + + /* If aaSorting is not defined, then we use the first indicator in asSorting */ + if ( oInit.aaSorting === undefined && oSettings.saved_aaSorting === undefined ) + { + oSettings.aaSorting[i][1] = oColumn.asSorting[0]; + } + + /* Set the current sorting index based on aoColumns.asSorting */ + for ( j=0, jLen=oColumn.asSorting.length ; j<jLen ; j++ ) + { + if ( oSettings.aaSorting[i][1] == oColumn.asSorting[j] ) + { + oSettings.aaSorting[i][2] = j; + break; + } + } + } + + /* Do a first pass on the sorting classes (allows any size changes to be taken into + * account, and also will apply sorting disabled classes if disabled + */ + _fnSortingClasses( oSettings ); + + + /* + * Final init + * Cache the header, body and footer as required, creating them if needed + */ + var thead = $(this).children('thead'); + if ( thead.length === 0 ) + { + thead = [ document.createElement( 'thead' ) ]; + this.appendChild( thead[0] ); + } + oSettings.nTHead = thead[0]; + + var tbody = $(this).children('tbody'); + if ( tbody.length === 0 ) + { + tbody = [ document.createElement( 'tbody' ) ]; + this.appendChild( tbody[0] ); + } + oSettings.nTBody = tbody[0]; + oSettings.nTBody.setAttribute( "role", "alert" ); + oSettings.nTBody.setAttribute( "aria-live", "polite" ); + oSettings.nTBody.setAttribute( "aria-relevant", "all" ); + + var tfoot = $(this).children('tfoot'); + if ( tfoot.length > 0 ) + { + oSettings.nTFoot = tfoot[0]; + _fnDetectHeader( oSettings.aoFooter, oSettings.nTFoot ); + } + + /* Check if there is data passing into the constructor */ + if ( bUsePassedData ) + { + for ( i=0 ; i<oInit.aaData.length ; i++ ) + { + _fnAddData( oSettings, oInit.aaData[ i ] ); + } + } + else + { + /* Grab the data from the page */ + _fnGatherData( oSettings ); + } + + /* Copy the data index array */ + oSettings.aiDisplay = oSettings.aiDisplayMaster.slice(); + + /* Initialisation complete - table can be drawn */ + oSettings.bInitialised = true; + + /* Check if we need to initialise the table (it might not have been handed off to the + * language processor) + */ + if ( bInitHandedOff === false ) + { + _fnInitialise( oSettings ); + } + } ); + }; + + /** + * Version string for plug-ins to check compatibility. Allowed format is + * a.b.c.d.e where: a:int, b:int, c:int, d:string(dev|beta), e:int. d and + * e are optional + * @member + * @type string + * @default Version number + */ + DataTable.version = "1.9.0"; + + /** + * Private data store, containing all of the settings objects that are created for the + * tables on a given page. + * + * Note that the <i>DataTable.settings</i> object is aliased to <i>jQuery.fn.dataTableExt</i> + * through which it may be accessed and manipulated, or <i>jQuery.fn.dataTable.settings</i>. + * @member + * @type array + * @default [] + * @private + */ + DataTable.settings = []; + + /** + * Object models container, for the various models that DataTables has available + * to it. These models define the objects that are used to hold the active state + * and configuration of the table. + * @namespace + */ + DataTable.models = {}; + + + /** + * DataTables extension options and plug-ins. This namespace acts as a collection "area" + * for plug-ins that can be used to extend the default DataTables behaviour - indeed many + * of the build in methods use this method to provide their own capabilities (sorting methods + * for example). + * + * Note that this namespace is aliased to jQuery.fn.dataTableExt so it can be readily accessed + * and modified by plug-ins. + * @namespace + */ + DataTable.models.ext = { + /** + * Plug-in filtering functions - this method of filtering is complimentary to the default + * type based filtering, and a lot more comprehensive as it allows you complete control + * over the filtering logic. Each element in this array is a function (parameters + * described below) that is called for every row in the table, and your logic decides if + * it should be included in the filtered data set or not. + * <ul> + * <li> + * Function input parameters: + * <ul> + * <li>{object} DataTables settings object: see {@link DataTable.models.oSettings}.</li> + * <li>{array|object} Data for the row to be processed (same as the original format + * that was passed in as the data source, or an array from a DOM data source</li> + * <li>{int} Row index in aoData ({@link DataTable.models.oSettings.aoData}), which can + * be useful to retrieve the TR element if you need DOM interaction.</li> + * </ul> + * </li> + * <li> + * Function return: + * <ul> + * <li>{boolean} Include the row in the filtered result set (true) or not (false)</li> + * </ul> + * </il> + * </ul> + * @type array + * @default [] + * + * @example + * // The following example shows custom filtering being applied to the fourth column (i.e. + * // the aData[3] index) based on two input values from the end-user, matching the data in + * // a certain range. + * $.fn.dataTableExt.afnFiltering.push( + * function( oSettings, aData, iDataIndex ) { + * var iMin = document.getElementById('min').value * 1; + * var iMax = document.getElementById('max').value * 1; + * var iVersion = aData[3] == "-" ? 0 : aData[3]*1; + * if ( iMin == "" && iMax == "" ) { + * return true; + * } + * else if ( iMin == "" && iVersion < iMax ) { + * return true; + * } + * else if ( iMin < iVersion && "" == iMax ) { + * return true; + * } + * else if ( iMin < iVersion && iVersion < iMax ) { + * return true; + * } + * return false; + * } + * ); + */ + "afnFiltering": [], + + + /** + * Plug-in sorting functions - this method of sorting is complimentary to the default type + * based sorting that DataTables does automatically, allowing much greater control over the + * the data that is being used to sort a column. This is useful if you want to do sorting + * based on live data (for example the contents of an 'input' element) rather than just the + * static string that DataTables knows of. The way these plug-ins work is that you create + * an array of the values you wish to be sorted for the column in question and then return + * that array. Which pre-sorting function is run here depends on the sSortDataType parameter + * that is used for the column (if any). This is the corollary of <i>ofnSearch</i> for sort + * data. + * <ul> + * <li> + * Function input parameters: + * <ul> + * <li>{object} DataTables settings object: see {@link DataTable.models.oSettings}.</li> + * <li>{int} Target column index</li> + * </ul> + * </li> + * <li> + * Function return: + * <ul> + * <li>{array} Data for the column to be sorted upon</li> + * </ul> + * </il> + * </ul> + * + * Note that as of v1.9, it is typically preferable to use <i>mDataProp</i> to prepare data for + * the different uses that DataTables can put the data to. Specifically <i>mDataProp</i> when + * used as a function will give you a 'type' (sorting, filtering etc) that you can use to + * prepare the data as required for the different types. As such, this method is deprecated. + * @type array + * @default [] + * @deprecated + * + * @example + * // Updating the cached sorting information with user entered values in HTML input elements + * jQuery.fn.dataTableExt.afnSortData['dom-text'] = function ( oSettings, iColumn ) + * { + * var aData = []; + * $( 'td:eq('+iColumn+') input', oSettings.oApi._fnGetTrNodes(oSettings) ).each( function () { + * aData.push( this.value ); + * } ); + * return aData; + * } + */ + "afnSortData": [], + + + /** + * Feature plug-ins - This is an array of objects which describe the feature plug-ins that are + * available to DataTables. These feature plug-ins are accessible through the sDom initialisation + * option. As such, each feature plug-in must describe a function that is used to initialise + * itself (fnInit), a character so the feature can be enabled by sDom (cFeature) and the name + * of the feature (sFeature). Thus the objects attached to this method must provide: + * <ul> + * <li>{function} fnInit Initialisation of the plug-in + * <ul> + * <li> + * Function input parameters: + * <ul> + * <li>{object} DataTables settings object: see {@link DataTable.models.oSettings}.</li> + * </ul> + * </li> + * <li> + * Function return: + * <ul> + * <li>{node|null} The element which contains your feature. Note that the return + * may also be void if your plug-in does not require to inject any DOM elements + * into DataTables control (sDom) - for example this might be useful when + * developing a plug-in which allows table control via keyboard entry.</li> + * </ul> + * </il> + * </ul> + * </li> + * <li>{character} cFeature Character that will be matched in sDom - case sensitive</li> + * <li>{string} sFeature Feature name</li> + * </ul> + * @type array + * @default [] + * + * @example + * // How TableTools initialises itself. + * $.fn.dataTableExt.aoFeatures.push( { + * "fnInit": function( oSettings ) { + * return new TableTools( { "oDTSettings": oSettings } ); + * }, + * "cFeature": "T", + * "sFeature": "TableTools" + * } ); + */ + "aoFeatures": [], + + + /** + * Type detection plug-in functions - DataTables utilises types to define how sorting and + * filtering behave, and types can be either be defined by the developer (sType for the + * column) or they can be automatically detected by the methods in this array. The functions + * defined in the array are quite simple, taking a single parameter (the data to analyse) + * and returning the type if it is a known type, or null otherwise. + * <ul> + * <li> + * Function input parameters: + * <ul> + * <li>{*} Data from the column cell to be analysed</li> + * </ul> + * </li> + * <li> + * Function return: + * <ul> + * <li>{string|null} Data type detected, or null if unknown (and thus pass it + * on to the other type detection functions.</li> + * </ul> + * </il> + * </ul> + * @type array + * @default [] + * + * @example + * // Currency type detection plug-in: + * jQuery.fn.dataTableExt.aTypes.push( + * function ( sData ) { + * var sValidChars = "0123456789.-"; + * var Char; + * + * // Check the numeric part + * for ( i=1 ; i<sData.length ; i++ ) { + * Char = sData.charAt(i); + * if (sValidChars.indexOf(Char) == -1) { + * return null; + * } + * } + * + * // Check prefixed by currency + * if ( sData.charAt(0) == '$' || sData.charAt(0) == '£' ) { + * return 'currency'; + * } + * return null; + * } + * ); + */ + "aTypes": [], + + + /** + * Provide a common method for plug-ins to check the version of DataTables being used, + * in order to ensure compatibility. + * @type function + * @param {string} sVersion Version string to check for, in the format "X.Y.Z". Note + * that the formats "X" and "X.Y" are also acceptable. + * @returns {boolean} true if this version of DataTables is greater or equal to the + * required version, or false if this version of DataTales is not suitable + * + * @example + * $(document).ready(function() { + * var oTable = $('#example').dataTable(); + * alert( oTable.fnVersionCheck( '1.9.0' ) ); + * } ); + */ + "fnVersionCheck": function( sVersion ) + { + /* This is cheap, but very effective */ + var fnZPad = function (Zpad, count) + { + while(Zpad.length < count) { + Zpad += '0'; + } + return Zpad; + }; + var aThis = DataTable.ext.sVersion.split('.'); + var aThat = sVersion.split('.'); + var sThis = '', sThat = ''; + + for ( var i=0, iLen=aThat.length ; i<iLen ; i++ ) + { + sThis += fnZPad( aThis[i], 3 ); + sThat += fnZPad( aThat[i], 3 ); + } + + return parseInt(sThis, 10) >= parseInt(sThat, 10); + }, + + + /** + * Index for what 'this' index API functions should use + * @type int + * @default 0 + */ + "iApiIndex": 0, + + + /** + * Pre-processing of filtering data plug-ins - When you assign the sType for a column + * (or have it automatically detected for you by DataTables or a type detection plug-in), + * you will typically be using this for custom sorting, but it can also be used to provide + * custom filtering by allowing you to pre-processing the data and returning the data in + * the format that should be filtered upon. This is done by adding functions this object + * with a parameter name which matches the sType for that target column. This is the + * corollary of <i>afnSortData</i> for filtering data. + * <ul> + * <li> + * Function input parameters: + * <ul> + * <li>{*} Data from the column cell to be prepared for filtering</li> + * </ul> + * </li> + * <li> + * Function return: + * <ul> + * <li>{string|null} Formatted string that will be used for the filtering.</li> + * </ul> + * </il> + * </ul> + * + * Note that as of v1.9, it is typically preferable to use <i>mDataProp</i> to prepare data for + * the different uses that DataTables can put the data to. Specifically <i>mDataProp</i> when + * used as a function will give you a 'type' (sorting, filtering etc) that you can use to + * prepare the data as required for the different types. As such, this method is deprecated. + * @type object + * @default {} + * @deprecated + * + * @example + * $.fn.dataTableExt.ofnSearch['title-numeric'] = function ( sData ) { + * return sData.replace(/\n/g," ").replace( /<.*?>/g, "" ); + * } + */ + "ofnSearch": {}, + + + /** + * Container for all private functions in DataTables so they can be exposed externally + * @type object + * @default {} + */ + "oApi": {}, + + + /** + * Storage for the various classes that DataTables uses + * @type object + * @default {} + */ + "oStdClasses": {}, + + + /** + * Storage for the various classes that DataTables uses - jQuery UI suitable + * @type object + * @default {} + */ + "oJUIClasses": {}, + + + /** + * Pagination plug-in methods - The style and controls of the pagination can significantly + * impact on how the end user interacts with the data in your table, and DataTables allows + * the addition of pagination controls by extending this object, which can then be enabled + * through the <i>sPaginationType</i> initialisation parameter. Each pagination type that + * is added is an object (the property name of which is what <i>sPaginationType</i> refers + * to) that has two properties, both methods that are used by DataTables to update the + * control's state. + * <ul> + * <li> + * fnInit - Initialisation of the paging controls. Called only during initialisation + * of the table. It is expected that this function will add the required DOM elements + * to the page for the paging controls to work. The element pointer + * 'oSettings.aanFeatures.p' array is provided by DataTables to contain the paging + * controls (note that this is a 2D array to allow for multiple instances of each + * DataTables DOM element). It is suggested that you add the controls to this element + * as children + * <ul> + * <li> + * Function input parameters: + * <ul> + * <li>{object} DataTables settings object: see {@link DataTable.models.oSettings}.</li> + * <li>{node} Container into which the pagination controls must be inserted</li> + * <li>{function} Draw callback function - whenever the controls cause a page + * change, this method must be called to redraw the table.</li> + * </ul> + * </li> + * <li> + * Function return: + * <ul> + * <li>No return required</li> + * </ul> + * </il> + * </ul> + * </il> + * <li> + * fnInit - This function is called whenever the paging status of the table changes and is + * typically used to update classes and/or text of the paging controls to reflex the new + * status. + * <ul> + * <li> + * Function input parameters: + * <ul> + * <li>{object} DataTables settings object: see {@link DataTable.models.oSettings}.</li> + * <li>{function} Draw callback function - in case you need to redraw the table again + * or attach new event listeners</li> + * </ul> + * </li> + * <li> + * Function return: + * <ul> + * <li>No return required</li> + * </ul> + * </il> + * </ul> + * </il> + * </ul> + * @type object + * @default {} + * + * @example + * $.fn.dataTableExt.oPagination.four_button = { + * "fnInit": function ( oSettings, nPaging, fnCallbackDraw ) { + * nFirst = document.createElement( 'span' ); + * nPrevious = document.createElement( 'span' ); + * nNext = document.createElement( 'span' ); + * nLast = document.createElement( 'span' ); + * + * nFirst.appendChild( document.createTextNode( oSettings.oLanguage.oPaginate.sFirst ) ); + * nPrevious.appendChild( document.createTextNode( oSettings.oLanguage.oPaginate.sPrevious ) ); + * nNext.appendChild( document.createTextNode( oSettings.oLanguage.oPaginate.sNext ) ); + * nLast.appendChild( document.createTextNode( oSettings.oLanguage.oPaginate.sLast ) ); + * + * nFirst.className = "paginate_button first"; + * nPrevious.className = "paginate_button previous"; + * nNext.className="paginate_button next"; + * nLast.className = "paginate_button last"; + * + * nPaging.appendChild( nFirst ); + * nPaging.appendChild( nPrevious ); + * nPaging.appendChild( nNext ); + * nPaging.appendChild( nLast ); + * + * $(nFirst).click( function () { + * oSettings.oApi._fnPageChange( oSettings, "first" ); + * fnCallbackDraw( oSettings ); + * } ); + * + * $(nPrevious).click( function() { + * oSettings.oApi._fnPageChange( oSettings, "previous" ); + * fnCallbackDraw( oSettings ); + * } ); + * + * $(nNext).click( function() { + * oSettings.oApi._fnPageChange( oSettings, "next" ); + * fnCallbackDraw( oSettings ); + * } ); + * + * $(nLast).click( function() { + * oSettings.oApi._fnPageChange( oSettings, "last" ); + * fnCallbackDraw( oSettings ); + * } ); + * + * $(nFirst).bind( 'selectstart', function () { return false; } ); + * $(nPrevious).bind( 'selectstart', function () { return false; } ); + * $(nNext).bind( 'selectstart', function () { return false; } ); + * $(nLast).bind( 'selectstart', function () { return false; } ); + * }, + * + * "fnUpdate": function ( oSettings, fnCallbackDraw ) { + * if ( !oSettings.aanFeatures.p ) { + * return; + * } + * + * // Loop over each instance of the pager + * var an = oSettings.aanFeatures.p; + * for ( var i=0, iLen=an.length ; i<iLen ; i++ ) { + * var buttons = an[i].getElementsByTagName('span'); + * if ( oSettings._iDisplayStart === 0 ) { + * buttons[0].className = "paginate_disabled_previous"; + * buttons[1].className = "paginate_disabled_previous"; + * } + * else { + * buttons[0].className = "paginate_enabled_previous"; + * buttons[1].className = "paginate_enabled_previous"; + * } + * + * if ( oSettings.fnDisplayEnd() == oSettings.fnRecordsDisplay() ) { + * buttons[2].className = "paginate_disabled_next"; + * buttons[3].className = "paginate_disabled_next"; + * } + * else { + * buttons[2].className = "paginate_enabled_next"; + * buttons[3].className = "paginate_enabled_next"; + * } + * } + * } + * }; + */ + "oPagination": {}, + + + /** + * Sorting plug-in methods - Sorting in DataTables is based on the detected type of the + * data column (you can add your own type detection functions, or override automatic + * detection using sType). With this specific type given to the column, DataTables will + * apply the required sort from the functions in the object. Each sort type must provide + * two mandatory methods, one each for ascending and descending sorting, and can optionally + * provide a pre-formatting method that will help speed up sorting by allowing DataTables + * to pre-format the sort data only once (rather than every time the actual sort functions + * are run). The two sorting functions are typical Javascript sort methods: + * <ul> + * <li> + * Function input parameters: + * <ul> + * <li>{*} Data to compare to the second parameter</li> + * <li>{*} Data to compare to the first parameter</li> + * </ul> + * </li> + * <li> + * Function return: + * <ul> + * <li>{int} Sorting match: <0 if first parameter should be sorted lower than + * the second parameter, ===0 if the two parameters are equal and >0 if + * the first parameter should be sorted height than the second parameter.</li> + * </ul> + * </il> + * </ul> + * @type object + * @default {} + * + * @example + * // Case-sensitive string sorting, with no pre-formatting method + * $.extend( $.fn.dataTableExt.oSort, { + * "string-case-asc": function(x,y) { + * return ((x < y) ? -1 : ((x > y) ? 1 : 0)); + * }, + * "string-case-desc": function(x,y) { + * return ((x < y) ? 1 : ((x > y) ? -1 : 0)); + * } + * } ); + * + * @example + * // Case-insensitive string sorting, with pre-formatting + * $.extend( $.fn.dataTableExt.oSort, { + * "string-pre": function(x) { + * return x.toLowerCase(); + * }, + * "string-asc": function(x,y) { + * return ((x < y) ? -1 : ((x > y) ? 1 : 0)); + * }, + * "string-desc": function(x,y) { + * return ((x < y) ? 1 : ((x > y) ? -1 : 0)); + * } + * } ); + */ + "oSort": {}, + + + /** + * Version string for plug-ins to check compatibility. Allowed format is + * a.b.c.d.e where: a:int, b:int, c:int, d:string(dev|beta), e:int. d and + * e are optional + * @type string + * @default Version number + */ + "sVersion": DataTable.version, + + + /** + * How should DataTables report an error. Can take the value 'alert' or 'throw' + * @type string + * @default alert + */ + "sErrMode": "alert", + + + /** + * Store information for DataTables to access globally about other instances + * @namespace + * @private + */ + "_oExternConfig": { + /* int:iNextUnique - next unique number for an instance */ + "iNextUnique": 0 + } + }; + + + + + /** + * Template object for the way in which DataTables holds information about + * search information for the global filter and individual column filters. + * @namespace + */ + DataTable.models.oSearch = { + /** + * Flag to indicate if the filtering should be case insensitive or not + * @type boolean + * @default true + */ + "bCaseInsensitive": true, + + /** + * Applied search term + * @type string + * @default <i>Empty string</i> + */ + "sSearch": "", + + /** + * Flag to indicate if the search term should be interpreted as a + * regular expression (true) or not (false) and therefore and special + * regex characters escaped. + * @type boolean + * @default false + */ + "bRegex": false, + + /** + * Flag to indicate if DataTables is to use its smart filtering or not. + * @type boolean + * @default true + */ + "bSmart": true + }; + + + + + /** + * Template object for the way in which DataTables holds information about + * each individual row. This is the object format used for the settings + * aoData array. + * @namespace + */ + DataTable.models.oRow = { + /** + * TR element for the row + * @type node + * @default null + */ + "nTr": null, + + /** + * Data object from the original data source for the row. This is either + * an array if using the traditional form of DataTables, or an object if + * using mDataProp options. The exact type will depend on the passed in + * data from the data source, or will be an array if using DOM a data + * source. + * @type array|object + * @default [] + */ + "_aData": [], + + /** + * Sorting data cache - this array is ostensibly the same length as the + * number of columns (although each index is generated only as it is + * needed), and holds the data that is used for sorting each column in the + * row. We do this cache generation at the start of the sort in order that + * the formatting of the sort data need be done only once for each cell + * per sort. This array should not be read from or written to by anything + * other than the master sorting methods. + * @type array + * @default [] + * @private + */ + "_aSortData": [], + + /** + * Array of TD elements that are cached for hidden rows, so they can be + * reinserted into the table if a column is made visible again (or to act + * as a store if a column is made hidden). Only hidden columns have a + * reference in the array. For non-hidden columns the value is either + * undefined or null. + * @type array nodes + * @default [] + * @private + */ + "_anHidden": [], + + /** + * Cache of the class name that DataTables has applied to the row, so we + * can quickly look at this variable rather than needing to do a DOM check + * on className for the nTr property. + * @type string + * @default <i>Empty string</i> + * @private + */ + "_sRowStripe": "" + }; + + + + /** + * Template object for the column information object in DataTables. This object + * is held in the settings aoColumns array and contains all the information that + * DataTables needs about each individual column. + * + * Note that this object is related to {@link DataTable.defaults.columns} + * but this one is the internal data store for DataTables's cache of columns. + * It should NOT be manipulated outside of DataTables. Any configuration should + * be done through the initialisation options. + * @namespace + */ + DataTable.models.oColumn = { + /** + * A list of the columns that sorting should occur on when this column + * is sorted. That this property is an array allows multi-column sorting + * to be defined for a column (for example first name / last name columns + * would benefit from this). The values are integers pointing to the + * columns to be sorted on (typically it will be a single integer pointing + * at itself, but that doesn't need to be the case). + * @type array + */ + "aDataSort": null, + + /** + * Define the sorting directions that are applied to the column, in sequence + * as the column is repeatedly sorted upon - i.e. the first value is used + * as the sorting direction when the column if first sorted (clicked on). + * Sort it again (click again) and it will move on to the next index. + * Repeat until loop. + * @type array + */ + "asSorting": null, + + /** + * Flag to indicate if the column is searchable, and thus should be included + * in the filtering or not. + * @type boolean + */ + "bSearchable": null, + + /** + * Flag to indicate if the column is sortable or not. + * @type boolean + */ + "bSortable": null, + + /** + * When using fnRender, you have two options for what to do with the data, + * and this property serves as the switch. Firstly, you can have the sorting + * and filtering use the rendered value (true - default), or you can have + * the sorting and filtering us the original value (false). + * + * *NOTE* It is it is advisable now to use mDataProp as a function and make + * use of the 'type' that it gives, allowing (potentially) different data to + * be used for sorting, filtering, display and type detection. + * @type boolean + * @deprecated + */ + "bUseRendered": null, + + /** + * Flag to indicate if the column is currently visible in the table or not + * @type boolean + */ + "bVisible": null, + + /** + * Flag to indicate to the type detection method if the automatic type + * detection should be used, or if a column type (sType) has been specified + * @type boolean + * @default true + * @private + */ + "_bAutoType": true, + + /** + * Developer definable function that is called whenever a cell is created (Ajax source, + * etc) or processed for input (DOM source). This can be used as a compliment to fnRender + * allowing you to modify the DOM element (add background colour for example) when the + * element is available (since it is not when fnRender is called). + * @type function + * @param {element} nTd The TD node that has been created + * @param {*} sData The Data for the cell + * @param {array|object} oData The data for the whole row + * @param {int} iRow The row index for the aoData data store + * @default null + */ + "fnCreatedCell": null, + + /** + * Function to get data from a cell in a column. You should <b>never</b> + * access data directly through _aData internally in DataTables - always use + * the method attached to this property. It allows mDataProp to function as + * required. This function is automatically assigned by the column + * initialisation method + * @type function + * @param {array|object} oData The data array/object for the array + * (i.e. aoData[]._aData) + * @param {string} sSpecific The specific data type you want to get - + * 'display', 'type' 'filter' 'sort' + * @returns {*} The data for the cell from the given row's data + * @default null + */ + "fnGetData": null, + + /** + * Custom display function that will be called for the display of each cell + * in this column. + * @type function + * @param {object} o Object with the following parameters: + * @param {int} o.iDataRow The row in aoData + * @param {int} o.iDataColumn The column in question + * @param {array o.aData The data for the row in question + * @param {object} o.oSettings The settings object for this DataTables instance + * @returns {string} The string you which to use in the display + * @default null + */ + "fnRender": null, + + /** + * Function to set data for a cell in the column. You should <b>never</b> + * set the data directly to _aData internally in DataTables - always use + * this method. It allows mDataProp to function as required. This function + * is automatically assigned by the column initialisation method + * @type function + * @param {array|object} oData The data array/object for the array + * (i.e. aoData[]._aData) + * @param {*} sValue Value to set + * @default null + */ + "fnSetData": null, + + /** + * Property to read the value for the cells in the column from the data + * source array / object. If null, then the default content is used, if a + * function is given then the return from the function is used. + * @type function|int|string|null + * @default null + */ + "mDataProp": null, + + /** + * Unique header TH/TD element for this column - this is what the sorting + * listener is attached to (if sorting is enabled.) + * @type node + * @default null + */ + "nTh": null, + + /** + * Unique footer TH/TD element for this column (if there is one). Not used + * in DataTables as such, but can be used for plug-ins to reference the + * footer for each column. + * @type node + * @default null + */ + "nTf": null, + + /** + * The class to apply to all TD elements in the table's TBODY for the column + * @type string + * @default null + */ + "sClass": null, + + /** + * When DataTables calculates the column widths to assign to each column, + * it finds the longest string in each column and then constructs a + * temporary table and reads the widths from that. The problem with this + * is that "mmm" is much wider then "iiii", but the latter is a longer + * string - thus the calculation can go wrong (doing it properly and putting + * it into an DOM object and measuring that is horribly(!) slow). Thus as + * a "work around" we provide this option. It will append its value to the + * text that is found to be the longest string for the column - i.e. padding. + * @type string + */ + "sContentPadding": null, + + /** + * Allows a default value to be given for a column's data, and will be used + * whenever a null data source is encountered (this can be because mDataProp + * is set to null, or because the data source itself is null). + * @type string + * @default null + */ + "sDefaultContent": null, + + /** + * Name for the column, allowing reference to the column by name as well as + * by index (needs a lookup to work by name). + * @type string + */ + "sName": null, + + /** + * Custom sorting data type - defines which of the available plug-ins in + * afnSortData the custom sorting will use - if any is defined. + * @type string + * @default std + */ + "sSortDataType": 'std', + + /** + * Class to be applied to the header element when sorting on this column + * @type string + * @default null + */ + "sSortingClass": null, + + /** + * Class to be applied to the header element when sorting on this column - + * when jQuery UI theming is used. + * @type string + * @default null + */ + "sSortingClassJUI": null, + + /** + * Title of the column - what is seen in the TH element (nTh). + * @type string + */ + "sTitle": null, + + /** + * Column sorting and filtering type + * @type string + * @default null + */ + "sType": null, + + /** + * Width of the column + * @type string + * @default null + */ + "sWidth": null, + + /** + * Width of the column when it was first "encountered" + * @type string + * @default null + */ + "sWidthOrig": null + }; + + + + /** + * Initialisation options that can be given to DataTables at initialisation + * time. + * @namespace + */ + DataTable.defaults = { + /** + * An array of data to use for the table, passed in at initialisation which + * will be used in preference to any data which is already in the DOM. This is + * particularly useful for constructing tables purely in Javascript, for + * example with a custom Ajax call. + * @type array + * @default null + * @dtopt Option + * + * @example + * // Using a 2D array data source + * $(document).ready( function () { + * $('#example').dataTable( { + * "aaData": [ + * ['Trident', 'Internet Explorer 4.0', 'Win 95+', 4, 'X'], + * ['Trident', 'Internet Explorer 5.0', 'Win 95+', 5, 'C'], + * ], + * "aoColumns": [ + * { "sTitle": "Engine" }, + * { "sTitle": "Browser" }, + * { "sTitle": "Platform" }, + * { "sTitle": "Version" }, + * { "sTitle": "Grade" } + * ] + * } ); + * } ); + * + * @example + * // Using an array of objects as a data source (mDataProp) + * $(document).ready( function () { + * $('#example').dataTable( { + * "aaData": [ + * { + * "engine": "Trident", + * "browser": "Internet Explorer 4.0", + * "platform": "Win 95+", + * "version": 4, + * "grade": "X" + * }, + * { + * "engine": "Trident", + * "browser": "Internet Explorer 5.0", + * "platform": "Win 95+", + * "version": 5, + * "grade": "C" + * } + * ], + * "aoColumns": [ + * { "sTitle": "Engine", "mDataProp": "engine" }, + * { "sTitle": "Browser", "mDataProp": "browser" }, + * { "sTitle": "Platform", "mDataProp": "platform" }, + * { "sTitle": "Version", "mDataProp": "version" }, + * { "sTitle": "Grade", "mDataProp": "grade" } + * ] + * } ); + * } ); + */ + "aaData": null, + + + /** + * If sorting is enabled, then DataTables will perform a first pass sort on + * initialisation. You can define which column(s) the sort is performed upon, + * and the sorting direction, with this variable. The aaSorting array should + * contain an array for each column to be sorted initially containing the + * column's index and a direction string ('asc' or 'desc'). + * @type array + * @default [[0,'asc']] + * @dtopt Option + * + * @example + * // Sort by 3rd column first, and then 4th column + * $(document).ready( function() { + * $('#example').dataTable( { + * "aaSorting": [[2,'asc'], [3,'desc']] + * } ); + * } ); + * + * // No initial sorting + * $(document).ready( function() { + * $('#example').dataTable( { + * "aaSorting": [] + * } ); + * } ); + */ + "aaSorting": [[0,'asc']], + + + /** + * This parameter is basically identical to the aaSorting parameter, but + * cannot be overridden by user interaction with the table. What this means + * is that you could have a column (visible or hidden) which the sorting will + * always be forced on first - any sorting after that (from the user) will + * then be performed as required. This can be useful for grouping rows + * together. + * @type array + * @default null + * @dtopt Option + * + * @example + * $(document).ready( function() { + * $('#example').dataTable( { + * "aaSortingFixed": [[0,'asc']] + * } ); + * } ) + */ + "aaSortingFixed": null, + + + /** + * This parameter allows you to readily specify the entries in the length drop + * down menu that DataTables shows when pagination is enabled. It can be + * either a 1D array of options which will be used for both the displayed + * option and the value, or a 2D array which will use the array in the first + * position as the value, and the array in the second position as the + * displayed options (useful for language strings such as 'All'). + * @type array + * @default [ 10, 25, 50, 100 ] + * @dtopt Option + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "aLengthMenu": [[10, 25, 50, -1], [10, 25, 50, "All"]] + * } ); + * } ); + * + * @example + * // Setting the default display length as well as length menu + * // This is likely to be wanted if you remove the '10' option which + * // is the iDisplayLength default. + * $(document).ready(function() { + * $('#example').dataTable( { + * "iDisplayLength": 25, + * "aLengthMenu": [[25, 50, 100, -1], [25, 50, 100, "All"]] + * } ); + * } ); + */ + "aLengthMenu": [ 10, 25, 50, 100 ], + + + /** + * The aoColumns option in the initialisation parameter allows you to define + * details about the way individual columns behave. For a full list of + * column options that can be set, please see + * {@link DataTable.defaults.columns}. Note that if you use aoColumns to + * define your columns, you must have an entry in the array for every single + * column that you have in your table (these can be null if you don't which + * to specify any options). + * @member + */ + "aoColumns": null, + + /** + * Very similar to aoColumns, aoColumnDefs allows you to target a specific + * column, multiple columns, or all columns, using the aTargets property of + * each object in the array. This allows great flexibility when creating + * tables, as the aoColumnDefs arrays can be of any length, targeting the + * columns you specifically want. aoColumnDefs may use any of the column + * options available: {@link DataTable.defaults.columns}, but it _must_ + * have aTargets defined in each object in the array. Values in the aTargets + * array may be: + * <ul> + * <li>a string - class name will be matched on the TH for the column</li> + * <li>0 or a positive integer - column index counting from the left</li> + * <li>a negative integer - column index counting from the right</li> + * <li>the string "_all" - all columns (i.e. assign a default)</li> + * </ul> + * @member + */ + "aoColumnDefs": null, + + + /** + * Basically the same as oSearch, this parameter defines the individual column + * filtering state at initialisation time. The array must be of the same size + * as the number of columns, and each element be an object with the parameters + * "sSearch" and "bEscapeRegex" (the latter is optional). 'null' is also + * accepted and the default will be used. + * @type array + * @default [] + * @dtopt Option + * + * @example + * $(document).ready( function() { + * $('#example').dataTable( { + * "aoSearchCols": [ + * null, + * { "sSearch": "My filter" }, + * null, + * { "sSearch": "^[0-9]", "bEscapeRegex": false } + * ] + * } ); + * } ) + */ + "aoSearchCols": [], + + + /** + * An array of CSS classes that should be applied to displayed rows. This + * array may be of any length, and DataTables will apply each class + * sequentially, looping when required. + * @type array + * @default [ 'odd', 'even' ] + * @dtopt Option + * + * @example + * $(document).ready( function() { + * $('#example').dataTable( { + * "asStripeClasses": [ 'strip1', 'strip2', 'strip3' ] + * } ); + * } ) + */ + "asStripeClasses": [ 'odd', 'even' ], + + + /** + * Enable or disable automatic column width calculation. This can be disabled + * as an optimisation (it takes some time to calculate the widths) if the + * tables widths are passed in using aoColumns. + * @type boolean + * @default true + * @dtopt Features + * + * @example + * $(document).ready( function () { + * $('#example').dataTable( { + * "bAutoWidth": false + * } ); + * } ); + */ + "bAutoWidth": true, + + + /** + * Deferred rendering can provide DataTables with a huge speed boost when you + * are using an Ajax or JS data source for the table. This option, when set to + * true, will cause DataTables to defer the creation of the table elements for + * each row until they are needed for a draw - saving a significant amount of + * time. + * @type boolean + * @default false + * @dtopt Features + * + * @example + * $(document).ready(function() { + * var oTable = $('#example').dataTable( { + * "sAjaxSource": "sources/arrays.txt", + * "bDeferRender": true + * } ); + * } ); + */ + "bDeferRender": false, + + + /** + * Replace a DataTable which matches the given selector and replace it with + * one which has the properties of the new initialisation object passed. If no + * table matches the selector, then the new DataTable will be constructed as + * per normal. + * @type boolean + * @default false + * @dtopt Options + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "sScrollY": "200px", + * "bPaginate": false + * } ); + * + * // Some time later.... + * $('#example').dataTable( { + * "bFilter": false, + * "bDestroy": true + * } ); + * } ); + */ + "bDestroy": false, + + + /** + * Enable or disable filtering of data. Filtering in DataTables is "smart" in + * that it allows the end user to input multiple words (space separated) and + * will match a row containing those words, even if not in the order that was + * specified (this allow matching across multiple columns). Note that if you + * wish to use filtering in DataTables this must remain 'true' - to remove the + * default filtering input box and retain filtering abilities, please use + * @ref{sDom}. + * @type boolean + * @default true + * @dtopt Features + * + * @example + * $(document).ready( function () { + * $('#example').dataTable( { + * "bFilter": false + * } ); + * } ); + */ + "bFilter": true, + + + /** + * Enable or disable the table information display. This shows information + * about the data that is currently visible on the page, including information + * about filtered data if that action is being performed. + * @type boolean + * @default true + * @dtopt Features + * + * @example + * $(document).ready( function () { + * $('#example').dataTable( { + * "bInfo": false + * } ); + * } ); + */ + "bInfo": true, + + + /** + * Enable jQuery UI ThemeRoller support (required as ThemeRoller requires some + * slightly different and additional mark-up from what DataTables has + * traditionally used). + * @type boolean + * @default false + * @dtopt Features + * + * @example + * $(document).ready( function() { + * $('#example').dataTable( { + * "bJQueryUI": true + * } ); + * } ); + */ + "bJQueryUI": false, + + + /** + * Allows the end user to select the size of a formatted page from a select + * menu (sizes are 10, 25, 50 and 100). Requires pagination (bPaginate). + * @type boolean + * @default true + * @dtopt Features + * + * @example + * $(document).ready( function () { + * $('#example').dataTable( { + * "bLengthChange": false + * } ); + * } ); + */ + "bLengthChange": true, + + + /** + * Enable or disable pagination. + * @type boolean + * @default true + * @dtopt Features + * + * @example + * $(document).ready( function () { + * $('#example').dataTable( { + * "bPaginate": false + * } ); + * } ); + */ + "bPaginate": true, + + + /** + * Enable or disable the display of a 'processing' indicator when the table is + * being processed (e.g. a sort). This is particularly useful for tables with + * large amounts of data where it can take a noticeable amount of time to sort + * the entries. + * @type boolean + * @default false + * @dtopt Features + * + * @example + * $(document).ready( function () { + * $('#example').dataTable( { + * "bProcessing": true + * } ); + * } ); + */ + "bProcessing": false, + + + /** + * Retrieve the DataTables object for the given selector. Note that if the + * table has already been initialised, this parameter will cause DataTables + * to simply return the object that has already been set up - it will not take + * account of any changes you might have made to the initialisation object + * passed to DataTables (setting this parameter to true is an acknowledgement + * that you understand this). bDestroy can be used to reinitialise a table if + * you need. + * @type boolean + * @default false + * @dtopt Options + * + * @example + * $(document).ready(function() { + * initTable(); + * tableActions(); + * } ); + * + * function initTable () + * { + * return $('#example').dataTable( { + * "sScrollY": "200px", + * "bPaginate": false, + * "bRetrieve": true + * } ); + * } + * + * function tableActions () + * { + * var oTable = initTable(); + * // perform API operations with oTable + * } + */ + "bRetrieve": false, + + + /** + * Indicate if DataTables should be allowed to set the padding / margin + * etc for the scrolling header elements or not. Typically you will want + * this. + * @type boolean + * @default true + * @dtopt Options + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "bScrollAutoCss": false, + * "sScrollY": "200px" + * } ); + * } ); + */ + "bScrollAutoCss": true, + + + /** + * When vertical (y) scrolling is enabled, DataTables will force the height of + * the table's viewport to the given height at all times (useful for layout). + * However, this can look odd when filtering data down to a small data set, + * and the footer is left "floating" further down. This parameter (when + * enabled) will cause DataTables to collapse the table's viewport down when + * the result set will fit within the given Y height. + * @type boolean + * @default false + * @dtopt Options + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "sScrollY": "200", + * "bScrollCollapse": true + * } ); + * } ); + */ + "bScrollCollapse": false, + + + /** + * Enable infinite scrolling for DataTables (to be used in combination with + * sScrollY). Infinite scrolling means that DataTables will continually load + * data as a user scrolls through a table, which is very useful for large + * dataset. This cannot be used with pagination, which is automatically + * disabled. Note - the Scroller extra for DataTables is recommended in + * in preference to this option. + * @type boolean + * @default false + * @dtopt Features + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "bScrollInfinite": true, + * "bScrollCollapse": true, + * "sScrollY": "200px" + * } ); + * } ); + */ + "bScrollInfinite": false, + + + /** + * Configure DataTables to use server-side processing. Note that the + * sAjaxSource parameter must also be given in order to give DataTables a + * source to obtain the required data for each draw. + * @type boolean + * @default false + * @dtopt Features + * @dtopt Server-side + * + * @example + * $(document).ready( function () { + * $('#example').dataTable( { + * "bServerSide": true, + * "sAjaxSource": "xhr.php" + * } ); + * } ); + */ + "bServerSide": false, + + + /** + * Enable or disable sorting of columns. Sorting of individual columns can be + * disabled by the "bSortable" option for each column. + * @type boolean + * @default true + * @dtopt Features + * + * @example + * $(document).ready( function () { + * $('#example').dataTable( { + * "bSort": false + * } ); + * } ); + */ + "bSort": true, + + + /** + * Allows control over whether DataTables should use the top (true) unique + * cell that is found for a single column, or the bottom (false - default). + * This is useful when using complex headers. + * @type boolean + * @default false + * @dtopt Options + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "bSortCellsTop": true + * } ); + * } ); + */ + "bSortCellsTop": false, + + + /** + * Enable or disable the addition of the classes 'sorting_1', 'sorting_2' and + * 'sorting_3' to the columns which are currently being sorted on. This is + * presented as a feature switch as it can increase processing time (while + * classes are removed and added) so for large data sets you might want to + * turn this off. + * @type boolean + * @default true + * @dtopt Features + * + * @example + * $(document).ready( function () { + * $('#example').dataTable( { + * "bSortClasses": false + * } ); + * } ); + */ + "bSortClasses": true, + + + /** + * Enable or disable state saving. When enabled a cookie will be used to save + * table display information such as pagination information, display length, + * filtering and sorting. As such when the end user reloads the page the + * display display will match what thy had previously set up. + * @type boolean + * @default false + * @dtopt Features + * + * @example + * $(document).ready( function () { + * $('#example').dataTable( { + * "bStateSave": true + * } ); + * } ); + */ + "bStateSave": false, + + + /** + * Customise the cookie and / or the parameters being stored when using + * DataTables with state saving enabled. This function is called whenever + * the cookie is modified, and it expects a fully formed cookie string to be + * returned. Note that the data object passed in is a Javascript object which + * must be converted to a string (JSON.stringify for example). + * @type function + * @param {string} sName Name of the cookie defined by DataTables + * @param {object} oData Data to be stored in the cookie + * @param {string} sExpires Cookie expires string + * @param {string} sPath Path of the cookie to set + * @returns {string} Cookie formatted string (which should be encoded by + * using encodeURIComponent()) + * @dtopt Callbacks + * + * @example + * $(document).ready( function () { + * $('#example').dataTable( { + * "fnCookieCallback": function (sName, oData, sExpires, sPath) { + * // Customise oData or sName or whatever else here + * return sName + "="+JSON.stringify(oData)+"; expires=" + sExpires +"; path=" + sPath; + * } + * } ); + * } ); + */ + "fnCookieCallback": null, + + + /** + * This function is called when a TR element is created (and all TD child + * elements have been inserted), or registered if using a DOM source, allowing + * manipulation of the TR element (adding classes etc). + * @type function + * @param {node} nRow "TR" element for the current row + * @param {array} aData Raw data array for this row + * @param {int} iDataIndex The index of this row in aoData + * @dtopt Callbacks + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "fnCreatedRow": function( nRow, aData, iDataIndex ) { + * // Bold the grade for all 'A' grade browsers + * if ( aData[4] == "A" ) + * { + * $('td:eq(4)', nRow).html( '<b>A</b>' ); + * } + * } + * } ); + * } ); + */ + "fnCreatedRow": null, + + + /** + * This function is called on every 'draw' event, and allows you to + * dynamically modify any aspect you want about the created DOM. + * @type function + * @param {object} oSettings DataTables settings object + * @dtopt Callbacks + * + * @example + * $(document).ready( function() { + * $('#example').dataTable( { + * "fnDrawCallback": function() { + * alert( 'DataTables has redrawn the table' ); + * } + * } ); + * } ); + */ + "fnDrawCallback": null, + + + /** + * Identical to fnHeaderCallback() but for the table footer this function + * allows you to modify the table footer on every 'draw' even. + * @type function + * @param {node} nFoot "TR" element for the footer + * @param {array} aData Full table data (as derived from the original HTML) + * @param {int} iStart Index for the current display starting point in the + * display array + * @param {int} iEnd Index for the current display ending point in the + * display array + * @param {array int} aiDisplay Index array to translate the visual position + * to the full data array + * @dtopt Callbacks + * + * @example + * $(document).ready( function() { + * $('#example').dataTable( { + * "fnFooterCallback": function( nFoot, aData, iStart, iEnd, aiDisplay ) { + * nFoot.getElementsByTagName('th')[0].innerHTML = "Starting index is "+iStart; + * } + * } ); + * } ) + */ + "fnFooterCallback": null, + + + /** + * When rendering large numbers in the information element for the table + * (i.e. "Showing 1 to 10 of 57 entries") DataTables will render large numbers + * to have a comma separator for the 'thousands' units (e.g. 1 million is + * rendered as "1,000,000") to help readability for the end user. This + * function will override the default method DataTables uses. + * @type function + * @member + * @param {int} iIn number to be formatted + * @returns {string} formatted string for DataTables to show the number + * @dtopt Callbacks + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "fnFormatNumber": function ( iIn ) { + * if ( iIn < 1000 ) { + * return iIn; + * } else { + * var + * s=(iIn+""), + * a=s.split(""), out="", + * iLen=s.length; + * + * for ( var i=0 ; i<iLen ; i++ ) { + * if ( i%3 === 0 && i !== 0 ) { + * out = "'"+out; + * } + * out = a[iLen-i-1]+out; + * } + * } + * return out; + * }; + * } ); + * } ); + */ + "fnFormatNumber": function ( iIn ) { + if ( iIn < 1000 ) + { + // A small optimisation for what is likely to be the majority of use cases + return iIn; + } + + var s=(iIn+""), a=s.split(""), out="", iLen=s.length; + + for ( var i=0 ; i<iLen ; i++ ) + { + if ( i%3 === 0 && i !== 0 ) + { + out = this.oLanguage.sInfoThousands+out; + } + out = a[iLen-i-1]+out; + } + return out; + }, + + + /** + * This function is called on every 'draw' event, and allows you to + * dynamically modify the header row. This can be used to calculate and + * display useful information about the table. + * @type function + * @param {node} nHead "TR" element for the header + * @param {array} aData Full table data (as derived from the original HTML) + * @param {int} iStart Index for the current display starting point in the + * display array + * @param {int} iEnd Index for the current display ending point in the + * display array + * @param {array int} aiDisplay Index array to translate the visual position + * to the full data array + * @dtopt Callbacks + * + * @example + * $(document).ready( function() { + * $('#example').dataTable( { + * "fnHeaderCallback": function( nHead, aData, iStart, iEnd, aiDisplay ) { + * nHead.getElementsByTagName('th')[0].innerHTML = "Displaying "+(iEnd-iStart)+" records"; + * } + * } ); + * } ) + */ + "fnHeaderCallback": null, + + + /** + * The information element can be used to convey information about the current + * state of the table. Although the internationalisation options presented by + * DataTables are quite capable of dealing with most customisations, there may + * be times where you wish to customise the string further. This callback + * allows you to do exactly that. + * @type function + * @param {object} oSettings DataTables settings object + * @param {int} iStart Starting position in data for the draw + * @param {int} iEnd End position in data for the draw + * @param {int} iMax Total number of rows in the table (regardless of + * filtering) + * @param {int} iTotal Total number of rows in the data set, after filtering + * @param {string} sPre The string that DataTables has formatted using it's + * own rules + * @returns {string} The string to be displayed in the information element. + * @dtopt Callbacks + * + * @example + * $('#example').dataTable( { + * "fnInfoCallback": function( oSettings, iStart, iEnd, iMax, iTotal, sPre ) { + * return iStart +" to "+ iEnd; + * } + * } ); + */ + "fnInfoCallback": null, + + + /** + * Called when the table has been initialised. Normally DataTables will + * initialise sequentially and there will be no need for this function, + * however, this does not hold true when using external language information + * since that is obtained using an async XHR call. + * @type function + * @param {object} oSettings DataTables settings object + * @param {object} json The JSON object request from the server - only + * present if client-side Ajax sourced data is used + * @dtopt Callbacks + * + * @example + * $(document).ready( function() { + * $('#example').dataTable( { + * "fnInitComplete": function(oSettings, json) { + * alert( 'DataTables has finished its initialisation.' ); + * } + * } ); + * } ) + */ + "fnInitComplete": null, + + + /** + * Called at the very start of each table draw and can be used to cancel the + * draw by returning false, any other return (including undefined) results in + * the full draw occurring). + * @type function + * @param {object} oSettings DataTables settings object + * @returns {boolean} False will cancel the draw, anything else (including no + * return) will allow it to complete. + * @dtopt Callbacks + * + * @example + * $(document).ready( function() { + * $('#example').dataTable( { + * "fnPreDrawCallback": function( oSettings ) { + * if ( $('#test').val() == 1 ) { + * return false; + * } + * } + * } ); + * } ); + */ + "fnPreDrawCallback": null, + + + /** + * This function allows you to 'post process' each row after it have been + * generated for each table draw, but before it is rendered on screen. This + * function might be used for setting the row class name etc. + * @type function + * @param {node} nRow "TR" element for the current row + * @param {array} aData Raw data array for this row + * @param {int} iDisplayIndex The display index for the current table draw + * @param {int} iDisplayIndexFull The index of the data in the full list of + * rows (after filtering) + * @dtopt Callbacks + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "fnRowCallback": function( nRow, aData, iDisplayIndex, iDisplayIndexFull ) { + * // Bold the grade for all 'A' grade browsers + * if ( aData[4] == "A" ) + * { + * $('td:eq(4)', nRow).html( '<b>A</b>' ); + * } + * } + * } ); + * } ); + */ + "fnRowCallback": null, + + + /** + * This parameter allows you to override the default function which obtains + * the data from the server ($.getJSON) so something more suitable for your + * application. For example you could use POST data, or pull information from + * a Gears or AIR database. + * @type function + * @member + * @param {string} sSource HTTP source to obtain the data from (sAjaxSource) + * @param {array} aoData A key/value pair object containing the data to send + * to the server + * @param {function} fnCallback to be called on completion of the data get + * process that will draw the data on the page. + * @param {object} oSettings DataTables settings object + * @dtopt Callbacks + * @dtopt Server-side + * + * @example + * // POST data to server + * $(document).ready(function() { + * $('#example').dataTable( { + * "bProcessing": true, + * "bServerSide": true, + * "sAjaxSource": "xhr.php", + * "fnServerData": function ( sSource, aoData, fnCallback ) { + * $.ajax( { + * "dataType": 'json', + * "type": "POST", + * "url": sSource, + * "data": aoData, + * "success": fnCallback + * } ); + * } + * } ); + * } ); + */ + "fnServerData": function ( sUrl, aoData, fnCallback, oSettings ) { + oSettings.jqXHR = $.ajax( { + "url": sUrl, + "data": aoData, + "success": function (json) { + $(oSettings.oInstance).trigger('xhr', oSettings); + fnCallback( json ); + }, + "dataType": "json", + "cache": false, + "type": oSettings.sServerMethod, + "error": function (xhr, error, thrown) { + if ( error == "parsererror" ) { + alert( "DataTables warning: JSON data from server could not be parsed. "+ + "This is caused by a JSON formatting error." ); + } + } + } ); + }, + + + /** + * It is often useful to send extra data to the server when making an Ajax + * request - for example custom filtering information, and this callback + * function makes it trivial to send extra information to the server. The + * passed in parameter is the data set that has been constructed by + * DataTables, and you can add to this or modify it as you require. + * @type function + * @param {array} aoData Data array (array of objects which are name/value + * pairs) that has been constructed by DataTables and will be sent to the + * server. In the case of Ajax sourced data with server-side processing + * this will be an empty array, for server-side processing there will be a + * significant number of parameters! + * @returns {undefined} Ensure that you modify the aoData array passed in, + * as this is passed by reference. + * @dtopt Callbacks + * @dtopt Server-side + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "bProcessing": true, + * "bServerSide": true, + * "sAjaxSource": "scripts/server_processing.php", + * "fnServerParams": function ( aoData ) { + * aoData.push( { "name": "more_data", "value": "my_value" } ); + * } + * } ); + * } ); + */ + "fnServerParams": null, + + + /** + * Load the table state. With this function you can define from where, and how, the + * state of a table is loaded. By default DataTables will load from its state saving + * cookie, but you might wish to use local storage (HTML5) or a server-side database. + * @type function + * @member + * @param {object} oSettings DataTables settings object + * @return {object} The DataTables state object to be loaded + * @dtopt Callbacks + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "bStateSave": true, + * "fnStateSave": function (oSettings, oData) { + * var o; + * + * // Send an Ajax request to the server to get the data. Note that + * // this is a synchronous request. + * $.ajax( { + * "url": "/state_load", + * "async": false, + * "dataType": "json", + * "success": function (json) { + * o = json; + * } + * } ); + * + * return o; + * } + * } ); + * } ); + */ + "fnStateLoad": function ( oSettings ) { + var sData = this.oApi._fnReadCookie( oSettings.sCookiePrefix+oSettings.sInstance ); + var oData; + + try { + oData = (typeof $.parseJSON === 'function') ? + $.parseJSON(sData) : eval( '('+sData+')' ); + } catch (e) { + oData = null; + } + + return oData; + }, + + + /** + * Callback which allows modification of the saved state prior to loading that state. + * This callback is called when the table is loading state from the stored data, but + * prior to the settings object being modified by the saved state. Note that for + * plug-in authors, you should use the 'stateLoadParams' event to load parameters for + * a plug-in. + * @type function + * @param {object} oSettings DataTables settings object + * @param {object} oData The state object that is to be loaded + * @dtopt Callbacks + * + * @example + * // Remove a saved filter, so filtering is never loaded + * $(document).ready(function() { + * $('#example').dataTable( { + * "bStateSave": true, + * "fnStateLoadParams": function (oSettings, oData) { + * oData.oFilter.sSearch = ""; + * } ); + * } ); + * + * @example + * // Disallow state loading by returning false + * $(document).ready(function() { + * $('#example').dataTable( { + * "bStateSave": true, + * "fnStateLoadParams": function (oSettings, oData) { + * return false; + * } ); + * } ); + */ + "fnStateLoadParams": null, + + + /** + * Callback that is called when the state has been loaded from the state saving method + * and the DataTables settings object has been modified as a result of the loaded state. + * @type function + * @param {object} oSettings DataTables settings object + * @param {object} oData The state object that was loaded + * @dtopt Callbacks + * + * @example + * // Show an alert with the filtering value that was saved + * $(document).ready(function() { + * $('#example').dataTable( { + * "bStateSave": true, + * "fnStateLoaded": function (oSettings, oData) { + * alert( 'Saved filter was: '+oData.oFilter.sSearch ); + * } ); + * } ); + */ + "fnStateLoaded": null, + + + /** + * Save the table state. This function allows you to define where and how the state + * information for the table is stored - by default it will use a cookie, but you + * might want to use local storage (HTML5) or a server-side database. + * @type function + * @member + * @param {object} oSettings DataTables settings object + * @param {object} oData The state object to be saved + * @dtopt Callbacks + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "bStateSave": true, + * "fnStateSave": function (oSettings, oData) { + * // Send an Ajax request to the server with the state object + * $.ajax( { + * "url": "/state_save", + * "data": oData, + * "dataType": "json", + * "method": "POST" + * "success": function () {} + * } ); + * } + * } ); + * } ); + */ + "fnStateSave": function ( oSettings, oData ) { + this.oApi._fnCreateCookie( + oSettings.sCookiePrefix+oSettings.sInstance, + this.oApi._fnJsonString(oData), + oSettings.iCookieDuration, + oSettings.sCookiePrefix, + oSettings.fnCookieCallback + ); + }, + + + /** + * Callback which allows modification of the state to be saved. Called when the table + * has changed state a new state save is required. This method allows modification of + * the state saving object prior to actually doing the save, including addition or + * other state properties or modification. Note that for plug-in authors, you should + * use the 'stateSaveParams' event to save parameters for a plug-in. + * @type function + * @param {object} oSettings DataTables settings object + * @param {object} oData The state object to be saved + * @dtopt Callbacks + * + * @example + * // Remove a saved filter, so filtering is never saved + * $(document).ready(function() { + * $('#example').dataTable( { + * "bStateSave": true, + * "fnStateLoadParams": function (oSettings, oData) { + * oData.oFilter.sSearch = ""; + * } ); + * } ); + */ + "fnStateSaveParams": null, + + + /** + * Duration of the cookie which is used for storing session information. This + * value is given in seconds. + * @type int + * @default 7200 <i>(2 hours)</i> + * @dtopt Options + * + * @example + * $(document).ready( function() { + * $('#example').dataTable( { + * "iCookieDuration": 60*60*24 // 1 day + * } ); + * } ) + */ + "iCookieDuration": 7200, + + + /** + * When enabled DataTables will not make a request to the server for the first + * page draw - rather it will use the data already on the page (no sorting etc + * will be applied to it), thus saving on an XHR at load time. iDeferLoading + * is used to indicate that deferred loading is required, but it is also used + * to tell DataTables how many records there are in the full table (allowing + * the information element and pagination to be displayed correctly). + * @type int + * @default null + * @dtopt Options + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "bServerSide": true, + * "sAjaxSource": "scripts/server_processing.php", + * "iDeferLoading": 57 + * } ); + * } ); + */ + "iDeferLoading": null, + + + /** + * Number of rows to display on a single page when using pagination. If + * feature enabled (bLengthChange) then the end user will be able to override + * this to a custom setting using a pop-up menu. + * @type int + * @default 10 + * @dtopt Options + * + * @example + * $(document).ready( function() { + * $('#example').dataTable( { + * "iDisplayLength": 50 + * } ); + * } ) + */ + "iDisplayLength": 10, + + + /** + * Define the starting point for data display when using DataTables with + * pagination. Note that this parameter is the number of records, rather than + * the page number, so if you have 10 records per page and want to start on + * the third page, it should be "20". + * @type int + * @default 0 + * @dtopt Options + * + * @example + * $(document).ready( function() { + * $('#example').dataTable( { + * "iDisplayStart": 20 + * } ); + * } ) + */ + "iDisplayStart": 0, + + + /** + * The scroll gap is the amount of scrolling that is left to go before + * DataTables will load the next 'page' of data automatically. You typically + * want a gap which is big enough that the scrolling will be smooth for the + * user, while not so large that it will load more data than need. + * @type int + * @default 100 + * @dtopt Options + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "bScrollInfinite": true, + * "bScrollCollapse": true, + * "sScrollY": "200px", + * "iScrollLoadGap": 50 + * } ); + * } ); + */ + "iScrollLoadGap": 100, + + + /** + * By default DataTables allows keyboard navigation of the table (sorting, paging, + * and filtering) by adding a tabindex attribute to the required elements. This + * allows you to tab through the controls and press the enter key to activate them. + * The tabindex is default 0, meaning that the tab follows the flow of the document. + * You can overrule this using this parameter if you wish. Use a value of -1 to + * disable built-in keyboard navigation. + * @type int + * @default 0 + * @dtopt Options + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "iTabIndex": 1 + * } ); + * } ); + */ + "iTabIndex": 0, + + + /** + * All strings that DataTables uses in the user interface that it creates + * are defined in this object, allowing you to modified them individually or + * completely replace them all as required. + * @namespace + */ + "oLanguage": { + /** + * Strings that are used for WAI-ARIA labels and controls only (these are not + * actually visible on the page, but will be read by screenreaders, and thus + * must be internationalised as well). + * @namespace + */ + "oAria": { + /** + * ARIA label that is added to the table headers when the column may be + * sorted ascending by activing the column (click or return when focused). + * Note that the column header is prefixed to this string. + * @type string + * @default : activate to sort column ascending + * @dtopt Language + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "oLanguage": { + * "oAria": { + * "sSortAscending": " - click/return to sort ascending" + * } + * } + * } ); + * } ); + */ + "sSortAscending": ": activate to sort column ascending", + + /** + * ARIA label that is added to the table headers when the column may be + * sorted descending by activing the column (click or return when focused). + * Note that the column header is prefixed to this string. + * @type string + * @default : activate to sort column ascending + * @dtopt Language + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "oLanguage": { + * "oAria": { + * "sSortDescending": " - click/return to sort descending" + * } + * } + * } ); + * } ); + */ + "sSortDescending": ": activate to sort column descending" + }, + + /** + * Pagination string used by DataTables for the two built-in pagination + * control types ("two_button" and "full_numbers") + * @namespace + */ + "oPaginate": { + /** + * Text to use when using the 'full_numbers' type of pagination for the + * button to take the user to the first page. + * @type string + * @default First + * @dtopt Language + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "oLanguage": { + * "oPaginate": { + * "sFirst": "First page" + * } + * } + * } ); + * } ); + */ + "sFirst": "First", + + + /** + * Text to use when using the 'full_numbers' type of pagination for the + * button to take the user to the last page. + * @type string + * @default Last + * @dtopt Language + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "oLanguage": { + * "oPaginate": { + * "sLast": "Last page" + * } + * } + * } ); + * } ); + */ + "sLast": "Last", + + + /** + * Text to use when using the 'full_numbers' type of pagination for the + * button to take the user to the next page. + * @type string + * @default Next + * @dtopt Language + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "oLanguage": { + * "oPaginate": { + * "sNext": "Next page" + * } + * } + * } ); + * } ); + */ + "sNext": "Next", + + + /** + * Text to use when using the 'full_numbers' type of pagination for the + * button to take the user to the previous page. + * @type string + * @default Previous + * @dtopt Language + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "oLanguage": { + * "oPaginate": { + * "sPrevious": "Previous page" + * } + * } + * } ); + * } ); + */ + "sPrevious": "Previous" + }, + + /** + * This string is shown in preference to sZeroRecords when the table is + * empty of data (regardless of filtering). Note that this is an optional + * parameter - if it is not given, the value of sZeroRecords will be used + * instead (either the default or given value). + * @type string + * @default No data available in table + * @dtopt Language + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "oLanguage": { + * "sEmptyTable": "No data available in table" + * } + * } ); + * } ); + */ + "sEmptyTable": "No data available in table", + + + /** + * This string gives information to the end user about the information that + * is current on display on the page. The _START_, _END_ and _TOTAL_ + * variables are all dynamically replaced as the table display updates, and + * can be freely moved or removed as the language requirements change. + * @type string + * @default Showing _START_ to _END_ of _TOTAL_ entries + * @dtopt Language + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "oLanguage": { + * "sInfo": "Got a total of _TOTAL_ entries to show (_START_ to _END_)" + * } + * } ); + * } ); + */ + "sInfo": "Showing _START_ to _END_ of _TOTAL_ entries", + + + /** + * Display information string for when the table is empty. Typically the + * format of this string should match sInfo. + * @type string + * @default Showing 0 to 0 of 0 entries + * @dtopt Language + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "oLanguage": { + * "sInfoEmpty": "No entries to show" + * } + * } ); + * } ); + */ + "sInfoEmpty": "Showing 0 to 0 of 0 entries", + + + /** + * When a user filters the information in a table, this string is appended + * to the information (sInfo) to give an idea of how strong the filtering + * is. The variable _MAX_ is dynamically updated. + * @type string + * @default (filtered from _MAX_ total entries) + * @dtopt Language + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "oLanguage": { + * "sInfoFiltered": " - filtering from _MAX_ records" + * } + * } ); + * } ); + */ + "sInfoFiltered": "(filtered from _MAX_ total entries)", + + + /** + * If can be useful to append extra information to the info string at times, + * and this variable does exactly that. This information will be appended to + * the sInfo (sInfoEmpty and sInfoFiltered in whatever combination they are + * being used) at all times. + * @type string + * @default <i>Empty string</i> + * @dtopt Language + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "oLanguage": { + * "sInfoPostFix": "All records shown are derived from real information." + * } + * } ); + * } ); + */ + "sInfoPostFix": "", + + + /** + * DataTables has a build in number formatter (fnFormatNumber) which is used + * to format large numbers that are used in the table information. By + * default a comma is used, but this can be trivially changed to any + * character you wish with this parameter. + * @type string + * @default , + * @dtopt Language + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "oLanguage": { + * "sInfoThousands": "'" + * } + * } ); + * } ); + */ + "sInfoThousands": ",", + + + /** + * Detail the action that will be taken when the drop down menu for the + * pagination length option is changed. The '_MENU_' variable is replaced + * with a default select list of 10, 25, 50 and 100, and can be replaced + * with a custom select box if required. + * @type string + * @default Show _MENU_ entries + * @dtopt Language + * + * @example + * // Language change only + * $(document).ready(function() { + * $('#example').dataTable( { + * "oLanguage": { + * "sLengthMenu": "Display _MENU_ records" + * } + * } ); + * } ); + * + * @example + * // Language and options change + * $(document).ready(function() { + * $('#example').dataTable( { + * "oLanguage": { + * "sLengthMenu": 'Display <select>'+ + * '<option value="10">10</option>'+ + * '<option value="20">20</option>'+ + * '<option value="30">30</option>'+ + * '<option value="40">40</option>'+ + * '<option value="50">50</option>'+ + * '<option value="-1">All</option>'+ + * '</select> records' + * } + * } ); + * } ); + */ + "sLengthMenu": "Show _MENU_ entries", + + + /** + * When using Ajax sourced data and during the first draw when DataTables is + * gathering the data, this message is shown in an empty row in the table to + * indicate to the end user the the data is being loaded. Note that this + * parameter is not used when loading data by server-side processing, just + * Ajax sourced data with client-side processing. + * @type string + * @default Loading... + * @dtopt Language + * + * @example + * $(document).ready( function() { + * $('#example').dataTable( { + * "oLanguage": { + * "sLoadingRecords": "Please wait - loading..." + * } + * } ); + * } ); + */ + "sLoadingRecords": "Loading...", + + + /** + * Text which is displayed when the table is processing a user action + * (usually a sort command or similar). + * @type string + * @default Processing... + * @dtopt Language + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "oLanguage": { + * "sProcessing": "DataTables is currently busy" + * } + * } ); + * } ); + */ + "sProcessing": "Processing...", + + + /** + * Details the actions that will be taken when the user types into the + * filtering input text box. The variable "_INPUT_", if used in the string, + * is replaced with the HTML text box for the filtering input allowing + * control over where it appears in the string. If "_INPUT_" is not given + * then the input box is appended to the string automatically. + * @type string + * @default Search: + * @dtopt Language + * + * @example + * // Input text box will be appended at the end automatically + * $(document).ready(function() { + * $('#example').dataTable( { + * "oLanguage": { + * "sSearch": "Filter records:" + * } + * } ); + * } ); + * + * @example + * // Specify where the filter should appear + * $(document).ready(function() { + * $('#example').dataTable( { + * "oLanguage": { + * "sSearch": "Apply filter _INPUT_ to table" + * } + * } ); + * } ); + */ + "sSearch": "Search:", + + + /** + * All of the language information can be stored in a file on the + * server-side, which DataTables will look up if this parameter is passed. + * It must store the URL of the language file, which is in a JSON format, + * and the object has the same properties as the oLanguage object in the + * initialiser object (i.e. the above parameters). Please refer to one of + * the example language files to see how this works in action. + * @type string + * @default <i>Empty string - i.e. disabled</i> + * @dtopt Language + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "oLanguage": { + * "sUrl": "http://www.sprymedia.co.uk/dataTables/lang.txt" + * } + * } ); + * } ); + */ + "sUrl": "", + + + /** + * Text shown inside the table records when the is no information to be + * displayed after filtering. sEmptyTable is shown when there is simply no + * information in the table at all (regardless of filtering). + * @type string + * @default No matching records found + * @dtopt Language + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "oLanguage": { + * "sZeroRecords": "No records to display" + * } + * } ); + * } ); + */ + "sZeroRecords": "No matching records found" + }, + + + /** + * This parameter allows you to have define the global filtering state at + * initialisation time. As an object the "sSearch" parameter must be + * defined, but all other parameters are optional. When "bRegex" is true, + * the search string will be treated as a regular expression, when false + * (default) it will be treated as a straight string. When "bSmart" + * DataTables will use it's smart filtering methods (to word match at + * any point in the data), when false this will not be done. + * @namespace + * @extends DataTable.models.oSearch + * @dtopt Options + * + * @example + * $(document).ready( function() { + * $('#example').dataTable( { + * "oSearch": {"sSearch": "Initial search"} + * } ); + * } ) + */ + "oSearch": $.extend( {}, DataTable.models.oSearch ), + + + /** + * By default DataTables will look for the property 'aaData' when obtaining + * data from an Ajax source or for server-side processing - this parameter + * allows that property to be changed. You can use Javascript dotted object + * notation to get a data source for multiple levels of nesting. + * @type string + * @default aaData + * @dtopt Options + * @dtopt Server-side + * + * @example + * // Get data from { "data": [...] } + * $(document).ready(function() { + * var oTable = $('#example').dataTable( { + * "sAjaxSource": "sources/data.txt", + * "sAjaxDataProp": "data" + * } ); + * } ); + * + * @example + * // Get data from { "data": { "inner": [...] } } + * $(document).ready(function() { + * var oTable = $('#example').dataTable( { + * "sAjaxSource": "sources/data.txt", + * "sAjaxDataProp": "data.inner" + * } ); + * } ); + */ + "sAjaxDataProp": "aaData", + + + /** + * You can instruct DataTables to load data from an external source using this + * parameter (use aData if you want to pass data in you already have). Simply + * provide a url a JSON object can be obtained from. This object must include + * the parameter 'aaData' which is the data source for the table. + * @type string + * @default null + * @dtopt Options + * @dtopt Server-side + * + * @example + * $(document).ready( function() { + * $('#example').dataTable( { + * "sAjaxSource": "http://www.sprymedia.co.uk/dataTables/json.php" + * } ); + * } ) + */ + "sAjaxSource": null, + + + /** + * This parameter can be used to override the default prefix that DataTables + * assigns to a cookie when state saving is enabled. + * @type string + * @default SpryMedia_DataTables_ + * @dtopt Options + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "sCookiePrefix": "my_datatable_", + * } ); + * } ); + */ + "sCookiePrefix": "SpryMedia_DataTables_", + + + /** + * This initialisation variable allows you to specify exactly where in the + * DOM you want DataTables to inject the various controls it adds to the page + * (for example you might want the pagination controls at the top of the + * table). DIV elements (with or without a custom class) can also be added to + * aid styling. The follow syntax is used: + * <ul> + * <li>The following options are allowed: + * <ul> + * <li>'l' - Length changing</li + * <li>'f' - Filtering input</li> + * <li>'t' - The table!</li> + * <li>'i' - Information</li> + * <li>'p' - Pagination</li> + * <li>'r' - pRocessing</li> + * </ul> + * </li> + * <li>The following constants are allowed: + * <ul> + * <li>'H' - jQueryUI theme "header" classes ('fg-toolbar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix')</li> + * <li>'F' - jQueryUI theme "footer" classes ('fg-toolbar ui-widget-header ui-corner-bl ui-corner-br ui-helper-clearfix')</li> + * </ul> + * </li> + * <li>The following syntax is expected: + * <ul> + * <li>'<' and '>' - div elements</li> + * <li>'<"class" and '>' - div with a class</li> + * <li>'<"#id" and '>' - div with an ID</li> + * </ul> + * </li> + * <li>Examples: + * <ul> + * <li>'<"wrapper"flipt>'</li> + * <li>'<lf<t>ip>'</li> + * </ul> + * </li> + * </ul> + * @type string + * @default lfrtip <i>(when bJQueryUI is false)</i> <b>or</b> + * <"H"lfr>t<"F"ip> <i>(when bJQueryUI is true)</i> + * @dtopt Options + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "sDom": '<"top"i>rt<"bottom"flp><"clear"&lgt;' + * } ); + * } ); + */ + "sDom": "lfrtip", + + + /** + * DataTables features two different built-in pagination interaction methods + * ('two_button' or 'full_numbers') which present different page controls to + * the end user. Further methods can be added using the API (see below). + * @type string + * @default two_button + * @dtopt Options + * + * @example + * $(document).ready( function() { + * $('#example').dataTable( { + * "sPaginationType": "full_numbers" + * } ); + * } ) + */ + "sPaginationType": "two_button", + + + /** + * Enable horizontal scrolling. When a table is too wide to fit into a certain + * layout, or you have a large number of columns in the table, you can enable + * x-scrolling to show the table in a viewport, which can be scrolled. This + * property can by any CSS unit, or a number (in which case it will be treated + * as a pixel measurement). + * @type string + * @default <i>blank string - i.e. disabled</i> + * @dtopt Features + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "sScrollX": "100%", + * "bScrollCollapse": true + * } ); + * } ); + */ + "sScrollX": "", + + + /** + * This property can be used to force a DataTable to use more width than it + * might otherwise do when x-scrolling is enabled. For example if you have a + * table which requires to be well spaced, this parameter is useful for + * "over-sizing" the table, and thus forcing scrolling. This property can by + * any CSS unit, or a number (in which case it will be treated as a pixel + * measurement). + * @type string + * @default <i>blank string - i.e. disabled</i> + * @dtopt Options + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "sScrollX": "100%", + * "sScrollXInner": "110%" + * } ); + * } ); + */ + "sScrollXInner": "", + + + /** + * Enable vertical scrolling. Vertical scrolling will constrain the DataTable + * to the given height, an enable scrolling for any data which overflows the + * current viewport. This can be used as an alternative to paging to display + * a lot of data in a small area (although paging and scrolling can both be + * enabled at the same time). This property can by any CSS unit, or a number + * (in which case it will be treated as a pixel measurement). + * @type string + * @default <i>blank string - i.e. disabled</i> + * @dtopt Features + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "sScrollY": "200px", + * "bPaginate": false + * } ); + * } ); + */ + "sScrollY": "", + + + /** + * Set the HTTP method that is used to make the Ajax call for server-side + * processing or Ajax sourced data. + * @type string + * @default GET + * @dtopt Options + * @dtopt Server-side + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "bServerSide": true, + * "sAjaxSource": "scripts/post.php", + * "sServerMethod": "POST" + * } ); + * } ); + */ + "sServerMethod": "GET" + }; + + + + /** + * Column options that can be given to DataTables at initialisation time. + * @namespace + */ + DataTable.defaults.columns = { + /** + * Allows a column's sorting to take multiple columns into account when + * doing a sort. For example first name / last name columns make sense to + * do a multi-column sort over the two columns. + * @type array + * @default null <i>Takes the value of the column index automatically</i> + * @dtopt Columns + * + * @example + * // Using aoColumnDefs + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumnDefs": [ + * { "aDataSort": [ 0, 1 ], "aTargets": [ 0 ] }, + * { "aDataSort": [ 1, 0 ], "aTargets": [ 1 ] }, + * { "aDataSort": [ 2, 3, 4 ], "aTargets": [ 2 ] } + * ] + * } ); + * } ); + * + * @example + * // Using aoColumns + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumns": [ + * { "aDataSort": [ 0, 1 ] }, + * { "aDataSort": [ 1, 0 ] }, + * { "aDataSort": [ 2, 3, 4 ] }, + * null, + * null + * ] + * } ); + * } ); + */ + "aDataSort": null, + + + /** + * You can control the default sorting direction, and even alter the behaviour + * of the sort handler (i.e. only allow ascending sorting etc) using this + * parameter. + * @type array + * @default [ 'asc', 'desc' ] + * @dtopt Columns + * + * @example + * // Using aoColumnDefs + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumnDefs": [ + * { "asSorting": [ "asc" ], "aTargets": [ 1 ] }, + * { "asSorting": [ "desc", "asc", "asc" ], "aTargets": [ 2 ] }, + * { "asSorting": [ "desc" ], "aTargets": [ 3 ] } + * ] + * } ); + * } ); + * + * @example + * // Using aoColumns + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumns": [ + * null, + * { "asSorting": [ "asc" ] }, + * { "asSorting": [ "desc", "asc", "asc" ] }, + * { "asSorting": [ "desc" ] }, + * null + * ] + * } ); + * } ); + */ + "asSorting": [ 'asc', 'desc' ], + + + /** + * Enable or disable filtering on the data in this column. + * @type boolean + * @default true + * @dtopt Columns + * + * @example + * // Using aoColumnDefs + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumnDefs": [ + * { "bSearchable": false, "aTargets": [ 0 ] } + * ] } ); + * } ); + * + * @example + * // Using aoColumns + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumns": [ + * { "bSearchable": false }, + * null, + * null, + * null, + * null + * ] } ); + * } ); + */ + "bSearchable": true, + + + /** + * Enable or disable sorting on this column. + * @type boolean + * @default true + * @dtopt Columns + * + * @example + * // Using aoColumnDefs + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumnDefs": [ + * { "bSortable": false, "aTargets": [ 0 ] } + * ] } ); + * } ); + * + * @example + * // Using aoColumns + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumns": [ + * { "bSortable": false }, + * null, + * null, + * null, + * null + * ] } ); + * } ); + */ + "bSortable": true, + + + /** + * When using fnRender() for a column, you may wish to use the original data + * (before rendering) for sorting and filtering (the default is to used the + * rendered data that the user can see). This may be useful for dates etc. + * + * *NOTE* It is it is advisable now to use mDataProp as a function and make + * use of the 'type' that it gives, allowing (potentially) different data to + * be used for sorting, filtering, display and type detection. + * @type boolean + * @default true + * @dtopt Columns + * + * @example + * // Using aoColumnDefs + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumnDefs": [ + * { + * "fnRender": function ( oObj ) { + * return oObj.aData[0] +' '+ oObj.aData[3]; + * }, + * "bUseRendered": false, + * "aTargets": [ 0 ] + * } + * ] + * } ); + * } ); + * + * @example + * // Using aoColumns + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumns": [ + * { + * "fnRender": function ( oObj ) { + * return oObj.aData[0] +' '+ oObj.aData[3]; + * }, + * "bUseRendered": false + * }, + * null, + * null, + * null, + * null + * ] + * } ); + * } ); + */ + "bUseRendered": true, + + + /** + * Enable or disable the display of this column. + * @type boolean + * @default true + * @dtopt Columns + * + * @example + * // Using aoColumnDefs + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumnDefs": [ + * { "bVisible": false, "aTargets": [ 0 ] } + * ] } ); + * } ); + * + * @example + * // Using aoColumns + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumns": [ + * { "bVisible": false }, + * null, + * null, + * null, + * null + * ] } ); + * } ); + */ + "bVisible": true, + + + /** + * Developer definable function that is called whenever a cell is created (Ajax source, + * etc) or processed for input (DOM source). This can be used as a compliment to fnRender + * allowing you to modify the DOM element (add background colour for example) when the + * element is available (since it is not when fnRender is called). + * @type function + * @param {element} nTd The TD node that has been created + * @param {*} sData The Data for the cell + * @param {array|object} oData The data for the whole row + * @param {int} iRow The row index for the aoData data store + * @param {int} iCol The column index for aoColumns + * @dtopt Columns + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumnDefs": [ { + * "aTargets": [3], + * "fnCreatedCell": function (nTd, sData, oData, iRow, iCol) { + * if ( sData == "1.7" ) { + * $(nTd).css('color', 'blue') + * } + * } + * } ] + * }); + * } ); + */ + "fnCreatedCell": null, + + + /** + * Custom display function that will be called for the display of each cell in + * this column. + * @type function + * @param {object} o Object with the following parameters: + * @param {int} o.iDataRow The row in aoData + * @param {int} o.iDataColumn The column in question + * @param {array} o.aData The data for the row in question + * @param {object} o.oSettings The settings object for this DataTables instance + * @param {object} o.mDataProp The data property used for this column + * @param {*} val The current cell value + * @returns {string} The string you which to use in the display + * @dtopt Columns + * + * @example + * // Using aoColumnDefs + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumnDefs": [ + * { + * "fnRender": function ( o, val ) { + * return o.aData[0] +' '+ o.aData[3]; + * }, + * "aTargets": [ 0 ] + * } + * ] + * } ); + * } ); + * + * @example + * // Using aoColumns + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumns": [ + * { "fnRender": function ( o, val ) { + * return o.aData[0] +' '+ o.aData[3]; + * } }, + * null, + * null, + * null, + * null + * ] + * } ); + * } ); + */ + "fnRender": null, + + + /** + * The column index (starting from 0!) that you wish a sort to be performed + * upon when this column is selected for sorting. This can be used for sorting + * on hidden columns for example. + * @type int + * @default -1 <i>Use automatically calculated column index</i> + * @dtopt Columns + * + * @example + * // Using aoColumnDefs + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumnDefs": [ + * { "iDataSort": 1, "aTargets": [ 0 ] } + * ] + * } ); + * } ); + * + * @example + * // Using aoColumns + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumns": [ + * { "iDataSort": 1 }, + * null, + * null, + * null, + * null + * ] + * } ); + * } ); + */ + "iDataSort": -1, + + + /** + * This property can be used to read data from any JSON data source property, + * including deeply nested objects / properties. mDataProp can be given in a + * number of different ways which effect its behaviour: + * <ul> + * <li>integer - treated as an array index for the data source. This is the + * default that DataTables uses (incrementally increased for each column).</li> + * <li>string - read an object property from the data source. Note that you can + * use Javascript dotted notation to read deep properties/arrays from the + * data source.</li> + * <li>null - the sDafaultContent option will use used for the cell (empty + * string by default. This can be useful on generated columns such as + * edit / delete action columns.</li> + * <li>function - the function given will be executed whenever DataTables + * needs to set or get the data for a cell in the column. The function + * takes three parameters: + * <ul> + * <li>{array|object} The data source for the row</li> + * <li>{string} The type call data requested - this will be 'set' when + * setting data or 'filter', 'display', 'type' or 'sort' when gathering + * data.</li> + * <li>{*} Data to set when the second parameter is 'set'.</li> + * </ul> + * The return value from the function is not required when 'set' is the type + * of call, but otherwise the return is what will be used for the data + * requested.</li> + * </ul> + * @type string|int|function|null + * @default null <i>Use automatically calculated column index</i> + * @dtopt Columns + * + * @example + * // Read table data from objects + * $(document).ready(function() { + * var oTable = $('#example').dataTable( { + * "sAjaxSource": "sources/deep.txt", + * "aoColumns": [ + * { "mDataProp": "engine" }, + * { "mDataProp": "browser" }, + * { "mDataProp": "platform.inner" }, + * { "mDataProp": "platform.details.0" }, + * { "mDataProp": "platform.details.1" } + * ] + * } ); + * } ); + * + * @example + * // Using mDataProp as a function to provide different information for + * // sorting, filtering and display. In this case, currency (price) + * $(document).ready(function() { + * var oTable = $('#example').dataTable( { + * "aoColumnDefs": [ + * { + * "aTargets": [ 0 ], + * "mDataProp": function ( source, type, val ) { + * if (type === 'set') { + * source.price = val; + * // Store the computed dislay and filter values for efficiency + * source.price_display = val=="" ? "" : "$"+numberFormat(val); + * source.price_filter = val=="" ? "" : "$"+numberFormat(val)+" "+val; + * return; + * } + * else if (type === 'display') { + * return source.price_display; + * } + * else if (type === 'filter') { + * return source.price_filter; + * } + * // 'sort' and 'type' both just use the integer + * return source.price; + * } + * ] + * } ); + * } ); + */ + "mDataProp": null, + + + /** + * Class to give to each cell in this column. + * @type string + * @default <i>Empty string</i> + * @dtopt Columns + * + * @example + * // Using aoColumnDefs + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumnDefs": [ + * { "sClass": "my_class", "aTargets": [ 0 ] } + * ] + * } ); + * } ); + * + * @example + * // Using aoColumns + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumns": [ + * { "sClass": "my_class" }, + * null, + * null, + * null, + * null + * ] + * } ); + * } ); + */ + "sClass": "", + + /** + * When DataTables calculates the column widths to assign to each column, + * it finds the longest string in each column and then constructs a + * temporary table and reads the widths from that. The problem with this + * is that "mmm" is much wider then "iiii", but the latter is a longer + * string - thus the calculation can go wrong (doing it properly and putting + * it into an DOM object and measuring that is horribly(!) slow). Thus as + * a "work around" we provide this option. It will append its value to the + * text that is found to be the longest string for the column - i.e. padding. + * Generally you shouldn't need this, and it is not documented on the + * general DataTables.net documentation + * @type string + * @default <i>Empty string<i> + * @dtopt Columns + * + * @example + * // Using aoColumns + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumns": [ + * null, + * null, + * null, + * { + * "sContentPadding": "mmm" + * } + * ] + * } ); + * } ); + */ + "sContentPadding": "", + + + /** + * Allows a default value to be given for a column's data, and will be used + * whenever a null data source is encountered (this can be because mDataProp + * is set to null, or because the data source itself is null). + * @type string + * @default null + * @dtopt Columns + * + * @example + * // Using aoColumnDefs + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumnDefs": [ + * { + * "mDataProp": null, + * "sDefaultContent": "Edit", + * "aTargets": [ -1 ] + * } + * ] + * } ); + * } ); + * + * @example + * // Using aoColumns + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumns": [ + * null, + * null, + * null, + * { + * "mDataProp": null, + * "sDefaultContent": "Edit" + * } + * ] + * } ); + * } ); + */ + "sDefaultContent": null, + + + /** + * This parameter is only used in DataTables' server-side processing. It can + * be exceptionally useful to know what columns are being displayed on the + * client side, and to map these to database fields. When defined, the names + * also allow DataTables to reorder information from the server if it comes + * back in an unexpected order (i.e. if you switch your columns around on the + * client-side, your server-side code does not also need updating). + * @type string + * @default <i>Empty string</i> + * @dtopt Columns + * + * @example + * // Using aoColumnDefs + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumnDefs": [ + * { "sName": "engine", "aTargets": [ 0 ] }, + * { "sName": "browser", "aTargets": [ 1 ] }, + * { "sName": "platform", "aTargets": [ 2 ] }, + * { "sName": "version", "aTargets": [ 3 ] }, + * { "sName": "grade", "aTargets": [ 4 ] } + * ] + * } ); + * } ); + * + * @example + * // Using aoColumns + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumns": [ + * { "sName": "engine" }, + * { "sName": "browser" }, + * { "sName": "platform" }, + * { "sName": "version" }, + * { "sName": "grade" } + * ] + * } ); + * } ); + */ + "sName": "", + + + /** + * Defines a data source type for the sorting which can be used to read + * realtime information from the table (updating the internally cached + * version) prior to sorting. This allows sorting to occur on user editable + * elements such as form inputs. + * @type string + * @default std + * @dtopt Columns + * + * @example + * // Using aoColumnDefs + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumnDefs": [ + * { "sSortDataType": "dom-text", "aTargets": [ 2, 3 ] }, + * { "sType": "numeric", "aTargets": [ 3 ] }, + * { "sSortDataType": "dom-select", "aTargets": [ 4 ] }, + * { "sSortDataType": "dom-checkbox", "aTargets": [ 5 ] } + * ] + * } ); + * } ); + * + * @example + * // Using aoColumns + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumns": [ + * null, + * null, + * { "sSortDataType": "dom-text" }, + * { "sSortDataType": "dom-text", "sType": "numeric" }, + * { "sSortDataType": "dom-select" }, + * { "sSortDataType": "dom-checkbox" } + * ] + * } ); + * } ); + */ + "sSortDataType": "std", + + + /** + * The title of this column. + * @type string + * @default null <i>Derived from the 'TH' value for this column in the + * original HTML table.</i> + * @dtopt Columns + * + * @example + * // Using aoColumnDefs + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumnDefs": [ + * { "sTitle": "My column title", "aTargets": [ 0 ] } + * ] + * } ); + * } ); + * + * @example + * // Using aoColumns + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumns": [ + * { "sTitle": "My column title" }, + * null, + * null, + * null, + * null + * ] + * } ); + * } ); + */ + "sTitle": null, + + + /** + * The type allows you to specify how the data for this column will be sorted. + * Four types (string, numeric, date and html (which will strip HTML tags + * before sorting)) are currently available. Note that only date formats + * understood by Javascript's Date() object will be accepted as type date. For + * example: "Mar 26, 2008 5:03 PM". May take the values: 'string', 'numeric', + * 'date' or 'html' (by default). Further types can be adding through + * plug-ins. + * @type string + * @default null <i>Auto-detected from raw data</i> + * @dtopt Columns + * + * @example + * // Using aoColumnDefs + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumnDefs": [ + * { "sType": "html", "aTargets": [ 0 ] } + * ] + * } ); + * } ); + * + * @example + * // Using aoColumns + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumns": [ + * { "sType": "html" }, + * null, + * null, + * null, + * null + * ] + * } ); + * } ); + */ + "sType": null, + + + /** + * Defining the width of the column, this parameter may take any CSS value + * (3em, 20px etc). DataTables applys 'smart' widths to columns which have not + * been given a specific width through this interface ensuring that the table + * remains readable. + * @type string + * @default null <i>Automatic</i> + * @dtopt Columns + * + * @example + * // Using aoColumnDefs + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumnDefs": [ + * { "sWidth": "20%", "aTargets": [ 0 ] } + * ] + * } ); + * } ); + * + * @example + * // Using aoColumns + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumns": [ + * { "sWidth": "20%" }, + * null, + * null, + * null, + * null + * ] + * } ); + * } ); + */ + "sWidth": null + }; + + + + /** + * DataTables settings object - this holds all the information needed for a + * given table, including configuration, data and current application of the + * table options. DataTables does not have a single instance for each DataTable + * with the settings attached to that instance, but rather instances of the + * DataTable "class" are created on-the-fly as needed (typically by a + * $().dataTable() call) and the settings object is then applied to that + * instance. + * + * Note that this object is related to {@link DataTable.defaults} but this + * one is the internal data store for DataTables's cache of columns. It should + * NOT be manipulated outside of DataTables. Any configuration should be done + * through the initialisation options. + * @namespace + * @todo Really should attach the settings object to individual instances so we + * don't need to create new instances on each $().dataTable() call (if the + * table already exists). It would also save passing oSettings around and + * into every single function. However, this is a very significant + * architecture change for DataTables and will almost certainly break + * backwards compatibility with older installations. This is something that + * will be done in 2.0. + */ + DataTable.models.oSettings = { + /** + * Primary features of DataTables and their enablement state. + * @namespace + */ + "oFeatures": { + + /** + * Flag to say if DataTables should automatically try to calculate the + * optimum table and columns widths (true) or not (false). + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type boolean + */ + "bAutoWidth": null, + + /** + * Delay the creation of TR and TD elements until they are actually + * needed by a driven page draw. This can give a significant speed + * increase for Ajax source and Javascript source data, but makes no + * difference at all fro DOM and server-side processing tables. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type boolean + */ + "bDeferRender": null, + + /** + * Enable filtering on the table or not. Note that if this is disabled + * then there is no filtering at all on the table, including fnFilter. + * To just remove the filtering input use sDom and remove the 'f' option. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type boolean + */ + "bFilter": null, + + /** + * Table information element (the 'Showing x of y records' div) enable + * flag. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type boolean + */ + "bInfo": null, + + /** + * Present a user control allowing the end user to change the page size + * when pagination is enabled. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type boolean + */ + "bLengthChange": null, + + /** + * Pagination enabled or not. Note that if this is disabled then length + * changing must also be disabled. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type boolean + */ + "bPaginate": null, + + /** + * Processing indicator enable flag whenever DataTables is enacting a + * user request - typically an Ajax request for server-side processing. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type boolean + */ + "bProcessing": null, + + /** + * Server-side processing enabled flag - when enabled DataTables will + * get all data from the server for every draw - there is no filtering, + * sorting or paging done on the client-side. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type boolean + */ + "bServerSide": null, + + /** + * Sorting enablement flag. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type boolean + */ + "bSort": null, + + /** + * Apply a class to the columns which are being sorted to provide a + * visual highlight or not. This can slow things down when enabled since + * there is a lot of DOM interaction. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type boolean + */ + "bSortClasses": null, + + /** + * State saving enablement flag. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type boolean + */ + "bStateSave": null + }, + + + /** + * Scrolling settings for a table. + * @namespace + */ + "oScroll": { + /** + * Indicate if DataTables should be allowed to set the padding / margin + * etc for the scrolling header elements or not. Typically you will want + * this. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type boolean + */ + "bAutoCss": null, + + /** + * When the table is shorter in height than sScrollY, collapse the + * table container down to the height of the table (when true). + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type boolean + */ + "bCollapse": null, + + /** + * Infinite scrolling enablement flag. Now deprecated in favour of + * using the Scroller plug-in. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type boolean + */ + "bInfinite": null, + + /** + * Width of the scrollbar for the web-browser's platform. Calculated + * during table initialisation. + * @type int + * @default 0 + */ + "iBarWidth": 0, + + /** + * Space (in pixels) between the bottom of the scrolling container and + * the bottom of the scrolling viewport before the next page is loaded + * when using infinite scrolling. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type int + */ + "iLoadGap": null, + + /** + * Viewport width for horizontal scrolling. Horizontal scrolling is + * disabled if an empty string. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type string + */ + "sX": null, + + /** + * Width to expand the table to when using x-scrolling. Typically you + * should not need to use this. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type string + * @deprecated + */ + "sXInner": null, + + /** + * Viewport height for vertical scrolling. Vertical scrolling is disabled + * if an empty string. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type string + */ + "sY": null + }, + + /** + * Language information for the table. + * @namespace + * @extends DataTable.defaults.oLanguage + */ + "oLanguage": { + /** + * Information callback function. See + * {@link DataTable.defaults.fnInfoCallback} + * @type function + * @default + */ + "fnInfoCallback": null + }, + + /** + * Array referencing the nodes which are used for the features. The + * parameters of this object match what is allowed by sDom - i.e. + * <ul> + * <li>'l' - Length changing</li> + * <li>'f' - Filtering input</li> + * <li>'t' - The table!</li> + * <li>'i' - Information</li> + * <li>'p' - Pagination</li> + * <li>'r' - pRocessing</li> + * </ul> + * @type array + * @default [] + */ + "aanFeatures": [], + + /** + * Store data information - see {@link DataTable.models.oRow} for detailed + * information. + * @type array + * @default [] + */ + "aoData": [], + + /** + * Array of indexes which are in the current display (after filtering etc) + * @type array + * @default [] + */ + "aiDisplay": [], + + /** + * Array of indexes for display - no filtering + * @type array + * @default [] + */ + "aiDisplayMaster": [], + + /** + * Store information about each column that is in use + * @type array + * @default [] + */ + "aoColumns": [], + + /** + * Store information about the table's header + * @type array + * @default [] + */ + "aoHeader": [], + + /** + * Store information about the table's footer + * @type array + * @default [] + */ + "aoFooter": [], + + /** + * Search data array for regular expression searching + * @type array + * @default [] + */ + "asDataSearch": [], + + /** + * Store the applied global search information in case we want to force a + * research or compare the old search to a new one. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @namespace + * @extends DataTable.models.oSearch + */ + "oPreviousSearch": {}, + + /** + * Store the applied search for each column - see + * {@link DataTable.models.oSearch} for the format that is used for the + * filtering information for each column. + * @type array + * @default [] + */ + "aoPreSearchCols": [], + + /** + * Sorting that is applied to the table. Note that the inner arrays are + * used in the following manner: + * <ul> + * <li>Index 0 - column number</li> + * <li>Index 1 - current sorting direction</li> + * <li>Index 2 - index of asSorting for this column</li> + * </ul> + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type array + * @todo These inner arrays should really be objects + */ + "aaSorting": null, + + /** + * Sorting that is always applied to the table (i.e. prefixed in front of + * aaSorting). + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type array|null + * @default null + */ + "aaSortingFixed": null, + + /** + * Classes to use for the striping of a table. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type array + * @default [] + */ + "asStripeClasses": null, + + /** + * If restoring a table - we should restore its striping classes as well + * @type array + * @default [] + */ + "asDestroyStripes": [], + + /** + * If restoring a table - we should restore its width + * @type int + * @default 0 + */ + "sDestroyWidth": 0, + + /** + * Callback functions array for every time a row is inserted (i.e. on a draw). + * @type array + * @default [] + */ + "aoRowCallback": [], + + /** + * Callback functions for the header on each draw. + * @type array + * @default [] + */ + "aoHeaderCallback": [], + + /** + * Callback function for the footer on each draw. + * @type array + * @default [] + */ + "aoFooterCallback": [], + + /** + * Array of callback functions for draw callback functions + * @type array + * @default [] + */ + "aoDrawCallback": [], + + /** + * Array of callback functions for row created function + * @type array + * @default [] + */ + "aoRowCreatedCallback": [], + + /** + * Callback functions for just before the table is redrawn. A return of + * false will be used to cancel the draw. + * @type array + * @default [] + */ + "aoPreDrawCallback": [], + + /** + * Callback functions for when the table has been initialised. + * @type array + * @default [] + */ + "aoInitComplete": [], + + + /** + * Callbacks for modifying the settings to be stored for state saving, prior to + * saving state. + * @type array + * @default [] + */ + "aoStateSaveParams": [], + + /** + * Callbacks for modifying the settings that have been stored for state saving + * prior to using the stored values to restore the state. + * @type array + * @default [] + */ + "aoStateLoadParams": [], + + /** + * Callbacks for operating on the settings object once the saved state has been + * loaded + * @type array + * @default [] + */ + "aoStateLoaded": [], + + /** + * Cache the table ID for quick access + * @type string + * @default <i>Empty string</i> + */ + "sTableId": "", + + /** + * The TABLE node for the main table + * @type node + * @default null + */ + "nTable": null, + + /** + * Permanent ref to the thead element + * @type node + * @default null + */ + "nTHead": null, + + /** + * Permanent ref to the tfoot element - if it exists + * @type node + * @default null + */ + "nTFoot": null, + + /** + * Permanent ref to the tbody element + * @type node + * @default null + */ + "nTBody": null, + + /** + * Cache the wrapper node (contains all DataTables controlled elements) + * @type node + * @default null + */ + "nTableWrapper": null, + + /** + * Indicate if when using server-side processing the loading of data + * should be deferred until the second draw. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type boolean + * @default false + */ + "bDeferLoading": false, + + /** + * Indicate if all required information has been read in + * @type boolean + * @default false + */ + "bInitialised": false, + + /** + * Information about open rows. Each object in the array has the parameters + * 'nTr' and 'nParent' + * @type array + * @default [] + */ + "aoOpenRows": [], + + /** + * Dictate the positioning of DataTables' control elements - see + * {@link DataTable.model.oInit.sDom}. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type string + * @default null + */ + "sDom": null, + + /** + * Which type of pagination should be used. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type string + * @default two_button + */ + "sPaginationType": "two_button", + + /** + * The cookie duration (for bStateSave) in seconds. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type int + * @default 0 + */ + "iCookieDuration": 0, + + /** + * The cookie name prefix. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type string + * @default <i>Empty string</i> + */ + "sCookiePrefix": "", + + /** + * Callback function for cookie creation. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type function + * @default null + */ + "fnCookieCallback": null, + + /** + * Array of callback functions for state saving. Each array element is an + * object with the following parameters: + * <ul> + * <li>function:fn - function to call. Takes two parameters, oSettings + * and the JSON string to save that has been thus far created. Returns + * a JSON string to be inserted into a json object + * (i.e. '"param": [ 0, 1, 2]')</li> + * <li>string:sName - name of callback</li> + * </ul> + * @type array + * @default [] + */ + "aoStateSave": [], + + /** + * Array of callback functions for state loading. Each array element is an + * object with the following parameters: + * <ul> + * <li>function:fn - function to call. Takes two parameters, oSettings + * and the object stored. May return false to cancel state loading</li> + * <li>string:sName - name of callback</li> + * </ul> + * @type array + * @default [] + */ + "aoStateLoad": [], + + /** + * State that was loaded from the cookie. Useful for back reference + * @type object + * @default null + */ + "oLoadedState": null, + + /** + * Source url for AJAX data for the table. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type string + * @default null + */ + "sAjaxSource": null, + + /** + * Property from a given object from which to read the table data from. This + * can be an empty string (when not server-side processing), in which case + * it is assumed an an array is given directly. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type string + */ + "sAjaxDataProp": null, + + /** + * Note if draw should be blocked while getting data + * @type boolean + * @default true + */ + "bAjaxDataGet": true, + + /** + * The last jQuery XHR object that was used for server-side data gathering. + * This can be used for working with the XHR information in one of the + * callbacks + * @type object + * @default null + */ + "jqXHR": null, + + /** + * Function to get the server-side data. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type function + */ + "fnServerData": null, + + /** + * Functions which are called prior to sending an Ajax request so extra + * parameters can easily be sent to the server + * @type array + * @default [] + */ + "aoServerParams": [], + + /** + * Send the XHR HTTP method - GET or POST (could be PUT or DELETE if + * required). + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type string + */ + "sServerMethod": null, + + /** + * Format numbers for display. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type function + */ + "fnFormatNumber": null, + + /** + * List of options that can be used for the user selectable length menu. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type array + * @default [] + */ + "aLengthMenu": null, + + /** + * Counter for the draws that the table does. Also used as a tracker for + * server-side processing + * @type int + * @default 0 + */ + "iDraw": 0, + + /** + * Indicate if a redraw is being done - useful for Ajax + * @type boolean + * @default false + */ + "bDrawing": false, + + /** + * Draw index (iDraw) of the last error when parsing the returned data + * @type int + * @default -1 + */ + "iDrawError": -1, + + /** + * Paging display length + * @type int + * @default 10 + */ + "_iDisplayLength": 10, + + /** + * Paging start point - aiDisplay index + * @type int + * @default 0 + */ + "_iDisplayStart": 0, + + /** + * Paging end point - aiDisplay index. Use fnDisplayEnd rather than + * this property to get the end point + * @type int + * @default 10 + * @private + */ + "_iDisplayEnd": 10, + + /** + * Server-side processing - number of records in the result set + * (i.e. before filtering), Use fnRecordsTotal rather than + * this property to get the value of the number of records, regardless of + * the server-side processing setting. + * @type int + * @default 0 + * @private + */ + "_iRecordsTotal": 0, + + /** + * Server-side processing - number of records in the current display set + * (i.e. after filtering). Use fnRecordsDisplay rather than + * this property to get the value of the number of records, regardless of + * the server-side processing setting. + * @type boolean + * @default 0 + * @private + */ + "_iRecordsDisplay": 0, + + /** + * Flag to indicate if jQuery UI marking and classes should be used. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type boolean + */ + "bJUI": null, + + /** + * The classes to use for the table + * @type object + * @default {} + */ + "oClasses": {}, + + /** + * Flag attached to the settings object so you can check in the draw + * callback if filtering has been done in the draw. Deprecated in favour of + * events. + * @type boolean + * @default false + * @deprecated + */ + "bFiltered": false, + + /** + * Flag attached to the settings object so you can check in the draw + * callback if sorting has been done in the draw. Deprecated in favour of + * events. + * @type boolean + * @default false + * @deprecated + */ + "bSorted": false, + + /** + * Indicate that if multiple rows are in the header and there is more than + * one unique cell per column, if the top one (true) or bottom one (false) + * should be used for sorting / title by DataTables. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type boolean + */ + "bSortCellsTop": null, + + /** + * Initialisation object that is used for the table + * @type object + * @default null + */ + "oInit": null, + + /** + * Destroy callback functions - for plug-ins to attach themselves to the + * destroy so they can clean up markup and events. + * @type array + * @default [] + */ + "aoDestroyCallback": [], + + + /** + * Get the number of records in the current record set, before filtering + * @type function + */ + "fnRecordsTotal": function () + { + if ( this.oFeatures.bServerSide ) { + return parseInt(this._iRecordsTotal, 10); + } else { + return this.aiDisplayMaster.length; + } + }, + + /** + * Get the number of records in the current record set, after filtering + * @type function + */ + "fnRecordsDisplay": function () + { + if ( this.oFeatures.bServerSide ) { + return parseInt(this._iRecordsDisplay, 10); + } else { + return this.aiDisplay.length; + } + }, + + /** + * Set the display end point - aiDisplay index + * @type function + * @todo Should do away with _iDisplayEnd and calculate it on-the-fly here + */ + "fnDisplayEnd": function () + { + if ( this.oFeatures.bServerSide ) { + if ( this.oFeatures.bPaginate === false || this._iDisplayLength == -1 ) { + return this._iDisplayStart+this.aiDisplay.length; + } else { + return Math.min( this._iDisplayStart+this._iDisplayLength, + this._iRecordsDisplay ); + } + } else { + return this._iDisplayEnd; + } + }, + + /** + * The DataTables object for this table + * @type object + * @default null + */ + "oInstance": null, + + /** + * Unique identifier for each instance of the DataTables object. If there + * is an ID on the table node, then it takes that value, otherwise an + * incrementing internal counter is used. + * @type string + * @default null + */ + "sInstance": null, + + /** + * tabindex attribute value that is added to DataTables control elements, allowing + * keyboard navigation of the table and its controls. + */ + "iTabIndex": 0 + }; + + /** + * Extension object for DataTables that is used to provide all extension options. + * + * Note that the <i>DataTable.ext</i> object is available through + * <i>jQuery.fn.dataTable.ext</i> where it may be accessed and manipulated. It is + * also aliased to <i>jQuery.fn.dataTableExt</i> for historic reasons. + * @namespace + * @extends DataTable.models.ext + */ + DataTable.ext = $.extend( true, {}, DataTable.models.ext ); + + $.extend( DataTable.ext.oStdClasses, { + "sTable": "dataTable", + + /* Two buttons buttons */ + "sPagePrevEnabled": "paginate_enabled_previous", + "sPagePrevDisabled": "paginate_disabled_previous", + "sPageNextEnabled": "paginate_enabled_next", + "sPageNextDisabled": "paginate_disabled_next", + "sPageJUINext": "", + "sPageJUIPrev": "", + + /* Full numbers paging buttons */ + "sPageButton": "paginate_button", + "sPageButtonActive": "paginate_active", + "sPageButtonStaticDisabled": "paginate_button paginate_button_disabled", + "sPageFirst": "first", + "sPagePrevious": "previous", + "sPageNext": "next", + "sPageLast": "last", + + /* Striping classes */ + "sStripeOdd": "odd", + "sStripeEven": "even", + + /* Empty row */ + "sRowEmpty": "dataTables_empty", + + /* Features */ + "sWrapper": "dataTables_wrapper", + "sFilter": "dataTables_filter", + "sInfo": "dataTables_info", + "sPaging": "dataTables_paginate paging_", /* Note that the type is postfixed */ + "sLength": "dataTables_length", + "sProcessing": "dataTables_processing", + + /* Sorting */ + "sSortAsc": "sorting_asc", + "sSortDesc": "sorting_desc", + "sSortable": "sorting", /* Sortable in both directions */ + "sSortableAsc": "sorting_asc_disabled", + "sSortableDesc": "sorting_desc_disabled", + "sSortableNone": "sorting_disabled", + "sSortColumn": "sorting_", /* Note that an int is postfixed for the sorting order */ + "sSortJUIAsc": "", + "sSortJUIDesc": "", + "sSortJUI": "", + "sSortJUIAscAllowed": "", + "sSortJUIDescAllowed": "", + "sSortJUIWrapper": "", + "sSortIcon": "", + + /* Scrolling */ + "sScrollWrapper": "dataTables_scroll", + "sScrollHead": "dataTables_scrollHead", + "sScrollHeadInner": "dataTables_scrollHeadInner", + "sScrollBody": "dataTables_scrollBody", + "sScrollFoot": "dataTables_scrollFoot", + "sScrollFootInner": "dataTables_scrollFootInner", + + /* Misc */ + "sFooterTH": "" + } ); + + + $.extend( DataTable.ext.oJUIClasses, DataTable.ext.oStdClasses, { + /* Two buttons buttons */ + "sPagePrevEnabled": "fg-button ui-button ui-state-default ui-corner-left", + "sPagePrevDisabled": "fg-button ui-button ui-state-default ui-corner-left ui-state-disabled", + "sPageNextEnabled": "fg-button ui-button ui-state-default ui-corner-right", + "sPageNextDisabled": "fg-button ui-button ui-state-default ui-corner-right ui-state-disabled", + "sPageJUINext": "ui-icon ui-icon-circle-arrow-e", + "sPageJUIPrev": "ui-icon ui-icon-circle-arrow-w", + + /* Full numbers paging buttons */ + "sPageButton": "fg-button ui-button ui-state-default", + "sPageButtonActive": "fg-button ui-button ui-state-default ui-state-disabled", + "sPageButtonStaticDisabled": "fg-button ui-button ui-state-default ui-state-disabled", + "sPageFirst": "first ui-corner-tl ui-corner-bl", + "sPageLast": "last ui-corner-tr ui-corner-br", + + /* Features */ + "sPaging": "dataTables_paginate fg-buttonset ui-buttonset fg-buttonset-multi "+ + "ui-buttonset-multi paging_", /* Note that the type is postfixed */ + + /* Sorting */ + "sSortAsc": "ui-state-default", + "sSortDesc": "ui-state-default", + "sSortable": "ui-state-default", + "sSortableAsc": "ui-state-default", + "sSortableDesc": "ui-state-default", + "sSortableNone": "ui-state-default", + "sSortJUIAsc": "css_right ui-icon ui-icon-triangle-1-n", + "sSortJUIDesc": "css_right ui-icon ui-icon-triangle-1-s", + "sSortJUI": "css_right ui-icon ui-icon-carat-2-n-s", + "sSortJUIAscAllowed": "css_right ui-icon ui-icon-carat-1-n", + "sSortJUIDescAllowed": "css_right ui-icon ui-icon-carat-1-s", + "sSortJUIWrapper": "DataTables_sort_wrapper", + "sSortIcon": "DataTables_sort_icon", + + /* Scrolling */ + "sScrollHead": "dataTables_scrollHead ui-state-default", + "sScrollFoot": "dataTables_scrollFoot ui-state-default", + + /* Misc */ + "sFooterTH": "ui-state-default" + } ); + + + /* + * Variable: oPagination + * Purpose: + * Scope: jQuery.fn.dataTableExt + */ + $.extend( DataTable.ext.oPagination, { + /* + * Variable: two_button + * Purpose: Standard two button (forward/back) pagination + * Scope: jQuery.fn.dataTableExt.oPagination + */ + "two_button": { + /* + * Function: oPagination.two_button.fnInit + * Purpose: Initialise dom elements required for pagination with forward/back buttons only + * Returns: - + * Inputs: object:oSettings - dataTables settings object + * node:nPaging - the DIV which contains this pagination control + * function:fnCallbackDraw - draw function which must be called on update + */ + "fnInit": function ( oSettings, nPaging, fnCallbackDraw ) + { + var oLang = oSettings.oLanguage.oPaginate; + var oClasses = oSettings.oClasses; + var fnClickHandler = function ( e ) { + if ( oSettings.oApi._fnPageChange( oSettings, e.data.action ) ) + { + fnCallbackDraw( oSettings ); + } + }; + + var sAppend = (!oSettings.bJUI) ? + '<a class="'+oSettings.oClasses.sPagePrevDisabled+'" tabindex="'+oSettings.iTabIndex+'" role="button">'+oLang.sPrevious+'</a>'+ + '<a class="'+oSettings.oClasses.sPageNextDisabled+'" tabindex="'+oSettings.iTabIndex+'" role="button">'+oLang.sNext+'</a>' + : + '<a class="'+oSettings.oClasses.sPagePrevDisabled+'" tabindex="'+oSettings.iTabIndex+'" role="button"><span class="'+oSettings.oClasses.sPageJUIPrev+'"></span></a>'+ + '<a class="'+oSettings.oClasses.sPageNextDisabled+'" tabindex="'+oSettings.iTabIndex+'" role="button"><span class="'+oSettings.oClasses.sPageJUINext+'"></span></a>'; + $(nPaging).append( sAppend ); + + var els = $('a', nPaging); + var nPrevious = els[0], + nNext = els[1]; + + oSettings.oApi._fnBindAction( nPrevious, {action: "previous"}, fnClickHandler ); + oSettings.oApi._fnBindAction( nNext, {action: "next"}, fnClickHandler ); + + /* ID the first elements only */ + if ( !oSettings.aanFeatures.p ) + { + nPaging.id = oSettings.sTableId+'_paginate'; + nPrevious.id = oSettings.sTableId+'_previous'; + nNext.id = oSettings.sTableId+'_next'; + + nPrevious.setAttribute('aria-controls', oSettings.sTableId); + nNext.setAttribute('aria-controls', oSettings.sTableId); + } + }, + + /* + * Function: oPagination.two_button.fnUpdate + * Purpose: Update the two button pagination at the end of the draw + * Returns: - + * Inputs: object:oSettings - dataTables settings object + * function:fnCallbackDraw - draw function to call on page change + */ + "fnUpdate": function ( oSettings, fnCallbackDraw ) + { + if ( !oSettings.aanFeatures.p ) + { + return; + } + + var oClasses = oSettings.oClasses; + var an = oSettings.aanFeatures.p; + + /* Loop over each instance of the pager */ + for ( var i=0, iLen=an.length ; i<iLen ; i++ ) + { + if ( an[i].childNodes.length !== 0 ) + { + an[i].childNodes[0].className = ( oSettings._iDisplayStart === 0 ) ? + oClasses.sPagePrevDisabled : oClasses.sPagePrevEnabled; + + an[i].childNodes[1].className = ( oSettings.fnDisplayEnd() == oSettings.fnRecordsDisplay() ) ? + oClasses.sPageNextDisabled : oClasses.sPageNextEnabled; + } + } + } + }, + + + /* + * Variable: iFullNumbersShowPages + * Purpose: Change the number of pages which can be seen + * Scope: jQuery.fn.dataTableExt.oPagination + */ + "iFullNumbersShowPages": 5, + + /* + * Variable: full_numbers + * Purpose: Full numbers pagination + * Scope: jQuery.fn.dataTableExt.oPagination + */ + "full_numbers": { + /* + * Function: oPagination.full_numbers.fnInit + * Purpose: Initialise dom elements required for pagination with a list of the pages + * Returns: - + * Inputs: object:oSettings - dataTables settings object + * node:nPaging - the DIV which contains this pagination control + * function:fnCallbackDraw - draw function which must be called on update + */ + "fnInit": function ( oSettings, nPaging, fnCallbackDraw ) + { + var oLang = oSettings.oLanguage.oPaginate; + var oClasses = oSettings.oClasses; + var fnClickHandler = function ( e ) { + if ( oSettings.oApi._fnPageChange( oSettings, e.data.action ) ) + { + fnCallbackDraw( oSettings ); + } + }; + + $(nPaging).append( + '<a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPageFirst+'">'+oLang.sFirst+'</a>'+ + '<a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPagePrevious+'">'+oLang.sPrevious+'</a>'+ + '<span></span>'+ + '<a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPageNext+'">'+oLang.sNext+'</a>'+ + '<a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPageLast+'">'+oLang.sLast+'</a>' + ); + var els = $('a', nPaging); + var nFirst = els[0], + nPrev = els[1], + nNext = els[2], + nLast = els[3]; + + oSettings.oApi._fnBindAction( nFirst, {action: "first"}, fnClickHandler ); + oSettings.oApi._fnBindAction( nPrev, {action: "previous"}, fnClickHandler ); + oSettings.oApi._fnBindAction( nNext, {action: "next"}, fnClickHandler ); + oSettings.oApi._fnBindAction( nLast, {action: "last"}, fnClickHandler ); + + /* ID the first elements only */ + if ( !oSettings.aanFeatures.p ) + { + nPaging.id = oSettings.sTableId+'_paginate'; + nFirst.id =oSettings.sTableId+'_first'; + nPrev.id =oSettings.sTableId+'_previous'; + nNext.id =oSettings.sTableId+'_next'; + nLast.id =oSettings.sTableId+'_last'; + } + }, + + /* + * Function: oPagination.full_numbers.fnUpdate + * Purpose: Update the list of page buttons shows + * Returns: - + * Inputs: object:oSettings - dataTables settings object + * function:fnCallbackDraw - draw function to call on page change + */ + "fnUpdate": function ( oSettings, fnCallbackDraw ) + { + if ( !oSettings.aanFeatures.p ) + { + return; + } + + var iPageCount = DataTable.ext.oPagination.iFullNumbersShowPages; + var iPageCountHalf = Math.floor(iPageCount / 2); + var iPages = Math.ceil((oSettings.fnRecordsDisplay()) / oSettings._iDisplayLength); + var iCurrentPage = Math.ceil(oSettings._iDisplayStart / oSettings._iDisplayLength) + 1; + var sList = ""; + var iStartButton, iEndButton, i, iLen; + var oClasses = oSettings.oClasses; + var anButtons, anStatic, nPaginateList; + var an = oSettings.aanFeatures.p; + var fnBind = function (j) { + oSettings.oApi._fnBindAction( this, {"page": j+iStartButton-1}, function(e) { + /* Use the information in the element to jump to the required page */ + oSettings.oApi._fnPageChange( oSettings, e.data.page ); + fnCallbackDraw( oSettings ); + e.preventDefault(); + } ); + }; + + /* Pages calculation */ + if (iPages < iPageCount) + { + iStartButton = 1; + iEndButton = iPages; + } + else if (iCurrentPage <= iPageCountHalf) + { + iStartButton = 1; + iEndButton = iPageCount; + } + else if (iCurrentPage >= (iPages - iPageCountHalf)) + { + iStartButton = iPages - iPageCount + 1; + iEndButton = iPages; + } + else + { + iStartButton = iCurrentPage - Math.ceil(iPageCount / 2) + 1; + iEndButton = iStartButton + iPageCount - 1; + } + + /* Build the dynamic list */ + for ( i=iStartButton ; i<=iEndButton ; i++ ) + { + sList += (iCurrentPage !== i) ? + '<a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+'">'+oSettings.fnFormatNumber(i)+'</a>' : + '<a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButtonActive+'">'+oSettings.fnFormatNumber(i)+'</a>'; + } + + /* Loop over each instance of the pager */ + for ( i=0, iLen=an.length ; i<iLen ; i++ ) + { + if ( an[i].childNodes.length === 0 ) + { + continue; + } + + /* Build up the dynamic list forst - html and listeners */ + $('span:eq(0)', an[i]) + .html( sList ) + .children('a').each( fnBind ); + + /* Update the premanent botton's classes */ + anButtons = an[i].getElementsByTagName('a'); + anStatic = [ + anButtons[0], anButtons[1], + anButtons[anButtons.length-2], anButtons[anButtons.length-1] + ]; + + $(anStatic).removeClass( oClasses.sPageButton+" "+oClasses.sPageButtonActive+" "+oClasses.sPageButtonStaticDisabled ); + $([anStatic[0], anStatic[1]]).addClass( + (iCurrentPage==1) ? + oClasses.sPageButtonStaticDisabled : + oClasses.sPageButton + ); + $([anStatic[2], anStatic[3]]).addClass( + (iPages===0 || iCurrentPage===iPages || oSettings._iDisplayLength===-1) ? + oClasses.sPageButtonStaticDisabled : + oClasses.sPageButton + ); + } + } + } + } ); + + $.extend( DataTable.ext.oSort, { + /* + * text sorting + */ + "string-pre": function ( a ) + { + if ( typeof a != 'string' ) { a = ''; } + return a.toLowerCase(); + }, + + "string-asc": function ( x, y ) + { + return ((x < y) ? -1 : ((x > y) ? 1 : 0)); + }, + + "string-desc": function ( x, y ) + { + return ((x < y) ? 1 : ((x > y) ? -1 : 0)); + }, + + + /* + * html sorting (ignore html tags) + */ + "html-pre": function ( a ) + { + return a.replace( /<.*?>/g, "" ).toLowerCase(); + }, + + "html-asc": function ( x, y ) + { + return ((x < y) ? -1 : ((x > y) ? 1 : 0)); + }, + + "html-desc": function ( x, y ) + { + return ((x < y) ? 1 : ((x > y) ? -1 : 0)); + }, + + + /* + * date sorting + */ + "date-pre": function ( a ) + { + var x = Date.parse( a ); + + if ( isNaN(x) || x==="" ) + { + x = Date.parse( "01/01/1970 00:00:00" ); + } + return x; + }, + + "date-asc": function ( x, y ) + { + return x - y; + }, + + "date-desc": function ( x, y ) + { + return y - x; + }, + + + /* + * numerical sorting + */ + "numeric-pre": function ( a ) + { + return (a=="-" || a==="") ? 0 : a*1; + }, + + "numeric-asc": function ( x, y ) + { + return x - y; + }, + + "numeric-desc": function ( x, y ) + { + return y - x; + } + } ); + + + $.extend( DataTable.ext.aTypes, [ + /* + * Function: - + * Purpose: Check to see if a string is numeric + * Returns: string:'numeric' or null + * Inputs: mixed:sText - string to check + */ + function ( sData ) + { + /* Allow zero length strings as a number */ + if ( typeof sData === 'number' ) + { + return 'numeric'; + } + else if ( typeof sData !== 'string' ) + { + return null; + } + + var sValidFirstChars = "0123456789-"; + var sValidChars = "0123456789."; + var Char; + var bDecimal = false; + + /* Check for a valid first char (no period and allow negatives) */ + Char = sData.charAt(0); + if (sValidFirstChars.indexOf(Char) == -1) + { + return null; + } + + /* Check all the other characters are valid */ + for ( var i=1 ; i<sData.length ; i++ ) + { + Char = sData.charAt(i); + if (sValidChars.indexOf(Char) == -1) + { + return null; + } + + /* Only allowed one decimal place... */ + if ( Char == "." ) + { + if ( bDecimal ) + { + return null; + } + bDecimal = true; + } + } + + return 'numeric'; + }, + + /* + * Function: - + * Purpose: Check to see if a string is actually a formatted date + * Returns: string:'date' or null + * Inputs: string:sText - string to check + */ + function ( sData ) + { + var iParse = Date.parse(sData); + if ( (iParse !== null && !isNaN(iParse)) || (typeof sData === 'string' && sData.length === 0) ) + { + return 'date'; + } + return null; + }, + + /* + * Function: - + * Purpose: Check to see if a string should be treated as an HTML string + * Returns: string:'html' or null + * Inputs: string:sText - string to check + */ + function ( sData ) + { + if ( typeof sData === 'string' && sData.indexOf('<') != -1 && sData.indexOf('>') != -1 ) + { + return 'html'; + } + return null; + } + ] ); + + + // jQuery aliases + $.fn.DataTable = DataTable; + $.fn.dataTable = DataTable; + $.fn.dataTableSettings = DataTable.settings; + $.fn.dataTableExt = DataTable.ext; + + + // Information about events fired by DataTables - for documentation. + /** + * Draw event, fired whenever the table is redrawn on the page, at the same point as + * fnDrawCallback. This may be useful for binding events or performing calculations when + * the table is altered at all. + * @name DataTable#draw + * @event + * @param {event} e jQuery event object + * @param {object} o DataTables settings object {@link DataTable.models.oSettings} + */ + + /** + * Filter event, fired when the filtering applied to the table (using the build in global + * global filter, or column filters) is altered. + * @name DataTable#filter + * @event + * @param {event} e jQuery event object + * @param {object} o DataTables settings object {@link DataTable.models.oSettings} + */ + + /** + * Page change event, fired when the paging of the table is altered. + * @name DataTable#page + * @event + * @param {event} e jQuery event object + * @param {object} o DataTables settings object {@link DataTable.models.oSettings} + */ + + /** + * Sort event, fired when the sorting applied to the table is altered. + * @name DataTable#sort + * @event + * @param {event} e jQuery event object + * @param {object} o DataTables settings object {@link DataTable.models.oSettings} + */ + + /** + * DataTables initialisation complete event, fired when the table is fully drawn, + * including Ajax data loaded, if Ajax data is required. + * @name DataTable#init + * @event + * @param {event} e jQuery event object + * @param {object} oSettings DataTables settings object + * @param {object} json The JSON object request from the server - only + * present if client-side Ajax sourced data is used</li></ol> + */ + + /** + * State save event, fired when the table has changed state a new state save is required. + * This method allows modification of the state saving object prior to actually doing the + * save, including addition or other state properties (for plug-ins) or modification + * of a DataTables core property. + * @name DataTable#stateSaveParams + * @event + * @param {event} e jQuery event object + * @param {object} oSettings DataTables settings object + * @param {object} json The state information to be saved + */ + + /** + * State load event, fired when the table is loading state from the stored data, but + * prior to the settings object being modified by the saved state - allowing modification + * of the saved state is required or loading of state for a plug-in. + * @name DataTable#stateLoadParams + * @event + * @param {event} e jQuery event object + * @param {object} oSettings DataTables settings object + * @param {object} json The saved state information + */ + + /** + * State loaded event, fired when state has been loaded from stored data and the settings + * object has been modified by the loaded data. + * @name DataTable#stateLoaded + * @event + * @param {event} e jQuery event object + * @param {object} oSettings DataTables settings object + * @param {object} json The saved state information + */ + + /** + * Processing event, fired when DataTables is doing some kind of processing (be it, + * sort, filter or anything else). Can be used to indicate to the end user that + * there is something happening, or that something has finished. + * @name DataTable#processing + * @event + * @param {event} e jQuery event object + * @param {object} oSettings DataTables settings object + * @param {boolean} bShow Flag for if DataTables is doing processing or not + */ + + /** + * Ajax (XHR) event, fired whenever an Ajax request is completed from a request to + * made to the server for new data (note that this trigger is called in fnServerData, + * if you override fnServerData and which to use this event, you need to trigger it in + * you success function). + * @name DataTable#xhr + * @event + * @param {event} e jQuery event object + * @param {object} o DataTables settings object {@link DataTable.models.oSettings} + */ +}(jQuery, window, document, undefined)); diff --git a/src/warden-server/contrib/wardenweb/datatables/media/js/jquery.js b/src/warden-server/contrib/wardenweb/datatables/media/js/jquery.js new file mode 100644 index 0000000..ee02337 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/js/jquery.js @@ -0,0 +1,4 @@ +/*! jQuery v1.7.1 jquery.com | jquery.org/license */ +(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cb(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function ca(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bE.test(a)?d(a,e):ca(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)ca(a+"["+e+"]",b[e],c,d);else d(a,b)}function b_(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function b$(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bT,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=b$(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=b$(a,c,d,e,"*",g));return l}function bZ(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bP),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bC(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bx:by,g=0,h=e.length;if(d>0){if(c!=="border")for(;g<h;g++)c||(d-=parseFloat(f.css(a,"padding"+e[g]))||0),c==="margin"?d+=parseFloat(f.css(a,c+e[g]))||0:d-=parseFloat(f.css(a,"border"+e[g]+"Width"))||0;return d+"px"}d=bz(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0;if(c)for(;g<h;g++)d+=parseFloat(f.css(a,"padding"+e[g]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+e[g]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+e[g]))||0);return d+"px"}function bp(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c+(i[c][d].namespace?".":"")+i[c][d].namespace,i[c][d],i[c][d].data)}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?m(g):h==="function"&&(!a.unique||!o.has(g))&&c.push(g)},n=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,l=j||0,j=0,k=c.length;for(;c&&l<k;l++)if(c[l].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}i=!1,c&&(a.once?e===!0?o.disable():c=[]:d&&d.length&&(e=d.shift(),o.fireWith(e[0],e[1])))},o={add:function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){i&&f<=k&&(k--,f<=l&&l--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&o.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(i?a.once||d.push([b,c]):(!a.once||!e)&&n(b,c));return this},fire:function(){o.fireWith(this,arguments);return this},fired:function(){return!!e}};return o};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p,q=c.createElement("div"),r=c.documentElement;q.setAttribute("className","t"),q.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="<div "+n+"><div></div></div>"+"<table "+n+" cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="<div style='width:4px;'></div>",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h=null;if(typeof a=="undefined"){if(this.length){h=f.data(this[0]);if(this[0].nodeType===1&&!f._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var i=0,j=e.length;i<j;i++)g=e[i].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),l(this[0],g,h[g]));f._data(this[0],"parsedAttrs",!0)}}return h}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split("."),d[1]=d[1]?"."+d[1]:"";if(c===b){h=this.triggerHandler("getData"+d[1]+"!",[d[0]]),h===b&&this.length&&(h=f.data(this[0],a),h=l(this[0],a,h));return h===b&&d[1]?this.data(d[0]):h}return this.each(function(){var b=f(this),e=[d[0],c];b.triggerHandler("setData"+d[1]+"!",e),f.data(this,a,c),b.triggerHandler("changeData"+d[1]+"!",e)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise()}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h<g;h++)e=d[h],e&&(c=f.propFix[e]||e,f.attr(a,e,""),a.removeAttribute(v?e:c),u.test(e)&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")}; +f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=[],j,k,l,m,n,o,p,q,r,s,t;g[0]=c,c.delegateTarget=this;if(e&&!c.target.disabled&&(!c.button||c.type!=="click")){m=f(this),m.context=this.ownerDocument||this;for(l=c.target;l!=this;l=l.parentNode||this){o={},q=[],m[0]=l;for(j=0;j<e;j++)r=d[j],s=r.selector,o[s]===b&&(o[s]=r.quick?H(l,r.quick):m.is(s)),o[s]&&q.push(r);q.length&&i.push({elem:l,matches:q})}}d.length>e&&i.push({elem:this,matches:d.slice(e)});for(j=0;j<i.length&&!c.isPropagationStopped();j++){p=i[j],c.currentTarget=p.elem;for(k=0;k<p.matches.length&&!c.isImmediatePropagationStopped();k++){r=p.matches[k];if(h||!c.namespace&&!r.namespace||c.namespace_re&&c.namespace_re.test(r.namespace))c.data=r.data,c.handleObj=r,n=((f.event.special[r.origType]||{}).handle||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))}}return c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!0)}),d._submit_attached=!0)})},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on.call(this,a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.type+"."+e.namespace:e.type,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1||d===9){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.POS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),"not",a)},filter:function(a){return this.pushStack(T(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp("<(?:"+V+")","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function() +{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bp)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bn(k[i]);else bn(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||be.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bq=/alpha\([^)]*\)/i,br=/opacity=([^)]*)/,bs=/([A-Z]|^ms)/g,bt=/^-?\d+(?:px)?$/i,bu=/^-?\d/,bv=/^([\-+])=([\-+.\de]+)/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Left","Right"],by=["Top","Bottom"],bz,bA,bB;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bz(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bv.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bz)return bz(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bC(a,b,d);f.swap(a,bw,function(){e=bC(a,b,d)});return e}},set:function(a,b){if(!bt.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cv(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cu("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cu("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cv(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cn.test(h)?(o=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),o?(f._data(this,"toggle"+i,o==="show"?"hide":"show"),j[o]()):j[h]()):(k=co.exec(h),l=j.cur(),k?(m=parseFloat(k[2]),n=k[3]||(f.cssNumber[i]?"":"px"),n!=="px"&&(f.style(this,i,(m||1)+n),l=(m||1)/j.cur()*l,f.style(this,i,l+n)),k[1]&&(m=(k[1]==="-="?-1:1)*m+l),j.custom(l,m,n)):j.custom(l,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:cu("show",1),slideUp:cu("hide",1),slideToggle:cu("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cr||cs(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){e.options.hide&&f._data(e.elem,"fxshow"+e.prop)===b&&f._data(e.elem,"fxshow"+e.prop,e.start)},h()&&f.timers.push(h)&&!cp&&(cp=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cr||cs(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cp),cp=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(["width","height"],function(a,b){f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cy(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.support.fixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.support.fixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/src/DataTables.js b/src/warden-server/contrib/wardenweb/datatables/media/src/DataTables.js new file mode 100644 index 0000000..646d3a6 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/src/DataTables.js @@ -0,0 +1,247 @@ +/** + * @summary DataTables + * @description Paginate, search and sort HTML tables + * @version 1.9.0 + * @file jquery.dataTables.js + * @author Allan Jardine (www.sprymedia.co.uk) + * @contact www.sprymedia.co.uk/contact + * + * @copyright Copyright 2008-2012 Allan Jardine, all rights reserved. + * + * This source file is free software, under either the GPL v2 license or a + * BSD style license, available at: + * http://datatables.net/license_gpl2 + * http://datatables.net/license_bsd + * + * This source file is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details. + * + * For details please refer to: http://www.datatables.net + */ + +/*jslint evil: true, undef: true, browser: true */ +/*globals $, jQuery,_fnExternApiFunc,_fnInitialise,_fnInitComplete,_fnLanguageCompat,_fnAddColumn,_fnColumnOptions,_fnAddData,_fnCreateTr,_fnGatherData,_fnBuildHead,_fnDrawHead,_fnDraw,_fnReDraw,_fnAjaxUpdate,_fnAjaxParameters,_fnAjaxUpdateDraw,_fnServerParams,_fnAddOptionsHtml,_fnFeatureHtmlTable,_fnScrollDraw,_fnAdjustColumnSizing,_fnFeatureHtmlFilter,_fnFilterComplete,_fnFilterCustom,_fnFilterColumn,_fnFilter,_fnBuildSearchArray,_fnBuildSearchRow,_fnFilterCreateSearch,_fnDataToSearch,_fnSort,_fnSortAttachListener,_fnSortingClasses,_fnFeatureHtmlPaginate,_fnPageChange,_fnFeatureHtmlInfo,_fnUpdateInfo,_fnFeatureHtmlLength,_fnFeatureHtmlProcessing,_fnProcessingDisplay,_fnVisibleToColumnIndex,_fnColumnIndexToVisible,_fnNodeToDataIndex,_fnVisbleColumns,_fnCalculateEnd,_fnConvertToWidth,_fnCalculateColumnWidths,_fnScrollingWidthAdjust,_fnGetWidestNode,_fnGetMaxLenString,_fnStringToCss,_fnDetectType,_fnSettingsFromNode,_fnGetDataMaster,_fnGetTrNodes,_fnGetTdNodes,_fnEscapeRegex,_fnDeleteIndex,_fnReOrderIndex,_fnColumnOrdering,_fnLog,_fnClearTable,_fnSaveState,_fnLoadState,_fnCreateCookie,_fnReadCookie,_fnDetectHeader,_fnGetUniqueThs,_fnScrollBarWidth,_fnApplyToChildren,_fnMap,_fnGetRowData,_fnGetCellData,_fnSetCellData,_fnGetObjectDataFn,_fnSetObjectDataFn,_fnApplyColumnDefs,_fnBindAction,_fnCallbackReg,_fnCallbackFire,_fnJsonString,_fnRender,_fnNodeToColumnIndex*/ + +(/** @lends <global> */function($, window, document, undefined) { + /** + * DataTables is a plug-in for the jQuery Javascript library. It is a + * highly flexible tool, based upon the foundations of progressive + * enhancement, which will add advanced interaction controls to any + * HTML table. For a full list of features please refer to + * <a href="http://datatables.net">DataTables.net</a>. + * + * Note that the <i>DataTable</i> object is not a global variable but is + * aliased to <i>jQuery.fn.DataTable</i> and <i>jQuery.fn.dataTable</i> through which + * it may be accessed. + * + * @class + * @param {object} [oInit={}] Configuration object for DataTables. Options + * are defined by {@link DataTable.defaults} + * @requires jQuery 1.3+ + * + * @example + * // Basic initialisation + * $(document).ready( function { + * $('#example').dataTable(); + * } ); + * + * @example + * // Initialisation with configuration options - in this case, disable + * // pagination and sorting. + * $(document).ready( function { + * $('#example').dataTable( { + * "bPaginate": false, + * "bSort": false + * } ); + * } ); + */ + var DataTable = function( oInit ) + { + require('core.columns.js'); + require('core.data.js'); + require('core.draw.js'); + require('core.ajax.js'); + require('core.filter.js'); + require('core.info.js'); + require('core.init.js'); + require('core.length.js'); + require('core.page.js'); + require('core.processing.js'); + require('core.scrolling.js'); + require('core.sizing.js'); + require('core.sort.js'); + require('core.state.js'); + require('core.support.js'); + + require('api.methods.js'); + require('api.internal.js'); + + var _that = this; + return this.each(function() { + require('core.constructor.js'); + } ); + }; + + /** + * Version string for plug-ins to check compatibility. Allowed format is + * a.b.c.d.e where: a:int, b:int, c:int, d:string(dev|beta), e:int. d and + * e are optional + * @member + * @type string + * @default Version number + */ + DataTable.version = "1.9.0"; + + /** + * Private data store, containing all of the settings objects that are created for the + * tables on a given page. + * + * Note that the <i>DataTable.settings</i> object is aliased to <i>jQuery.fn.dataTableExt</i> + * through which it may be accessed and manipulated, or <i>jQuery.fn.dataTable.settings</i>. + * @member + * @type array + * @default [] + * @private + */ + DataTable.settings = []; + + /** + * Object models container, for the various models that DataTables has available + * to it. These models define the objects that are used to hold the active state + * and configuration of the table. + * @namespace + */ + DataTable.models = {}; + require('model.ext.js'); + require('model.search.js'); + require('model.row.js'); + require('model.column.js'); + require('model.defaults.js'); + require('model.defaults.columns.js'); + require('model.settings.js'); + + /** + * Extension object for DataTables that is used to provide all extension options. + * + * Note that the <i>DataTable.ext</i> object is available through + * <i>jQuery.fn.dataTable.ext</i> where it may be accessed and manipulated. It is + * also aliased to <i>jQuery.fn.dataTableExt</i> for historic reasons. + * @namespace + * @extends DataTable.models.ext + */ + DataTable.ext = $.extend( true, {}, DataTable.models.ext ); + require('ext.classes.js'); + require('ext.paging.js'); + require('ext.sorting.js'); + require('ext.types.js'); + + // jQuery aliases + $.fn.DataTable = DataTable; + $.fn.dataTable = DataTable; + $.fn.dataTableSettings = DataTable.settings; + $.fn.dataTableExt = DataTable.ext; + + + // Information about events fired by DataTables - for documentation. + /** + * Draw event, fired whenever the table is redrawn on the page, at the same point as + * fnDrawCallback. This may be useful for binding events or performing calculations when + * the table is altered at all. + * @name DataTable#draw + * @event + * @param {event} e jQuery event object + * @param {object} o DataTables settings object {@link DataTable.models.oSettings} + */ + + /** + * Filter event, fired when the filtering applied to the table (using the build in global + * global filter, or column filters) is altered. + * @name DataTable#filter + * @event + * @param {event} e jQuery event object + * @param {object} o DataTables settings object {@link DataTable.models.oSettings} + */ + + /** + * Page change event, fired when the paging of the table is altered. + * @name DataTable#page + * @event + * @param {event} e jQuery event object + * @param {object} o DataTables settings object {@link DataTable.models.oSettings} + */ + + /** + * Sort event, fired when the sorting applied to the table is altered. + * @name DataTable#sort + * @event + * @param {event} e jQuery event object + * @param {object} o DataTables settings object {@link DataTable.models.oSettings} + */ + + /** + * DataTables initialisation complete event, fired when the table is fully drawn, + * including Ajax data loaded, if Ajax data is required. + * @name DataTable#init + * @event + * @param {event} e jQuery event object + * @param {object} oSettings DataTables settings object + * @param {object} json The JSON object request from the server - only + * present if client-side Ajax sourced data is used</li></ol> + */ + + /** + * State save event, fired when the table has changed state a new state save is required. + * This method allows modification of the state saving object prior to actually doing the + * save, including addition or other state properties (for plug-ins) or modification + * of a DataTables core property. + * @name DataTable#stateSaveParams + * @event + * @param {event} e jQuery event object + * @param {object} oSettings DataTables settings object + * @param {object} json The state information to be saved + */ + + /** + * State load event, fired when the table is loading state from the stored data, but + * prior to the settings object being modified by the saved state - allowing modification + * of the saved state is required or loading of state for a plug-in. + * @name DataTable#stateLoadParams + * @event + * @param {event} e jQuery event object + * @param {object} oSettings DataTables settings object + * @param {object} json The saved state information + */ + + /** + * State loaded event, fired when state has been loaded from stored data and the settings + * object has been modified by the loaded data. + * @name DataTable#stateLoaded + * @event + * @param {event} e jQuery event object + * @param {object} oSettings DataTables settings object + * @param {object} json The saved state information + */ + + /** + * Processing event, fired when DataTables is doing some kind of processing (be it, + * sort, filter or anything else). Can be used to indicate to the end user that + * there is something happening, or that something has finished. + * @name DataTable#processing + * @event + * @param {event} e jQuery event object + * @param {object} oSettings DataTables settings object + * @param {boolean} bShow Flag for if DataTables is doing processing or not + */ + + /** + * Ajax (XHR) event, fired whenever an Ajax request is completed from a request to + * made to the server for new data (note that this trigger is called in fnServerData, + * if you override fnServerData and which to use this event, you need to trigger it in + * you success function). + * @name DataTable#xhr + * @event + * @param {event} e jQuery event object + * @param {object} o DataTables settings object {@link DataTable.models.oSettings} + */ +}(jQuery, window, document, undefined)); diff --git a/src/warden-server/contrib/wardenweb/datatables/media/src/api/api.internal.js b/src/warden-server/contrib/wardenweb/datatables/media/src/api/api.internal.js new file mode 100644 index 0000000..62f6f37 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/src/api/api.internal.js @@ -0,0 +1,127 @@ + +/* + * This is really a good bit rubbish this method of exposing the internal methods + * publically... - To be fixed in 2.0 using methods on the prototype + */ + + +/** + * Create a wrapper function for exporting an internal functions to an external API. + * @param {string} sFunc API function name + * @returns {function} wrapped function + * @memberof DataTable#oApi + */ +function _fnExternApiFunc (sFunc) +{ + return function() { + var aArgs = [_fnSettingsFromNode(this[DataTable.ext.iApiIndex])].concat( + Array.prototype.slice.call(arguments) ); + return DataTable.ext.oApi[sFunc].apply( this, aArgs ); + }; +} + + +/** + * Reference to internal functions for use by plug-in developers. Note that these + * methods are references to internal functions and are considered to be private. + * If you use these methods, be aware that they are liable to change between versions + * (check the upgrade notes). + * @namespace + */ +this.oApi = { + "_fnExternApiFunc": _fnExternApiFunc, + "_fnInitialise": _fnInitialise, + "_fnInitComplete": _fnInitComplete, + "_fnLanguageCompat": _fnLanguageCompat, + "_fnAddColumn": _fnAddColumn, + "_fnColumnOptions": _fnColumnOptions, + "_fnAddData": _fnAddData, + "_fnCreateTr": _fnCreateTr, + "_fnGatherData": _fnGatherData, + "_fnBuildHead": _fnBuildHead, + "_fnDrawHead": _fnDrawHead, + "_fnDraw": _fnDraw, + "_fnReDraw": _fnReDraw, + "_fnAjaxUpdate": _fnAjaxUpdate, + "_fnAjaxParameters": _fnAjaxParameters, + "_fnAjaxUpdateDraw": _fnAjaxUpdateDraw, + "_fnServerParams": _fnServerParams, + "_fnAddOptionsHtml": _fnAddOptionsHtml, + "_fnFeatureHtmlTable": _fnFeatureHtmlTable, + "_fnScrollDraw": _fnScrollDraw, + "_fnAdjustColumnSizing": _fnAdjustColumnSizing, + "_fnFeatureHtmlFilter": _fnFeatureHtmlFilter, + "_fnFilterComplete": _fnFilterComplete, + "_fnFilterCustom": _fnFilterCustom, + "_fnFilterColumn": _fnFilterColumn, + "_fnFilter": _fnFilter, + "_fnBuildSearchArray": _fnBuildSearchArray, + "_fnBuildSearchRow": _fnBuildSearchRow, + "_fnFilterCreateSearch": _fnFilterCreateSearch, + "_fnDataToSearch": _fnDataToSearch, + "_fnSort": _fnSort, + "_fnSortAttachListener": _fnSortAttachListener, + "_fnSortingClasses": _fnSortingClasses, + "_fnFeatureHtmlPaginate": _fnFeatureHtmlPaginate, + "_fnPageChange": _fnPageChange, + "_fnFeatureHtmlInfo": _fnFeatureHtmlInfo, + "_fnUpdateInfo": _fnUpdateInfo, + "_fnFeatureHtmlLength": _fnFeatureHtmlLength, + "_fnFeatureHtmlProcessing": _fnFeatureHtmlProcessing, + "_fnProcessingDisplay": _fnProcessingDisplay, + "_fnVisibleToColumnIndex": _fnVisibleToColumnIndex, + "_fnColumnIndexToVisible": _fnColumnIndexToVisible, + "_fnNodeToDataIndex": _fnNodeToDataIndex, + "_fnVisbleColumns": _fnVisbleColumns, + "_fnCalculateEnd": _fnCalculateEnd, + "_fnConvertToWidth": _fnConvertToWidth, + "_fnCalculateColumnWidths": _fnCalculateColumnWidths, + "_fnScrollingWidthAdjust": _fnScrollingWidthAdjust, + "_fnGetWidestNode": _fnGetWidestNode, + "_fnGetMaxLenString": _fnGetMaxLenString, + "_fnStringToCss": _fnStringToCss, + "_fnDetectType": _fnDetectType, + "_fnSettingsFromNode": _fnSettingsFromNode, + "_fnGetDataMaster": _fnGetDataMaster, + "_fnGetTrNodes": _fnGetTrNodes, + "_fnGetTdNodes": _fnGetTdNodes, + "_fnEscapeRegex": _fnEscapeRegex, + "_fnDeleteIndex": _fnDeleteIndex, + "_fnReOrderIndex": _fnReOrderIndex, + "_fnColumnOrdering": _fnColumnOrdering, + "_fnLog": _fnLog, + "_fnClearTable": _fnClearTable, + "_fnSaveState": _fnSaveState, + "_fnLoadState": _fnLoadState, + "_fnCreateCookie": _fnCreateCookie, + "_fnReadCookie": _fnReadCookie, + "_fnDetectHeader": _fnDetectHeader, + "_fnGetUniqueThs": _fnGetUniqueThs, + "_fnScrollBarWidth": _fnScrollBarWidth, + "_fnApplyToChildren": _fnApplyToChildren, + "_fnMap": _fnMap, + "_fnGetRowData": _fnGetRowData, + "_fnGetCellData": _fnGetCellData, + "_fnSetCellData": _fnSetCellData, + "_fnGetObjectDataFn": _fnGetObjectDataFn, + "_fnSetObjectDataFn": _fnSetObjectDataFn, + "_fnApplyColumnDefs": _fnApplyColumnDefs, + "_fnBindAction": _fnBindAction, + "_fnExtend": _fnExtend, + "_fnCallbackReg": _fnCallbackReg, + "_fnCallbackFire": _fnCallbackFire, + "_fnJsonString": _fnJsonString, + "_fnRender": _fnRender, + "_fnNodeToColumnIndex": _fnNodeToColumnIndex +}; + +$.extend( DataTable.ext.oApi, this.oApi ); + +for ( var sFunc in DataTable.ext.oApi ) +{ + if ( sFunc ) + { + this[sFunc] = _fnExternApiFunc(sFunc); + } +} + diff --git a/src/warden-server/contrib/wardenweb/datatables/media/src/api/api.methods.js b/src/warden-server/contrib/wardenweb/datatables/media/src/api/api.methods.js new file mode 100644 index 0000000..9f535af --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/src/api/api.methods.js @@ -0,0 +1,1258 @@ + + +/** + * Perform a jQuery selector action on the table's TR elements (from the tbody) and + * return the resulting jQuery object. + * @param {string|node|jQuery} sSelector jQuery selector or node collection to act on + * @param {object} [oOpts] Optional parameters for modifying the rows to be included + * @param {string} [oOpts.filter=none] Select TR elements that meet the current filter + * criterion ("applied") or all TR elements (i.e. no filter). + * @param {string} [oOpts.order=current] Order of the TR elements in the processed array. + * Can be either 'current', whereby the current sorting of the table is used, or + * 'original' whereby the original order the data was read into the table is used. + * @param {string} [oOpts.page=all] Limit the selection to the currently displayed page + * ("current") or not ("all"). If 'current' is given, then order is assumed to be + * 'current' and filter is 'applied', regardless of what they might be given as. + * @returns {object} jQuery object, filtered by the given selector. + * @dtopt API + * + * @example + * $(document).ready(function() { + * var oTable = $('#example').dataTable(); + * + * // Highlight every second row + * oTable.$('tr:odd').css('backgroundColor', 'blue'); + * } ); + * + * @example + * $(document).ready(function() { + * var oTable = $('#example').dataTable(); + * + * // Filter to rows with 'Webkit' in them, add a background colour and then + * // remove the filter, thus highlighting the 'Webkit' rows only. + * oTable.fnFilter('Webkit'); + * oTable.$('tr', {"filter": "applied"}).css('backgroundColor', 'blue'); + * oTable.fnFilter(''); + * } ); + */ +this.$ = function ( sSelector, oOpts ) +{ + var i, iLen, a = []; + var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); + + if ( !oOpts ) + { + oOpts = {}; + } + + oOpts = $.extend( {}, { + "filter": "none", // applied + "order": "current", // "original" + "page": "all" // current + }, oOpts ); + + // Current page implies that order=current and fitler=applied, since it is fairly + // senseless otherwise + if ( oOpts.page == 'current' ) + { + for ( i=oSettings._iDisplayStart, iLen=oSettings.fnDisplayEnd() ; i<iLen ; i++ ) + { + a.push( oSettings.aoData[ oSettings.aiDisplay[i] ].nTr ); + } + } + else if ( oOpts.order == "current" && oOpts.filter == "none" ) + { + for ( i=0, iLen=oSettings.aiDisplayMaster.length ; i<iLen ; i++ ) + { + a.push( oSettings.aoData[ oSettings.aiDisplayMaster[i] ].nTr ); + } + } + else if ( oOpts.order == "current" && oOpts.filter == "applied" ) + { + for ( i=0, iLen=oSettings.aiDisplay.length ; i<iLen ; i++ ) + { + a.push( oSettings.aoData[ oSettings.aiDisplay[i] ].nTr ); + } + } + else if ( oOpts.order == "original" && oOpts.filter == "none" ) + { + for ( i=0, iLen=oSettings.aoData.length ; i<iLen ; i++ ) + { + a.push( oSettings.aoData[ i ].nTr ); + } + } + else if ( oOpts.order == "original" && oOpts.filter == "applied" ) + { + for ( i=0, iLen=oSettings.aoData.length ; i<iLen ; i++ ) + { + if ( $.inArray( i, oSettings.aiDisplay ) !== -1 ) + { + a.push( oSettings.aoData[ i ].nTr ); + } + } + } + else + { + _fnLog( oSettings, 1, "Unknown selection options" ); + } + + /* We need to filter on the TR elements and also 'find' in their descendants + * to make the selector act like it would in a full table - so we need + * to build both results and then combine them together + */ + var jqA = $(a); + var jqTRs = jqA.filter( sSelector ); + var jqDescendants = jqA.find( sSelector ); + + return $( [].concat($.makeArray(jqTRs), $.makeArray(jqDescendants)) ); +}; + + +/** + * Almost identical to $ in operation, but in this case returns the data for the matched + * rows - as such, the jQuery selector used should match TR row nodes or TD/TH cell nodes + * rather than any decendents, so the data can be obtained for the row/cell. If matching + * rows are found, the data returned is the original data array/object that was used to + * create the row (or a generated array if from a DOM source). + * + * This method is often useful incombination with $ where both functions are given the + * same parameters and the array indexes will match identically. + * @param {string|node|jQuery} sSelector jQuery selector or node collection to act on + * @param {object} [oOpts] Optional parameters for modifying the rows to be included + * @param {string} [oOpts.filter=none] Select elements that meet the current filter + * criterion ("applied") or all elements (i.e. no filter). + * @param {string} [oOpts.order=current] Order of the data in the processed array. + * Can be either 'current', whereby the current sorting of the table is used, or + * 'original' whereby the original order the data was read into the table is used. + * @param {string} [oOpts.page=all] Limit the selection to the currently displayed page + * ("current") or not ("all"). If 'current' is given, then order is assumed to be + * 'current' and filter is 'applied', regardless of what they might be given as. + * @returns {array} Data for the matched elements. If any elements, as a result of the + * selector, were not TR, TD or TH elements in the DataTable, they will have a null + * entry in the array. + * @dtopt API + * + * @example + * $(document).ready(function() { + * var oTable = $('#example').dataTable(); + * + * // Get the data from the first row in the table + * var data = oTable._('tr:first'); + * + * // Do something useful with the data + * alert( "First cell is: "+data[0] ); + * } ); + * + * @example + * $(document).ready(function() { + * var oTable = $('#example').dataTable(); + * + * // Filter to 'Webkit' and get all data for + * oTable.fnFilter('Webkit'); + * var data = oTable._('tr', {"filter": "applied"}); + * + * // Do something with the data + * alert( data.length+" rows matched the filter" ); + * } ); + */ +this._ = function ( sSelector, oOpts ) +{ + var aOut = []; + var i, iLen, iIndex; + var aTrs = this.$( sSelector, oOpts ); + + for ( i=0, iLen=aTrs.length ; i<iLen ; i++ ) + { + aOut.push( this.fnGetData(aTrs[i]) ); + } + + return aOut; +}; + + +/** + * Add a single new row or multiple rows of data to the table. Please note + * that this is suitable for client-side processing only - if you are using + * server-side processing (i.e. "bServerSide": true), then to add data, you + * must add it to the data source, i.e. the server-side, through an Ajax call. + * @param {array|object} mData The data to be added to the table. This can be: + * <ul> + * <li>1D array of data - add a single row with the data provided</li> + * <li>2D array of arrays - add multiple rows in a single call</li> + * <li>object - data object when using <i>mDataProp</i></li> + * <li>array of objects - multiple data objects when using <i>mDataProp</i></li> + * </ul> + * @param {bool} [bRedraw=true] redraw the table or not + * @returns {array} An array of integers, representing the list of indexes in + * <i>aoData</i> ({@link DataTable.models.oSettings}) that have been added to + * the table. + * @dtopt API + * + * @example + * // Global var for counter + * var giCount = 2; + * + * $(document).ready(function() { + * $('#example').dataTable(); + * } ); + * + * function fnClickAddRow() { + * $('#example').dataTable().fnAddData( [ + * giCount+".1", + * giCount+".2", + * giCount+".3", + * giCount+".4" ] + * ); + * + * giCount++; + * } + */ +this.fnAddData = function( mData, bRedraw ) +{ + if ( mData.length === 0 ) + { + return []; + } + + var aiReturn = []; + var iTest; + + /* Find settings from table node */ + var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); + + /* Check if we want to add multiple rows or not */ + if ( typeof mData[0] === "object" && mData[0] !== null ) + { + for ( var i=0 ; i<mData.length ; i++ ) + { + iTest = _fnAddData( oSettings, mData[i] ); + if ( iTest == -1 ) + { + return aiReturn; + } + aiReturn.push( iTest ); + } + } + else + { + iTest = _fnAddData( oSettings, mData ); + if ( iTest == -1 ) + { + return aiReturn; + } + aiReturn.push( iTest ); + } + + oSettings.aiDisplay = oSettings.aiDisplayMaster.slice(); + + if ( bRedraw === undefined || bRedraw ) + { + _fnReDraw( oSettings ); + } + return aiReturn; +}; + + +/** + * This function will make DataTables recalculate the column sizes, based on the data + * contained in the table and the sizes applied to the columns (in the DOM, CSS or + * through the sWidth parameter). This can be useful when the width of the table's + * parent element changes (for example a window resize). + * @param {boolean} [bRedraw=true] Redraw the table or not, you will typically want to + * @dtopt API + * + * @example + * $(document).ready(function() { + * var oTable = $('#example').dataTable( { + * "sScrollY": "200px", + * "bPaginate": false + * } ); + * + * $(window).bind('resize', function () { + * oTable.fnAdjustColumnSizing(); + * } ); + * } ); + */ +this.fnAdjustColumnSizing = function ( bRedraw ) +{ + var oSettings = _fnSettingsFromNode(this[DataTable.ext.iApiIndex]); + _fnAdjustColumnSizing( oSettings ); + + if ( bRedraw === undefined || bRedraw ) + { + this.fnDraw( false ); + } + else if ( oSettings.oScroll.sX !== "" || oSettings.oScroll.sY !== "" ) + { + /* If not redrawing, but scrolling, we want to apply the new column sizes anyway */ + this.oApi._fnScrollDraw(oSettings); + } +}; + + +/** + * Quickly and simply clear a table + * @param {bool} [bRedraw=true] redraw the table or not + * @dtopt API + * + * @example + * $(document).ready(function() { + * var oTable = $('#example').dataTable(); + * + * // Immediately 'nuke' the current rows (perhaps waiting for an Ajax callback...) + * oTable.fnClearTable(); + * } ); + */ +this.fnClearTable = function( bRedraw ) +{ + /* Find settings from table node */ + var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); + _fnClearTable( oSettings ); + + if ( bRedraw === undefined || bRedraw ) + { + _fnDraw( oSettings ); + } +}; + + +/** + * The exact opposite of 'opening' a row, this function will close any rows which + * are currently 'open'. + * @param {node} nTr the table row to 'close' + * @returns {int} 0 on success, or 1 if failed (can't find the row) + * @dtopt API + * + * @example + * $(document).ready(function() { + * var oTable; + * + * // 'open' an information row when a row is clicked on + * $('#example tbody tr').click( function () { + * if ( oTable.fnIsOpen(this) ) { + * oTable.fnClose( this ); + * } else { + * oTable.fnOpen( this, "Temporary row opened", "info_row" ); + * } + * } ); + * + * oTable = $('#example').dataTable(); + * } ); + */ +this.fnClose = function( nTr ) +{ + /* Find settings from table node */ + var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); + + for ( var i=0 ; i<oSettings.aoOpenRows.length ; i++ ) + { + if ( oSettings.aoOpenRows[i].nParent == nTr ) + { + var nTrParent = oSettings.aoOpenRows[i].nTr.parentNode; + if ( nTrParent ) + { + /* Remove it if it is currently on display */ + nTrParent.removeChild( oSettings.aoOpenRows[i].nTr ); + } + oSettings.aoOpenRows.splice( i, 1 ); + return 0; + } + } + return 1; +}; + + +/** + * Remove a row for the table + * @param {mixed} mTarget The index of the row from aoData to be deleted, or + * the TR element you want to delete + * @param {function|null} [fnCallBack] Callback function + * @param {bool} [bRedraw=true] Redraw the table or not + * @returns {array} The row that was deleted + * @dtopt API + * + * @example + * $(document).ready(function() { + * var oTable = $('#example').dataTable(); + * + * // Immediately remove the first row + * oTable.fnDeleteRow( 0 ); + * } ); + */ +this.fnDeleteRow = function( mTarget, fnCallBack, bRedraw ) +{ + /* Find settings from table node */ + var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); + var i, iLen, iAODataIndex; + + iAODataIndex = (typeof mTarget === 'object') ? + _fnNodeToDataIndex(oSettings, mTarget) : mTarget; + + /* Return the data array from this row */ + var oData = oSettings.aoData.splice( iAODataIndex, 1 ); + + /* Update the _DT_RowIndex parameter */ + for ( i=0, iLen=oSettings.aoData.length ; i<iLen ; i++ ) + { + if ( oSettings.aoData[i].nTr !== null ) + { + oSettings.aoData[i].nTr._DT_RowIndex = i; + } + } + + /* Remove the target row from the search array */ + var iDisplayIndex = $.inArray( iAODataIndex, oSettings.aiDisplay ); + oSettings.asDataSearch.splice( iDisplayIndex, 1 ); + + /* Delete from the display arrays */ + _fnDeleteIndex( oSettings.aiDisplayMaster, iAODataIndex ); + _fnDeleteIndex( oSettings.aiDisplay, iAODataIndex ); + + /* If there is a user callback function - call it */ + if ( typeof fnCallBack === "function" ) + { + fnCallBack.call( this, oSettings, oData ); + } + + /* Check for an 'overflow' they case for dislaying the table */ + if ( oSettings._iDisplayStart >= oSettings.aiDisplay.length ) + { + oSettings._iDisplayStart -= oSettings._iDisplayLength; + if ( oSettings._iDisplayStart < 0 ) + { + oSettings._iDisplayStart = 0; + } + } + + if ( bRedraw === undefined || bRedraw ) + { + _fnCalculateEnd( oSettings ); + _fnDraw( oSettings ); + } + + return oData; +}; + + +/** + * Restore the table to it's original state in the DOM by removing all of DataTables + * enhancements, alterations to the DOM structure of the table and event listeners. + * @param {boolean} [bRemove=false] Completely remove the table from the DOM + * @dtopt API + * + * @example + * $(document).ready(function() { + * // This example is fairly pointless in reality, but shows how fnDestroy can be used + * var oTable = $('#example').dataTable(); + * oTable.fnDestroy(); + * } ); + */ +this.fnDestroy = function ( bRemove ) +{ + var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); + var nOrig = oSettings.nTableWrapper.parentNode; + var nBody = oSettings.nTBody; + var i, iLen; + + bRemove = (bRemove===undefined) ? false : true; + + /* Flag to note that the table is currently being destroyed - no action should be taken */ + oSettings.bDestroying = true; + + /* Restore hidden columns */ + for ( i=0, iLen=oSettings.aoDestroyCallback.length ; i<iLen ; i++ ) { + oSettings.aoDestroyCallback[i].fn(); + } + + /* Restore hidden columns */ + for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ ) + { + if ( oSettings.aoColumns[i].bVisible === false ) + { + this.fnSetColumnVis( i, true ); + } + } + + /* Blitz all DT events */ + $(oSettings.nTableWrapper).find('*').andSelf().unbind('.DT'); + + /* If there is an 'empty' indicator row, remove it */ + $('tbody>tr>td.'+oSettings.oClasses.sRowEmpty, oSettings.nTable).parent().remove(); + + /* When scrolling we had to break the table up - restore it */ + if ( oSettings.nTable != oSettings.nTHead.parentNode ) + { + $(oSettings.nTable).children('thead').remove(); + oSettings.nTable.appendChild( oSettings.nTHead ); + } + + if ( oSettings.nTFoot && oSettings.nTable != oSettings.nTFoot.parentNode ) + { + $(oSettings.nTable).children('tfoot').remove(); + oSettings.nTable.appendChild( oSettings.nTFoot ); + } + + /* Remove the DataTables generated nodes, events and classes */ + oSettings.nTable.parentNode.removeChild( oSettings.nTable ); + $(oSettings.nTableWrapper).remove(); + + oSettings.aaSorting = []; + oSettings.aaSortingFixed = []; + _fnSortingClasses( oSettings ); + + $(_fnGetTrNodes( oSettings )).removeClass( oSettings.asStripeClasses.join(' ') ); + + $('th, td', oSettings.nTHead).removeClass( [ + oSettings.oClasses.sSortable, + oSettings.oClasses.sSortableAsc, + oSettings.oClasses.sSortableDesc, + oSettings.oClasses.sSortableNone ].join(' ') + ); + if ( oSettings.bJUI ) + { + $('th span.'+oSettings.oClasses.sSortIcon + + ', td span.'+oSettings.oClasses.sSortIcon, oSettings.nTHead).remove(); + + $('th, td', oSettings.nTHead).each( function () { + var jqWrapper = $('div.'+oSettings.oClasses.sSortJUIWrapper, this); + var kids = jqWrapper.contents(); + $(this).append( kids ); + jqWrapper.remove(); + } ); + } + + /* Add the TR elements back into the table in their original order */ + if ( !bRemove && oSettings.nTableReinsertBefore ) + { + nOrig.insertBefore( oSettings.nTable, oSettings.nTableReinsertBefore ); + } + else if ( !bRemove ) + { + nOrig.appendChild( oSettings.nTable ); + } + + for ( i=0, iLen=oSettings.aoData.length ; i<iLen ; i++ ) + { + if ( oSettings.aoData[i].nTr !== null ) + { + nBody.appendChild( oSettings.aoData[i].nTr ); + } + } + + /* Restore the width of the original table */ + if ( oSettings.oFeatures.bAutoWidth === true ) + { + oSettings.nTable.style.width = _fnStringToCss(oSettings.sDestroyWidth); + } + + /* If the were originally odd/even type classes - then we add them back here. Note + * this is not fool proof (for example if not all rows as odd/even classes - but + * it's a good effort without getting carried away + */ + $(nBody).children('tr:even').addClass( oSettings.asDestroyStripes[0] ); + $(nBody).children('tr:odd').addClass( oSettings.asDestroyStripes[1] ); + + /* Remove the settings object from the settings array */ + for ( i=0, iLen=DataTable.settings.length ; i<iLen ; i++ ) + { + if ( DataTable.settings[i] == oSettings ) + { + DataTable.settings.splice( i, 1 ); + } + } + + /* End it all */ + oSettings = null; +}; + + +/** + * Redraw the table + * @param {bool} [bComplete=true] Re-filter and resort (if enabled) the table before the draw. + * @dtopt API + * + * @example + * $(document).ready(function() { + * var oTable = $('#example').dataTable(); + * + * // Re-draw the table - you wouldn't want to do it here, but it's an example :-) + * oTable.fnDraw(); + * } ); + */ +this.fnDraw = function( bComplete ) +{ + var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); + if ( bComplete ) + { + _fnCalculateEnd( oSettings ); + _fnDraw( oSettings ); + } + else + { + _fnReDraw( oSettings ); + } +}; + + +/** + * Filter the input based on data + * @param {string} sInput String to filter the table on + * @param {int|null} [iColumn] Column to limit filtering to + * @param {bool} [bRegex=false] Treat as regular expression or not + * @param {bool} [bSmart=true] Perform smart filtering or not + * @param {bool} [bShowGlobal=true] Show the input global filter in it's input box(es) + * @param {bool} [bCaseInsensitive=true] Do case-insensitive matching (true) or not (false) + * @dtopt API + * + * @example + * $(document).ready(function() { + * var oTable = $('#example').dataTable(); + * + * // Sometime later - filter... + * oTable.fnFilter( 'test string' ); + * } ); + */ +this.fnFilter = function( sInput, iColumn, bRegex, bSmart, bShowGlobal, bCaseInsensitive ) +{ + var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); + + if ( !oSettings.oFeatures.bFilter ) + { + return; + } + + if ( bRegex === undefined || bRegex === null ) + { + bRegex = false; + } + + if ( bSmart === undefined || bSmart === null ) + { + bSmart = true; + } + + if ( bShowGlobal === undefined || bShowGlobal === null ) + { + bShowGlobal = true; + } + + if ( bCaseInsensitive === undefined || bCaseInsensitive === null ) + { + bCaseInsensitive = true; + } + + if ( iColumn === undefined || iColumn === null ) + { + /* Global filter */ + _fnFilterComplete( oSettings, { + "sSearch":sInput+"", + "bRegex": bRegex, + "bSmart": bSmart, + "bCaseInsensitive": bCaseInsensitive + }, 1 ); + + if ( bShowGlobal && oSettings.aanFeatures.f ) + { + var n = oSettings.aanFeatures.f; + for ( var i=0, iLen=n.length ; i<iLen ; i++ ) + { + $('input', n[i]).val( sInput ); + } + } + } + else + { + /* Single column filter */ + $.extend( oSettings.aoPreSearchCols[ iColumn ], { + "sSearch": sInput+"", + "bRegex": bRegex, + "bSmart": bSmart, + "bCaseInsensitive": bCaseInsensitive + } ); + _fnFilterComplete( oSettings, oSettings.oPreviousSearch, 1 ); + } +}; + + +/** + * Get the data for the whole table, an individual row or an individual cell based on the + * provided parameters. + * @param {int|node} [mRow] A TR row node, TD/TH cell node or an integer. If given as + * a TR node then the data source for the whole row will be returned. If given as a + * TD/TH cell node then iCol will be automatically calculated and the data for the + * cell returned. If given as an integer, then this is treated as the aoData internal + * data index for the row (see fnGetPosition) and the data for that row used. + * @param {int} [iCol] Optional column index that you want the data of. + * @returns {array|object|string} If mRow is undefined, then the data for all rows is + * returned. If mRow is defined, just data for that row, and is iCol is + * defined, only data for the designated cell is returned. + * @dtopt API + * + * @example + * // Row data + * $(document).ready(function() { + * oTable = $('#example').dataTable(); + * + * oTable.$('tr').click( function () { + * var data = oTable.fnGetData( this ); + * // ... do something with the array / object of data for the row + * } ); + * } ); + * + * @example + * // Individual cell data + * $(document).ready(function() { + * oTable = $('#example').dataTable(); + * + * oTable.$('td').click( function () { + * var sData = oTable.fnGetData( this ); + * alert( 'The cell clicked on had the value of '+sData ); + * } ); + * } ); + */ +this.fnGetData = function( mRow, iCol ) +{ + var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); + + if ( mRow !== undefined ) + { + var iRow = mRow; + if ( typeof mRow === 'object' ) + { + var sNode = mRow.nodeName.toLowerCase(); + if (sNode === "tr" ) + { + iRow = _fnNodeToDataIndex(oSettings, mRow); + } + else if ( sNode === "td" ) + { + iRow = _fnNodeToDataIndex(oSettings, mRow.parentNode); + iCol = _fnNodeToColumnIndex( oSettings, iRow, mRow ); + } + } + + if ( iCol !== undefined ) + { + return _fnGetCellData( oSettings, iRow, iCol, '' ); + } + return (oSettings.aoData[iRow]!==undefined) ? + oSettings.aoData[iRow]._aData : null; + } + return _fnGetDataMaster( oSettings ); +}; + + +/** + * Get an array of the TR nodes that are used in the table's body. Note that you will + * typically want to use the '$' API method in preference to this as it is more + * flexible. + * @param {int} [iRow] Optional row index for the TR element you want + * @returns {array|node} If iRow is undefined, returns an array of all TR elements + * in the table's body, or iRow is defined, just the TR element requested. + * @dtopt API + * + * @example + * $(document).ready(function() { + * var oTable = $('#example').dataTable(); + * + * // Get the nodes from the table + * var nNodes = oTable.fnGetNodes( ); + * } ); + */ +this.fnGetNodes = function( iRow ) +{ + var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); + + if ( iRow !== undefined ) { + return (oSettings.aoData[iRow]!==undefined) ? + oSettings.aoData[iRow].nTr : null; + } + return _fnGetTrNodes( oSettings ); +}; + + +/** + * Get the array indexes of a particular cell from it's DOM element + * and column index including hidden columns + * @param {node} nNode this can either be a TR, TD or TH in the table's body + * @returns {int} If nNode is given as a TR, then a single index is returned, or + * if given as a cell, an array of [row index, column index (visible)] is given. + * @dtopt API + * + * @example + * $(document).ready(function() { + * $('#example tbody td').click( function () { + * // Get the position of the current data from the node + * var aPos = oTable.fnGetPosition( this ); + * + * // Get the data array for this row + * var aData = oTable.fnGetData( aPos[0] ); + * + * // Update the data array and return the value + * aData[ aPos[1] ] = 'clicked'; + * this.innerHTML = 'clicked'; + * } ); + * + * // Init DataTables + * oTable = $('#example').dataTable(); + * } ); + */ +this.fnGetPosition = function( nNode ) +{ + var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); + var sNodeName = nNode.nodeName.toUpperCase(); + + if ( sNodeName == "TR" ) + { + return _fnNodeToDataIndex(oSettings, nNode); + } + else if ( sNodeName == "TD" || sNodeName == "TH" ) + { + var iDataIndex = _fnNodeToDataIndex( oSettings, nNode.parentNode ); + var iColumnIndex = _fnNodeToColumnIndex( oSettings, iDataIndex, nNode ); + return [ iDataIndex, _fnColumnIndexToVisible(oSettings, iColumnIndex ), iColumnIndex ]; + } + return null; +}; + + +/** + * Check to see if a row is 'open' or not. + * @param {node} nTr the table row to check + * @returns {boolean} true if the row is currently open, false otherwise + * @dtopt API + * + * @example + * $(document).ready(function() { + * var oTable; + * + * // 'open' an information row when a row is clicked on + * $('#example tbody tr').click( function () { + * if ( oTable.fnIsOpen(this) ) { + * oTable.fnClose( this ); + * } else { + * oTable.fnOpen( this, "Temporary row opened", "info_row" ); + * } + * } ); + * + * oTable = $('#example').dataTable(); + * } ); + */ +this.fnIsOpen = function( nTr ) +{ + var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); + var aoOpenRows = oSettings.aoOpenRows; + + for ( var i=0 ; i<oSettings.aoOpenRows.length ; i++ ) + { + if ( oSettings.aoOpenRows[i].nParent == nTr ) + { + return true; + } + } + return false; +}; + + +/** + * This function will place a new row directly after a row which is currently + * on display on the page, with the HTML contents that is passed into the + * function. This can be used, for example, to ask for confirmation that a + * particular record should be deleted. + * @param {node} nTr The table row to 'open' + * @param {string|node|jQuery} mHtml The HTML to put into the row + * @param {string} sClass Class to give the new TD cell + * @returns {node} The row opened. Note that if the table row passed in as the + * first parameter, is not found in the table, this method will silently + * return. + * @dtopt API + * + * @example + * $(document).ready(function() { + * var oTable; + * + * // 'open' an information row when a row is clicked on + * $('#example tbody tr').click( function () { + * if ( oTable.fnIsOpen(this) ) { + * oTable.fnClose( this ); + * } else { + * oTable.fnOpen( this, "Temporary row opened", "info_row" ); + * } + * } ); + * + * oTable = $('#example').dataTable(); + * } ); + */ +this.fnOpen = function( nTr, mHtml, sClass ) +{ + /* Find settings from table node */ + var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); + + /* Check that the row given is in the table */ + var nTableRows = _fnGetTrNodes( oSettings ); + if ( $.inArray(nTr, nTableRows) === -1 ) + { + return; + } + + /* the old open one if there is one */ + this.fnClose( nTr ); + + var nNewRow = document.createElement("tr"); + var nNewCell = document.createElement("td"); + nNewRow.appendChild( nNewCell ); + nNewCell.className = sClass; + nNewCell.colSpan = _fnVisbleColumns( oSettings ); + + if (typeof mHtml === "string") + { + nNewCell.innerHTML = mHtml; + } + else + { + $(nNewCell).html( mHtml ); + } + + /* If the nTr isn't on the page at the moment - then we don't insert at the moment */ + var nTrs = $('tr', oSettings.nTBody); + if ( $.inArray(nTr, nTrs) != -1 ) + { + $(nNewRow).insertAfter(nTr); + } + + oSettings.aoOpenRows.push( { + "nTr": nNewRow, + "nParent": nTr + } ); + + return nNewRow; +}; + + +/** + * Change the pagination - provides the internal logic for pagination in a simple API + * function. With this function you can have a DataTables table go to the next, + * previous, first or last pages. + * @param {string|int} mAction Paging action to take: "first", "previous", "next" or "last" + * or page number to jump to (integer), note that page 0 is the first page. + * @param {bool} [bRedraw=true] Redraw the table or not + * @dtopt API + * + * @example + * $(document).ready(function() { + * var oTable = $('#example').dataTable(); + * oTable.fnPageChange( 'next' ); + * } ); + */ +this.fnPageChange = function ( mAction, bRedraw ) +{ + var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); + _fnPageChange( oSettings, mAction ); + _fnCalculateEnd( oSettings ); + + if ( bRedraw === undefined || bRedraw ) + { + _fnDraw( oSettings ); + } +}; + + +/** + * Show a particular column + * @param {int} iCol The column whose display should be changed + * @param {bool} bShow Show (true) or hide (false) the column + * @param {bool} [bRedraw=true] Redraw the table or not + * @dtopt API + * + * @example + * $(document).ready(function() { + * var oTable = $('#example').dataTable(); + * + * // Hide the second column after initialisation + * oTable.fnSetColumnVis( 1, false ); + * } ); + */ +this.fnSetColumnVis = function ( iCol, bShow, bRedraw ) +{ + var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); + var i, iLen; + var aoColumns = oSettings.aoColumns; + var aoData = oSettings.aoData; + var nTd, nCell, anTrs, jqChildren, bAppend, iBefore; + + /* No point in doing anything if we are requesting what is already true */ + if ( aoColumns[iCol].bVisible == bShow ) + { + return; + } + + /* Show the column */ + if ( bShow ) + { + var iInsert = 0; + for ( i=0 ; i<iCol ; i++ ) + { + if ( aoColumns[i].bVisible ) + { + iInsert++; + } + } + + /* Need to decide if we should use appendChild or insertBefore */ + bAppend = (iInsert >= _fnVisbleColumns( oSettings )); + + /* Which coloumn should we be inserting before? */ + if ( !bAppend ) + { + for ( i=iCol ; i<aoColumns.length ; i++ ) + { + if ( aoColumns[i].bVisible ) + { + iBefore = i; + break; + } + } + } + + for ( i=0, iLen=aoData.length ; i<iLen ; i++ ) + { + if ( aoData[i].nTr !== null ) + { + if ( bAppend ) + { + aoData[i].nTr.appendChild( + aoData[i]._anHidden[iCol] + ); + } + else + { + aoData[i].nTr.insertBefore( + aoData[i]._anHidden[iCol], + _fnGetTdNodes( oSettings, i )[iBefore] ); + } + } + } + } + else + { + /* Remove a column from display */ + for ( i=0, iLen=aoData.length ; i<iLen ; i++ ) + { + if ( aoData[i].nTr !== null ) + { + nTd = _fnGetTdNodes( oSettings, i )[iCol]; + aoData[i]._anHidden[iCol] = nTd; + nTd.parentNode.removeChild( nTd ); + } + } + } + + /* Clear to set the visible flag */ + aoColumns[iCol].bVisible = bShow; + + /* Redraw the header and footer based on the new column visibility */ + _fnDrawHead( oSettings, oSettings.aoHeader ); + if ( oSettings.nTFoot ) + { + _fnDrawHead( oSettings, oSettings.aoFooter ); + } + + /* If there are any 'open' rows, then we need to alter the colspan for this col change */ + for ( i=0, iLen=oSettings.aoOpenRows.length ; i<iLen ; i++ ) + { + oSettings.aoOpenRows[i].nTr.colSpan = _fnVisbleColumns( oSettings ); + } + + /* Do a redraw incase anything depending on the table columns needs it + * (built-in: scrolling) + */ + if ( bRedraw === undefined || bRedraw ) + { + _fnAdjustColumnSizing( oSettings ); + _fnDraw( oSettings ); + } + + _fnSaveState( oSettings ); +}; + + +/** + * Get the settings for a particular table for external manipulation + * @returns {object} DataTables settings object. See + * {@link DataTable.models.oSettings} + * @dtopt API + * + * @example + * $(document).ready(function() { + * var oTable = $('#example').dataTable(); + * var oSettings = oTable.fnSettings(); + * + * // Show an example parameter from the settings + * alert( oSettings._iDisplayStart ); + * } ); + */ +this.fnSettings = function() +{ + return _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); +}; + + +/** + * Sort the table by a particular row + * @param {int} iCol the data index to sort on. Note that this will not match the + * 'display index' if you have hidden data entries + * @dtopt API + * + * @example + * $(document).ready(function() { + * var oTable = $('#example').dataTable(); + * + * // Sort immediately with columns 0 and 1 + * oTable.fnSort( [ [0,'asc'], [1,'asc'] ] ); + * } ); + */ +this.fnSort = function( aaSort ) +{ + var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); + oSettings.aaSorting = aaSort; + _fnSort( oSettings ); +}; + + +/** + * Attach a sort listener to an element for a given column + * @param {node} nNode the element to attach the sort listener to + * @param {int} iColumn the column that a click on this node will sort on + * @param {function} [fnCallback] callback function when sort is run + * @dtopt API + * + * @example + * $(document).ready(function() { + * var oTable = $('#example').dataTable(); + * + * // Sort on column 1, when 'sorter' is clicked on + * oTable.fnSortListener( document.getElementById('sorter'), 1 ); + * } ); + */ +this.fnSortListener = function( nNode, iColumn, fnCallback ) +{ + _fnSortAttachListener( _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ), nNode, iColumn, + fnCallback ); +}; + + +/** + * Update a table cell or row - this method will accept either a single value to + * update the cell with, an array of values with one element for each column or + * an object in the same format as the original data source. The function is + * self-referencing in order to make the multi column updates easier. + * @param {object|array|string} mData Data to update the cell/row with + * @param {node|int} mRow TR element you want to update or the aoData index + * @param {int} [iColumn] The column to update (not used of mData is an array or object) + * @param {bool} [bRedraw=true] Redraw the table or not + * @param {bool} [bAction=true] Perform predraw actions or not + * @returns {int} 0 on success, 1 on error + * @dtopt API + * + * @example + * $(document).ready(function() { + * var oTable = $('#example').dataTable(); + * oTable.fnUpdate( 'Example update', 0, 0 ); // Single cell + * oTable.fnUpdate( ['a', 'b', 'c', 'd', 'e'], 1, 0 ); // Row + * } ); + */ +this.fnUpdate = function( mData, mRow, iColumn, bRedraw, bAction ) +{ + var oSettings = _fnSettingsFromNode( this[DataTable.ext.iApiIndex] ); + var iVisibleColumn, i, iLen, sDisplay; + var iRow = (typeof mRow === 'object') ? + _fnNodeToDataIndex(oSettings, mRow) : mRow; + + if ( oSettings.__fnUpdateDeep === undefined && $.isArray(mData) && typeof mData === 'object' ) + { + /* Array update - update the whole row */ + oSettings.aoData[iRow]._aData = mData.slice(); + + /* Flag to the function that we are recursing */ + oSettings.__fnUpdateDeep = true; + for ( i=0 ; i<oSettings.aoColumns.length ; i++ ) + { + this.fnUpdate( _fnGetCellData( oSettings, iRow, i ), iRow, i, false, false ); + } + oSettings.__fnUpdateDeep = undefined; + } + else if ( oSettings.__fnUpdateDeep === undefined && mData !== null && typeof mData === 'object' ) + { + /* Object update - update the whole row - assume the developer gets the object right */ + oSettings.aoData[iRow]._aData = $.extend( true, {}, mData ); + + oSettings.__fnUpdateDeep = true; + for ( i=0 ; i<oSettings.aoColumns.length ; i++ ) + { + this.fnUpdate( _fnGetCellData( oSettings, iRow, i ), iRow, i, false, false ); + } + oSettings.__fnUpdateDeep = undefined; + } + else + { + /* Individual cell update */ + _fnSetCellData( oSettings, iRow, iColumn, mData ); + sDisplay = _fnGetCellData( oSettings, iRow, iColumn, 'display' ); + + var oCol = oSettings.aoColumns[iColumn]; + if ( oCol.fnRender !== null ) + { + sDisplay = _fnRender( oSettings, iRow, iColumn ); + if ( oCol.bUseRendered ) + { + _fnSetCellData( oSettings, iRow, iColumn, sDisplay ); + } + } + + if ( oSettings.aoData[iRow].nTr !== null ) + { + /* Do the actual HTML update */ + _fnGetTdNodes( oSettings, iRow )[iColumn].innerHTML = sDisplay; + } + } + + /* Modify the search index for this row (strictly this is likely not needed, since fnReDraw + * will rebuild the search array - however, the redraw might be disabled by the user) + */ + var iDisplayIndex = $.inArray( iRow, oSettings.aiDisplay ); + oSettings.asDataSearch[iDisplayIndex] = _fnBuildSearchRow( oSettings, + _fnGetRowData( oSettings, iRow, 'filter' ) ); + + /* Perform pre-draw actions */ + if ( bAction === undefined || bAction ) + { + _fnAdjustColumnSizing( oSettings ); + } + + /* Redraw the table */ + if ( bRedraw === undefined || bRedraw ) + { + _fnReDraw( oSettings ); + } + return 0; +}; + + +/** + * Provide a common method for plug-ins to check the version of DataTables being used, in order + * to ensure compatibility. + * @param {string} sVersion Version string to check for, in the format "X.Y.Z". Note that the + * formats "X" and "X.Y" are also acceptable. + * @returns {boolean} true if this version of DataTables is greater or equal to the required + * version, or false if this version of DataTales is not suitable + * @method + * @dtopt API + * + * @example + * $(document).ready(function() { + * var oTable = $('#example').dataTable(); + * alert( oTable.fnVersionCheck( '1.9.0' ) ); + * } ); + */ +this.fnVersionCheck = DataTable.ext.fnVersionCheck; + diff --git a/src/warden-server/contrib/wardenweb/datatables/media/src/core/core.ajax.js b/src/warden-server/contrib/wardenweb/datatables/media/src/core/core.ajax.js new file mode 100644 index 0000000..687b8dc --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/src/core/core.ajax.js @@ -0,0 +1,181 @@ + + +/** + * Update the table using an Ajax call + * @param {object} oSettings dataTables settings object + * @returns {boolean} Block the table drawing or not + * @memberof DataTable#oApi + */ +function _fnAjaxUpdate( oSettings ) +{ + if ( oSettings.bAjaxDataGet ) + { + oSettings.iDraw++; + _fnProcessingDisplay( oSettings, true ); + var iColumns = oSettings.aoColumns.length; + var aoData = _fnAjaxParameters( oSettings ); + _fnServerParams( oSettings, aoData ); + + oSettings.fnServerData.call( oSettings.oInstance, oSettings.sAjaxSource, aoData, + function(json) { + _fnAjaxUpdateDraw( oSettings, json ); + }, oSettings ); + return false; + } + else + { + return true; + } +} + + +/** + * Build up the parameters in an object needed for a server-side processing request + * @param {object} oSettings dataTables settings object + * @returns {bool} block the table drawing or not + * @memberof DataTable#oApi + */ +function _fnAjaxParameters( oSettings ) +{ + var iColumns = oSettings.aoColumns.length; + var aoData = [], mDataProp; + var i; + + aoData.push( { "name": "sEcho", "value": oSettings.iDraw } ); + aoData.push( { "name": "iColumns", "value": iColumns } ); + aoData.push( { "name": "sColumns", "value": _fnColumnOrdering(oSettings) } ); + aoData.push( { "name": "iDisplayStart", "value": oSettings._iDisplayStart } ); + aoData.push( { "name": "iDisplayLength", "value": oSettings.oFeatures.bPaginate !== false ? + oSettings._iDisplayLength : -1 } ); + + for ( i=0 ; i<iColumns ; i++ ) + { + mDataProp = oSettings.aoColumns[i].mDataProp; + aoData.push( { "name": "mDataProp_"+i, "value": typeof(mDataProp)==="function" ? 'function' : mDataProp } ); + } + + /* Filtering */ + if ( oSettings.oFeatures.bFilter !== false ) + { + aoData.push( { "name": "sSearch", "value": oSettings.oPreviousSearch.sSearch } ); + aoData.push( { "name": "bRegex", "value": oSettings.oPreviousSearch.bRegex } ); + for ( i=0 ; i<iColumns ; i++ ) + { + aoData.push( { "name": "sSearch_"+i, "value": oSettings.aoPreSearchCols[i].sSearch } ); + aoData.push( { "name": "bRegex_"+i, "value": oSettings.aoPreSearchCols[i].bRegex } ); + aoData.push( { "name": "bSearchable_"+i, "value": oSettings.aoColumns[i].bSearchable } ); + } + } + + /* Sorting */ + if ( oSettings.oFeatures.bSort !== false ) + { + var iFixed = oSettings.aaSortingFixed !== null ? oSettings.aaSortingFixed.length : 0; + var iUser = oSettings.aaSorting.length; + aoData.push( { "name": "iSortingCols", "value": iFixed+iUser } ); + for ( i=0 ; i<iFixed ; i++ ) + { + aoData.push( { "name": "iSortCol_"+i, "value": oSettings.aaSortingFixed[i][0] } ); + aoData.push( { "name": "sSortDir_"+i, "value": oSettings.aaSortingFixed[i][1] } ); + } + + for ( i=0 ; i<iUser ; i++ ) + { + aoData.push( { "name": "iSortCol_"+(i+iFixed), "value": oSettings.aaSorting[i][0] } ); + aoData.push( { "name": "sSortDir_"+(i+iFixed), "value": oSettings.aaSorting[i][1] } ); + } + + for ( i=0 ; i<iColumns ; i++ ) + { + aoData.push( { "name": "bSortable_"+i, "value": oSettings.aoColumns[i].bSortable } ); + } + } + + return aoData; +} + + +/** + * Add Ajax parameters from plugins + * @param {object} oSettings dataTables settings object + * @param array {objects} aoData name/value pairs to send to the server + * @memberof DataTable#oApi + */ +function _fnServerParams( oSettings, aoData ) +{ + _fnCallbackFire( oSettings, 'aoServerParams', 'serverParams', [aoData] ); +} + + +/** + * Data the data from the server (nuking the old) and redraw the table + * @param {object} oSettings dataTables settings object + * @param {object} json json data return from the server. + * @param {string} json.sEcho Tracking flag for DataTables to match requests + * @param {int} json.iTotalRecords Number of records in the data set, not accounting for filtering + * @param {int} json.iTotalDisplayRecords Number of records in the data set, accounting for filtering + * @param {array} json.aaData The data to display on this page + * @param {string} [json.sColumns] Column ordering (sName, comma separated) + * @memberof DataTable#oApi + */ +function _fnAjaxUpdateDraw ( oSettings, json ) +{ + if ( json.sEcho !== undefined ) + { + /* Protect against old returns over-writing a new one. Possible when you get + * very fast interaction, and later queires are completed much faster + */ + if ( json.sEcho*1 < oSettings.iDraw ) + { + return; + } + else + { + oSettings.iDraw = json.sEcho * 1; + } + } + + if ( !oSettings.oScroll.bInfinite || + (oSettings.oScroll.bInfinite && (oSettings.bSorted || oSettings.bFiltered)) ) + { + _fnClearTable( oSettings ); + } + oSettings._iRecordsTotal = parseInt(json.iTotalRecords, 10); + oSettings._iRecordsDisplay = parseInt(json.iTotalDisplayRecords, 10); + + /* Determine if reordering is required */ + var sOrdering = _fnColumnOrdering(oSettings); + var bReOrder = (json.sColumns !== undefined && sOrdering !== "" && json.sColumns != sOrdering ); + var aiIndex; + if ( bReOrder ) + { + aiIndex = _fnReOrderIndex( oSettings, json.sColumns ); + } + + var aData = _fnGetObjectDataFn( oSettings.sAjaxDataProp )( json ); + for ( var i=0, iLen=aData.length ; i<iLen ; i++ ) + { + if ( bReOrder ) + { + /* If we need to re-order, then create a new array with the correct order and add it */ + var aDataSorted = []; + for ( var j=0, jLen=oSettings.aoColumns.length ; j<jLen ; j++ ) + { + aDataSorted.push( aData[i][ aiIndex[j] ] ); + } + _fnAddData( oSettings, aDataSorted ); + } + else + { + /* No re-order required, sever got it "right" - just straight add */ + _fnAddData( oSettings, aData[i] ); + } + } + oSettings.aiDisplay = oSettings.aiDisplayMaster.slice(); + + oSettings.bAjaxDataGet = false; + _fnDraw( oSettings ); + oSettings.bAjaxDataGet = true; + _fnProcessingDisplay( oSettings, false ); +} + diff --git a/src/warden-server/contrib/wardenweb/datatables/media/src/core/core.columns.js b/src/warden-server/contrib/wardenweb/datatables/media/src/core/core.columns.js new file mode 100644 index 0000000..aef8abe --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/src/core/core.columns.js @@ -0,0 +1,365 @@ + + +/** + * Add a column to the list used for the table with default values + * @param {object} oSettings dataTables settings object + * @param {node} nTh The th element for this column + * @memberof DataTable#oApi + */ +function _fnAddColumn( oSettings, nTh ) +{ + var oDefaults = DataTable.defaults.columns; + var iCol = oSettings.aoColumns.length; + var oCol = $.extend( {}, DataTable.models.oColumn, oDefaults, { + "sSortingClass": oSettings.oClasses.sSortable, + "sSortingClassJUI": oSettings.oClasses.sSortJUI, + "nTh": nTh ? nTh : document.createElement('th'), + "sTitle": oDefaults.sTitle ? oDefaults.sTitle : nTh ? nTh.innerHTML : '', + "aDataSort": oDefaults.aDataSort ? oDefaults.aDataSort : [iCol], + "mDataProp": oDefaults.mDataProp ? oDefaults.oDefaults : iCol + } ); + oSettings.aoColumns.push( oCol ); + + /* Add a column specific filter */ + if ( oSettings.aoPreSearchCols[ iCol ] === undefined || oSettings.aoPreSearchCols[ iCol ] === null ) + { + oSettings.aoPreSearchCols[ iCol ] = $.extend( {}, DataTable.models.oSearch ); + } + else + { + var oPre = oSettings.aoPreSearchCols[ iCol ]; + + /* Don't require that the user must specify bRegex, bSmart or bCaseInsensitive */ + if ( oPre.bRegex === undefined ) + { + oPre.bRegex = true; + } + + if ( oPre.bSmart === undefined ) + { + oPre.bSmart = true; + } + + if ( oPre.bCaseInsensitive === undefined ) + { + oPre.bCaseInsensitive = true; + } + } + + /* Use the column options function to initialise classes etc */ + _fnColumnOptions( oSettings, iCol, null ); +} + + +/** + * Apply options for a column + * @param {object} oSettings dataTables settings object + * @param {int} iCol column index to consider + * @param {object} oOptions object with sType, bVisible and bSearchable + * @memberof DataTable#oApi + */ +function _fnColumnOptions( oSettings, iCol, oOptions ) +{ + var oCol = oSettings.aoColumns[ iCol ]; + + /* User specified column options */ + if ( oOptions !== undefined && oOptions !== null ) + { + if ( oOptions.sType !== undefined ) + { + oCol.sType = oOptions.sType; + oCol._bAutoType = false; + } + + $.extend( oCol, oOptions ); + _fnMap( oCol, oOptions, "sWidth", "sWidthOrig" ); + + /* iDataSort to be applied (backwards compatibility), but aDataSort will take + * priority if defined + */ + if ( oOptions.iDataSort !== undefined ) + { + oCol.aDataSort = [ oOptions.iDataSort ]; + } + _fnMap( oCol, oOptions, "aDataSort" ); + } + + /* Cache the data get and set functions for speed */ + oCol.fnGetData = _fnGetObjectDataFn( oCol.mDataProp ); + oCol.fnSetData = _fnSetObjectDataFn( oCol.mDataProp ); + + /* Feature sorting overrides column specific when off */ + if ( !oSettings.oFeatures.bSort ) + { + oCol.bSortable = false; + } + + /* Check that the class assignment is correct for sorting */ + if ( !oCol.bSortable || + ($.inArray('asc', oCol.asSorting) == -1 && $.inArray('desc', oCol.asSorting) == -1) ) + { + oCol.sSortingClass = oSettings.oClasses.sSortableNone; + oCol.sSortingClassJUI = ""; + } + else if ( oCol.bSortable || + ($.inArray('asc', oCol.asSorting) == -1 && $.inArray('desc', oCol.asSorting) == -1) ) + { + oCol.sSortingClass = oSettings.oClasses.sSortable; + oCol.sSortingClassJUI = oSettings.oClasses.sSortJUI; + } + else if ( $.inArray('asc', oCol.asSorting) != -1 && $.inArray('desc', oCol.asSorting) == -1 ) + { + oCol.sSortingClass = oSettings.oClasses.sSortableAsc; + oCol.sSortingClassJUI = oSettings.oClasses.sSortJUIAscAllowed; + } + else if ( $.inArray('asc', oCol.asSorting) == -1 && $.inArray('desc', oCol.asSorting) != -1 ) + { + oCol.sSortingClass = oSettings.oClasses.sSortableDesc; + oCol.sSortingClassJUI = oSettings.oClasses.sSortJUIDescAllowed; + } +} + + +/** + * Adjust the table column widths for new data. Note: you would probably want to + * do a redraw after calling this function! + * @param {object} oSettings dataTables settings object + * @memberof DataTable#oApi + */ +function _fnAdjustColumnSizing ( oSettings ) +{ + /* Not interested in doing column width calculation if autowidth is disabled */ + if ( oSettings.oFeatures.bAutoWidth === false ) + { + return false; + } + + _fnCalculateColumnWidths( oSettings ); + for ( var i=0 , iLen=oSettings.aoColumns.length ; i<iLen ; i++ ) + { + oSettings.aoColumns[i].nTh.style.width = oSettings.aoColumns[i].sWidth; + } +} + + +/** + * Covert the index of a visible column to the index in the data array (take account + * of hidden columns) + * @param {object} oSettings dataTables settings object + * @param {int} iMatch Visible column index to lookup + * @returns {int} i the data index + * @memberof DataTable#oApi + */ +function _fnVisibleToColumnIndex( oSettings, iMatch ) +{ + var iColumn = -1; + + for ( var i=0 ; i<oSettings.aoColumns.length ; i++ ) + { + if ( oSettings.aoColumns[i].bVisible === true ) + { + iColumn++; + } + + if ( iColumn == iMatch ) + { + return i; + } + } + + return null; +} + + +/** + * Covert the index of an index in the data array and convert it to the visible + * column index (take account of hidden columns) + * @param {int} iMatch Column index to lookup + * @param {object} oSettings dataTables settings object + * @returns {int} i the data index + * @memberof DataTable#oApi + */ +function _fnColumnIndexToVisible( oSettings, iMatch ) +{ + var iVisible = -1; + for ( var i=0 ; i<oSettings.aoColumns.length ; i++ ) + { + if ( oSettings.aoColumns[i].bVisible === true ) + { + iVisible++; + } + + if ( i == iMatch ) + { + return oSettings.aoColumns[i].bVisible === true ? iVisible : null; + } + } + + return null; +} + + +/** + * Get the number of visible columns + * @returns {int} i the number of visible columns + * @param {object} oS dataTables settings object + * @memberof DataTable#oApi + */ +function _fnVisbleColumns( oS ) +{ + var iVis = 0; + for ( var i=0 ; i<oS.aoColumns.length ; i++ ) + { + if ( oS.aoColumns[i].bVisible === true ) + { + iVis++; + } + } + return iVis; +} + + +/** + * Get the sort type based on an input string + * @param {string} sData data we wish to know the type of + * @returns {string} type (defaults to 'string' if no type can be detected) + * @memberof DataTable#oApi + */ +function _fnDetectType( sData ) +{ + var aTypes = DataTable.ext.aTypes; + var iLen = aTypes.length; + + for ( var i=0 ; i<iLen ; i++ ) + { + var sType = aTypes[i]( sData ); + if ( sType !== null ) + { + return sType; + } + } + + return 'string'; +} + + +/** + * Figure out how to reorder a display list + * @param {object} oSettings dataTables settings object + * @returns array {int} aiReturn index list for reordering + * @memberof DataTable#oApi + */ +function _fnReOrderIndex ( oSettings, sColumns ) +{ + var aColumns = sColumns.split(','); + var aiReturn = []; + + for ( var i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ ) + { + for ( var j=0 ; j<iLen ; j++ ) + { + if ( oSettings.aoColumns[i].sName == aColumns[j] ) + { + aiReturn.push( j ); + break; + } + } + } + + return aiReturn; +} + + +/** + * Get the column ordering that DataTables expects + * @param {object} oSettings dataTables settings object + * @returns {string} comma separated list of names + * @memberof DataTable#oApi + */ +function _fnColumnOrdering ( oSettings ) +{ + var sNames = ''; + for ( var i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ ) + { + sNames += oSettings.aoColumns[i].sName+','; + } + if ( sNames.length == iLen ) + { + return ""; + } + return sNames.slice(0, -1); +} + + +/** + * Take the column definitions and static columns arrays and calculate how + * they relate to column indexes. The callback function will then apply the + * definition found for a column to a suitable configuration object. + * @param {object} oSettings dataTables settings object + * @param {array} aoColDefs The aoColumnDefs array that is to be applied + * @param {array} aoCols The aoColumns array that defines columns individually + * @param {function} fn Callback function - takes two parameters, the calculated + * column index and the definition for that column. + * @memberof DataTable#oApi + */ +function _fnApplyColumnDefs( oSettings, aoColDefs, aoCols, fn ) +{ + var i, iLen, j, jLen, k, kLen; + + // Column definitions with aTargets + if ( aoColDefs ) + { + /* Loop over the definitions array - loop in reverse so first instance has priority */ + for ( i=aoColDefs.length-1 ; i>=0 ; i-- ) + { + /* Each definition can target multiple columns, as it is an array */ + var aTargets = aoColDefs[i].aTargets; + if ( !$.isArray( aTargets ) ) + { + _fnLog( oSettings, 1, 'aTargets must be an array of targets, not a '+(typeof aTargets) ); + } + + for ( j=0, jLen=aTargets.length ; j<jLen ; j++ ) + { + if ( typeof aTargets[j] === 'number' && aTargets[j] >= 0 ) + { + /* Add columns that we don't yet know about */ + while( oSettings.aoColumns.length <= aTargets[j] ) + { + _fnAddColumn( oSettings ); + } + + /* Integer, basic index */ + fn( aTargets[j], aoColDefs[i] ); + } + else if ( typeof aTargets[j] === 'number' && aTargets[j] < 0 ) + { + /* Negative integer, right to left column counting */ + fn( oSettings.aoColumns.length+aTargets[j], aoColDefs[i] ); + } + else if ( typeof aTargets[j] === 'string' ) + { + /* Class name matching on TH element */ + for ( k=0, kLen=oSettings.aoColumns.length ; k<kLen ; k++ ) + { + if ( aTargets[j] == "_all" || + $(oSettings.aoColumns[k].nTh).hasClass( aTargets[j] ) ) + { + fn( k, aoColDefs[i] ); + } + } + } + } + } + } + + // Statically defined columns array + if ( aoCols ) + { + for ( i=0, iLen=aoCols.length ; i<iLen ; i++ ) + { + fn( i, aoCols[i] ); + } + } +} + diff --git a/src/warden-server/contrib/wardenweb/datatables/media/src/core/core.constructor.js b/src/warden-server/contrib/wardenweb/datatables/media/src/core/core.constructor.js new file mode 100644 index 0000000..1100d04 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/src/core/core.constructor.js @@ -0,0 +1,417 @@ + +var i=0, iLen, j, jLen, k, kLen; +var sId = this.getAttribute( 'id' ); +var bInitHandedOff = false; +var bUsePassedData = false; + + +/* Sanity check */ +if ( this.nodeName.toLowerCase() != 'table' ) +{ + _fnLog( null, 0, "Attempted to initialise DataTables on a node which is not a "+ + "table: "+this.nodeName ); + return; +} + +/* Check to see if we are re-initialising a table */ +for ( i=0, iLen=DataTable.settings.length ; i<iLen ; i++ ) +{ + /* Base check on table node */ + if ( DataTable.settings[i].nTable == this ) + { + if ( oInit === undefined || oInit.bRetrieve ) + { + return DataTable.settings[i].oInstance; + } + else if ( oInit.bDestroy ) + { + DataTable.settings[i].oInstance.fnDestroy(); + break; + } + else + { + _fnLog( DataTable.settings[i], 0, "Cannot reinitialise DataTable.\n\n"+ + "To retrieve the DataTables object for this table, pass no arguments or see "+ + "the docs for bRetrieve and bDestroy" ); + return; + } + } + + /* If the element we are initialising has the same ID as a table which was previously + * initialised, but the table nodes don't match (from before) then we destroy the old + * instance by simply deleting it. This is under the assumption that the table has been + * destroyed by other methods. Anyone using non-id selectors will need to do this manually + */ + if ( DataTable.settings[i].sTableId == this.id ) + { + DataTable.settings.splice( i, 1 ); + break; + } +} + +/* Ensure the table has an ID - required for accessibility */ +if ( sId === null ) +{ + sId = "DataTables_Table_"+(DataTable.ext._oExternConfig.iNextUnique++); + this.id = sId; +} + +/* Create the settings object for this table and set some of the default parameters */ +var oSettings = $.extend( true, {}, DataTable.models.oSettings, { + "nTable": this, + "oApi": _that.oApi, + "oInit": oInit, + "sDestroyWidth": $(this).width(), + "sInstance": sId, + "sTableId": sId +} ); +DataTable.settings.push( oSettings ); + +// Need to add the instance after the instance after the settings object has been added +// to the settings array, so we can self reference the table instance if more than one +oSettings.oInstance = (_that.length===1) ? _that : $(this).dataTable(); + +/* Setting up the initialisation object */ +if ( !oInit ) +{ + oInit = {}; +} + +// Backwards compatibility, before we apply all the defaults +if ( oInit.oLanguage ) +{ + _fnLanguageCompat( oInit.oLanguage ); +} + +oInit = _fnExtend( $.extend(true, {}, DataTable.defaults), oInit ); + +// Map the initialisation options onto the settings object +_fnMap( oSettings.oFeatures, oInit, "bPaginate" ); +_fnMap( oSettings.oFeatures, oInit, "bLengthChange" ); +_fnMap( oSettings.oFeatures, oInit, "bFilter" ); +_fnMap( oSettings.oFeatures, oInit, "bSort" ); +_fnMap( oSettings.oFeatures, oInit, "bInfo" ); +_fnMap( oSettings.oFeatures, oInit, "bProcessing" ); +_fnMap( oSettings.oFeatures, oInit, "bAutoWidth" ); +_fnMap( oSettings.oFeatures, oInit, "bSortClasses" ); +_fnMap( oSettings.oFeatures, oInit, "bServerSide" ); +_fnMap( oSettings.oFeatures, oInit, "bDeferRender" ); +_fnMap( oSettings.oScroll, oInit, "sScrollX", "sX" ); +_fnMap( oSettings.oScroll, oInit, "sScrollXInner", "sXInner" ); +_fnMap( oSettings.oScroll, oInit, "sScrollY", "sY" ); +_fnMap( oSettings.oScroll, oInit, "bScrollCollapse", "bCollapse" ); +_fnMap( oSettings.oScroll, oInit, "bScrollInfinite", "bInfinite" ); +_fnMap( oSettings.oScroll, oInit, "iScrollLoadGap", "iLoadGap" ); +_fnMap( oSettings.oScroll, oInit, "bScrollAutoCss", "bAutoCss" ); +_fnMap( oSettings, oInit, "asStripClasses", "asStripeClasses" ); // legacy +_fnMap( oSettings, oInit, "asStripeClasses" ); +_fnMap( oSettings, oInit, "fnServerData" ); +_fnMap( oSettings, oInit, "fnFormatNumber" ); +_fnMap( oSettings, oInit, "sServerMethod" ); +_fnMap( oSettings, oInit, "aaSorting" ); +_fnMap( oSettings, oInit, "aaSortingFixed" ); +_fnMap( oSettings, oInit, "aLengthMenu" ); +_fnMap( oSettings, oInit, "sPaginationType" ); +_fnMap( oSettings, oInit, "sAjaxSource" ); +_fnMap( oSettings, oInit, "sAjaxDataProp" ); +_fnMap( oSettings, oInit, "iCookieDuration" ); +_fnMap( oSettings, oInit, "sCookiePrefix" ); +_fnMap( oSettings, oInit, "sDom" ); +_fnMap( oSettings, oInit, "bSortCellsTop" ); +_fnMap( oSettings, oInit, "iTabIndex" ); +_fnMap( oSettings, oInit, "oSearch", "oPreviousSearch" ); +_fnMap( oSettings, oInit, "aoSearchCols", "aoPreSearchCols" ); +_fnMap( oSettings, oInit, "iDisplayLength", "_iDisplayLength" ); +_fnMap( oSettings, oInit, "bJQueryUI", "bJUI" ); +_fnMap( oSettings, oInit, "fnCookieCallback" ); +_fnMap( oSettings, oInit, "fnStateLoad" ); +_fnMap( oSettings, oInit, "fnStateSave" ); +_fnMap( oSettings.oLanguage, oInit, "fnInfoCallback" ); + +/* Callback functions which are array driven */ +_fnCallbackReg( oSettings, 'aoDrawCallback', oInit.fnDrawCallback, 'user' ); +_fnCallbackReg( oSettings, 'aoServerParams', oInit.fnServerParams, 'user' ); +_fnCallbackReg( oSettings, 'aoStateSaveParams', oInit.fnStateSaveParams, 'user' ); +_fnCallbackReg( oSettings, 'aoStateLoadParams', oInit.fnStateLoadParams, 'user' ); +_fnCallbackReg( oSettings, 'aoStateLoaded', oInit.fnStateLoaded, 'user' ); +_fnCallbackReg( oSettings, 'aoRowCallback', oInit.fnRowCallback, 'user' ); +_fnCallbackReg( oSettings, 'aoRowCreatedCallback', oInit.fnCreatedRow, 'user' ); +_fnCallbackReg( oSettings, 'aoHeaderCallback', oInit.fnHeaderCallback, 'user' ); +_fnCallbackReg( oSettings, 'aoFooterCallback', oInit.fnFooterCallback, 'user' ); +_fnCallbackReg( oSettings, 'aoInitComplete', oInit.fnInitComplete, 'user' ); +_fnCallbackReg( oSettings, 'aoPreDrawCallback', oInit.fnPreDrawCallback, 'user' ); + +if ( oSettings.oFeatures.bServerSide && oSettings.oFeatures.bSort && + oSettings.oFeatures.bSortClasses ) +{ + /* Enable sort classes for server-side processing. Safe to do it here, since server-side + * processing must be enabled by the developer + */ + _fnCallbackReg( oSettings, 'aoDrawCallback', _fnSortingClasses, 'server_side_sort_classes' ); +} +else if ( oSettings.oFeatures.bDeferRender ) +{ + _fnCallbackReg( oSettings, 'aoDrawCallback', _fnSortingClasses, 'defer_sort_classes' ); +} + +if ( oInit.bJQueryUI ) +{ + /* Use the JUI classes object for display. You could clone the oStdClasses object if + * you want to have multiple tables with multiple independent classes + */ + $.extend( oSettings.oClasses, DataTable.ext.oJUIClasses ); + + if ( oInit.sDom === DataTable.defaults.sDom && DataTable.defaults.sDom === "lfrtip" ) + { + /* Set the DOM to use a layout suitable for jQuery UI's theming */ + oSettings.sDom = '<"H"lfr>t<"F"ip>'; + } +} +else +{ + $.extend( oSettings.oClasses, DataTable.ext.oStdClasses ); +} +$(this).addClass( oSettings.oClasses.sTable ); + +/* Calculate the scroll bar width and cache it for use later on */ +if ( oSettings.oScroll.sX !== "" || oSettings.oScroll.sY !== "" ) +{ + oSettings.oScroll.iBarWidth = _fnScrollBarWidth(); +} + +if ( oSettings.iInitDisplayStart === undefined ) +{ + /* Display start point, taking into account the save saving */ + oSettings.iInitDisplayStart = oInit.iDisplayStart; + oSettings._iDisplayStart = oInit.iDisplayStart; +} + +/* Must be done after everything which can be overridden by a cookie! */ +if ( oInit.bStateSave ) +{ + oSettings.oFeatures.bStateSave = true; + _fnLoadState( oSettings, oInit ); + _fnCallbackReg( oSettings, 'aoDrawCallback', _fnSaveState, 'state_save' ); +} + +if ( oInit.iDeferLoading !== null ) +{ + oSettings.bDeferLoading = true; + oSettings._iRecordsTotal = oInit.iDeferLoading; + oSettings._iRecordsDisplay = oInit.iDeferLoading; +} + +if ( oInit.aaData !== null ) +{ + bUsePassedData = true; +} + +/* Language definitions */ +if ( oInit.oLanguage.sUrl !== "" ) +{ + /* Get the language definitions from a file - because this Ajax call makes the language + * get async to the remainder of this function we use bInitHandedOff to indicate that + * _fnInitialise will be fired by the returned Ajax handler, rather than the constructor + */ + oSettings.oLanguage.sUrl = oInit.oLanguage.sUrl; + $.getJSON( oSettings.oLanguage.sUrl, null, function( json ) { + _fnLanguageCompat( json ); + $.extend( true, oSettings.oLanguage, oInit.oLanguage, json ); + _fnInitialise( oSettings ); + } ); + bInitHandedOff = true; +} +else +{ + $.extend( true, oSettings.oLanguage, oInit.oLanguage ); +} + + +/* + * Stripes + */ + +/* Remove row stripe classes if they are already on the table row */ +var bStripeRemove = false; +var anRows = $(this).children('tbody').children('tr'); +for ( i=0, iLen=oSettings.asStripeClasses.length ; i<iLen ; i++ ) +{ + if ( anRows.filter(":lt(2)").hasClass( oSettings.asStripeClasses[i]) ) + { + bStripeRemove = true; + break; + } +} + +if ( bStripeRemove ) +{ + /* Store the classes which we are about to remove so they can be readded on destroy */ + oSettings.asDestroyStripes = [ '', '' ]; + if ( $(anRows[0]).hasClass(oSettings.oClasses.sStripeOdd) ) + { + oSettings.asDestroyStripes[0] += oSettings.oClasses.sStripeOdd+" "; + } + if ( $(anRows[0]).hasClass(oSettings.oClasses.sStripeEven) ) + { + oSettings.asDestroyStripes[0] += oSettings.oClasses.sStripeEven; + } + if ( $(anRows[1]).hasClass(oSettings.oClasses.sStripeOdd) ) + { + oSettings.asDestroyStripes[1] += oSettings.oClasses.sStripeOdd+" "; + } + if ( $(anRows[1]).hasClass(oSettings.oClasses.sStripeEven) ) + { + oSettings.asDestroyStripes[1] += oSettings.oClasses.sStripeEven; + } + + anRows.removeClass( oSettings.asStripeClasses.join(' ') ); +} + + +/* + * Columns + * See if we should load columns automatically or use defined ones + */ +var anThs = []; +var aoColumnsInit; +var nThead = this.getElementsByTagName('thead'); +if ( nThead.length !== 0 ) +{ + _fnDetectHeader( oSettings.aoHeader, nThead[0] ); + anThs = _fnGetUniqueThs( oSettings ); +} + +/* If not given a column array, generate one with nulls */ +if ( oInit.aoColumns === null ) +{ + aoColumnsInit = []; + for ( i=0, iLen=anThs.length ; i<iLen ; i++ ) + { + aoColumnsInit.push( null ); + } +} +else +{ + aoColumnsInit = oInit.aoColumns; +} + +/* Add the columns */ +for ( i=0, iLen=aoColumnsInit.length ; i<iLen ; i++ ) +{ + /* Short cut - use the loop to check if we have column visibility state to restore */ + if ( oInit.saved_aoColumns !== undefined && oInit.saved_aoColumns.length == iLen ) + { + if ( aoColumnsInit[i] === null ) + { + aoColumnsInit[i] = {}; + } + aoColumnsInit[i].bVisible = oInit.saved_aoColumns[i].bVisible; + } + + _fnAddColumn( oSettings, anThs ? anThs[i] : null ); +} + +/* Apply the column definitions */ +_fnApplyColumnDefs( oSettings, oInit.aoColumnDefs, aoColumnsInit, function (iCol, oDef) { + _fnColumnOptions( oSettings, iCol, oDef ); +} ); + + +/* + * Sorting + * Check the aaSorting array + */ +for ( i=0, iLen=oSettings.aaSorting.length ; i<iLen ; i++ ) +{ + if ( oSettings.aaSorting[i][0] >= oSettings.aoColumns.length ) + { + oSettings.aaSorting[i][0] = 0; + } + var oColumn = oSettings.aoColumns[ oSettings.aaSorting[i][0] ]; + + /* Add a default sorting index */ + if ( oSettings.aaSorting[i][2] === undefined ) + { + oSettings.aaSorting[i][2] = 0; + } + + /* If aaSorting is not defined, then we use the first indicator in asSorting */ + if ( oInit.aaSorting === undefined && oSettings.saved_aaSorting === undefined ) + { + oSettings.aaSorting[i][1] = oColumn.asSorting[0]; + } + + /* Set the current sorting index based on aoColumns.asSorting */ + for ( j=0, jLen=oColumn.asSorting.length ; j<jLen ; j++ ) + { + if ( oSettings.aaSorting[i][1] == oColumn.asSorting[j] ) + { + oSettings.aaSorting[i][2] = j; + break; + } + } +} + +/* Do a first pass on the sorting classes (allows any size changes to be taken into + * account, and also will apply sorting disabled classes if disabled + */ +_fnSortingClasses( oSettings ); + + +/* + * Final init + * Cache the header, body and footer as required, creating them if needed + */ +var thead = $(this).children('thead'); +if ( thead.length === 0 ) +{ + thead = [ document.createElement( 'thead' ) ]; + this.appendChild( thead[0] ); +} +oSettings.nTHead = thead[0]; + +var tbody = $(this).children('tbody'); +if ( tbody.length === 0 ) +{ + tbody = [ document.createElement( 'tbody' ) ]; + this.appendChild( tbody[0] ); +} +oSettings.nTBody = tbody[0]; +oSettings.nTBody.setAttribute( "role", "alert" ); +oSettings.nTBody.setAttribute( "aria-live", "polite" ); +oSettings.nTBody.setAttribute( "aria-relevant", "all" ); + +var tfoot = $(this).children('tfoot'); +if ( tfoot.length > 0 ) +{ + oSettings.nTFoot = tfoot[0]; + _fnDetectHeader( oSettings.aoFooter, oSettings.nTFoot ); +} + +/* Check if there is data passing into the constructor */ +if ( bUsePassedData ) +{ + for ( i=0 ; i<oInit.aaData.length ; i++ ) + { + _fnAddData( oSettings, oInit.aaData[ i ] ); + } +} +else +{ + /* Grab the data from the page */ + _fnGatherData( oSettings ); +} + +/* Copy the data index array */ +oSettings.aiDisplay = oSettings.aiDisplayMaster.slice(); + +/* Initialisation complete - table can be drawn */ +oSettings.bInitialised = true; + +/* Check if we need to initialise the table (it might not have been handed off to the + * language processor) + */ +if ( bInitHandedOff === false ) +{ + _fnInitialise( oSettings ); +} diff --git a/src/warden-server/contrib/wardenweb/datatables/media/src/core/core.data.js b/src/warden-server/contrib/wardenweb/datatables/media/src/core/core.data.js new file mode 100644 index 0000000..52e86bf --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/src/core/core.data.js @@ -0,0 +1,536 @@ + + +/** + * Add a data array to the table, creating DOM node etc. This is the parallel to + * _fnGatherData, but for adding rows from a Javascript source, rather than a + * DOM source. + * @param {object} oSettings dataTables settings object + * @param {array} aData data array to be added + * @returns {int} >=0 if successful (index of new aoData entry), -1 if failed + * @memberof DataTable#oApi + */ +function _fnAddData ( oSettings, aDataSupplied ) +{ + var oCol; + + /* Take an independent copy of the data source so we can bash it about as we wish */ + var aDataIn = ($.isArray(aDataSupplied)) ? + aDataSupplied.slice() : + $.extend( true, {}, aDataSupplied ); + + /* Create the object for storing information about this new row */ + var iRow = oSettings.aoData.length; + var oData = $.extend( true, {}, DataTable.models.oRow, { + "_aData": aDataIn + } ); + oSettings.aoData.push( oData ); + + /* Create the cells */ + var nTd, sThisType; + for ( var i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ ) + { + oCol = oSettings.aoColumns[i]; + + /* Use rendered data for filtering/sorting */ + if ( typeof oCol.fnRender === 'function' && oCol.bUseRendered && oCol.mDataProp !== null ) + { + _fnSetCellData( oSettings, iRow, i, _fnRender(oSettings, iRow, i) ); + } + + /* See if we should auto-detect the column type */ + if ( oCol._bAutoType && oCol.sType != 'string' ) + { + /* Attempt to auto detect the type - same as _fnGatherData() */ + var sVarType = _fnGetCellData( oSettings, iRow, i, 'type' ); + if ( sVarType !== null && sVarType !== '' ) + { + sThisType = _fnDetectType( sVarType ); + if ( oCol.sType === null ) + { + oCol.sType = sThisType; + } + else if ( oCol.sType != sThisType && oCol.sType != "html" ) + { + /* String is always the 'fallback' option */ + oCol.sType = 'string'; + } + } + } + } + + /* Add to the display array */ + oSettings.aiDisplayMaster.push( iRow ); + + /* Create the DOM imformation */ + if ( !oSettings.oFeatures.bDeferRender ) + { + _fnCreateTr( oSettings, iRow ); + } + + return iRow; +} + + +/** + * Read in the data from the target table from the DOM + * @param {object} oSettings dataTables settings object + * @memberof DataTable#oApi + */ +function _fnGatherData( oSettings ) +{ + var iLoop, i, iLen, j, jLen, jInner, + nTds, nTrs, nTd, aLocalData, iThisIndex, + iRow, iRows, iColumn, iColumns, sNodeName, + oCol, oData; + + /* + * Process by row first + * Add the data object for the whole table - storing the tr node. Note - no point in getting + * DOM based data if we are going to go and replace it with Ajax source data. + */ + if ( oSettings.bDeferLoading || oSettings.sAjaxSource === null ) + { + nTrs = oSettings.nTBody.childNodes; + for ( i=0, iLen=nTrs.length ; i<iLen ; i++ ) + { + if ( nTrs[i].nodeName.toUpperCase() == "TR" ) + { + iThisIndex = oSettings.aoData.length; + nTrs[i]._DT_RowIndex = iThisIndex; + oSettings.aoData.push( $.extend( true, {}, DataTable.models.oRow, { + "nTr": nTrs[i] + } ) ); + + oSettings.aiDisplayMaster.push( iThisIndex ); + nTds = nTrs[i].childNodes; + jInner = 0; + + for ( j=0, jLen=nTds.length ; j<jLen ; j++ ) + { + sNodeName = nTds[j].nodeName.toUpperCase(); + if ( sNodeName == "TD" || sNodeName == "TH" ) + { + _fnSetCellData( oSettings, iThisIndex, jInner, $.trim(nTds[j].innerHTML) ); + jInner++; + } + } + } + } + } + + /* Gather in the TD elements of the Table - note that this is basically the same as + * fnGetTdNodes, but that function takes account of hidden columns, which we haven't yet + * setup! + */ + nTrs = _fnGetTrNodes( oSettings ); + nTds = []; + for ( i=0, iLen=nTrs.length ; i<iLen ; i++ ) + { + for ( j=0, jLen=nTrs[i].childNodes.length ; j<jLen ; j++ ) + { + nTd = nTrs[i].childNodes[j]; + sNodeName = nTd.nodeName.toUpperCase(); + if ( sNodeName == "TD" || sNodeName == "TH" ) + { + nTds.push( nTd ); + } + } + } + + /* Now process by column */ + for ( iColumn=0, iColumns=oSettings.aoColumns.length ; iColumn<iColumns ; iColumn++ ) + { + oCol = oSettings.aoColumns[iColumn]; + + /* Get the title of the column - unless there is a user set one */ + if ( oCol.sTitle === null ) + { + oCol.sTitle = oCol.nTh.innerHTML; + } + + var + bAutoType = oCol._bAutoType, + bRender = typeof oCol.fnRender === 'function', + bClass = oCol.sClass !== null, + bVisible = oCol.bVisible, + nCell, sThisType, sRendered, sValType; + + /* A single loop to rule them all (and be more efficient) */ + if ( bAutoType || bRender || bClass || !bVisible ) + { + for ( iRow=0, iRows=oSettings.aoData.length ; iRow<iRows ; iRow++ ) + { + oData = oSettings.aoData[iRow]; + nCell = nTds[ (iRow*iColumns) + iColumn ]; + + /* Type detection */ + if ( bAutoType && oCol.sType != 'string' ) + { + sValType = _fnGetCellData( oSettings, iRow, iColumn, 'type' ); + if ( sValType !== '' ) + { + sThisType = _fnDetectType( sValType ); + if ( oCol.sType === null ) + { + oCol.sType = sThisType; + } + else if ( oCol.sType != sThisType && + oCol.sType != "html" ) + { + /* String is always the 'fallback' option */ + oCol.sType = 'string'; + } + } + } + + if ( typeof oCol.mDataProp === 'function' ) + { + nCell.innerHTML = _fnGetCellData( oSettings, iRow, iColumn, 'display' ); + } + + /* Rendering */ + if ( bRender ) + { + sRendered = _fnRender( oSettings, iRow, iColumn ); + nCell.innerHTML = sRendered; + if ( oCol.bUseRendered ) + { + /* Use the rendered data for filtering/sorting */ + _fnSetCellData( oSettings, iRow, iColumn, sRendered ); + } + } + + /* Classes */ + if ( bClass ) + { + nCell.className += ' '+oCol.sClass; + } + + /* Column visability */ + if ( !bVisible ) + { + oData._anHidden[iColumn] = nCell; + nCell.parentNode.removeChild( nCell ); + } + else + { + oData._anHidden[iColumn] = null; + } + + if ( oCol.fnCreatedCell ) + { + oCol.fnCreatedCell.call( oSettings.oInstance, + nCell, _fnGetCellData( oSettings, iRow, iColumn, 'display' ), oData._aData, iRow, iColumn + ); + } + } + } + } + + /* Row created callbacks */ + if ( oSettings.aoRowCreatedCallback.length !== 0 ) + { + for ( i=0, iLen=oSettings.aoData.length ; i<iLen ; i++ ) + { + oData = oSettings.aoData[i]; + _fnCallbackFire( oSettings, 'aoRowCreatedCallback', null, [oData.nTr, oData._aData, i] ); + } + } +} + + +/** + * Take a TR element and convert it to an index in aoData + * @param {object} oSettings dataTables settings object + * @param {node} n the TR element to find + * @returns {int} index if the node is found, null if not + * @memberof DataTable#oApi + */ +function _fnNodeToDataIndex( oSettings, n ) +{ + return (n._DT_RowIndex!==undefined) ? n._DT_RowIndex : null; +} + + +/** + * Take a TD element and convert it into a column data index (not the visible index) + * @param {object} oSettings dataTables settings object + * @param {int} iRow The row number the TD/TH can be found in + * @param {node} n The TD/TH element to find + * @returns {int} index if the node is found, -1 if not + * @memberof DataTable#oApi + */ +function _fnNodeToColumnIndex( oSettings, iRow, n ) +{ + var anCells = _fnGetTdNodes( oSettings, iRow ); + + for ( var i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ ) + { + if ( anCells[i] === n ) + { + return i; + } + } + return -1; +} + + +/** + * Get an array of data for a given row from the internal data cache + * @param {object} oSettings dataTables settings object + * @param {int} iRow aoData row id + * @param {string} sSpecific data get type ('type' 'filter' 'sort') + * @returns {array} Data array + * @memberof DataTable#oApi + */ +function _fnGetRowData( oSettings, iRow, sSpecific ) +{ + var out = []; + for ( var i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ ) + { + out.push( _fnGetCellData( oSettings, iRow, i, sSpecific ) ); + } + return out; +} + + +/** + * Get the data for a given cell from the internal cache, taking into account data mapping + * @param {object} oSettings dataTables settings object + * @param {int} iRow aoData row id + * @param {int} iCol Column index + * @param {string} sSpecific data get type ('display', 'type' 'filter' 'sort') + * @returns {*} Cell data + * @memberof DataTable#oApi + */ +function _fnGetCellData( oSettings, iRow, iCol, sSpecific ) +{ + var sData; + var oCol = oSettings.aoColumns[iCol]; + var oData = oSettings.aoData[iRow]._aData; + + if ( (sData=oCol.fnGetData( oData, sSpecific )) === undefined ) + { + if ( oSettings.iDrawError != oSettings.iDraw && oCol.sDefaultContent === null ) + { + _fnLog( oSettings, 0, "Requested unknown parameter '"+oCol.mDataProp+ + "' from the data source for row "+iRow ); + oSettings.iDrawError = oSettings.iDraw; + } + return oCol.sDefaultContent; + } + + /* When the data source is null, we can use default column data */ + if ( sData === null && oCol.sDefaultContent !== null ) + { + sData = oCol.sDefaultContent; + } + else if ( typeof sData === 'function' ) + { + /* If the data source is a function, then we run it and use the return */ + return sData(); + } + + if ( sSpecific == 'display' && sData === null ) + { + return ''; + } + return sData; +} + + +/** + * Set the value for a specific cell, into the internal data cache + * @param {object} oSettings dataTables settings object + * @param {int} iRow aoData row id + * @param {int} iCol Column index + * @param {*} val Value to set + * @memberof DataTable#oApi + */ +function _fnSetCellData( oSettings, iRow, iCol, val ) +{ + var oCol = oSettings.aoColumns[iCol]; + var oData = oSettings.aoData[iRow]._aData; + + oCol.fnSetData( oData, val ); +} + + +/** + * Return a function that can be used to get data from a source object, taking + * into account the ability to use nested objects as a source + * @param {string|int|function} mSource The data source for the object + * @returns {function} Data get function + * @memberof DataTable#oApi + */ +function _fnGetObjectDataFn( mSource ) +{ + if ( mSource === null ) + { + /* Give an empty string for rendering / sorting etc */ + return function (data, type) { + return null; + }; + } + else if ( typeof mSource === 'function' ) + { + return function (data, type) { + return mSource( data, type ); + }; + } + else if ( typeof mSource === 'string' && mSource.indexOf('.') != -1 ) + { + /* If there is a . in the source string then the data source is in a + * nested object so we loop over the data for each level to get the next + * level down. On each loop we test for undefined, and if found immediatly + * return. This allows entire objects to be missing and sDefaultContent to + * be used if defined, rather than throwing an error + */ + var a = mSource.split('.'); + return function (data, type) { + for ( var i=0, iLen=a.length ; i<iLen ; i++ ) + { + data = data[ a[i] ]; + if ( data === undefined ) + { + return undefined; + } + } + return data; + }; + } + else + { + /* Array or flat object mapping */ + return function (data, type) { + return data[mSource]; + }; + } +} + + +/** + * Return a function that can be used to set data from a source object, taking + * into account the ability to use nested objects as a source + * @param {string|int|function} mSource The data source for the object + * @returns {function} Data set function + * @memberof DataTable#oApi + */ +function _fnSetObjectDataFn( mSource ) +{ + if ( mSource === null ) + { + /* Nothing to do when the data source is null */ + return function (data, val) {}; + } + else if ( typeof mSource === 'function' ) + { + return function (data, val) { + mSource( data, 'set', val ); + }; + } + else if ( typeof mSource === 'string' && mSource.indexOf('.') != -1 ) + { + /* Like the get, we need to get data from a nested object. */ + var a = mSource.split('.'); + return function (data, val) { + for ( var i=0, iLen=a.length-1 ; i<iLen ; i++ ) + { + data = data[ a[i] ]; + } + data[ a[a.length-1] ] = val; + }; + } + else + { + /* Array or flat object mapping */ + return function (data, val) { + data[mSource] = val; + }; + } +} + + +/** + * Return an array with the full table data + * @param {object} oSettings dataTables settings object + * @returns array {array} aData Master data array + * @memberof DataTable#oApi + */ +function _fnGetDataMaster ( oSettings ) +{ + var aData = []; + var iLen = oSettings.aoData.length; + for ( var i=0 ; i<iLen; i++ ) + { + aData.push( oSettings.aoData[i]._aData ); + } + return aData; +} + + +/** + * Nuke the table + * @param {object} oSettings dataTables settings object + * @memberof DataTable#oApi + */ +function _fnClearTable( oSettings ) +{ + oSettings.aoData.splice( 0, oSettings.aoData.length ); + oSettings.aiDisplayMaster.splice( 0, oSettings.aiDisplayMaster.length ); + oSettings.aiDisplay.splice( 0, oSettings.aiDisplay.length ); + _fnCalculateEnd( oSettings ); +} + + + /** + * Take an array of integers (index array) and remove a target integer (value - not + * the key!) + * @param {array} a Index array to target + * @param {int} iTarget value to find + * @memberof DataTable#oApi + */ +function _fnDeleteIndex( a, iTarget ) +{ + var iTargetIndex = -1; + + for ( var i=0, iLen=a.length ; i<iLen ; i++ ) + { + if ( a[i] == iTarget ) + { + iTargetIndex = i; + } + else if ( a[i] > iTarget ) + { + a[i]--; + } + } + + if ( iTargetIndex != -1 ) + { + a.splice( iTargetIndex, 1 ); + } +} + + + /** + * Call the developer defined fnRender function for a given cell (row/column) with + * the required parameters and return the result. + * @param {object} oSettings dataTables settings object + * @param {int} iRow aoData index for the row + * @param {int} iCol aoColumns index for the column + * @returns {*} Return of the developer's fnRender function + * @memberof DataTable#oApi + */ +function _fnRender( oSettings, iRow, iCol ) +{ + var oCol = oSettings.aoColumns[iCol]; + + return oCol.fnRender( { + "iDataRow": iRow, + "iDataColumn": iCol, + "oSettings": oSettings, + "aData": oSettings.aoData[iRow]._aData, + "mDataProp": oCol.mDataProp + }, _fnGetCellData(oSettings, iRow, iCol, 'display') ); +} diff --git a/src/warden-server/contrib/wardenweb/datatables/media/src/core/core.draw.js b/src/warden-server/contrib/wardenweb/datatables/media/src/core/core.draw.js new file mode 100644 index 0000000..568cb15 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/src/core/core.draw.js @@ -0,0 +1,788 @@ + + +/** + * Create a new TR element (and it's TD children) for a row + * @param {object} oSettings dataTables settings object + * @param {int} iRow Row to consider + * @memberof DataTable#oApi + */ +function _fnCreateTr ( oSettings, iRow ) +{ + var oData = oSettings.aoData[iRow]; + var nTd; + + if ( oData.nTr === null ) + { + oData.nTr = document.createElement('tr'); + + /* Use a private property on the node to allow reserve mapping from the node + * to the aoData array for fast look up + */ + oData.nTr._DT_RowIndex = iRow; + + /* Special parameters can be given by the data source to be used on the row */ + if ( oData._aData.DT_RowId ) + { + oData.nTr.id = oData._aData.DT_RowId; + } + + if ( oData._aData.DT_RowClass ) + { + $(oData.nTr).addClass( oData._aData.DT_RowClass ); + } + + /* Process each column */ + for ( var i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ ) + { + var oCol = oSettings.aoColumns[i]; + nTd = document.createElement('td'); + + /* Render if needed - if bUseRendered is true then we already have the rendered + * value in the data source - so can just use that + */ + nTd.innerHTML = (typeof oCol.fnRender === 'function' && (!oCol.bUseRendered || oCol.mDataProp === null)) ? + _fnRender( oSettings, iRow, i ) : + _fnGetCellData( oSettings, iRow, i, 'display' ); + + /* Add user defined class */ + if ( oCol.sClass !== null ) + { + nTd.className = oCol.sClass; + } + + if ( oCol.bVisible ) + { + oData.nTr.appendChild( nTd ); + oData._anHidden[i] = null; + } + else + { + oData._anHidden[i] = nTd; + } + + if ( oCol.fnCreatedCell ) + { + oCol.fnCreatedCell.call( oSettings.oInstance, + nTd, _fnGetCellData( oSettings, iRow, i, 'display' ), oData._aData, iRow, i + ); + } + } + + _fnCallbackFire( oSettings, 'aoRowCreatedCallback', null, [oData.nTr, oData._aData, iRow] ); + } +} + + +/** + * Create the HTML header for the table + * @param {object} oSettings dataTables settings object + * @memberof DataTable#oApi + */ +function _fnBuildHead( oSettings ) +{ + var i, nTh, iLen, j, jLen; + var iThs = oSettings.nTHead.getElementsByTagName('th').length; + var iCorrector = 0; + var jqChildren; + + /* If there is a header in place - then use it - otherwise it's going to get nuked... */ + if ( iThs !== 0 ) + { + /* We've got a thead from the DOM, so remove hidden columns and apply width to vis cols */ + for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ ) + { + nTh = oSettings.aoColumns[i].nTh; + nTh.setAttribute('role', 'columnheader'); + if ( oSettings.aoColumns[i].bSortable ) + { + nTh.setAttribute('tabindex', oSettings.iTabIndex); + nTh.setAttribute('aria-controls', oSettings.sTableId); + } + + if ( oSettings.aoColumns[i].sClass !== null ) + { + $(nTh).addClass( oSettings.aoColumns[i].sClass ); + } + + /* Set the title of the column if it is user defined (not what was auto detected) */ + if ( oSettings.aoColumns[i].sTitle != nTh.innerHTML ) + { + nTh.innerHTML = oSettings.aoColumns[i].sTitle; + } + } + } + else + { + /* We don't have a header in the DOM - so we are going to have to create one */ + var nTr = document.createElement( "tr" ); + + for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ ) + { + nTh = oSettings.aoColumns[i].nTh; + nTh.innerHTML = oSettings.aoColumns[i].sTitle; + nTh.setAttribute('tabindex', '0'); + + if ( oSettings.aoColumns[i].sClass !== null ) + { + $(nTh).addClass( oSettings.aoColumns[i].sClass ); + } + + nTr.appendChild( nTh ); + } + $(oSettings.nTHead).html( '' )[0].appendChild( nTr ); + _fnDetectHeader( oSettings.aoHeader, oSettings.nTHead ); + } + + /* ARIA role for the rows */ + $(oSettings.nTHead).children('tr').attr('role', 'row'); + + /* Add the extra markup needed by jQuery UI's themes */ + if ( oSettings.bJUI ) + { + for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ ) + { + nTh = oSettings.aoColumns[i].nTh; + + var nDiv = document.createElement('div'); + nDiv.className = oSettings.oClasses.sSortJUIWrapper; + $(nTh).contents().appendTo(nDiv); + + var nSpan = document.createElement('span'); + nSpan.className = oSettings.oClasses.sSortIcon; + nDiv.appendChild( nSpan ); + nTh.appendChild( nDiv ); + } + } + + if ( oSettings.oFeatures.bSort ) + { + for ( i=0 ; i<oSettings.aoColumns.length ; i++ ) + { + if ( oSettings.aoColumns[i].bSortable !== false ) + { + _fnSortAttachListener( oSettings, oSettings.aoColumns[i].nTh, i ); + } + else + { + $(oSettings.aoColumns[i].nTh).addClass( oSettings.oClasses.sSortableNone ); + } + } + } + + /* Deal with the footer - add classes if required */ + if ( oSettings.oClasses.sFooterTH !== "" ) + { + $(oSettings.nTFoot).children('tr').children('th').addClass( oSettings.oClasses.sFooterTH ); + } + + /* Cache the footer elements */ + if ( oSettings.nTFoot !== null ) + { + var anCells = _fnGetUniqueThs( oSettings, null, oSettings.aoFooter ); + for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ ) + { + if ( anCells[i] ) + { + oSettings.aoColumns[i].nTf = anCells[i]; + if ( oSettings.aoColumns[i].sClass ) + { + $(anCells[i]).addClass( oSettings.aoColumns[i].sClass ); + } + } + } + } +} + + +/** + * Draw the header (or footer) element based on the column visibility states. The + * methodology here is to use the layout array from _fnDetectHeader, modified for + * the instantaneous column visibility, to construct the new layout. The grid is + * traversed over cell at a time in a rows x columns grid fashion, although each + * cell insert can cover multiple elements in the grid - which is tracks using the + * aApplied array. Cell inserts in the grid will only occur where there isn't + * already a cell in that position. + * @param {object} oSettings dataTables settings object + * @param array {objects} aoSource Layout array from _fnDetectHeader + * @param {boolean} [bIncludeHidden=false] If true then include the hidden columns in the calc, + * @memberof DataTable#oApi + */ +function _fnDrawHead( oSettings, aoSource, bIncludeHidden ) +{ + var i, iLen, j, jLen, k, kLen, n, nLocalTr; + var aoLocal = []; + var aApplied = []; + var iColumns = oSettings.aoColumns.length; + var iRowspan, iColspan; + + if ( bIncludeHidden === undefined ) + { + bIncludeHidden = false; + } + + /* Make a copy of the master layout array, but without the visible columns in it */ + for ( i=0, iLen=aoSource.length ; i<iLen ; i++ ) + { + aoLocal[i] = aoSource[i].slice(); + aoLocal[i].nTr = aoSource[i].nTr; + + /* Remove any columns which are currently hidden */ + for ( j=iColumns-1 ; j>=0 ; j-- ) + { + if ( !oSettings.aoColumns[j].bVisible && !bIncludeHidden ) + { + aoLocal[i].splice( j, 1 ); + } + } + + /* Prep the applied array - it needs an element for each row */ + aApplied.push( [] ); + } + + for ( i=0, iLen=aoLocal.length ; i<iLen ; i++ ) + { + nLocalTr = aoLocal[i].nTr; + + /* All cells are going to be replaced, so empty out the row */ + if ( nLocalTr ) + { + while( (n = nLocalTr.firstChild) ) + { + nLocalTr.removeChild( n ); + } + } + + for ( j=0, jLen=aoLocal[i].length ; j<jLen ; j++ ) + { + iRowspan = 1; + iColspan = 1; + + /* Check to see if there is already a cell (row/colspan) covering our target + * insert point. If there is, then there is nothing to do. + */ + if ( aApplied[i][j] === undefined ) + { + nLocalTr.appendChild( aoLocal[i][j].cell ); + aApplied[i][j] = 1; + + /* Expand the cell to cover as many rows as needed */ + while ( aoLocal[i+iRowspan] !== undefined && + aoLocal[i][j].cell == aoLocal[i+iRowspan][j].cell ) + { + aApplied[i+iRowspan][j] = 1; + iRowspan++; + } + + /* Expand the cell to cover as many columns as needed */ + while ( aoLocal[i][j+iColspan] !== undefined && + aoLocal[i][j].cell == aoLocal[i][j+iColspan].cell ) + { + /* Must update the applied array over the rows for the columns */ + for ( k=0 ; k<iRowspan ; k++ ) + { + aApplied[i+k][j+iColspan] = 1; + } + iColspan++; + } + + /* Do the actual expansion in the DOM */ + aoLocal[i][j].cell.rowSpan = iRowspan; + aoLocal[i][j].cell.colSpan = iColspan; + } + } + } +} + + +/** + * Insert the required TR nodes into the table for display + * @param {object} oSettings dataTables settings object + * @memberof DataTable#oApi + */ +function _fnDraw( oSettings ) +{ + var i, iLen, n; + var anRows = []; + var iRowCount = 0; + var iStripes = oSettings.asStripeClasses.length; + var iOpenRows = oSettings.aoOpenRows.length; + + /* Provide a pre-callback function which can be used to cancel the draw is false is returned */ + var aPreDraw = _fnCallbackFire( oSettings, 'aoPreDrawCallback', 'preDraw', [oSettings] ); + if ( $.inArray( false, aPreDraw ) !== -1 ) + { + return; + } + + oSettings.bDrawing = true; + + /* Check and see if we have an initial draw position from state saving */ + if ( oSettings.iInitDisplayStart !== undefined && oSettings.iInitDisplayStart != -1 ) + { + if ( oSettings.oFeatures.bServerSide ) + { + oSettings._iDisplayStart = oSettings.iInitDisplayStart; + } + else + { + oSettings._iDisplayStart = (oSettings.iInitDisplayStart >= oSettings.fnRecordsDisplay()) ? + 0 : oSettings.iInitDisplayStart; + } + oSettings.iInitDisplayStart = -1; + _fnCalculateEnd( oSettings ); + } + + /* Server-side processing draw intercept */ + if ( oSettings.bDeferLoading ) + { + oSettings.bDeferLoading = false; + oSettings.iDraw++; + } + else if ( !oSettings.oFeatures.bServerSide ) + { + oSettings.iDraw++; + } + else if ( !oSettings.bDestroying && !_fnAjaxUpdate( oSettings ) ) + { + return; + } + + if ( oSettings.aiDisplay.length !== 0 ) + { + var iStart = oSettings._iDisplayStart; + var iEnd = oSettings._iDisplayEnd; + + if ( oSettings.oFeatures.bServerSide ) + { + iStart = 0; + iEnd = oSettings.aoData.length; + } + + for ( var j=iStart ; j<iEnd ; j++ ) + { + var aoData = oSettings.aoData[ oSettings.aiDisplay[j] ]; + if ( aoData.nTr === null ) + { + _fnCreateTr( oSettings, oSettings.aiDisplay[j] ); + } + + var nRow = aoData.nTr; + + /* Remove the old striping classes and then add the new one */ + if ( iStripes !== 0 ) + { + var sStripe = oSettings.asStripeClasses[ iRowCount % iStripes ]; + if ( aoData._sRowStripe != sStripe ) + { + $(nRow).removeClass( aoData._sRowStripe ).addClass( sStripe ); + aoData._sRowStripe = sStripe; + } + } + + /* Row callback functions - might want to manipule the row */ + _fnCallbackFire( oSettings, 'aoRowCallback', null, + [nRow, oSettings.aoData[ oSettings.aiDisplay[j] ]._aData, iRowCount, j] ); + + anRows.push( nRow ); + iRowCount++; + + /* If there is an open row - and it is attached to this parent - attach it on redraw */ + if ( iOpenRows !== 0 ) + { + for ( var k=0 ; k<iOpenRows ; k++ ) + { + if ( nRow == oSettings.aoOpenRows[k].nParent ) + { + anRows.push( oSettings.aoOpenRows[k].nTr ); + break; + } + } + } + } + } + else + { + /* Table is empty - create a row with an empty message in it */ + anRows[ 0 ] = document.createElement( 'tr' ); + + if ( oSettings.asStripeClasses[0] ) + { + anRows[ 0 ].className = oSettings.asStripeClasses[0]; + } + + var sZero = oSettings.oLanguage.sZeroRecords.replace( + '_MAX_', oSettings.fnFormatNumber(oSettings.fnRecordsTotal()) ); + if ( oSettings.iDraw == 1 && oSettings.sAjaxSource !== null && !oSettings.oFeatures.bServerSide ) + { + sZero = oSettings.oLanguage.sLoadingRecords; + } + else if ( oSettings.oLanguage.sEmptyTable && oSettings.fnRecordsTotal() === 0 ) + { + sZero = oSettings.oLanguage.sEmptyTable; + } + + var nTd = document.createElement( 'td' ); + nTd.setAttribute( 'valign', "top" ); + nTd.colSpan = _fnVisbleColumns( oSettings ); + nTd.className = oSettings.oClasses.sRowEmpty; + nTd.innerHTML = sZero; + + anRows[ iRowCount ].appendChild( nTd ); + } + + /* Header and footer callbacks */ + _fnCallbackFire( oSettings, 'aoHeaderCallback', 'header', [ $(oSettings.nTHead).children('tr')[0], + _fnGetDataMaster( oSettings ), oSettings._iDisplayStart, oSettings.fnDisplayEnd(), oSettings.aiDisplay ] ); + + _fnCallbackFire( oSettings, 'aoFooterCallback', 'footer', [ $(oSettings.nTFoot).children('tr')[0], + _fnGetDataMaster( oSettings ), oSettings._iDisplayStart, oSettings.fnDisplayEnd(), oSettings.aiDisplay ] ); + + /* + * Need to remove any old row from the display - note we can't just empty the tbody using + * $().html('') since this will unbind the jQuery event handlers (even although the node + * still exists!) - equally we can't use innerHTML, since IE throws an exception. + */ + var + nAddFrag = document.createDocumentFragment(), + nRemoveFrag = document.createDocumentFragment(), + nBodyPar, nTrs; + + if ( oSettings.nTBody ) + { + nBodyPar = oSettings.nTBody.parentNode; + nRemoveFrag.appendChild( oSettings.nTBody ); + + /* When doing infinite scrolling, only remove child rows when sorting, filtering or start + * up. When not infinite scroll, always do it. + */ + if ( !oSettings.oScroll.bInfinite || !oSettings._bInitComplete || + oSettings.bSorted || oSettings.bFiltered ) + { + while( (n = oSettings.nTBody.firstChild) ) + { + oSettings.nTBody.removeChild( n ); + } + } + + /* Put the draw table into the dom */ + for ( i=0, iLen=anRows.length ; i<iLen ; i++ ) + { + nAddFrag.appendChild( anRows[i] ); + } + + oSettings.nTBody.appendChild( nAddFrag ); + if ( nBodyPar !== null ) + { + nBodyPar.appendChild( oSettings.nTBody ); + } + } + + /* Call all required callback functions for the end of a draw */ + _fnCallbackFire( oSettings, 'aoDrawCallback', 'draw', [oSettings] ); + + /* Draw is complete, sorting and filtering must be as well */ + oSettings.bSorted = false; + oSettings.bFiltered = false; + oSettings.bDrawing = false; + + if ( oSettings.oFeatures.bServerSide ) + { + _fnProcessingDisplay( oSettings, false ); + if ( !oSettings._bInitComplete ) + { + _fnInitComplete( oSettings ); + } + } +} + + +/** + * Redraw the table - taking account of the various features which are enabled + * @param {object} oSettings dataTables settings object + * @memberof DataTable#oApi + */ +function _fnReDraw( oSettings ) +{ + if ( oSettings.oFeatures.bSort ) + { + /* Sorting will refilter and draw for us */ + _fnSort( oSettings, oSettings.oPreviousSearch ); + } + else if ( oSettings.oFeatures.bFilter ) + { + /* Filtering will redraw for us */ + _fnFilterComplete( oSettings, oSettings.oPreviousSearch ); + } + else + { + _fnCalculateEnd( oSettings ); + _fnDraw( oSettings ); + } +} + + +/** + * Add the options to the page HTML for the table + * @param {object} oSettings dataTables settings object + * @memberof DataTable#oApi + */ +function _fnAddOptionsHtml ( oSettings ) +{ + /* + * Create a temporary, empty, div which we can later on replace with what we have generated + * we do it this way to rendering the 'options' html offline - speed :-) + */ + var nHolding = $('<div></div>')[0]; + oSettings.nTable.parentNode.insertBefore( nHolding, oSettings.nTable ); + + /* + * All DataTables are wrapped in a div + */ + oSettings.nTableWrapper = $('<div id="'+oSettings.sTableId+'_wrapper" class="'+oSettings.oClasses.sWrapper+'" role="grid"></div>')[0]; + oSettings.nTableReinsertBefore = oSettings.nTable.nextSibling; + + /* Track where we want to insert the option */ + var nInsertNode = oSettings.nTableWrapper; + + /* Loop over the user set positioning and place the elements as needed */ + var aDom = oSettings.sDom.split(''); + var nTmp, iPushFeature, cOption, nNewNode, cNext, sAttr, j; + for ( var i=0 ; i<aDom.length ; i++ ) + { + iPushFeature = 0; + cOption = aDom[i]; + + if ( cOption == '<' ) + { + /* New container div */ + nNewNode = $('<div></div>')[0]; + + /* Check to see if we should append an id and/or a class name to the container */ + cNext = aDom[i+1]; + if ( cNext == "'" || cNext == '"' ) + { + sAttr = ""; + j = 2; + while ( aDom[i+j] != cNext ) + { + sAttr += aDom[i+j]; + j++; + } + + /* Replace jQuery UI constants */ + if ( sAttr == "H" ) + { + sAttr = "fg-toolbar ui-toolbar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix"; + } + else if ( sAttr == "F" ) + { + sAttr = "fg-toolbar ui-toolbar ui-widget-header ui-corner-bl ui-corner-br ui-helper-clearfix"; + } + + /* The attribute can be in the format of "#id.class", "#id" or "class" This logic + * breaks the string into parts and applies them as needed + */ + if ( sAttr.indexOf('.') != -1 ) + { + var aSplit = sAttr.split('.'); + nNewNode.id = aSplit[0].substr(1, aSplit[0].length-1); + nNewNode.className = aSplit[1]; + } + else if ( sAttr.charAt(0) == "#" ) + { + nNewNode.id = sAttr.substr(1, sAttr.length-1); + } + else + { + nNewNode.className = sAttr; + } + + i += j; /* Move along the position array */ + } + + nInsertNode.appendChild( nNewNode ); + nInsertNode = nNewNode; + } + else if ( cOption == '>' ) + { + /* End container div */ + nInsertNode = nInsertNode.parentNode; + } + else if ( cOption == 'l' && oSettings.oFeatures.bPaginate && oSettings.oFeatures.bLengthChange ) + { + /* Length */ + nTmp = _fnFeatureHtmlLength( oSettings ); + iPushFeature = 1; + } + else if ( cOption == 'f' && oSettings.oFeatures.bFilter ) + { + /* Filter */ + nTmp = _fnFeatureHtmlFilter( oSettings ); + iPushFeature = 1; + } + else if ( cOption == 'r' && oSettings.oFeatures.bProcessing ) + { + /* pRocessing */ + nTmp = _fnFeatureHtmlProcessing( oSettings ); + iPushFeature = 1; + } + else if ( cOption == 't' ) + { + /* Table */ + nTmp = _fnFeatureHtmlTable( oSettings ); + iPushFeature = 1; + } + else if ( cOption == 'i' && oSettings.oFeatures.bInfo ) + { + /* Info */ + nTmp = _fnFeatureHtmlInfo( oSettings ); + iPushFeature = 1; + } + else if ( cOption == 'p' && oSettings.oFeatures.bPaginate ) + { + /* Pagination */ + nTmp = _fnFeatureHtmlPaginate( oSettings ); + iPushFeature = 1; + } + else if ( DataTable.ext.aoFeatures.length !== 0 ) + { + /* Plug-in features */ + var aoFeatures = DataTable.ext.aoFeatures; + for ( var k=0, kLen=aoFeatures.length ; k<kLen ; k++ ) + { + if ( cOption == aoFeatures[k].cFeature ) + { + nTmp = aoFeatures[k].fnInit( oSettings ); + if ( nTmp ) + { + iPushFeature = 1; + } + break; + } + } + } + + /* Add to the 2D features array */ + if ( iPushFeature == 1 && nTmp !== null ) + { + if ( typeof oSettings.aanFeatures[cOption] !== 'object' ) + { + oSettings.aanFeatures[cOption] = []; + } + oSettings.aanFeatures[cOption].push( nTmp ); + nInsertNode.appendChild( nTmp ); + } + } + + /* Built our DOM structure - replace the holding div with what we want */ + nHolding.parentNode.replaceChild( oSettings.nTableWrapper, nHolding ); +} + + +/** + * Use the DOM source to create up an array of header cells. The idea here is to + * create a layout grid (array) of rows x columns, which contains a reference + * to the cell that that point in the grid (regardless of col/rowspan), such that + * any column / row could be removed and the new grid constructed + * @param array {object} aLayout Array to store the calculated layout in + * @param {node} nThead The header/footer element for the table + * @memberof DataTable#oApi + */ +function _fnDetectHeader ( aLayout, nThead ) +{ + var nTrs = $(nThead).children('tr'); + var nCell; + var i, j, k, l, iLen, jLen, iColShifted; + var fnShiftCol = function ( a, i, j ) { + while ( a[i][j] ) { + j++; + } + return j; + }; + + aLayout.splice( 0, aLayout.length ); + + /* We know how many rows there are in the layout - so prep it */ + for ( i=0, iLen=nTrs.length ; i<iLen ; i++ ) + { + aLayout.push( [] ); + } + + /* Calculate a layout array */ + for ( i=0, iLen=nTrs.length ; i<iLen ; i++ ) + { + var iColumn = 0; + + /* For every cell in the row... */ + for ( j=0, jLen=nTrs[i].childNodes.length ; j<jLen ; j++ ) + { + nCell = nTrs[i].childNodes[j]; + + if ( nCell.nodeName.toUpperCase() == "TD" || + nCell.nodeName.toUpperCase() == "TH" ) + { + /* Get the col and rowspan attributes from the DOM and sanitise them */ + var iColspan = nCell.getAttribute('colspan') * 1; + var iRowspan = nCell.getAttribute('rowspan') * 1; + iColspan = (!iColspan || iColspan===0 || iColspan===1) ? 1 : iColspan; + iRowspan = (!iRowspan || iRowspan===0 || iRowspan===1) ? 1 : iRowspan; + + /* There might be colspan cells already in this row, so shift our target + * accordingly + */ + iColShifted = fnShiftCol( aLayout, i, iColumn ); + + /* If there is col / rowspan, copy the information into the layout grid */ + for ( l=0 ; l<iColspan ; l++ ) + { + for ( k=0 ; k<iRowspan ; k++ ) + { + aLayout[i+k][iColShifted+l] = { + "cell": nCell, + "unique": iColspan == 1 ? true : false + }; + aLayout[i+k].nTr = nTrs[i]; + } + } + } + } + } +} + + +/** + * Get an array of unique th elements, one for each column + * @param {object} oSettings dataTables settings object + * @param {node} nHeader automatically detect the layout from this node - optional + * @param {array} aLayout thead/tfoot layout from _fnDetectHeader - optional + * @returns array {node} aReturn list of unique ths + * @memberof DataTable#oApi + */ +function _fnGetUniqueThs ( oSettings, nHeader, aLayout ) +{ + var aReturn = []; + if ( !aLayout ) + { + aLayout = oSettings.aoHeader; + if ( nHeader ) + { + aLayout = []; + _fnDetectHeader( aLayout, nHeader ); + } + } + + for ( var i=0, iLen=aLayout.length ; i<iLen ; i++ ) + { + for ( var j=0, jLen=aLayout[i].length ; j<jLen ; j++ ) + { + if ( aLayout[i][j].unique && + (!aReturn[j] || !oSettings.bSortCellsTop) ) + { + aReturn[j] = aLayout[i][j].cell; + } + } + } + + return aReturn; +} + diff --git a/src/warden-server/contrib/wardenweb/datatables/media/src/core/core.filter.js b/src/warden-server/contrib/wardenweb/datatables/media/src/core/core.filter.js new file mode 100644 index 0000000..4dd05bf --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/src/core/core.filter.js @@ -0,0 +1,398 @@ + + +/** + * Generate the node required for filtering text + * @returns {node} Filter control element + * @param {object} oSettings dataTables settings object + * @memberof DataTable#oApi + */ +function _fnFeatureHtmlFilter ( oSettings ) +{ + var oPreviousSearch = oSettings.oPreviousSearch; + + var sSearchStr = oSettings.oLanguage.sSearch; + sSearchStr = (sSearchStr.indexOf('_INPUT_') !== -1) ? + sSearchStr.replace('_INPUT_', '<input type="text" />') : + sSearchStr==="" ? '<input type="text" />' : sSearchStr+' <input type="text" />'; + + var nFilter = document.createElement( 'div' ); + nFilter.className = oSettings.oClasses.sFilter; + nFilter.innerHTML = '<label>'+sSearchStr+'</label>'; + if ( !oSettings.aanFeatures.f ) + { + nFilter.id = oSettings.sTableId+'_filter'; + } + + var jqFilter = $("input", nFilter); + jqFilter.val( oPreviousSearch.sSearch.replace('"','"') ); + jqFilter.bind( 'keyup.DT', function(e) { + /* Update all other filter input elements for the new display */ + var n = oSettings.aanFeatures.f; + for ( var i=0, iLen=n.length ; i<iLen ; i++ ) + { + if ( n[i] != $(this).parents('div.dataTables_filter')[0] ) + { + $('input', n[i]).val( this.value ); + } + } + + /* Now do the filter */ + if ( this.value != oPreviousSearch.sSearch ) + { + _fnFilterComplete( oSettings, { + "sSearch": this.value, + "bRegex": oPreviousSearch.bRegex, + "bSmart": oPreviousSearch.bSmart , + "bCaseInsensitive": oPreviousSearch.bCaseInsensitive + } ); + } + } ); + + jqFilter + .attr('aria-controls', oSettings.sTableId) + .bind( 'keypress.DT', function(e) { + /* Prevent form submission */ + if ( e.keyCode == 13 ) + { + return false; + } + } + ); + + return nFilter; +} + + +/** + * Filter the table using both the global filter and column based filtering + * @param {object} oSettings dataTables settings object + * @param {object} oSearch search information + * @param {int} [iForce] force a research of the master array (1) or not (undefined or 0) + * @memberof DataTable#oApi + */ +function _fnFilterComplete ( oSettings, oInput, iForce ) +{ + var oPrevSearch = oSettings.oPreviousSearch; + var aoPrevSearch = oSettings.aoPreSearchCols; + var fnSaveFilter = function ( oFilter ) { + /* Save the filtering values */ + oPrevSearch.sSearch = oFilter.sSearch; + oPrevSearch.bRegex = oFilter.bRegex; + oPrevSearch.bSmart = oFilter.bSmart; + oPrevSearch.bCaseInsensitive = oFilter.bCaseInsensitive; + }; + + /* In server-side processing all filtering is done by the server, so no point hanging around here */ + if ( !oSettings.oFeatures.bServerSide ) + { + /* Global filter */ + _fnFilter( oSettings, oInput.sSearch, iForce, oInput.bRegex, oInput.bSmart, oInput.bCaseInsensitive ); + fnSaveFilter( oInput ); + + /* Now do the individual column filter */ + for ( var i=0 ; i<oSettings.aoPreSearchCols.length ; i++ ) + { + _fnFilterColumn( oSettings, aoPrevSearch[i].sSearch, i, aoPrevSearch[i].bRegex, + aoPrevSearch[i].bSmart, aoPrevSearch[i].bCaseInsensitive ); + } + + /* Custom filtering */ + _fnFilterCustom( oSettings ); + } + else + { + fnSaveFilter( oInput ); + } + + /* Tell the draw function we have been filtering */ + oSettings.bFiltered = true; + $(oSettings.oInstance).trigger('filter', oSettings); + + /* Redraw the table */ + oSettings._iDisplayStart = 0; + _fnCalculateEnd( oSettings ); + _fnDraw( oSettings ); + + /* Rebuild search array 'offline' */ + _fnBuildSearchArray( oSettings, 0 ); +} + + +/** + * Apply custom filtering functions + * @param {object} oSettings dataTables settings object + * @memberof DataTable#oApi + */ +function _fnFilterCustom( oSettings ) +{ + var afnFilters = DataTable.ext.afnFiltering; + for ( var i=0, iLen=afnFilters.length ; i<iLen ; i++ ) + { + var iCorrector = 0; + for ( var j=0, jLen=oSettings.aiDisplay.length ; j<jLen ; j++ ) + { + var iDisIndex = oSettings.aiDisplay[j-iCorrector]; + + /* Check if we should use this row based on the filtering function */ + if ( !afnFilters[i]( oSettings, _fnGetRowData( oSettings, iDisIndex, 'filter' ), iDisIndex ) ) + { + oSettings.aiDisplay.splice( j-iCorrector, 1 ); + iCorrector++; + } + } + } +} + + +/** + * Filter the table on a per-column basis + * @param {object} oSettings dataTables settings object + * @param {string} sInput string to filter on + * @param {int} iColumn column to filter + * @param {bool} bRegex treat search string as a regular expression or not + * @param {bool} bSmart use smart filtering or not + * @param {bool} bCaseInsensitive Do case insenstive matching or not + * @memberof DataTable#oApi + */ +function _fnFilterColumn ( oSettings, sInput, iColumn, bRegex, bSmart, bCaseInsensitive ) +{ + if ( sInput === "" ) + { + return; + } + + var iIndexCorrector = 0; + var rpSearch = _fnFilterCreateSearch( sInput, bRegex, bSmart, bCaseInsensitive ); + + for ( var i=oSettings.aiDisplay.length-1 ; i>=0 ; i-- ) + { + var sData = _fnDataToSearch( _fnGetCellData( oSettings, oSettings.aiDisplay[i], iColumn, 'filter' ), + oSettings.aoColumns[iColumn].sType ); + if ( ! rpSearch.test( sData ) ) + { + oSettings.aiDisplay.splice( i, 1 ); + iIndexCorrector++; + } + } +} + + +/** + * Filter the data table based on user input and draw the table + * @param {object} oSettings dataTables settings object + * @param {string} sInput string to filter on + * @param {int} iForce optional - force a research of the master array (1) or not (undefined or 0) + * @param {bool} bRegex treat as a regular expression or not + * @param {bool} bSmart perform smart filtering or not + * @param {bool} bCaseInsensitive Do case insenstive matching or not + * @memberof DataTable#oApi + */ +function _fnFilter( oSettings, sInput, iForce, bRegex, bSmart, bCaseInsensitive ) +{ + var i; + var rpSearch = _fnFilterCreateSearch( sInput, bRegex, bSmart, bCaseInsensitive ); + var oPrevSearch = oSettings.oPreviousSearch; + + /* Check if we are forcing or not - optional parameter */ + if ( !iForce ) + { + iForce = 0; + } + + /* Need to take account of custom filtering functions - always filter */ + if ( DataTable.ext.afnFiltering.length !== 0 ) + { + iForce = 1; + } + + /* + * If the input is blank - we want the full data set + */ + if ( sInput.length <= 0 ) + { + oSettings.aiDisplay.splice( 0, oSettings.aiDisplay.length); + oSettings.aiDisplay = oSettings.aiDisplayMaster.slice(); + } + else + { + /* + * We are starting a new search or the new search string is smaller + * then the old one (i.e. delete). Search from the master array + */ + if ( oSettings.aiDisplay.length == oSettings.aiDisplayMaster.length || + oPrevSearch.sSearch.length > sInput.length || iForce == 1 || + sInput.indexOf(oPrevSearch.sSearch) !== 0 ) + { + /* Nuke the old display array - we are going to rebuild it */ + oSettings.aiDisplay.splice( 0, oSettings.aiDisplay.length); + + /* Force a rebuild of the search array */ + _fnBuildSearchArray( oSettings, 1 ); + + /* Search through all records to populate the search array + * The the oSettings.aiDisplayMaster and asDataSearch arrays have 1 to 1 + * mapping + */ + for ( i=0 ; i<oSettings.aiDisplayMaster.length ; i++ ) + { + if ( rpSearch.test(oSettings.asDataSearch[i]) ) + { + oSettings.aiDisplay.push( oSettings.aiDisplayMaster[i] ); + } + } + } + else + { + /* Using old search array - refine it - do it this way for speed + * Don't have to search the whole master array again + */ + var iIndexCorrector = 0; + + /* Search the current results */ + for ( i=0 ; i<oSettings.asDataSearch.length ; i++ ) + { + if ( ! rpSearch.test(oSettings.asDataSearch[i]) ) + { + oSettings.aiDisplay.splice( i-iIndexCorrector, 1 ); + iIndexCorrector++; + } + } + } + } +} + + +/** + * Create an array which can be quickly search through + * @param {object} oSettings dataTables settings object + * @param {int} iMaster use the master data array - optional + * @memberof DataTable#oApi + */ +function _fnBuildSearchArray ( oSettings, iMaster ) +{ + if ( !oSettings.oFeatures.bServerSide ) + { + /* Clear out the old data */ + oSettings.asDataSearch.splice( 0, oSettings.asDataSearch.length ); + + var aArray = (iMaster && iMaster===1) ? + oSettings.aiDisplayMaster : oSettings.aiDisplay; + + for ( var i=0, iLen=aArray.length ; i<iLen ; i++ ) + { + oSettings.asDataSearch[i] = _fnBuildSearchRow( oSettings, + _fnGetRowData( oSettings, aArray[i], 'filter' ) ); + } + } +} + + +/** + * Create a searchable string from a single data row + * @param {object} oSettings dataTables settings object + * @param {array} aData Row data array to use for the data to search + * @memberof DataTable#oApi + */ +function _fnBuildSearchRow( oSettings, aData ) +{ + var sSearch = ''; + if ( oSettings.__nTmpFilter === undefined ) + { + oSettings.__nTmpFilter = document.createElement('div'); + } + var nTmp = oSettings.__nTmpFilter; + + for ( var j=0, jLen=oSettings.aoColumns.length ; j<jLen ; j++ ) + { + if ( oSettings.aoColumns[j].bSearchable ) + { + var sData = aData[j]; + sSearch += _fnDataToSearch( sData, oSettings.aoColumns[j].sType )+' '; + } + } + + /* If it looks like there is an HTML entity in the string, attempt to decode it */ + if ( sSearch.indexOf('&') !== -1 ) + { + nTmp.innerHTML = sSearch; + sSearch = nTmp.textContent ? nTmp.textContent : nTmp.innerText; + + /* IE and Opera appear to put an newline where there is a <br> tag - remove it */ + sSearch = sSearch.replace(/\n/g," ").replace(/\r/g,""); + } + + return sSearch; +} + +/** + * Build a regular expression object suitable for searching a table + * @param {string} sSearch string to search for + * @param {bool} bRegex treat as a regular expression or not + * @param {bool} bSmart perform smart filtering or not + * @param {bool} bCaseInsensitive Do case insenstive matching or not + * @returns {RegExp} constructed object + * @memberof DataTable#oApi + */ +function _fnFilterCreateSearch( sSearch, bRegex, bSmart, bCaseInsensitive ) +{ + var asSearch, sRegExpString; + + if ( bSmart ) + { + /* Generate the regular expression to use. Something along the lines of: + * ^(?=.*?\bone\b)(?=.*?\btwo\b)(?=.*?\bthree\b).*$ + */ + asSearch = bRegex ? sSearch.split( ' ' ) : _fnEscapeRegex( sSearch ).split( ' ' ); + sRegExpString = '^(?=.*?'+asSearch.join( ')(?=.*?' )+').*$'; + return new RegExp( sRegExpString, bCaseInsensitive ? "i" : "" ); + } + else + { + sSearch = bRegex ? sSearch : _fnEscapeRegex( sSearch ); + return new RegExp( sSearch, bCaseInsensitive ? "i" : "" ); + } +} + + +/** + * Convert raw data into something that the user can search on + * @param {string} sData data to be modified + * @param {string} sType data type + * @returns {string} search string + * @memberof DataTable#oApi + */ +function _fnDataToSearch ( sData, sType ) +{ + if ( typeof DataTable.ext.ofnSearch[sType] === "function" ) + { + return DataTable.ext.ofnSearch[sType]( sData ); + } + else if ( sType == "html" ) + { + return sData.replace(/[\r\n]/g," ").replace( /<.*?>/g, "" ); + } + else if ( typeof sData === "string" ) + { + return sData.replace(/[\r\n]/g," "); + } + else if ( sData === null ) + { + return ''; + } + return sData; +} + + +/** + * scape a string stuch that it can be used in a regular expression + * @param {string} sVal string to escape + * @returns {string} escaped string + * @memberof DataTable#oApi + */ +function _fnEscapeRegex ( sVal ) +{ + var acEscape = [ '/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\', '$', '^' ]; + var reReplace = new RegExp( '(\\' + acEscape.join('|\\') + ')', 'g' ); + return sVal.replace(reReplace, '\\$1'); +} + diff --git a/src/warden-server/contrib/wardenweb/datatables/media/src/core/core.info.js b/src/warden-server/contrib/wardenweb/datatables/media/src/core/core.info.js new file mode 100644 index 0000000..97d6e9e --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/src/core/core.info.js @@ -0,0 +1,106 @@ + + +/** + * Generate the node required for the info display + * @param {object} oSettings dataTables settings object + * @returns {node} Information element + * @memberof DataTable#oApi + */ +function _fnFeatureHtmlInfo ( oSettings ) +{ + var nInfo = document.createElement( 'div' ); + nInfo.className = oSettings.oClasses.sInfo; + + /* Actions that are to be taken once only for this feature */ + if ( !oSettings.aanFeatures.i ) + { + /* Add draw callback */ + oSettings.aoDrawCallback.push( { + "fn": _fnUpdateInfo, + "sName": "information" + } ); + + /* Add id */ + nInfo.id = oSettings.sTableId+'_info'; + } + oSettings.nTable.setAttribute( 'aria-describedby', oSettings.sTableId+'_info' ); + + return nInfo; +} + + +/** + * Update the information elements in the display + * @param {object} oSettings dataTables settings object + * @memberof DataTable#oApi + */ +function _fnUpdateInfo ( oSettings ) +{ + /* Show information about the table */ + if ( !oSettings.oFeatures.bInfo || oSettings.aanFeatures.i.length === 0 ) + { + return; + } + + var + iStart = oSettings._iDisplayStart+1, iEnd = oSettings.fnDisplayEnd(), + iMax = oSettings.fnRecordsTotal(), iTotal = oSettings.fnRecordsDisplay(), + sStart = oSettings.fnFormatNumber( iStart ), sEnd = oSettings.fnFormatNumber( iEnd ), + sMax = oSettings.fnFormatNumber( iMax ), sTotal = oSettings.fnFormatNumber( iTotal ), + sOut; + + /* When infinite scrolling, we are always starting at 1. _iDisplayStart is used only + * internally + */ + if ( oSettings.oScroll.bInfinite ) + { + sStart = oSettings.fnFormatNumber( 1 ); + } + + if ( oSettings.fnRecordsDisplay() === 0 && + oSettings.fnRecordsDisplay() == oSettings.fnRecordsTotal() ) + { + /* Empty record set */ + sOut = oSettings.oLanguage.sInfoEmpty+ oSettings.oLanguage.sInfoPostFix; + } + else if ( oSettings.fnRecordsDisplay() === 0 ) + { + /* Rmpty record set after filtering */ + sOut = oSettings.oLanguage.sInfoEmpty +' '+ + oSettings.oLanguage.sInfoFiltered.replace('_MAX_', sMax)+ + oSettings.oLanguage.sInfoPostFix; + } + else if ( oSettings.fnRecordsDisplay() == oSettings.fnRecordsTotal() ) + { + /* Normal record set */ + sOut = oSettings.oLanguage.sInfo. + replace('_START_', sStart). + replace('_END_', sEnd). + replace('_TOTAL_', sTotal)+ + oSettings.oLanguage.sInfoPostFix; + } + else + { + /* Record set after filtering */ + sOut = oSettings.oLanguage.sInfo. + replace('_START_', sStart). + replace('_END_', sEnd). + replace('_TOTAL_', sTotal) +' '+ + oSettings.oLanguage.sInfoFiltered.replace('_MAX_', + oSettings.fnFormatNumber(oSettings.fnRecordsTotal()))+ + oSettings.oLanguage.sInfoPostFix; + } + + if ( oSettings.oLanguage.fnInfoCallback !== null ) + { + sOut = oSettings.oLanguage.fnInfoCallback.call( oSettings.oInstance, + oSettings, iStart, iEnd, iMax, iTotal, sOut ); + } + + var n = oSettings.aanFeatures.i; + for ( var i=0, iLen=n.length ; i<iLen ; i++ ) + { + $(n[i]).html( sOut ); + } +} + diff --git a/src/warden-server/contrib/wardenweb/datatables/media/src/core/core.init.js b/src/warden-server/contrib/wardenweb/datatables/media/src/core/core.init.js new file mode 100644 index 0000000..6d79868 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/src/core/core.init.js @@ -0,0 +1,149 @@ + + +/** + * Draw the table for the first time, adding all required features + * @param {object} oSettings dataTables settings object + * @memberof DataTable#oApi + */ +function _fnInitialise ( oSettings ) +{ + var i, iLen, iAjaxStart=oSettings.iInitDisplayStart; + + /* Ensure that the table data is fully initialised */ + if ( oSettings.bInitialised === false ) + { + setTimeout( function(){ _fnInitialise( oSettings ); }, 200 ); + return; + } + + /* Show the display HTML options */ + _fnAddOptionsHtml( oSettings ); + + /* Build and draw the header / footer for the table */ + _fnBuildHead( oSettings ); + _fnDrawHead( oSettings, oSettings.aoHeader ); + if ( oSettings.nTFoot ) + { + _fnDrawHead( oSettings, oSettings.aoFooter ); + } + + /* Okay to show that something is going on now */ + _fnProcessingDisplay( oSettings, true ); + + /* Calculate sizes for columns */ + if ( oSettings.oFeatures.bAutoWidth ) + { + _fnCalculateColumnWidths( oSettings ); + } + + for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ ) + { + if ( oSettings.aoColumns[i].sWidth !== null ) + { + oSettings.aoColumns[i].nTh.style.width = _fnStringToCss( oSettings.aoColumns[i].sWidth ); + } + } + + /* If there is default sorting required - let's do it. The sort function will do the + * drawing for us. Otherwise we draw the table regardless of the Ajax source - this allows + * the table to look initialised for Ajax sourcing data (show 'loading' message possibly) + */ + if ( oSettings.oFeatures.bSort ) + { + _fnSort( oSettings ); + } + else if ( oSettings.oFeatures.bFilter ) + { + _fnFilterComplete( oSettings, oSettings.oPreviousSearch ); + } + else + { + oSettings.aiDisplay = oSettings.aiDisplayMaster.slice(); + _fnCalculateEnd( oSettings ); + _fnDraw( oSettings ); + } + + /* if there is an ajax source load the data */ + if ( oSettings.sAjaxSource !== null && !oSettings.oFeatures.bServerSide ) + { + var aoData = []; + _fnServerParams( oSettings, aoData ); + oSettings.fnServerData.call( oSettings.oInstance, oSettings.sAjaxSource, aoData, function(json) { + var aData = (oSettings.sAjaxDataProp !== "") ? + _fnGetObjectDataFn( oSettings.sAjaxDataProp )(json) : json; + + /* Got the data - add it to the table */ + for ( i=0 ; i<aData.length ; i++ ) + { + _fnAddData( oSettings, aData[i] ); + } + + /* Reset the init display for cookie saving. We've already done a filter, and + * therefore cleared it before. So we need to make it appear 'fresh' + */ + oSettings.iInitDisplayStart = iAjaxStart; + + if ( oSettings.oFeatures.bSort ) + { + _fnSort( oSettings ); + } + else + { + oSettings.aiDisplay = oSettings.aiDisplayMaster.slice(); + _fnCalculateEnd( oSettings ); + _fnDraw( oSettings ); + } + + _fnProcessingDisplay( oSettings, false ); + _fnInitComplete( oSettings, json ); + }, oSettings ); + return; + } + + /* Server-side processing initialisation complete is done at the end of _fnDraw */ + if ( !oSettings.oFeatures.bServerSide ) + { + _fnProcessingDisplay( oSettings, false ); + _fnInitComplete( oSettings ); + } +} + + +/** + * Draw the table for the first time, adding all required features + * @param {object} oSettings dataTables settings object + * @param {object} [json] JSON from the server that completed the table, if using Ajax source + * with client-side processing (optional) + * @memberof DataTable#oApi + */ +function _fnInitComplete ( oSettings, json ) +{ + oSettings._bInitComplete = true; + _fnCallbackFire( oSettings, 'aoInitComplete', 'init', [oSettings, json] ); +} + + +/** + * Language compatibility - when certain options are given, and others aren't, we + * need to duplicate the values over, in order to provide backwards compatibility + * with older language files. + * @param {object} oSettings dataTables settings object + * @memberof DataTable#oApi + */ +function _fnLanguageCompat( oLanguage ) +{ + /* Backwards compatibility - if there is no sEmptyTable given, then use the same as + * sZeroRecords - assuming that is given. + */ + if ( !oLanguage.sEmptyTable && oLanguage.sZeroRecords ) + { + _fnMap( oLanguage, oLanguage, 'sZeroRecords', 'sEmptyTable' ); + } + + /* Likewise with loading records */ + if ( !oLanguage.sLoadingRecords && oLanguage.sZeroRecords ) + { + _fnMap( oLanguage, oLanguage, 'sZeroRecords', 'sLoadingRecords' ); + } +} + diff --git a/src/warden-server/contrib/wardenweb/datatables/media/src/core/core.length.js b/src/warden-server/contrib/wardenweb/datatables/media/src/core/core.length.js new file mode 100644 index 0000000..ecdb46b --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/src/core/core.length.js @@ -0,0 +1,122 @@ + + +/** + * Generate the node required for user display length changing + * @param {object} oSettings dataTables settings object + * @returns {node} Display length feature node + * @memberof DataTable#oApi + */ +function _fnFeatureHtmlLength ( oSettings ) +{ + if ( oSettings.oScroll.bInfinite ) + { + return null; + } + + /* This can be overruled by not using the _MENU_ var/macro in the language variable */ + var sName = 'name="'+oSettings.sTableId+'_length"'; + var sStdMenu = '<select size="1" '+sName+'>'; + var i, iLen; + var aLengthMenu = oSettings.aLengthMenu; + + if ( aLengthMenu.length == 2 && typeof aLengthMenu[0] === 'object' && + typeof aLengthMenu[1] === 'object' ) + { + for ( i=0, iLen=aLengthMenu[0].length ; i<iLen ; i++ ) + { + sStdMenu += '<option value="'+aLengthMenu[0][i]+'">'+aLengthMenu[1][i]+'</option>'; + } + } + else + { + for ( i=0, iLen=aLengthMenu.length ; i<iLen ; i++ ) + { + sStdMenu += '<option value="'+aLengthMenu[i]+'">'+aLengthMenu[i]+'</option>'; + } + } + sStdMenu += '</select>'; + + var nLength = document.createElement( 'div' ); + if ( !oSettings.aanFeatures.l ) + { + nLength.id = oSettings.sTableId+'_length'; + } + nLength.className = oSettings.oClasses.sLength; + nLength.innerHTML = '<label>'+oSettings.oLanguage.sLengthMenu.replace( '_MENU_', sStdMenu )+'</label>'; + + /* + * Set the length to the current display length - thanks to Andrea Pavlovic for this fix, + * and Stefan Skopnik for fixing the fix! + */ + $('select option[value="'+oSettings._iDisplayLength+'"]', nLength).attr("selected", true); + + $('select', nLength).bind( 'change.DT', function(e) { + var iVal = $(this).val(); + + /* Update all other length options for the new display */ + var n = oSettings.aanFeatures.l; + for ( i=0, iLen=n.length ; i<iLen ; i++ ) + { + if ( n[i] != this.parentNode ) + { + $('select', n[i]).val( iVal ); + } + } + + /* Redraw the table */ + oSettings._iDisplayLength = parseInt(iVal, 10); + _fnCalculateEnd( oSettings ); + + /* If we have space to show extra rows (backing up from the end point - then do so */ + if ( oSettings.fnDisplayEnd() == oSettings.fnRecordsDisplay() ) + { + oSettings._iDisplayStart = oSettings.fnDisplayEnd() - oSettings._iDisplayLength; + if ( oSettings._iDisplayStart < 0 ) + { + oSettings._iDisplayStart = 0; + } + } + + if ( oSettings._iDisplayLength == -1 ) + { + oSettings._iDisplayStart = 0; + } + + _fnDraw( oSettings ); + } ); + + + $('select', nLength).attr('aria-controls', oSettings.sTableId); + + return nLength; +} + + +/** + * Rcalculate the end point based on the start point + * @param {object} oSettings dataTables settings object + * @memberof DataTable#oApi + */ +function _fnCalculateEnd( oSettings ) +{ + if ( oSettings.oFeatures.bPaginate === false ) + { + oSettings._iDisplayEnd = oSettings.aiDisplay.length; + } + else + { + /* Set the end point of the display - based on how many elements there are + * still to display + */ + if ( oSettings._iDisplayStart + oSettings._iDisplayLength > oSettings.aiDisplay.length || + oSettings._iDisplayLength == -1 ) + { + oSettings._iDisplayEnd = oSettings.aiDisplay.length; + } + else + { + oSettings._iDisplayEnd = oSettings._iDisplayStart + oSettings._iDisplayLength; + } + } +} + diff --git a/src/warden-server/contrib/wardenweb/datatables/media/src/core/core.page.js b/src/warden-server/contrib/wardenweb/datatables/media/src/core/core.page.js new file mode 100644 index 0000000..c652da8 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/src/core/core.page.js @@ -0,0 +1,119 @@ + + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Note that most of the paging logic is done in + * DataTable.ext.oPagination + */ + +/** + * Generate the node required for default pagination + * @param {object} oSettings dataTables settings object + * @returns {node} Pagination feature node + * @memberof DataTable#oApi + */ +function _fnFeatureHtmlPaginate ( oSettings ) +{ + if ( oSettings.oScroll.bInfinite ) + { + return null; + } + + var nPaginate = document.createElement( 'div' ); + nPaginate.className = oSettings.oClasses.sPaging+oSettings.sPaginationType; + + DataTable.ext.oPagination[ oSettings.sPaginationType ].fnInit( oSettings, nPaginate, + function( oSettings ) { + _fnCalculateEnd( oSettings ); + _fnDraw( oSettings ); + } + ); + + /* Add a draw callback for the pagination on first instance, to update the paging display */ + if ( !oSettings.aanFeatures.p ) + { + oSettings.aoDrawCallback.push( { + "fn": function( oSettings ) { + DataTable.ext.oPagination[ oSettings.sPaginationType ].fnUpdate( oSettings, function( oSettings ) { + _fnCalculateEnd( oSettings ); + _fnDraw( oSettings ); + } ); + }, + "sName": "pagination" + } ); + } + return nPaginate; +} + + +/** + * Alter the display settings to change the page + * @param {object} oSettings dataTables settings object + * @param {string|int} mAction Paging action to take: "first", "previous", "next" or "last" + * or page number to jump to (integer) + * @returns {bool} true page has changed, false - no change (no effect) eg 'first' on page 1 + * @memberof DataTable#oApi + */ +function _fnPageChange ( oSettings, mAction ) +{ + var iOldStart = oSettings._iDisplayStart; + + if ( typeof mAction === "number" ) + { + oSettings._iDisplayStart = mAction * oSettings._iDisplayLength; + if ( oSettings._iDisplayStart > oSettings.fnRecordsDisplay() ) + { + oSettings._iDisplayStart = 0; + } + } + else if ( mAction == "first" ) + { + oSettings._iDisplayStart = 0; + } + else if ( mAction == "previous" ) + { + oSettings._iDisplayStart = oSettings._iDisplayLength>=0 ? + oSettings._iDisplayStart - oSettings._iDisplayLength : + 0; + + /* Correct for underrun */ + if ( oSettings._iDisplayStart < 0 ) + { + oSettings._iDisplayStart = 0; + } + } + else if ( mAction == "next" ) + { + if ( oSettings._iDisplayLength >= 0 ) + { + /* Make sure we are not over running the display array */ + if ( oSettings._iDisplayStart + oSettings._iDisplayLength < oSettings.fnRecordsDisplay() ) + { + oSettings._iDisplayStart += oSettings._iDisplayLength; + } + } + else + { + oSettings._iDisplayStart = 0; + } + } + else if ( mAction == "last" ) + { + if ( oSettings._iDisplayLength >= 0 ) + { + var iPages = parseInt( (oSettings.fnRecordsDisplay()-1) / oSettings._iDisplayLength, 10 ) + 1; + oSettings._iDisplayStart = (iPages-1) * oSettings._iDisplayLength; + } + else + { + oSettings._iDisplayStart = 0; + } + } + else + { + _fnLog( oSettings, 0, "Unknown paging action: "+mAction ); + } + $(oSettings.oInstance).trigger('page', oSettings); + + return iOldStart != oSettings._iDisplayStart; +} + diff --git a/src/warden-server/contrib/wardenweb/datatables/media/src/core/core.processing.js b/src/warden-server/contrib/wardenweb/datatables/media/src/core/core.processing.js new file mode 100644 index 0000000..8d29f6f --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/src/core/core.processing.js @@ -0,0 +1,44 @@ + + +/** + * Generate the node required for the processing node + * @param {object} oSettings dataTables settings object + * @returns {node} Processing element + * @memberof DataTable#oApi + */ +function _fnFeatureHtmlProcessing ( oSettings ) +{ + var nProcessing = document.createElement( 'div' ); + + if ( !oSettings.aanFeatures.r ) + { + nProcessing.id = oSettings.sTableId+'_processing'; + } + nProcessing.innerHTML = oSettings.oLanguage.sProcessing; + nProcessing.className = oSettings.oClasses.sProcessing; + oSettings.nTable.parentNode.insertBefore( nProcessing, oSettings.nTable ); + + return nProcessing; +} + + +/** + * Display or hide the processing indicator + * @param {object} oSettings dataTables settings object + * @param {bool} bShow Show the processing indicator (true) or not (false) + * @memberof DataTable#oApi + */ +function _fnProcessingDisplay ( oSettings, bShow ) +{ + if ( oSettings.oFeatures.bProcessing ) + { + var an = oSettings.aanFeatures.r; + for ( var i=0, iLen=an.length ; i<iLen ; i++ ) + { + an[i].style.visibility = bShow ? "visible" : "hidden"; + } + } + + $(oSettings.oInstance).trigger('processing', [oSettings, bShow]); +} + diff --git a/src/warden-server/contrib/wardenweb/datatables/media/src/core/core.scrolling.js b/src/warden-server/contrib/wardenweb/datatables/media/src/core/core.scrolling.js new file mode 100644 index 0000000..4b13bfd --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/src/core/core.scrolling.js @@ -0,0 +1,482 @@ + + +/** + * Add any control elements for the table - specifically scrolling + * @param {object} oSettings dataTables settings object + * @returns {node} Node to add to the DOM + * @memberof DataTable#oApi + */ +function _fnFeatureHtmlTable ( oSettings ) +{ + /* Check if scrolling is enabled or not - if not then leave the DOM unaltered */ + if ( oSettings.oScroll.sX === "" && oSettings.oScroll.sY === "" ) + { + return oSettings.nTable; + } + + /* + * The HTML structure that we want to generate in this function is: + * div - nScroller + * div - nScrollHead + * div - nScrollHeadInner + * table - nScrollHeadTable + * thead - nThead + * div - nScrollBody + * table - oSettings.nTable + * thead - nTheadSize + * tbody - nTbody + * div - nScrollFoot + * div - nScrollFootInner + * table - nScrollFootTable + * tfoot - nTfoot + */ + var + nScroller = document.createElement('div'), + nScrollHead = document.createElement('div'), + nScrollHeadInner = document.createElement('div'), + nScrollBody = document.createElement('div'), + nScrollFoot = document.createElement('div'), + nScrollFootInner = document.createElement('div'), + nScrollHeadTable = oSettings.nTable.cloneNode(false), + nScrollFootTable = oSettings.nTable.cloneNode(false), + nThead = oSettings.nTable.getElementsByTagName('thead')[0], + nTfoot = oSettings.nTable.getElementsByTagName('tfoot').length === 0 ? null : + oSettings.nTable.getElementsByTagName('tfoot')[0], + oClasses = oSettings.oClasses; + + nScrollHead.appendChild( nScrollHeadInner ); + nScrollFoot.appendChild( nScrollFootInner ); + nScrollBody.appendChild( oSettings.nTable ); + nScroller.appendChild( nScrollHead ); + nScroller.appendChild( nScrollBody ); + nScrollHeadInner.appendChild( nScrollHeadTable ); + nScrollHeadTable.appendChild( nThead ); + if ( nTfoot !== null ) + { + nScroller.appendChild( nScrollFoot ); + nScrollFootInner.appendChild( nScrollFootTable ); + nScrollFootTable.appendChild( nTfoot ); + } + + nScroller.className = oClasses.sScrollWrapper; + nScrollHead.className = oClasses.sScrollHead; + nScrollHeadInner.className = oClasses.sScrollHeadInner; + nScrollBody.className = oClasses.sScrollBody; + nScrollFoot.className = oClasses.sScrollFoot; + nScrollFootInner.className = oClasses.sScrollFootInner; + + if ( oSettings.oScroll.bAutoCss ) + { + nScrollHead.style.overflow = "hidden"; + nScrollHead.style.position = "relative"; + nScrollFoot.style.overflow = "hidden"; + nScrollBody.style.overflow = "auto"; + } + + nScrollHead.style.border = "0"; + nScrollHead.style.width = "100%"; + nScrollFoot.style.border = "0"; + nScrollHeadInner.style.width = "150%"; /* will be overwritten */ + + /* Modify attributes to respect the clones */ + nScrollHeadTable.removeAttribute('id'); + nScrollHeadTable.style.marginLeft = "0"; + oSettings.nTable.style.marginLeft = "0"; + if ( nTfoot !== null ) + { + nScrollFootTable.removeAttribute('id'); + nScrollFootTable.style.marginLeft = "0"; + } + + /* Move any caption elements from the body to the header */ + var nCaptions = $(oSettings.nTable).children('caption'); + for ( var i=0, iLen=nCaptions.length ; i<iLen ; i++ ) + { + nScrollHeadTable.appendChild( nCaptions[i] ); + } + + /* + * Sizing + */ + /* When xscrolling add the width and a scroller to move the header with the body */ + if ( oSettings.oScroll.sX !== "" ) + { + nScrollHead.style.width = _fnStringToCss( oSettings.oScroll.sX ); + nScrollBody.style.width = _fnStringToCss( oSettings.oScroll.sX ); + + if ( nTfoot !== null ) + { + nScrollFoot.style.width = _fnStringToCss( oSettings.oScroll.sX ); + } + + /* When the body is scrolled, then we also want to scroll the headers */ + $(nScrollBody).scroll( function (e) { + nScrollHead.scrollLeft = this.scrollLeft; + + if ( nTfoot !== null ) + { + nScrollFoot.scrollLeft = this.scrollLeft; + } + } ); + } + + /* When yscrolling, add the height */ + if ( oSettings.oScroll.sY !== "" ) + { + nScrollBody.style.height = _fnStringToCss( oSettings.oScroll.sY ); + } + + /* Redraw - align columns across the tables */ + oSettings.aoDrawCallback.push( { + "fn": _fnScrollDraw, + "sName": "scrolling" + } ); + + /* Infinite scrolling event handlers */ + if ( oSettings.oScroll.bInfinite ) + { + $(nScrollBody).scroll( function() { + /* Use a blocker to stop scrolling from loading more data while other data is still loading */ + if ( !oSettings.bDrawing && $(this).scrollTop() !== 0 ) + { + /* Check if we should load the next data set */ + if ( $(this).scrollTop() + $(this).height() > + $(oSettings.nTable).height() - oSettings.oScroll.iLoadGap ) + { + /* Only do the redraw if we have to - we might be at the end of the data */ + if ( oSettings.fnDisplayEnd() < oSettings.fnRecordsDisplay() ) + { + _fnPageChange( oSettings, 'next' ); + _fnCalculateEnd( oSettings ); + _fnDraw( oSettings ); + } + } + } + } ); + } + + oSettings.nScrollHead = nScrollHead; + oSettings.nScrollFoot = nScrollFoot; + + return nScroller; +} + + +/** + * Update the various tables for resizing. It's a bit of a pig this function, but + * basically the idea to: + * 1. Re-create the table inside the scrolling div + * 2. Take live measurements from the DOM + * 3. Apply the measurements + * 4. Clean up + * @param {object} o dataTables settings object + * @returns {node} Node to add to the DOM + * @memberof DataTable#oApi + */ +function _fnScrollDraw ( o ) +{ + var + nScrollHeadInner = o.nScrollHead.getElementsByTagName('div')[0], + nScrollHeadTable = nScrollHeadInner.getElementsByTagName('table')[0], + nScrollBody = o.nTable.parentNode, + i, iLen, j, jLen, anHeadToSize, anHeadSizers, anFootSizers, anFootToSize, oStyle, iVis, + iWidth, aApplied=[], iSanityWidth, + nScrollFootInner = (o.nTFoot !== null) ? o.nScrollFoot.getElementsByTagName('div')[0] : null, + nScrollFootTable = (o.nTFoot !== null) ? nScrollFootInner.getElementsByTagName('table')[0] : null, + ie67 = $.browser.msie && $.browser.version <= 7; + + /* + * 1. Re-create the table inside the scrolling div + */ + + /* Remove the old minimised thead and tfoot elements in the inner table */ + var nTheadSize = o.nTable.getElementsByTagName('thead'); + if ( nTheadSize.length > 0 ) + { + o.nTable.removeChild( nTheadSize[0] ); + } + + var nTfootSize; + if ( o.nTFoot !== null ) + { + /* Remove the old minimised footer element in the cloned header */ + nTfootSize = o.nTable.getElementsByTagName('tfoot'); + if ( nTfootSize.length > 0 ) + { + o.nTable.removeChild( nTfootSize[0] ); + } + } + + /* Clone the current header and footer elements and then place it into the inner table */ + nTheadSize = o.nTHead.cloneNode(true); + o.nTable.insertBefore( nTheadSize, o.nTable.childNodes[0] ); + + if ( o.nTFoot !== null ) + { + nTfootSize = o.nTFoot.cloneNode(true); + o.nTable.insertBefore( nTfootSize, o.nTable.childNodes[1] ); + } + + /* + * 2. Take live measurements from the DOM - do not alter the DOM itself! + */ + + /* Remove old sizing and apply the calculated column widths + * Get the unique column headers in the newly created (cloned) header. We want to apply the + * calclated sizes to this header + */ + if ( o.oScroll.sX === "" ) + { + nScrollBody.style.width = '100%'; + nScrollHeadInner.parentNode.style.width = '100%'; + } + + var nThs = _fnGetUniqueThs( o, nTheadSize ); + for ( i=0, iLen=nThs.length ; i<iLen ; i++ ) + { + iVis = _fnVisibleToColumnIndex( o, i ); + nThs[i].style.width = o.aoColumns[iVis].sWidth; + } + + if ( o.nTFoot !== null ) + { + _fnApplyToChildren( function(n) { + n.style.width = ""; + }, nTfootSize.getElementsByTagName('tr') ); + } + + /* Size the table as a whole */ + iSanityWidth = $(o.nTable).outerWidth(); + if ( o.oScroll.sX === "" ) + { + /* No x scrolling */ + o.nTable.style.width = "100%"; + + /* I know this is rubbish - but IE7 will make the width of the table when 100% include + * the scrollbar - which is shouldn't. When there is a scrollbar we need to take this + * into account. + */ + if ( ie67 && ($('tbody', nScrollBody).height() > nScrollBody.offsetHeight || + $(nScrollBody).css('overflow-y') == "scroll") ) + { + o.nTable.style.width = _fnStringToCss( $(o.nTable).outerWidth()-o.oScroll.iBarWidth ); + } + } + else + { + if ( o.oScroll.sXInner !== "" ) + { + /* x scroll inner has been given - use it */ + o.nTable.style.width = _fnStringToCss(o.oScroll.sXInner); + } + else if ( iSanityWidth == $(nScrollBody).width() && + $(nScrollBody).height() < $(o.nTable).height() ) + { + /* There is y-scrolling - try to take account of the y scroll bar */ + o.nTable.style.width = _fnStringToCss( iSanityWidth-o.oScroll.iBarWidth ); + if ( $(o.nTable).outerWidth() > iSanityWidth-o.oScroll.iBarWidth ) + { + /* Not possible to take account of it */ + o.nTable.style.width = _fnStringToCss( iSanityWidth ); + } + } + else + { + /* All else fails */ + o.nTable.style.width = _fnStringToCss( iSanityWidth ); + } + } + + /* Recalculate the sanity width - now that we've applied the required width, before it was + * a temporary variable. This is required because the column width calculation is done + * before this table DOM is created. + */ + iSanityWidth = $(o.nTable).outerWidth(); + + /* We want the hidden header to have zero height, so remove padding and borders. Then + * set the width based on the real headers + */ + anHeadToSize = o.nTHead.getElementsByTagName('tr'); + anHeadSizers = nTheadSize.getElementsByTagName('tr'); + + _fnApplyToChildren( function(nSizer, nToSize) { + oStyle = nSizer.style; + oStyle.paddingTop = "0"; + oStyle.paddingBottom = "0"; + oStyle.borderTopWidth = "0"; + oStyle.borderBottomWidth = "0"; + oStyle.height = 0; + + iWidth = $(nSizer).width(); + nToSize.style.width = _fnStringToCss( iWidth ); + aApplied.push( iWidth ); + }, anHeadSizers, anHeadToSize ); + $(anHeadSizers).height(0); + + if ( o.nTFoot !== null ) + { + /* Clone the current footer and then place it into the body table as a "hidden header" */ + anFootSizers = nTfootSize.getElementsByTagName('tr'); + anFootToSize = o.nTFoot.getElementsByTagName('tr'); + + _fnApplyToChildren( function(nSizer, nToSize) { + oStyle = nSizer.style; + oStyle.paddingTop = "0"; + oStyle.paddingBottom = "0"; + oStyle.borderTopWidth = "0"; + oStyle.borderBottomWidth = "0"; + oStyle.height = 0; + + iWidth = $(nSizer).width(); + nToSize.style.width = _fnStringToCss( iWidth ); + aApplied.push( iWidth ); + }, anFootSizers, anFootToSize ); + $(anFootSizers).height(0); + } + + /* + * 3. Apply the measurements + */ + + /* "Hide" the header and footer that we used for the sizing. We want to also fix their width + * to what they currently are + */ + _fnApplyToChildren( function(nSizer) { + nSizer.innerHTML = ""; + nSizer.style.width = _fnStringToCss( aApplied.shift() ); + }, anHeadSizers ); + + if ( o.nTFoot !== null ) + { + _fnApplyToChildren( function(nSizer) { + nSizer.innerHTML = ""; + nSizer.style.width = _fnStringToCss( aApplied.shift() ); + }, anFootSizers ); + } + + /* Sanity check that the table is of a sensible width. If not then we are going to get + * misalignment - try to prevent this by not allowing the table to shrink below its min width + */ + if ( $(o.nTable).outerWidth() < iSanityWidth ) + { + /* The min width depends upon if we have a vertical scrollbar visible or not */ + var iCorrection = ((nScrollBody.scrollHeight > nScrollBody.offsetHeight || + $(nScrollBody).css('overflow-y') == "scroll")) ? + iSanityWidth+o.oScroll.iBarWidth : iSanityWidth; + + /* IE6/7 are a law unto themselves... */ + if ( ie67 && (nScrollBody.scrollHeight > + nScrollBody.offsetHeight || $(nScrollBody).css('overflow-y') == "scroll") ) + { + o.nTable.style.width = _fnStringToCss( iCorrection-o.oScroll.iBarWidth ); + } + + /* Apply the calculated minimum width to the table wrappers */ + nScrollBody.style.width = _fnStringToCss( iCorrection ); + nScrollHeadInner.parentNode.style.width = _fnStringToCss( iCorrection ); + + if ( o.nTFoot !== null ) + { + nScrollFootInner.parentNode.style.width = _fnStringToCss( iCorrection ); + } + + /* And give the user a warning that we've stopped the table getting too small */ + if ( o.oScroll.sX === "" ) + { + _fnLog( o, 1, "The table cannot fit into the current element which will cause column"+ + " misalignment. The table has been drawn at its minimum possible width." ); + } + else if ( o.oScroll.sXInner !== "" ) + { + _fnLog( o, 1, "The table cannot fit into the current element which will cause column"+ + " misalignment. Increase the sScrollXInner value or remove it to allow automatic"+ + " calculation" ); + } + } + else + { + nScrollBody.style.width = _fnStringToCss( '100%' ); + nScrollHeadInner.parentNode.style.width = _fnStringToCss( '100%' ); + + if ( o.nTFoot !== null ) + { + nScrollFootInner.parentNode.style.width = _fnStringToCss( '100%' ); + } + } + + + /* + * 4. Clean up + */ + if ( o.oScroll.sY === "" ) + { + /* IE7< puts a vertical scrollbar in place (when it shouldn't be) due to subtracting + * the scrollbar height from the visible display, rather than adding it on. We need to + * set the height in order to sort this. Don't want to do it in any other browsers. + */ + if ( ie67 ) + { + nScrollBody.style.height = _fnStringToCss( o.nTable.offsetHeight+o.oScroll.iBarWidth ); + } + } + + if ( o.oScroll.sY !== "" && o.oScroll.bCollapse ) + { + nScrollBody.style.height = _fnStringToCss( o.oScroll.sY ); + + var iExtra = (o.oScroll.sX !== "" && o.nTable.offsetWidth > nScrollBody.offsetWidth) ? + o.oScroll.iBarWidth : 0; + if ( o.nTable.offsetHeight < nScrollBody.offsetHeight ) + { + nScrollBody.style.height = _fnStringToCss( $(o.nTable).height()+iExtra ); + } + } + + /* Finally set the width's of the header and footer tables */ + var iOuterWidth = $(o.nTable).outerWidth(); + nScrollHeadTable.style.width = _fnStringToCss( iOuterWidth ); + nScrollHeadInner.style.width = _fnStringToCss( iOuterWidth ); + + if ( o.nTFoot !== null ) + { + nScrollFootInner.style.width = _fnStringToCss( o.nTable.offsetWidth ); + nScrollFootTable.style.width = _fnStringToCss( o.nTable.offsetWidth ); + } + + /* If sorting or filtering has occurred, jump the scrolling back to the top */ + if ( o.bSorted || o.bFiltered ) + { + nScrollBody.scrollTop = 0; + } +} + + +/** + * Apply a given function to the display child nodes of an element array (typically + * TD children of TR rows + * @param {function} fn Method to apply to the objects + * @param array {nodes} an1 List of elements to look through for display children + * @param array {nodes} an2 Another list (identical structure to the first) - optional + * @memberof DataTable#oApi + */ +function _fnApplyToChildren( fn, an1, an2 ) +{ + for ( var i=0, iLen=an1.length ; i<iLen ; i++ ) + { + for ( var j=0, jLen=an1[i].childNodes.length ; j<jLen ; j++ ) + { + if ( an1[i].childNodes[j].nodeType == 1 ) + { + if ( an2 ) + { + fn( an1[i].childNodes[j], an2[i].childNodes[j] ); + } + else + { + fn( an1[i].childNodes[j] ); + } + } + } + } +} + diff --git a/src/warden-server/contrib/wardenweb/datatables/media/src/core/core.sizing.js b/src/warden-server/contrib/wardenweb/datatables/media/src/core/core.sizing.js new file mode 100644 index 0000000..81b217a --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/src/core/core.sizing.js @@ -0,0 +1,405 @@ + + +/** + * Convert a CSS unit width to pixels (e.g. 2em) + * @param {string} sWidth width to be converted + * @param {node} nParent parent to get the with for (required for relative widths) - optional + * @returns {int} iWidth width in pixels + * @memberof DataTable#oApi + */ +function _fnConvertToWidth ( sWidth, nParent ) +{ + if ( !sWidth || sWidth === null || sWidth === '' ) + { + return 0; + } + + if ( !nParent ) + { + nParent = document.getElementsByTagName('body')[0]; + } + + var iWidth; + var nTmp = document.createElement( "div" ); + nTmp.style.width = _fnStringToCss( sWidth ); + + nParent.appendChild( nTmp ); + iWidth = nTmp.offsetWidth; + nParent.removeChild( nTmp ); + + return ( iWidth ); +} + + +/** + * Calculate the width of columns for the table + * @param {object} oSettings dataTables settings object + * @memberof DataTable#oApi + */ +function _fnCalculateColumnWidths ( oSettings ) +{ + var iTableWidth = oSettings.nTable.offsetWidth; + var iUserInputs = 0; + var iTmpWidth; + var iVisibleColumns = 0; + var iColums = oSettings.aoColumns.length; + var i, iIndex, iCorrector, iWidth; + var oHeaders = $('th', oSettings.nTHead); + var widthAttr = oSettings.nTable.getAttribute('width'); + + /* Convert any user input sizes into pixel sizes */ + for ( i=0 ; i<iColums ; i++ ) + { + if ( oSettings.aoColumns[i].bVisible ) + { + iVisibleColumns++; + + if ( oSettings.aoColumns[i].sWidth !== null ) + { + iTmpWidth = _fnConvertToWidth( oSettings.aoColumns[i].sWidthOrig, + oSettings.nTable.parentNode ); + if ( iTmpWidth !== null ) + { + oSettings.aoColumns[i].sWidth = _fnStringToCss( iTmpWidth ); + } + + iUserInputs++; + } + } + } + + /* If the number of columns in the DOM equals the number that we have to process in + * DataTables, then we can use the offsets that are created by the web-browser. No custom + * sizes can be set in order for this to happen, nor scrolling used + */ + if ( iColums == oHeaders.length && iUserInputs === 0 && iVisibleColumns == iColums && + oSettings.oScroll.sX === "" && oSettings.oScroll.sY === "" ) + { + for ( i=0 ; i<oSettings.aoColumns.length ; i++ ) + { + iTmpWidth = $(oHeaders[i]).width(); + if ( iTmpWidth !== null ) + { + oSettings.aoColumns[i].sWidth = _fnStringToCss( iTmpWidth ); + } + } + } + else + { + /* Otherwise we are going to have to do some calculations to get the width of each column. + * Construct a 1 row table with the widest node in the data, and any user defined widths, + * then insert it into the DOM and allow the browser to do all the hard work of + * calculating table widths. + */ + var + nCalcTmp = oSettings.nTable.cloneNode( false ), + nTheadClone = oSettings.nTHead.cloneNode(true), + nBody = document.createElement( 'tbody' ), + nTr = document.createElement( 'tr' ), + nDivSizing; + + nCalcTmp.removeAttribute( "id" ); + nCalcTmp.appendChild( nTheadClone ); + if ( oSettings.nTFoot !== null ) + { + nCalcTmp.appendChild( oSettings.nTFoot.cloneNode(true) ); + _fnApplyToChildren( function(n) { + n.style.width = ""; + }, nCalcTmp.getElementsByTagName('tr') ); + } + + nCalcTmp.appendChild( nBody ); + nBody.appendChild( nTr ); + + /* Remove any sizing that was previously applied by the styles */ + var jqColSizing = $('thead th', nCalcTmp); + if ( jqColSizing.length === 0 ) + { + jqColSizing = $('tbody tr:eq(0)>td', nCalcTmp); + } + + /* Apply custom sizing to the cloned header */ + var nThs = _fnGetUniqueThs( oSettings, nTheadClone ); + iCorrector = 0; + for ( i=0 ; i<iColums ; i++ ) + { + var oColumn = oSettings.aoColumns[i]; + if ( oColumn.bVisible && oColumn.sWidthOrig !== null && oColumn.sWidthOrig !== "" ) + { + nThs[i-iCorrector].style.width = _fnStringToCss( oColumn.sWidthOrig ); + } + else if ( oColumn.bVisible ) + { + nThs[i-iCorrector].style.width = ""; + } + else + { + iCorrector++; + } + } + + /* Find the biggest td for each column and put it into the table */ + for ( i=0 ; i<iColums ; i++ ) + { + if ( oSettings.aoColumns[i].bVisible ) + { + var nTd = _fnGetWidestNode( oSettings, i ); + if ( nTd !== null ) + { + nTd = nTd.cloneNode(true); + if ( oSettings.aoColumns[i].sContentPadding !== "" ) + { + nTd.innerHTML += oSettings.aoColumns[i].sContentPadding; + } + nTr.appendChild( nTd ); + } + } + } + + /* Build the table and 'display' it */ + var nWrapper = oSettings.nTable.parentNode; + nWrapper.appendChild( nCalcTmp ); + + /* When scrolling (X or Y) we want to set the width of the table as appropriate. However, + * when not scrolling leave the table width as it is. This results in slightly different, + * but I think correct behaviour + */ + if ( oSettings.oScroll.sX !== "" && oSettings.oScroll.sXInner !== "" ) + { + nCalcTmp.style.width = _fnStringToCss(oSettings.oScroll.sXInner); + } + else if ( oSettings.oScroll.sX !== "" ) + { + nCalcTmp.style.width = ""; + if ( $(nCalcTmp).width() < nWrapper.offsetWidth ) + { + nCalcTmp.style.width = _fnStringToCss( nWrapper.offsetWidth ); + } + } + else if ( oSettings.oScroll.sY !== "" ) + { + nCalcTmp.style.width = _fnStringToCss( nWrapper.offsetWidth ); + } + else if ( widthAttr ) + { + nCalcTmp.style.width = _fnStringToCss( widthAttr ); + } + nCalcTmp.style.visibility = "hidden"; + + /* Scrolling considerations */ + _fnScrollingWidthAdjust( oSettings, nCalcTmp ); + + /* Read the width's calculated by the browser and store them for use by the caller. We + * first of all try to use the elements in the body, but it is possible that there are + * no elements there, under which circumstances we use the header elements + */ + var oNodes = $("tbody tr:eq(0)", nCalcTmp).children(); + if ( oNodes.length === 0 ) + { + oNodes = _fnGetUniqueThs( oSettings, $('thead', nCalcTmp)[0] ); + } + + /* Browsers need a bit of a hand when a width is assigned to any columns when + * x-scrolling as they tend to collapse the table to the min-width, even if + * we sent the column widths. So we need to keep track of what the table width + * should be by summing the user given values, and the automatic values + */ + if ( oSettings.oScroll.sX !== "" ) + { + var iTotal = 0; + iCorrector = 0; + for ( i=0 ; i<oSettings.aoColumns.length ; i++ ) + { + if ( oSettings.aoColumns[i].bVisible ) + { + if ( oSettings.aoColumns[i].sWidthOrig === null ) + { + iTotal += $(oNodes[iCorrector]).outerWidth(); + } + else + { + iTotal += parseInt(oSettings.aoColumns[i].sWidth.replace('px',''), 10) + + ($(oNodes[iCorrector]).outerWidth() - $(oNodes[iCorrector]).width()); + } + iCorrector++; + } + } + + nCalcTmp.style.width = _fnStringToCss( iTotal ); + oSettings.nTable.style.width = _fnStringToCss( iTotal ); + } + + iCorrector = 0; + for ( i=0 ; i<oSettings.aoColumns.length ; i++ ) + { + if ( oSettings.aoColumns[i].bVisible ) + { + iWidth = $(oNodes[iCorrector]).width(); + if ( iWidth !== null && iWidth > 0 ) + { + oSettings.aoColumns[i].sWidth = _fnStringToCss( iWidth ); + } + iCorrector++; + } + } + + var cssWidth = $(nCalcTmp).css('width'); + oSettings.nTable.style.width = (cssWidth.indexOf('%') !== -1) ? + cssWidth : _fnStringToCss( $(nCalcTmp).outerWidth() ); + nCalcTmp.parentNode.removeChild( nCalcTmp ); + } + + if ( widthAttr ) + { + oSettings.nTable.style.width = _fnStringToCss( widthAttr ); + } +} + + +/** + * Adjust a table's width to take account of scrolling + * @param {object} oSettings dataTables settings object + * @param {node} n table node + * @memberof DataTable#oApi + */ +function _fnScrollingWidthAdjust ( oSettings, n ) +{ + if ( oSettings.oScroll.sX === "" && oSettings.oScroll.sY !== "" ) + { + /* When y-scrolling only, we want to remove the width of the scroll bar so the table + * + scroll bar will fit into the area avaialble. + */ + var iOrigWidth = $(n).width(); + n.style.width = _fnStringToCss( $(n).outerWidth()-oSettings.oScroll.iBarWidth ); + } + else if ( oSettings.oScroll.sX !== "" ) + { + /* When x-scrolling both ways, fix the table at it's current size, without adjusting */ + n.style.width = _fnStringToCss( $(n).outerWidth() ); + } +} + + +/** + * Get the widest node + * @param {object} oSettings dataTables settings object + * @param {int} iCol column of interest + * @returns {string} max strlens for each column + * @memberof DataTable#oApi + */ +function _fnGetWidestNode( oSettings, iCol ) +{ + var iMaxIndex = _fnGetMaxLenString( oSettings, iCol ); + if ( iMaxIndex < 0 ) + { + return null; + } + + if ( oSettings.aoData[iMaxIndex].nTr === null ) + { + var n = document.createElement('td'); + n.innerHTML = _fnGetCellData( oSettings, iMaxIndex, iCol, '' ); + return n; + } + return _fnGetTdNodes(oSettings, iMaxIndex)[iCol]; +} + + +/** + * Get the maximum strlen for each data column + * @param {object} oSettings dataTables settings object + * @param {int} iCol column of interest + * @returns {string} max strlens for each column + * @memberof DataTable#oApi + */ +function _fnGetMaxLenString( oSettings, iCol ) +{ + var iMax = -1; + var iMaxIndex = -1; + + for ( var i=0 ; i<oSettings.aoData.length ; i++ ) + { + var s = _fnGetCellData( oSettings, i, iCol, 'display' )+""; + s = s.replace( /<.*?>/g, "" ); + if ( s.length > iMax ) + { + iMax = s.length; + iMaxIndex = i; + } + } + + return iMaxIndex; +} + + +/** + * Append a CSS unit (only if required) to a string + * @param {array} aArray1 first array + * @param {array} aArray2 second array + * @returns {int} 0 if match, 1 if length is different, 2 if no match + * @memberof DataTable#oApi + */ +function _fnStringToCss( s ) +{ + if ( s === null ) + { + return "0px"; + } + + if ( typeof s == 'number' ) + { + if ( s < 0 ) + { + return "0px"; + } + return s+"px"; + } + + /* Check if the last character is not 0-9 */ + var c = s.charCodeAt( s.length-1 ); + if (c < 0x30 || c > 0x39) + { + return s; + } + return s+"px"; +} + + +/** + * Get the width of a scroll bar in this browser being used + * @returns {int} width in pixels + * @memberof DataTable#oApi + */ +function _fnScrollBarWidth () +{ + var inner = document.createElement('p'); + var style = inner.style; + style.width = "100%"; + style.height = "200px"; + style.padding = "0px"; + + var outer = document.createElement('div'); + style = outer.style; + style.position = "absolute"; + style.top = "0px"; + style.left = "0px"; + style.visibility = "hidden"; + style.width = "200px"; + style.height = "150px"; + style.padding = "0px"; + style.overflow = "hidden"; + outer.appendChild(inner); + + document.body.appendChild(outer); + var w1 = inner.offsetWidth; + outer.style.overflow = 'scroll'; + var w2 = inner.offsetWidth; + if ( w1 == w2 ) + { + w2 = outer.clientWidth; + } + + document.body.removeChild(outer); + return (w1 - w2); +} + diff --git a/src/warden-server/contrib/wardenweb/datatables/media/src/core/core.sort.js b/src/warden-server/contrib/wardenweb/datatables/media/src/core/core.sort.js new file mode 100644 index 0000000..6a02ab2 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/src/core/core.sort.js @@ -0,0 +1,455 @@ + + +/** + * Change the order of the table + * @param {object} oSettings dataTables settings object + * @param {bool} bApplyClasses optional - should we apply classes or not + * @memberof DataTable#oApi + */ +function _fnSort ( oSettings, bApplyClasses ) +{ + var + i, iLen, j, jLen, k, kLen, + sDataType, nTh, + aaSort = [], + aiOrig = [], + oSort = DataTable.ext.oSort, + aoData = oSettings.aoData, + aoColumns = oSettings.aoColumns, + oAria = oSettings.oLanguage.oAria; + + /* No sorting required if server-side or no sorting array */ + if ( !oSettings.oFeatures.bServerSide && + (oSettings.aaSorting.length !== 0 || oSettings.aaSortingFixed !== null) ) + { + if ( oSettings.aaSortingFixed !== null ) + { + aaSort = oSettings.aaSortingFixed.concat( oSettings.aaSorting ); + } + else + { + aaSort = oSettings.aaSorting.slice(); + } + + /* If there is a sorting data type, and a fuction belonging to it, then we need to + * get the data from the developer's function and apply it for this column + */ + for ( i=0 ; i<aaSort.length ; i++ ) + { + var iColumn = aaSort[i][0]; + var iVisColumn = _fnColumnIndexToVisible( oSettings, iColumn ); + sDataType = oSettings.aoColumns[ iColumn ].sSortDataType; + if ( DataTable.ext.afnSortData[sDataType] ) + { + var aData = DataTable.ext.afnSortData[sDataType]( oSettings, iColumn, iVisColumn ); + for ( j=0, jLen=aoData.length ; j<jLen ; j++ ) + { + _fnSetCellData( oSettings, j, iColumn, aData[j] ); + } + } + } + + /* Create a value - key array of the current row positions such that we can use their + * current position during the sort, if values match, in order to perform stable sorting + */ + for ( i=0, iLen=oSettings.aiDisplayMaster.length ; i<iLen ; i++ ) + { + aiOrig[ oSettings.aiDisplayMaster[i] ] = i; + } + + /* Build an internal data array which is specific to the sort, so we can get and prep + * the data to be sorted only once, rather than needing to do it every time the sorting + * function runs. This make the sorting function a very simple comparison + */ + var iSortLen = aaSort.length; + var fnSortFormat, aDataSort; + for ( i=0, iLen=aoData.length ; i<iLen ; i++ ) + { + for ( j=0 ; j<iSortLen ; j++ ) + { + aDataSort = aoColumns[ aaSort[j][0] ].aDataSort; + + for ( k=0, kLen=aDataSort.length ; k<kLen ; k++ ) + { + sDataType = aoColumns[ aDataSort[k] ].sType; + fnSortFormat = oSort[ (sDataType ? sDataType : 'string')+"-pre" ]; + + aoData[i]._aSortData[ aDataSort[k] ] = fnSortFormat ? + fnSortFormat( _fnGetCellData( oSettings, i, aDataSort[k], 'sort' ) ) : + _fnGetCellData( oSettings, i, aDataSort[k], 'sort' ); + } + } + } + + /* Do the sort - here we want multi-column sorting based on a given data source (column) + * and sorting function (from oSort) in a certain direction. It's reasonably complex to + * follow on it's own, but this is what we want (example two column sorting): + * fnLocalSorting = function(a,b){ + * var iTest; + * iTest = oSort['string-asc']('data11', 'data12'); + * if (iTest !== 0) + * return iTest; + * iTest = oSort['numeric-desc']('data21', 'data22'); + * if (iTest !== 0) + * return iTest; + * return oSort['numeric-asc']( aiOrig[a], aiOrig[b] ); + * } + * Basically we have a test for each sorting column, if the data in that column is equal, + * test the next column. If all columns match, then we use a numeric sort on the row + * positions in the original data array to provide a stable sort. + */ + oSettings.aiDisplayMaster.sort( function ( a, b ) { + var k, l, lLen, iTest, aDataSort, sDataType; + for ( k=0 ; k<iSortLen ; k++ ) + { + aDataSort = aoColumns[ aaSort[k][0] ].aDataSort; + + for ( l=0, lLen=aDataSort.length ; l<lLen ; l++ ) + { + sDataType = aoColumns[ aDataSort[l] ].sType; + + iTest = oSort[ (sDataType ? sDataType : 'string')+"-"+aaSort[k][1] ]( + aoData[a]._aSortData[ aDataSort[l] ], + aoData[b]._aSortData[ aDataSort[l] ] + ); + + if ( iTest !== 0 ) + { + return iTest; + } + } + } + + return oSort['numeric-asc']( aiOrig[a], aiOrig[b] ); + } ); + } + + /* Alter the sorting classes to take account of the changes */ + if ( (bApplyClasses === undefined || bApplyClasses) && !oSettings.oFeatures.bDeferRender ) + { + _fnSortingClasses( oSettings ); + } + + for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ ) + { + nTh = aoColumns[i].nTh; + nTh.removeAttribute('aria-sort'); + nTh.removeAttribute('aria-label'); + + /* In ARIA only the first sorting column can be marked as sorting - no multi-sort option */ + if ( aoColumns[i].bSortable ) + { + if ( aaSort.length > 0 && aaSort[0][0] == i ) + { + nTh.setAttribute('aria-sort', aaSort[0][1]=="asc" ? "ascending" : "descending" ); + + var nextSort = (aoColumns[i].asSorting[ aaSort[0][2]+1 ]) ? + aoColumns[i].asSorting[ aaSort[0][2]+1 ] : aoColumns[i].asSorting[0]; + nTh.setAttribute('aria-label', aoColumns[i].sTitle+ + (nextSort=="asc" ? oAria.sSortAscending : oAria.sSortDescending) ); + } + else + { + nTh.setAttribute('aria-label', aoColumns[i].sTitle+ + (aoColumns[i].asSorting[0]=="asc" ? oAria.sSortAscending : oAria.sSortDescending) ); + } + } + else + { + nTh.setAttribute('aria-label', aoColumns[i].sTitle); + } + } + + /* Tell the draw function that we have sorted the data */ + oSettings.bSorted = true; + $(oSettings.oInstance).trigger('sort', oSettings); + + /* Copy the master data into the draw array and re-draw */ + if ( oSettings.oFeatures.bFilter ) + { + /* _fnFilter() will redraw the table for us */ + _fnFilterComplete( oSettings, oSettings.oPreviousSearch, 1 ); + } + else + { + oSettings.aiDisplay = oSettings.aiDisplayMaster.slice(); + oSettings._iDisplayStart = 0; /* reset display back to page 0 */ + _fnCalculateEnd( oSettings ); + _fnDraw( oSettings ); + } +} + + +/** + * Attach a sort handler (click) to a node + * @param {object} oSettings dataTables settings object + * @param {node} nNode node to attach the handler to + * @param {int} iDataIndex column sorting index + * @param {function} [fnCallback] callback function + * @memberof DataTable#oApi + */ +function _fnSortAttachListener ( oSettings, nNode, iDataIndex, fnCallback ) +{ + _fnBindAction( nNode, {}, function (e) { + /* If the column is not sortable - don't to anything */ + if ( oSettings.aoColumns[iDataIndex].bSortable === false ) + { + return; + } + + /* + * This is a little bit odd I admit... I declare a temporary function inside the scope of + * _fnBuildHead and the click handler in order that the code presented here can be used + * twice - once for when bProcessing is enabled, and another time for when it is + * disabled, as we need to perform slightly different actions. + * Basically the issue here is that the Javascript engine in modern browsers don't + * appear to allow the rendering engine to update the display while it is still excuting + * it's thread (well - it does but only after long intervals). This means that the + * 'processing' display doesn't appear for a table sort. To break the js thread up a bit + * I force an execution break by using setTimeout - but this breaks the expected + * thread continuation for the end-developer's point of view (their code would execute + * too early), so we on;y do it when we absolutely have to. + */ + var fnInnerSorting = function () { + var iColumn, iNextSort; + + /* If the shift key is pressed then we are multipe column sorting */ + if ( e.shiftKey ) + { + /* Are we already doing some kind of sort on this column? */ + var bFound = false; + for ( var i=0 ; i<oSettings.aaSorting.length ; i++ ) + { + if ( oSettings.aaSorting[i][0] == iDataIndex ) + { + bFound = true; + iColumn = oSettings.aaSorting[i][0]; + iNextSort = oSettings.aaSorting[i][2]+1; + + if ( !oSettings.aoColumns[iColumn].asSorting[iNextSort] ) + { + /* Reached the end of the sorting options, remove from multi-col sort */ + oSettings.aaSorting.splice( i, 1 ); + } + else + { + /* Move onto next sorting direction */ + oSettings.aaSorting[i][1] = oSettings.aoColumns[iColumn].asSorting[iNextSort]; + oSettings.aaSorting[i][2] = iNextSort; + } + break; + } + } + + /* No sort yet - add it in */ + if ( bFound === false ) + { + oSettings.aaSorting.push( [ iDataIndex, + oSettings.aoColumns[iDataIndex].asSorting[0], 0 ] ); + } + } + else + { + /* If no shift key then single column sort */ + if ( oSettings.aaSorting.length == 1 && oSettings.aaSorting[0][0] == iDataIndex ) + { + iColumn = oSettings.aaSorting[0][0]; + iNextSort = oSettings.aaSorting[0][2]+1; + if ( !oSettings.aoColumns[iColumn].asSorting[iNextSort] ) + { + iNextSort = 0; + } + oSettings.aaSorting[0][1] = oSettings.aoColumns[iColumn].asSorting[iNextSort]; + oSettings.aaSorting[0][2] = iNextSort; + } + else + { + oSettings.aaSorting.splice( 0, oSettings.aaSorting.length ); + oSettings.aaSorting.push( [ iDataIndex, + oSettings.aoColumns[iDataIndex].asSorting[0], 0 ] ); + } + } + + /* Run the sort */ + _fnSort( oSettings ); + }; /* /fnInnerSorting */ + + if ( !oSettings.oFeatures.bProcessing ) + { + fnInnerSorting(); + } + else + { + _fnProcessingDisplay( oSettings, true ); + setTimeout( function() { + fnInnerSorting(); + if ( !oSettings.oFeatures.bServerSide ) + { + _fnProcessingDisplay( oSettings, false ); + } + }, 0 ); + } + + /* Call the user specified callback function - used for async user interaction */ + if ( typeof fnCallback == 'function' ) + { + fnCallback( oSettings ); + } + } ); +} + + +/** + * Set the sorting classes on the header, Note: it is safe to call this function + * when bSort and bSortClasses are false + * @param {object} oSettings dataTables settings object + * @memberof DataTable#oApi + */ +function _fnSortingClasses( oSettings ) +{ + var i, iLen, j, jLen, iFound; + var aaSort, sClass; + var iColumns = oSettings.aoColumns.length; + var oClasses = oSettings.oClasses; + + for ( i=0 ; i<iColumns ; i++ ) + { + if ( oSettings.aoColumns[i].bSortable ) + { + $(oSettings.aoColumns[i].nTh).removeClass( oClasses.sSortAsc +" "+ oClasses.sSortDesc + + " "+ oSettings.aoColumns[i].sSortingClass ); + } + } + + if ( oSettings.aaSortingFixed !== null ) + { + aaSort = oSettings.aaSortingFixed.concat( oSettings.aaSorting ); + } + else + { + aaSort = oSettings.aaSorting.slice(); + } + + /* Apply the required classes to the header */ + for ( i=0 ; i<oSettings.aoColumns.length ; i++ ) + { + if ( oSettings.aoColumns[i].bSortable ) + { + sClass = oSettings.aoColumns[i].sSortingClass; + iFound = -1; + for ( j=0 ; j<aaSort.length ; j++ ) + { + if ( aaSort[j][0] == i ) + { + sClass = ( aaSort[j][1] == "asc" ) ? + oClasses.sSortAsc : oClasses.sSortDesc; + iFound = j; + break; + } + } + $(oSettings.aoColumns[i].nTh).addClass( sClass ); + + if ( oSettings.bJUI ) + { + /* jQuery UI uses extra markup */ + var jqSpan = $("span."+oClasses.sSortIcon, oSettings.aoColumns[i].nTh); + jqSpan.removeClass(oClasses.sSortJUIAsc +" "+ oClasses.sSortJUIDesc +" "+ + oClasses.sSortJUI +" "+ oClasses.sSortJUIAscAllowed +" "+ oClasses.sSortJUIDescAllowed ); + + var sSpanClass; + if ( iFound == -1 ) + { + sSpanClass = oSettings.aoColumns[i].sSortingClassJUI; + } + else if ( aaSort[iFound][1] == "asc" ) + { + sSpanClass = oClasses.sSortJUIAsc; + } + else + { + sSpanClass = oClasses.sSortJUIDesc; + } + + jqSpan.addClass( sSpanClass ); + } + } + else + { + /* No sorting on this column, so add the base class. This will have been assigned by + * _fnAddColumn + */ + $(oSettings.aoColumns[i].nTh).addClass( oSettings.aoColumns[i].sSortingClass ); + } + } + + /* + * Apply the required classes to the table body + * Note that this is given as a feature switch since it can significantly slow down a sort + * on large data sets (adding and removing of classes is always slow at the best of times..) + * Further to this, note that this code is admitadly fairly ugly. It could be made a lot + * simpiler using jQuery selectors and add/removeClass, but that is significantly slower + * (on the order of 5 times slower) - hence the direct DOM manipulation here. + * Note that for defered drawing we do use jQuery - the reason being that taking the first + * row found to see if the whole column needs processed can miss classes since the first + * column might be new. + */ + sClass = oClasses.sSortColumn; + + if ( oSettings.oFeatures.bSort && oSettings.oFeatures.bSortClasses ) + { + var nTds = _fnGetTdNodes( oSettings ); + + /* Remove the old classes */ + if ( oSettings.oFeatures.bDeferRender ) + { + $(nTds).removeClass(sClass+'1 '+sClass+'2 '+sClass+'3'); + } + else if ( nTds.length >= iColumns ) + { + for ( i=0 ; i<iColumns ; i++ ) + { + if ( nTds[i].className.indexOf(sClass+"1") != -1 ) + { + for ( j=0, jLen=(nTds.length/iColumns) ; j<jLen ; j++ ) + { + nTds[(iColumns*j)+i].className = + $.trim( nTds[(iColumns*j)+i].className.replace( sClass+"1", "" ) ); + } + } + else if ( nTds[i].className.indexOf(sClass+"2") != -1 ) + { + for ( j=0, jLen=(nTds.length/iColumns) ; j<jLen ; j++ ) + { + nTds[(iColumns*j)+i].className = + $.trim( nTds[(iColumns*j)+i].className.replace( sClass+"2", "" ) ); + } + } + else if ( nTds[i].className.indexOf(sClass+"3") != -1 ) + { + for ( j=0, jLen=(nTds.length/iColumns) ; j<jLen ; j++ ) + { + nTds[(iColumns*j)+i].className = + $.trim( nTds[(iColumns*j)+i].className.replace( " "+sClass+"3", "" ) ); + } + } + } + } + + /* Add the new classes to the table */ + var iClass = 1, iTargetCol; + for ( i=0 ; i<aaSort.length ; i++ ) + { + iTargetCol = parseInt( aaSort[i][0], 10 ); + for ( j=0, jLen=(nTds.length/iColumns) ; j<jLen ; j++ ) + { + nTds[(iColumns*j)+iTargetCol].className += " "+sClass+iClass; + } + + if ( iClass < 3 ) + { + iClass++; + } + } + } +} + diff --git a/src/warden-server/contrib/wardenweb/datatables/media/src/core/core.state.js b/src/warden-server/contrib/wardenweb/datatables/media/src/core/core.state.js new file mode 100644 index 0000000..de668f9 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/src/core/core.state.js @@ -0,0 +1,201 @@ + + +/** + * Save the state of a table in a cookie such that the page can be reloaded + * @param {object} oSettings dataTables settings object + * @memberof DataTable#oApi + */ +function _fnSaveState ( oSettings ) +{ + if ( !oSettings.oFeatures.bStateSave || oSettings.bDestroying ) + { + return; + } + + /* Store the interesting variables */ + var i, iLen, bInfinite=oSettings.oScroll.bInfinite; + var oState = { + "iCreate": new Date().getTime(), + "iStart": (bInfinite ? 0 : oSettings._iDisplayStart), + "iEnd": (bInfinite ? oSettings._iDisplayLength : oSettings._iDisplayEnd), + "iLength": oSettings._iDisplayLength, + "aaSorting": $.extend( true, [], oSettings.aaSorting ), + "oSearch": $.extend( true, {}, oSettings.oPreviousSearch ), + "aoSearchCols": $.extend( true, [], oSettings.aoPreSearchCols ), + "abVisCols": [] + }; + + for ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ ) + { + oState.abVisCols.push( oSettings.aoColumns[i].bVisible ); + } + + _fnCallbackFire( oSettings, "aoStateSaveParams", 'stateSaveParams', [oSettings, oState] ); + + oSettings.fnStateSave.call( oSettings.oInstance, oSettings, oState ); +} + + +/** + * Attempt to load a saved table state from a cookie + * @param {object} oSettings dataTables settings object + * @param {object} oInit DataTables init object so we can override settings + * @memberof DataTable#oApi + */ +function _fnLoadState ( oSettings, oInit ) +{ + if ( !oSettings.oFeatures.bStateSave ) + { + return; + } + + var oData = oSettings.fnStateLoad.call( oSettings.oInstance, oSettings ); + if ( !oData ) + { + return; + } + + /* Allow custom and plug-in manipulation functions to alter the saved data set and + * cancelling of loading by returning false + */ + var abStateLoad = _fnCallbackFire( oSettings, 'aoStateLoadParams', 'stateLoadParams', [oSettings, oData] ); + if ( $.inArray( false, abStateLoad ) !== -1 ) + { + return; + } + + /* Store the saved state so it might be accessed at any time */ + oSettings.oLoadedState = $.extend( true, {}, oData ); + + /* Restore key features */ + oSettings._iDisplayStart = oData.iStart; + oSettings.iInitDisplayStart = oData.iStart; + oSettings._iDisplayEnd = oData.iEnd; + oSettings._iDisplayLength = oData.iLength; + oSettings.aaSorting = oData.aaSorting.slice(); + oSettings.saved_aaSorting = oData.aaSorting.slice(); + + /* Search filtering */ + $.extend( oSettings.oPreviousSearch, oData.oSearch ); + $.extend( true, oSettings.aoPreSearchCols, oData.aoSearchCols ); + + /* Column visibility state + * Pass back visibiliy settings to the init handler, but to do not here override + * the init object that the user might have passed in + */ + oInit.saved_aoColumns = []; + for ( var i=0 ; i<oData.abVisCols.length ; i++ ) + { + oInit.saved_aoColumns[i] = {}; + oInit.saved_aoColumns[i].bVisible = oData.abVisCols[i]; + } + + _fnCallbackFire( oSettings, 'aoStateLoaded', 'stateLoaded', [oSettings, oData] ); +} + + +/** + * Create a new cookie with a value to store the state of a table + * @param {string} sName name of the cookie to create + * @param {string} sValue the value the cookie should take + * @param {int} iSecs duration of the cookie + * @param {string} sBaseName sName is made up of the base + file name - this is the base + * @param {function} fnCallback User definable function to modify the cookie + * @memberof DataTable#oApi + */ +function _fnCreateCookie ( sName, sValue, iSecs, sBaseName, fnCallback ) +{ + var date = new Date(); + date.setTime( date.getTime()+(iSecs*1000) ); + + /* + * Shocking but true - it would appear IE has major issues with having the path not having + * a trailing slash on it. We need the cookie to be available based on the path, so we + * have to append the file name to the cookie name. Appalling. Thanks to vex for adding the + * patch to use at least some of the path + */ + var aParts = window.location.pathname.split('/'); + var sNameFile = sName + '_' + aParts.pop().replace(/[\/:]/g,"").toLowerCase(); + var sFullCookie, oData; + + if ( fnCallback !== null ) + { + oData = (typeof $.parseJSON === 'function') ? + $.parseJSON( sValue ) : eval( '('+sValue+')' ); + sFullCookie = fnCallback( sNameFile, oData, date.toGMTString(), + aParts.join('/')+"/" ); + } + else + { + sFullCookie = sNameFile + "=" + encodeURIComponent(sValue) + + "; expires=" + date.toGMTString() +"; path=" + aParts.join('/')+"/"; + } + + /* Are we going to go over the cookie limit of 4KiB? If so, try to delete a cookies + * belonging to DataTables. This is FAR from bullet proof + */ + var sOldName="", iOldTime=9999999999999; + var iLength = _fnReadCookie( sNameFile )!==null ? document.cookie.length : + sFullCookie.length + document.cookie.length; + + if ( iLength+10 > 4096 ) /* Magic 10 for padding */ + { + var aCookies =document.cookie.split(';'); + for ( var i=0, iLen=aCookies.length ; i<iLen ; i++ ) + { + if ( aCookies[i].indexOf( sBaseName ) != -1 ) + { + /* It's a DataTables cookie, so eval it and check the time stamp */ + var aSplitCookie = aCookies[i].split('='); + try { oData = eval( '('+decodeURIComponent(aSplitCookie[1])+')' ); } + catch( e ) { continue; } + + if ( oData.iCreate && oData.iCreate < iOldTime ) + { + sOldName = aSplitCookie[0]; + iOldTime = oData.iCreate; + } + } + } + + if ( sOldName !== "" ) + { + document.cookie = sOldName+"=; expires=Thu, 01-Jan-1970 00:00:01 GMT; path="+ + aParts.join('/') + "/"; + } + } + + document.cookie = sFullCookie; +} + + +/** + * Read an old cookie to get a cookie with an old table state + * @param {string} sName name of the cookie to read + * @returns {string} contents of the cookie - or null if no cookie with that name found + * @memberof DataTable#oApi + */ +function _fnReadCookie ( sName ) +{ + var + aParts = window.location.pathname.split('/'), + sNameEQ = sName + '_' + aParts[aParts.length-1].replace(/[\/:]/g,"").toLowerCase() + '=', + sCookieContents = document.cookie.split(';'); + + for( var i=0 ; i<sCookieContents.length ; i++ ) + { + var c = sCookieContents[i]; + + while (c.charAt(0)==' ') + { + c = c.substring(1,c.length); + } + + if (c.indexOf(sNameEQ) === 0) + { + return decodeURIComponent( c.substring(sNameEQ.length,c.length) ); + } + } + return null; +} + diff --git a/src/warden-server/contrib/wardenweb/datatables/media/src/core/core.support.js b/src/warden-server/contrib/wardenweb/datatables/media/src/core/core.support.js new file mode 100644 index 0000000..33e2299 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/src/core/core.support.js @@ -0,0 +1,316 @@ + + +/** + * Return the settings object for a particular table + * @param {node} nTable table we are using as a dataTable + * @returns {object} Settings object - or null if not found + * @memberof DataTable#oApi + */ +function _fnSettingsFromNode ( nTable ) +{ + for ( var i=0 ; i<DataTable.settings.length ; i++ ) + { + if ( DataTable.settings[i].nTable === nTable ) + { + return DataTable.settings[i]; + } + } + + return null; +} + + +/** + * Return an array with the TR nodes for the table + * @param {object} oSettings dataTables settings object + * @returns {array} TR array + * @memberof DataTable#oApi + */ +function _fnGetTrNodes ( oSettings ) +{ + var aNodes = []; + var aoData = oSettings.aoData; + for ( var i=0, iLen=aoData.length ; i<iLen ; i++ ) + { + if ( aoData[i].nTr !== null ) + { + aNodes.push( aoData[i].nTr ); + } + } + return aNodes; +} + + +/** + * Return an flat array with all TD nodes for the table, or row + * @param {object} oSettings dataTables settings object + * @param {int} [iIndividualRow] aoData index to get the nodes for - optional + * if not given then the return array will contain all nodes for the table + * @returns {array} TD array + * @memberof DataTable#oApi + */ +function _fnGetTdNodes ( oSettings, iIndividualRow ) +{ + var anReturn = []; + var iCorrector; + var anTds; + var iRow, iRows=oSettings.aoData.length, + iColumn, iColumns, oData, sNodeName, iStart=0, iEnd=iRows; + + /* Allow the collection to be limited to just one row */ + if ( iIndividualRow !== undefined ) + { + iStart = iIndividualRow; + iEnd = iIndividualRow+1; + } + + for ( iRow=iStart ; iRow<iEnd ; iRow++ ) + { + oData = oSettings.aoData[iRow]; + if ( oData.nTr !== null ) + { + /* get the TD child nodes - taking into account text etc nodes */ + anTds = []; + for ( iColumn=0, iColumns=oData.nTr.childNodes.length ; iColumn<iColumns ; iColumn++ ) + { + sNodeName = oData.nTr.childNodes[iColumn].nodeName.toLowerCase(); + if ( sNodeName == 'td' || sNodeName == 'th' ) + { + anTds.push( oData.nTr.childNodes[iColumn] ); + } + } + + iCorrector = 0; + for ( iColumn=0, iColumns=oSettings.aoColumns.length ; iColumn<iColumns ; iColumn++ ) + { + if ( oSettings.aoColumns[iColumn].bVisible ) + { + anReturn.push( anTds[iColumn-iCorrector] ); + } + else + { + anReturn.push( oData._anHidden[iColumn] ); + iCorrector++; + } + } + } + } + + return anReturn; +} + + +/** + * Log an error message + * @param {object} oSettings dataTables settings object + * @param {int} iLevel log error messages, or display them to the user + * @param {string} sMesg error message + * @memberof DataTable#oApi + */ +function _fnLog( oSettings, iLevel, sMesg ) +{ + var sAlert = (oSettings===null) ? + "DataTables warning: "+sMesg : + "DataTables warning (table id = '"+oSettings.sTableId+"'): "+sMesg; + + if ( iLevel === 0 ) + { + if ( DataTable.ext.sErrMode == 'alert' ) + { + alert( sAlert ); + } + else + { + throw sAlert; + } + return; + } + else if ( console !== undefined && console.log ) + { + console.log( sAlert ); + } +} + + +/** + * See if a property is defined on one object, if so assign it to the other object + * @param {object} oRet target object + * @param {object} oSrc source object + * @param {string} sName property + * @param {string} [sMappedName] name to map too - optional, sName used if not given + * @memberof DataTable#oApi + */ +function _fnMap( oRet, oSrc, sName, sMappedName ) +{ + if ( sMappedName === undefined ) + { + sMappedName = sName; + } + if ( oSrc[sName] !== undefined ) + { + oRet[sMappedName] = oSrc[sName]; + } +} + + +/** + * Extend objects - very similar to jQuery.extend, but deep copy objects, and shallow + * copy arrays. The reason we need to do this, is that we don't want to deep copy array + * init values (such as aaSorting) since the dev wouldn't be able to override them, but + * we do want to deep copy arrays. + * @param {object} oOut Object to extend + * @param {object} oExtender Object from which the properties will be applied to oOut + * @returns {object} oOut Reference, just for convenience - oOut === the return. + * @memberof DataTable#oApi + * @todo This doesn't take account of arrays inside the deep copied objects. + */ +function _fnExtend( oOut, oExtender ) +{ + for ( var prop in oOut ) + { + if ( oOut.hasOwnProperty(prop) && oExtender[prop] !== undefined ) + { + if ( typeof oInit[prop] === 'object' && $.isArray(oExtender[prop]) === false ) + { + $.extend( true, oOut[prop], oExtender[prop] ); + } + else + { + oOut[prop] = oExtender[prop]; + } + } + } + + return oOut; +} + + +/** + * Bind an event handers to allow a click or return key to activate the callback. + * This is good for accessability since a return on the keyboard will have the + * same effect as a click, if the element has focus. + * @param {element} n Element to bind the action to + * @param {object} oData Data object to pass to the triggered function + * @param {function) fn Callback function for when the event is triggered + * @memberof DataTable#oApi + */ +function _fnBindAction( n, oData, fn ) +{ + $(n) + .bind( 'click.DT', oData, function (e) { + fn(e); + n.blur(); // Remove focus outline for mouse users + } ) + .bind( 'keypress.DT', oData, function (e){ + if ( e.which === 13 ) { + fn(e); + } } ) + .bind( 'selectstart.DT', function () { + /* Take the brutal approach to cancelling text selection */ + return false; + } ); +} + + +/** + * Register a callback function. Easily allows a callback function to be added to + * an array store of callback functions that can then all be called together. + * @param {object} oSettings dataTables settings object + * @param {string} sStore Name of the array storeage for the callbacks in oSettings + * @param {function} fn Function to be called back + * @param {string) sName Identifying name for the callback (i.e. a label) + * @memberof DataTable#oApi + */ +function _fnCallbackReg( oSettings, sStore, fn, sName ) +{ + if ( fn ) + { + oSettings[sStore].push( { + "fn": fn, + "sName": sName + } ); + } +} + + +/** + * Fire callback functions and trigger events. Note that the loop over the callback + * array store is done backwards! Further note that you do not want to fire off triggers + * in time sensitive applications (for example cell creation) as its slow. + * @param {object} oSettings dataTables settings object + * @param {string} sStore Name of the array storeage for the callbacks in oSettings + * @param {string} sTrigger Name of the jQuery custom event to trigger. If null no trigger + * is fired + * @param {array) aArgs Array of arguments to pass to the callback function / trigger + * @memberof DataTable#oApi + */ +function _fnCallbackFire( oSettings, sStore, sTrigger, aArgs ) +{ + var aoStore = oSettings[sStore]; + var aRet =[]; + + for ( var i=aoStore.length-1 ; i>=0 ; i-- ) + { + aRet.push( aoStore[i].fn.apply( oSettings.oInstance, aArgs ) ); + } + + if ( sTrigger !== null ) + { + $(oSettings.oInstance).trigger(sTrigger, aArgs); + } + + return aRet; +} + + +/** + * JSON stringify. If JSON.stringify it provided by the browser, json2.js or any other + * library, then we use that as it is fast, safe and accurate. If the function isn't + * available then we need to built it ourselves - the insperation for this function comes + * from Craig Buckler ( http://www.sitepoint.com/javascript-json-serialization/ ). It is + * not perfect and absolutely should not be used as a replacement to json2.js - but it does + * do what we need, without requiring a dependency for DataTables. + * @param {object} o JSON object to be converted + * @returns {string} JSON string + * @memberof DataTable#oApi + */ +var _fnJsonString = (window.JSON) ? JSON.stringify : function( o ) +{ + /* Not an object or array */ + var sType = typeof o; + if (sType !== "object" || o === null) + { + // simple data type + if (sType === "string") + { + o = '"'+o+'"'; + } + return o+""; + } + + /* If object or array, need to recurse over it */ + var + sProp, mValue, + json = [], + bArr = $.isArray(o); + + for (sProp in o) + { + mValue = o[sProp]; + sType = typeof mValue; + + if (sType === "string") + { + mValue = '"'+mValue+'"'; + } + else if (sType === "object" && mValue !== null) + { + mValue = _fnJsonString(mValue); + } + + json.push((bArr ? "" : '"'+sProp+'":') + mValue); + } + + return (bArr ? "[" : "{") + json + (bArr ? "]" : "}"); +}; + diff --git a/src/warden-server/contrib/wardenweb/datatables/media/src/ext/ext.classes.js b/src/warden-server/contrib/wardenweb/datatables/media/src/ext/ext.classes.js new file mode 100644 index 0000000..393c373 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/src/ext/ext.classes.js @@ -0,0 +1,108 @@ + +$.extend( DataTable.ext.oStdClasses, { + "sTable": "dataTable", + + /* Two buttons buttons */ + "sPagePrevEnabled": "paginate_enabled_previous", + "sPagePrevDisabled": "paginate_disabled_previous", + "sPageNextEnabled": "paginate_enabled_next", + "sPageNextDisabled": "paginate_disabled_next", + "sPageJUINext": "", + "sPageJUIPrev": "", + + /* Full numbers paging buttons */ + "sPageButton": "paginate_button", + "sPageButtonActive": "paginate_active", + "sPageButtonStaticDisabled": "paginate_button paginate_button_disabled", + "sPageFirst": "first", + "sPagePrevious": "previous", + "sPageNext": "next", + "sPageLast": "last", + + /* Striping classes */ + "sStripeOdd": "odd", + "sStripeEven": "even", + + /* Empty row */ + "sRowEmpty": "dataTables_empty", + + /* Features */ + "sWrapper": "dataTables_wrapper", + "sFilter": "dataTables_filter", + "sInfo": "dataTables_info", + "sPaging": "dataTables_paginate paging_", /* Note that the type is postfixed */ + "sLength": "dataTables_length", + "sProcessing": "dataTables_processing", + + /* Sorting */ + "sSortAsc": "sorting_asc", + "sSortDesc": "sorting_desc", + "sSortable": "sorting", /* Sortable in both directions */ + "sSortableAsc": "sorting_asc_disabled", + "sSortableDesc": "sorting_desc_disabled", + "sSortableNone": "sorting_disabled", + "sSortColumn": "sorting_", /* Note that an int is postfixed for the sorting order */ + "sSortJUIAsc": "", + "sSortJUIDesc": "", + "sSortJUI": "", + "sSortJUIAscAllowed": "", + "sSortJUIDescAllowed": "", + "sSortJUIWrapper": "", + "sSortIcon": "", + + /* Scrolling */ + "sScrollWrapper": "dataTables_scroll", + "sScrollHead": "dataTables_scrollHead", + "sScrollHeadInner": "dataTables_scrollHeadInner", + "sScrollBody": "dataTables_scrollBody", + "sScrollFoot": "dataTables_scrollFoot", + "sScrollFootInner": "dataTables_scrollFootInner", + + /* Misc */ + "sFooterTH": "" +} ); + + +$.extend( DataTable.ext.oJUIClasses, DataTable.ext.oStdClasses, { + /* Two buttons buttons */ + "sPagePrevEnabled": "fg-button ui-button ui-state-default ui-corner-left", + "sPagePrevDisabled": "fg-button ui-button ui-state-default ui-corner-left ui-state-disabled", + "sPageNextEnabled": "fg-button ui-button ui-state-default ui-corner-right", + "sPageNextDisabled": "fg-button ui-button ui-state-default ui-corner-right ui-state-disabled", + "sPageJUINext": "ui-icon ui-icon-circle-arrow-e", + "sPageJUIPrev": "ui-icon ui-icon-circle-arrow-w", + + /* Full numbers paging buttons */ + "sPageButton": "fg-button ui-button ui-state-default", + "sPageButtonActive": "fg-button ui-button ui-state-default ui-state-disabled", + "sPageButtonStaticDisabled": "fg-button ui-button ui-state-default ui-state-disabled", + "sPageFirst": "first ui-corner-tl ui-corner-bl", + "sPageLast": "last ui-corner-tr ui-corner-br", + + /* Features */ + "sPaging": "dataTables_paginate fg-buttonset ui-buttonset fg-buttonset-multi "+ + "ui-buttonset-multi paging_", /* Note that the type is postfixed */ + + /* Sorting */ + "sSortAsc": "ui-state-default", + "sSortDesc": "ui-state-default", + "sSortable": "ui-state-default", + "sSortableAsc": "ui-state-default", + "sSortableDesc": "ui-state-default", + "sSortableNone": "ui-state-default", + "sSortJUIAsc": "css_right ui-icon ui-icon-triangle-1-n", + "sSortJUIDesc": "css_right ui-icon ui-icon-triangle-1-s", + "sSortJUI": "css_right ui-icon ui-icon-carat-2-n-s", + "sSortJUIAscAllowed": "css_right ui-icon ui-icon-carat-1-n", + "sSortJUIDescAllowed": "css_right ui-icon ui-icon-carat-1-s", + "sSortJUIWrapper": "DataTables_sort_wrapper", + "sSortIcon": "DataTables_sort_icon", + + /* Scrolling */ + "sScrollHead": "dataTables_scrollHead ui-state-default", + "sScrollFoot": "dataTables_scrollFoot ui-state-default", + + /* Misc */ + "sFooterTH": "ui-state-default" +} ); + diff --git a/src/warden-server/contrib/wardenweb/datatables/media/src/ext/ext.paging.js b/src/warden-server/contrib/wardenweb/datatables/media/src/ext/ext.paging.js new file mode 100644 index 0000000..cc0e41c --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/src/ext/ext.paging.js @@ -0,0 +1,250 @@ + +/* + * Variable: oPagination + * Purpose: + * Scope: jQuery.fn.dataTableExt + */ +$.extend( DataTable.ext.oPagination, { + /* + * Variable: two_button + * Purpose: Standard two button (forward/back) pagination + * Scope: jQuery.fn.dataTableExt.oPagination + */ + "two_button": { + /* + * Function: oPagination.two_button.fnInit + * Purpose: Initialise dom elements required for pagination with forward/back buttons only + * Returns: - + * Inputs: object:oSettings - dataTables settings object + * node:nPaging - the DIV which contains this pagination control + * function:fnCallbackDraw - draw function which must be called on update + */ + "fnInit": function ( oSettings, nPaging, fnCallbackDraw ) + { + var oLang = oSettings.oLanguage.oPaginate; + var oClasses = oSettings.oClasses; + var fnClickHandler = function ( e ) { + if ( oSettings.oApi._fnPageChange( oSettings, e.data.action ) ) + { + fnCallbackDraw( oSettings ); + } + }; + + var sAppend = (!oSettings.bJUI) ? + '<a class="'+oSettings.oClasses.sPagePrevDisabled+'" tabindex="'+oSettings.iTabIndex+'" role="button">'+oLang.sPrevious+'</a>'+ + '<a class="'+oSettings.oClasses.sPageNextDisabled+'" tabindex="'+oSettings.iTabIndex+'" role="button">'+oLang.sNext+'</a>' + : + '<a class="'+oSettings.oClasses.sPagePrevDisabled+'" tabindex="'+oSettings.iTabIndex+'" role="button"><span class="'+oSettings.oClasses.sPageJUIPrev+'"></span></a>'+ + '<a class="'+oSettings.oClasses.sPageNextDisabled+'" tabindex="'+oSettings.iTabIndex+'" role="button"><span class="'+oSettings.oClasses.sPageJUINext+'"></span></a>'; + $(nPaging).append( sAppend ); + + var els = $('a', nPaging); + var nPrevious = els[0], + nNext = els[1]; + + oSettings.oApi._fnBindAction( nPrevious, {action: "previous"}, fnClickHandler ); + oSettings.oApi._fnBindAction( nNext, {action: "next"}, fnClickHandler ); + + /* ID the first elements only */ + if ( !oSettings.aanFeatures.p ) + { + nPaging.id = oSettings.sTableId+'_paginate'; + nPrevious.id = oSettings.sTableId+'_previous'; + nNext.id = oSettings.sTableId+'_next'; + + nPrevious.setAttribute('aria-controls', oSettings.sTableId); + nNext.setAttribute('aria-controls', oSettings.sTableId); + } + }, + + /* + * Function: oPagination.two_button.fnUpdate + * Purpose: Update the two button pagination at the end of the draw + * Returns: - + * Inputs: object:oSettings - dataTables settings object + * function:fnCallbackDraw - draw function to call on page change + */ + "fnUpdate": function ( oSettings, fnCallbackDraw ) + { + if ( !oSettings.aanFeatures.p ) + { + return; + } + + var oClasses = oSettings.oClasses; + var an = oSettings.aanFeatures.p; + + /* Loop over each instance of the pager */ + for ( var i=0, iLen=an.length ; i<iLen ; i++ ) + { + if ( an[i].childNodes.length !== 0 ) + { + an[i].childNodes[0].className = ( oSettings._iDisplayStart === 0 ) ? + oClasses.sPagePrevDisabled : oClasses.sPagePrevEnabled; + + an[i].childNodes[1].className = ( oSettings.fnDisplayEnd() == oSettings.fnRecordsDisplay() ) ? + oClasses.sPageNextDisabled : oClasses.sPageNextEnabled; + } + } + } + }, + + + /* + * Variable: iFullNumbersShowPages + * Purpose: Change the number of pages which can be seen + * Scope: jQuery.fn.dataTableExt.oPagination + */ + "iFullNumbersShowPages": 5, + + /* + * Variable: full_numbers + * Purpose: Full numbers pagination + * Scope: jQuery.fn.dataTableExt.oPagination + */ + "full_numbers": { + /* + * Function: oPagination.full_numbers.fnInit + * Purpose: Initialise dom elements required for pagination with a list of the pages + * Returns: - + * Inputs: object:oSettings - dataTables settings object + * node:nPaging - the DIV which contains this pagination control + * function:fnCallbackDraw - draw function which must be called on update + */ + "fnInit": function ( oSettings, nPaging, fnCallbackDraw ) + { + var oLang = oSettings.oLanguage.oPaginate; + var oClasses = oSettings.oClasses; + var fnClickHandler = function ( e ) { + if ( oSettings.oApi._fnPageChange( oSettings, e.data.action ) ) + { + fnCallbackDraw( oSettings ); + } + }; + + $(nPaging).append( + '<a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPageFirst+'">'+oLang.sFirst+'</a>'+ + '<a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPagePrevious+'">'+oLang.sPrevious+'</a>'+ + '<span></span>'+ + '<a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPageNext+'">'+oLang.sNext+'</a>'+ + '<a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+" "+oClasses.sPageLast+'">'+oLang.sLast+'</a>' + ); + var els = $('a', nPaging); + var nFirst = els[0], + nPrev = els[1], + nNext = els[2], + nLast = els[3]; + + oSettings.oApi._fnBindAction( nFirst, {action: "first"}, fnClickHandler ); + oSettings.oApi._fnBindAction( nPrev, {action: "previous"}, fnClickHandler ); + oSettings.oApi._fnBindAction( nNext, {action: "next"}, fnClickHandler ); + oSettings.oApi._fnBindAction( nLast, {action: "last"}, fnClickHandler ); + + /* ID the first elements only */ + if ( !oSettings.aanFeatures.p ) + { + nPaging.id = oSettings.sTableId+'_paginate'; + nFirst.id =oSettings.sTableId+'_first'; + nPrev.id =oSettings.sTableId+'_previous'; + nNext.id =oSettings.sTableId+'_next'; + nLast.id =oSettings.sTableId+'_last'; + } + }, + + /* + * Function: oPagination.full_numbers.fnUpdate + * Purpose: Update the list of page buttons shows + * Returns: - + * Inputs: object:oSettings - dataTables settings object + * function:fnCallbackDraw - draw function to call on page change + */ + "fnUpdate": function ( oSettings, fnCallbackDraw ) + { + if ( !oSettings.aanFeatures.p ) + { + return; + } + + var iPageCount = DataTable.ext.oPagination.iFullNumbersShowPages; + var iPageCountHalf = Math.floor(iPageCount / 2); + var iPages = Math.ceil((oSettings.fnRecordsDisplay()) / oSettings._iDisplayLength); + var iCurrentPage = Math.ceil(oSettings._iDisplayStart / oSettings._iDisplayLength) + 1; + var sList = ""; + var iStartButton, iEndButton, i, iLen; + var oClasses = oSettings.oClasses; + var anButtons, anStatic, nPaginateList; + var an = oSettings.aanFeatures.p; + var fnBind = function (j) { + oSettings.oApi._fnBindAction( this, {"page": j+iStartButton-1}, function(e) { + /* Use the information in the element to jump to the required page */ + oSettings.oApi._fnPageChange( oSettings, e.data.page ); + fnCallbackDraw( oSettings ); + e.preventDefault(); + } ); + }; + + /* Pages calculation */ + if (iPages < iPageCount) + { + iStartButton = 1; + iEndButton = iPages; + } + else if (iCurrentPage <= iPageCountHalf) + { + iStartButton = 1; + iEndButton = iPageCount; + } + else if (iCurrentPage >= (iPages - iPageCountHalf)) + { + iStartButton = iPages - iPageCount + 1; + iEndButton = iPages; + } + else + { + iStartButton = iCurrentPage - Math.ceil(iPageCount / 2) + 1; + iEndButton = iStartButton + iPageCount - 1; + } + + /* Build the dynamic list */ + for ( i=iStartButton ; i<=iEndButton ; i++ ) + { + sList += (iCurrentPage !== i) ? + '<a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButton+'">'+oSettings.fnFormatNumber(i)+'</a>' : + '<a tabindex="'+oSettings.iTabIndex+'" class="'+oClasses.sPageButtonActive+'">'+oSettings.fnFormatNumber(i)+'</a>'; + } + + /* Loop over each instance of the pager */ + for ( i=0, iLen=an.length ; i<iLen ; i++ ) + { + if ( an[i].childNodes.length === 0 ) + { + continue; + } + + /* Build up the dynamic list forst - html and listeners */ + $('span:eq(0)', an[i]) + .html( sList ) + .children('a').each( fnBind ); + + /* Update the premanent botton's classes */ + anButtons = an[i].getElementsByTagName('a'); + anStatic = [ + anButtons[0], anButtons[1], + anButtons[anButtons.length-2], anButtons[anButtons.length-1] + ]; + + $(anStatic).removeClass( oClasses.sPageButton+" "+oClasses.sPageButtonActive+" "+oClasses.sPageButtonStaticDisabled ); + $([anStatic[0], anStatic[1]]).addClass( + (iCurrentPage==1) ? + oClasses.sPageButtonStaticDisabled : + oClasses.sPageButton + ); + $([anStatic[2], anStatic[3]]).addClass( + (iPages===0 || iCurrentPage===iPages || oSettings._iDisplayLength===-1) ? + oClasses.sPageButtonStaticDisabled : + oClasses.sPageButton + ); + } + } + } +} ); diff --git a/src/warden-server/contrib/wardenweb/datatables/media/src/ext/ext.sorting.js b/src/warden-server/contrib/wardenweb/datatables/media/src/ext/ext.sorting.js new file mode 100644 index 0000000..4438257 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/src/ext/ext.sorting.js @@ -0,0 +1,84 @@ + +$.extend( DataTable.ext.oSort, { + /* + * text sorting + */ + "string-pre": function ( a ) + { + if ( typeof a != 'string' ) { a = ''; } + return a.toLowerCase(); + }, + + "string-asc": function ( x, y ) + { + return ((x < y) ? -1 : ((x > y) ? 1 : 0)); + }, + + "string-desc": function ( x, y ) + { + return ((x < y) ? 1 : ((x > y) ? -1 : 0)); + }, + + + /* + * html sorting (ignore html tags) + */ + "html-pre": function ( a ) + { + return a.replace( /<.*?>/g, "" ).toLowerCase(); + }, + + "html-asc": function ( x, y ) + { + return ((x < y) ? -1 : ((x > y) ? 1 : 0)); + }, + + "html-desc": function ( x, y ) + { + return ((x < y) ? 1 : ((x > y) ? -1 : 0)); + }, + + + /* + * date sorting + */ + "date-pre": function ( a ) + { + var x = Date.parse( a ); + + if ( isNaN(x) || x==="" ) + { + x = Date.parse( "01/01/1970 00:00:00" ); + } + return x; + }, + + "date-asc": function ( x, y ) + { + return x - y; + }, + + "date-desc": function ( x, y ) + { + return y - x; + }, + + + /* + * numerical sorting + */ + "numeric-pre": function ( a ) + { + return (a=="-" || a==="") ? 0 : a*1; + }, + + "numeric-asc": function ( x, y ) + { + return x - y; + }, + + "numeric-desc": function ( x, y ) + { + return y - x; + } +} ); diff --git a/src/warden-server/contrib/wardenweb/datatables/media/src/ext/ext.types.js b/src/warden-server/contrib/wardenweb/datatables/media/src/ext/ext.types.js new file mode 100644 index 0000000..ffd4e14 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/src/ext/ext.types.js @@ -0,0 +1,88 @@ + + +$.extend( DataTable.ext.aTypes, [ + /* + * Function: - + * Purpose: Check to see if a string is numeric + * Returns: string:'numeric' or null + * Inputs: mixed:sText - string to check + */ + function ( sData ) + { + /* Allow zero length strings as a number */ + if ( typeof sData === 'number' ) + { + return 'numeric'; + } + else if ( typeof sData !== 'string' ) + { + return null; + } + + var sValidFirstChars = "0123456789-"; + var sValidChars = "0123456789."; + var Char; + var bDecimal = false; + + /* Check for a valid first char (no period and allow negatives) */ + Char = sData.charAt(0); + if (sValidFirstChars.indexOf(Char) == -1) + { + return null; + } + + /* Check all the other characters are valid */ + for ( var i=1 ; i<sData.length ; i++ ) + { + Char = sData.charAt(i); + if (sValidChars.indexOf(Char) == -1) + { + return null; + } + + /* Only allowed one decimal place... */ + if ( Char == "." ) + { + if ( bDecimal ) + { + return null; + } + bDecimal = true; + } + } + + return 'numeric'; + }, + + /* + * Function: - + * Purpose: Check to see if a string is actually a formatted date + * Returns: string:'date' or null + * Inputs: string:sText - string to check + */ + function ( sData ) + { + var iParse = Date.parse(sData); + if ( (iParse !== null && !isNaN(iParse)) || (typeof sData === 'string' && sData.length === 0) ) + { + return 'date'; + } + return null; + }, + + /* + * Function: - + * Purpose: Check to see if a string should be treated as an HTML string + * Returns: string:'html' or null + * Inputs: string:sText - string to check + */ + function ( sData ) + { + if ( typeof sData === 'string' && sData.indexOf('<') != -1 && sData.indexOf('>') != -1 ) + { + return 'html'; + } + return null; + } +] ); + diff --git a/src/warden-server/contrib/wardenweb/datatables/media/src/model/model.column.js b/src/warden-server/contrib/wardenweb/datatables/media/src/model/model.column.js new file mode 100644 index 0000000..9f076c3 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/src/model/model.column.js @@ -0,0 +1,248 @@ + + + +/** + * Template object for the column information object in DataTables. This object + * is held in the settings aoColumns array and contains all the information that + * DataTables needs about each individual column. + * + * Note that this object is related to {@link DataTable.defaults.columns} + * but this one is the internal data store for DataTables's cache of columns. + * It should NOT be manipulated outside of DataTables. Any configuration should + * be done through the initialisation options. + * @namespace + */ +DataTable.models.oColumn = { + /** + * A list of the columns that sorting should occur on when this column + * is sorted. That this property is an array allows multi-column sorting + * to be defined for a column (for example first name / last name columns + * would benefit from this). The values are integers pointing to the + * columns to be sorted on (typically it will be a single integer pointing + * at itself, but that doesn't need to be the case). + * @type array + */ + "aDataSort": null, + + /** + * Define the sorting directions that are applied to the column, in sequence + * as the column is repeatedly sorted upon - i.e. the first value is used + * as the sorting direction when the column if first sorted (clicked on). + * Sort it again (click again) and it will move on to the next index. + * Repeat until loop. + * @type array + */ + "asSorting": null, + + /** + * Flag to indicate if the column is searchable, and thus should be included + * in the filtering or not. + * @type boolean + */ + "bSearchable": null, + + /** + * Flag to indicate if the column is sortable or not. + * @type boolean + */ + "bSortable": null, + + /** + * When using fnRender, you have two options for what to do with the data, + * and this property serves as the switch. Firstly, you can have the sorting + * and filtering use the rendered value (true - default), or you can have + * the sorting and filtering us the original value (false). + * + * *NOTE* It is it is advisable now to use mDataProp as a function and make + * use of the 'type' that it gives, allowing (potentially) different data to + * be used for sorting, filtering, display and type detection. + * @type boolean + * @deprecated + */ + "bUseRendered": null, + + /** + * Flag to indicate if the column is currently visible in the table or not + * @type boolean + */ + "bVisible": null, + + /** + * Flag to indicate to the type detection method if the automatic type + * detection should be used, or if a column type (sType) has been specified + * @type boolean + * @default true + * @private + */ + "_bAutoType": true, + + /** + * Developer definable function that is called whenever a cell is created (Ajax source, + * etc) or processed for input (DOM source). This can be used as a compliment to fnRender + * allowing you to modify the DOM element (add background colour for example) when the + * element is available (since it is not when fnRender is called). + * @type function + * @param {element} nTd The TD node that has been created + * @param {*} sData The Data for the cell + * @param {array|object} oData The data for the whole row + * @param {int} iRow The row index for the aoData data store + * @default null + */ + "fnCreatedCell": null, + + /** + * Function to get data from a cell in a column. You should <b>never</b> + * access data directly through _aData internally in DataTables - always use + * the method attached to this property. It allows mDataProp to function as + * required. This function is automatically assigned by the column + * initialisation method + * @type function + * @param {array|object} oData The data array/object for the array + * (i.e. aoData[]._aData) + * @param {string} sSpecific The specific data type you want to get - + * 'display', 'type' 'filter' 'sort' + * @returns {*} The data for the cell from the given row's data + * @default null + */ + "fnGetData": null, + + /** + * Custom display function that will be called for the display of each cell + * in this column. + * @type function + * @param {object} o Object with the following parameters: + * @param {int} o.iDataRow The row in aoData + * @param {int} o.iDataColumn The column in question + * @param {array o.aData The data for the row in question + * @param {object} o.oSettings The settings object for this DataTables instance + * @returns {string} The string you which to use in the display + * @default null + */ + "fnRender": null, + + /** + * Function to set data for a cell in the column. You should <b>never</b> + * set the data directly to _aData internally in DataTables - always use + * this method. It allows mDataProp to function as required. This function + * is automatically assigned by the column initialisation method + * @type function + * @param {array|object} oData The data array/object for the array + * (i.e. aoData[]._aData) + * @param {*} sValue Value to set + * @default null + */ + "fnSetData": null, + + /** + * Property to read the value for the cells in the column from the data + * source array / object. If null, then the default content is used, if a + * function is given then the return from the function is used. + * @type function|int|string|null + * @default null + */ + "mDataProp": null, + + /** + * Unique header TH/TD element for this column - this is what the sorting + * listener is attached to (if sorting is enabled.) + * @type node + * @default null + */ + "nTh": null, + + /** + * Unique footer TH/TD element for this column (if there is one). Not used + * in DataTables as such, but can be used for plug-ins to reference the + * footer for each column. + * @type node + * @default null + */ + "nTf": null, + + /** + * The class to apply to all TD elements in the table's TBODY for the column + * @type string + * @default null + */ + "sClass": null, + + /** + * When DataTables calculates the column widths to assign to each column, + * it finds the longest string in each column and then constructs a + * temporary table and reads the widths from that. The problem with this + * is that "mmm" is much wider then "iiii", but the latter is a longer + * string - thus the calculation can go wrong (doing it properly and putting + * it into an DOM object and measuring that is horribly(!) slow). Thus as + * a "work around" we provide this option. It will append its value to the + * text that is found to be the longest string for the column - i.e. padding. + * @type string + */ + "sContentPadding": null, + + /** + * Allows a default value to be given for a column's data, and will be used + * whenever a null data source is encountered (this can be because mDataProp + * is set to null, or because the data source itself is null). + * @type string + * @default null + */ + "sDefaultContent": null, + + /** + * Name for the column, allowing reference to the column by name as well as + * by index (needs a lookup to work by name). + * @type string + */ + "sName": null, + + /** + * Custom sorting data type - defines which of the available plug-ins in + * afnSortData the custom sorting will use - if any is defined. + * @type string + * @default std + */ + "sSortDataType": 'std', + + /** + * Class to be applied to the header element when sorting on this column + * @type string + * @default null + */ + "sSortingClass": null, + + /** + * Class to be applied to the header element when sorting on this column - + * when jQuery UI theming is used. + * @type string + * @default null + */ + "sSortingClassJUI": null, + + /** + * Title of the column - what is seen in the TH element (nTh). + * @type string + */ + "sTitle": null, + + /** + * Column sorting and filtering type + * @type string + * @default null + */ + "sType": null, + + /** + * Width of the column + * @type string + * @default null + */ + "sWidth": null, + + /** + * Width of the column when it was first "encountered" + * @type string + * @default null + */ + "sWidthOrig": null +}; + diff --git a/src/warden-server/contrib/wardenweb/datatables/media/src/model/model.defaults.columns.js b/src/warden-server/contrib/wardenweb/datatables/media/src/model/model.defaults.columns.js new file mode 100644 index 0000000..adb2acd --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/src/model/model.defaults.columns.js @@ -0,0 +1,712 @@ + + +/** + * Column options that can be given to DataTables at initialisation time. + * @namespace + */ +DataTable.defaults.columns = { + /** + * Allows a column's sorting to take multiple columns into account when + * doing a sort. For example first name / last name columns make sense to + * do a multi-column sort over the two columns. + * @type array + * @default null <i>Takes the value of the column index automatically</i> + * @dtopt Columns + * + * @example + * // Using aoColumnDefs + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumnDefs": [ + * { "aDataSort": [ 0, 1 ], "aTargets": [ 0 ] }, + * { "aDataSort": [ 1, 0 ], "aTargets": [ 1 ] }, + * { "aDataSort": [ 2, 3, 4 ], "aTargets": [ 2 ] } + * ] + * } ); + * } ); + * + * @example + * // Using aoColumns + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumns": [ + * { "aDataSort": [ 0, 1 ] }, + * { "aDataSort": [ 1, 0 ] }, + * { "aDataSort": [ 2, 3, 4 ] }, + * null, + * null + * ] + * } ); + * } ); + */ + "aDataSort": null, + + + /** + * You can control the default sorting direction, and even alter the behaviour + * of the sort handler (i.e. only allow ascending sorting etc) using this + * parameter. + * @type array + * @default [ 'asc', 'desc' ] + * @dtopt Columns + * + * @example + * // Using aoColumnDefs + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumnDefs": [ + * { "asSorting": [ "asc" ], "aTargets": [ 1 ] }, + * { "asSorting": [ "desc", "asc", "asc" ], "aTargets": [ 2 ] }, + * { "asSorting": [ "desc" ], "aTargets": [ 3 ] } + * ] + * } ); + * } ); + * + * @example + * // Using aoColumns + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumns": [ + * null, + * { "asSorting": [ "asc" ] }, + * { "asSorting": [ "desc", "asc", "asc" ] }, + * { "asSorting": [ "desc" ] }, + * null + * ] + * } ); + * } ); + */ + "asSorting": [ 'asc', 'desc' ], + + + /** + * Enable or disable filtering on the data in this column. + * @type boolean + * @default true + * @dtopt Columns + * + * @example + * // Using aoColumnDefs + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumnDefs": [ + * { "bSearchable": false, "aTargets": [ 0 ] } + * ] } ); + * } ); + * + * @example + * // Using aoColumns + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumns": [ + * { "bSearchable": false }, + * null, + * null, + * null, + * null + * ] } ); + * } ); + */ + "bSearchable": true, + + + /** + * Enable or disable sorting on this column. + * @type boolean + * @default true + * @dtopt Columns + * + * @example + * // Using aoColumnDefs + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumnDefs": [ + * { "bSortable": false, "aTargets": [ 0 ] } + * ] } ); + * } ); + * + * @example + * // Using aoColumns + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumns": [ + * { "bSortable": false }, + * null, + * null, + * null, + * null + * ] } ); + * } ); + */ + "bSortable": true, + + + /** + * When using fnRender() for a column, you may wish to use the original data + * (before rendering) for sorting and filtering (the default is to used the + * rendered data that the user can see). This may be useful for dates etc. + * + * *NOTE* It is it is advisable now to use mDataProp as a function and make + * use of the 'type' that it gives, allowing (potentially) different data to + * be used for sorting, filtering, display and type detection. + * @type boolean + * @default true + * @dtopt Columns + * + * @example + * // Using aoColumnDefs + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumnDefs": [ + * { + * "fnRender": function ( oObj ) { + * return oObj.aData[0] +' '+ oObj.aData[3]; + * }, + * "bUseRendered": false, + * "aTargets": [ 0 ] + * } + * ] + * } ); + * } ); + * + * @example + * // Using aoColumns + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumns": [ + * { + * "fnRender": function ( oObj ) { + * return oObj.aData[0] +' '+ oObj.aData[3]; + * }, + * "bUseRendered": false + * }, + * null, + * null, + * null, + * null + * ] + * } ); + * } ); + */ + "bUseRendered": true, + + + /** + * Enable or disable the display of this column. + * @type boolean + * @default true + * @dtopt Columns + * + * @example + * // Using aoColumnDefs + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumnDefs": [ + * { "bVisible": false, "aTargets": [ 0 ] } + * ] } ); + * } ); + * + * @example + * // Using aoColumns + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumns": [ + * { "bVisible": false }, + * null, + * null, + * null, + * null + * ] } ); + * } ); + */ + "bVisible": true, + + + /** + * Developer definable function that is called whenever a cell is created (Ajax source, + * etc) or processed for input (DOM source). This can be used as a compliment to fnRender + * allowing you to modify the DOM element (add background colour for example) when the + * element is available (since it is not when fnRender is called). + * @type function + * @param {element} nTd The TD node that has been created + * @param {*} sData The Data for the cell + * @param {array|object} oData The data for the whole row + * @param {int} iRow The row index for the aoData data store + * @param {int} iCol The column index for aoColumns + * @dtopt Columns + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumnDefs": [ { + * "aTargets": [3], + * "fnCreatedCell": function (nTd, sData, oData, iRow, iCol) { + * if ( sData == "1.7" ) { + * $(nTd).css('color', 'blue') + * } + * } + * } ] + * }); + * } ); + */ + "fnCreatedCell": null, + + + /** + * Custom display function that will be called for the display of each cell in + * this column. + * @type function + * @param {object} o Object with the following parameters: + * @param {int} o.iDataRow The row in aoData + * @param {int} o.iDataColumn The column in question + * @param {array} o.aData The data for the row in question + * @param {object} o.oSettings The settings object for this DataTables instance + * @param {object} o.mDataProp The data property used for this column + * @param {*} val The current cell value + * @returns {string} The string you which to use in the display + * @dtopt Columns + * + * @example + * // Using aoColumnDefs + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumnDefs": [ + * { + * "fnRender": function ( o, val ) { + * return o.aData[0] +' '+ o.aData[3]; + * }, + * "aTargets": [ 0 ] + * } + * ] + * } ); + * } ); + * + * @example + * // Using aoColumns + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumns": [ + * { "fnRender": function ( o, val ) { + * return o.aData[0] +' '+ o.aData[3]; + * } }, + * null, + * null, + * null, + * null + * ] + * } ); + * } ); + */ + "fnRender": null, + + + /** + * The column index (starting from 0!) that you wish a sort to be performed + * upon when this column is selected for sorting. This can be used for sorting + * on hidden columns for example. + * @type int + * @default -1 <i>Use automatically calculated column index</i> + * @dtopt Columns + * + * @example + * // Using aoColumnDefs + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumnDefs": [ + * { "iDataSort": 1, "aTargets": [ 0 ] } + * ] + * } ); + * } ); + * + * @example + * // Using aoColumns + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumns": [ + * { "iDataSort": 1 }, + * null, + * null, + * null, + * null + * ] + * } ); + * } ); + */ + "iDataSort": -1, + + + /** + * This property can be used to read data from any JSON data source property, + * including deeply nested objects / properties. mDataProp can be given in a + * number of different ways which effect its behaviour: + * <ul> + * <li>integer - treated as an array index for the data source. This is the + * default that DataTables uses (incrementally increased for each column).</li> + * <li>string - read an object property from the data source. Note that you can + * use Javascript dotted notation to read deep properties/arrays from the + * data source.</li> + * <li>null - the sDafaultContent option will use used for the cell (empty + * string by default. This can be useful on generated columns such as + * edit / delete action columns.</li> + * <li>function - the function given will be executed whenever DataTables + * needs to set or get the data for a cell in the column. The function + * takes three parameters: + * <ul> + * <li>{array|object} The data source for the row</li> + * <li>{string} The type call data requested - this will be 'set' when + * setting data or 'filter', 'display', 'type' or 'sort' when gathering + * data.</li> + * <li>{*} Data to set when the second parameter is 'set'.</li> + * </ul> + * The return value from the function is not required when 'set' is the type + * of call, but otherwise the return is what will be used for the data + * requested.</li> + * </ul> + * @type string|int|function|null + * @default null <i>Use automatically calculated column index</i> + * @dtopt Columns + * + * @example + * // Read table data from objects + * $(document).ready(function() { + * var oTable = $('#example').dataTable( { + * "sAjaxSource": "sources/deep.txt", + * "aoColumns": [ + * { "mDataProp": "engine" }, + * { "mDataProp": "browser" }, + * { "mDataProp": "platform.inner" }, + * { "mDataProp": "platform.details.0" }, + * { "mDataProp": "platform.details.1" } + * ] + * } ); + * } ); + * + * @example + * // Using mDataProp as a function to provide different information for + * // sorting, filtering and display. In this case, currency (price) + * $(document).ready(function() { + * var oTable = $('#example').dataTable( { + * "aoColumnDefs": [ + * { + * "aTargets": [ 0 ], + * "mDataProp": function ( source, type, val ) { + * if (type === 'set') { + * source.price = val; + * // Store the computed dislay and filter values for efficiency + * source.price_display = val=="" ? "" : "$"+numberFormat(val); + * source.price_filter = val=="" ? "" : "$"+numberFormat(val)+" "+val; + * return; + * } + * else if (type === 'display') { + * return source.price_display; + * } + * else if (type === 'filter') { + * return source.price_filter; + * } + * // 'sort' and 'type' both just use the integer + * return source.price; + * } + * ] + * } ); + * } ); + */ + "mDataProp": null, + + + /** + * Class to give to each cell in this column. + * @type string + * @default <i>Empty string</i> + * @dtopt Columns + * + * @example + * // Using aoColumnDefs + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumnDefs": [ + * { "sClass": "my_class", "aTargets": [ 0 ] } + * ] + * } ); + * } ); + * + * @example + * // Using aoColumns + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumns": [ + * { "sClass": "my_class" }, + * null, + * null, + * null, + * null + * ] + * } ); + * } ); + */ + "sClass": "", + + /** + * When DataTables calculates the column widths to assign to each column, + * it finds the longest string in each column and then constructs a + * temporary table and reads the widths from that. The problem with this + * is that "mmm" is much wider then "iiii", but the latter is a longer + * string - thus the calculation can go wrong (doing it properly and putting + * it into an DOM object and measuring that is horribly(!) slow). Thus as + * a "work around" we provide this option. It will append its value to the + * text that is found to be the longest string for the column - i.e. padding. + * Generally you shouldn't need this, and it is not documented on the + * general DataTables.net documentation + * @type string + * @default <i>Empty string<i> + * @dtopt Columns + * + * @example + * // Using aoColumns + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumns": [ + * null, + * null, + * null, + * { + * "sContentPadding": "mmm" + * } + * ] + * } ); + * } ); + */ + "sContentPadding": "", + + + /** + * Allows a default value to be given for a column's data, and will be used + * whenever a null data source is encountered (this can be because mDataProp + * is set to null, or because the data source itself is null). + * @type string + * @default null + * @dtopt Columns + * + * @example + * // Using aoColumnDefs + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumnDefs": [ + * { + * "mDataProp": null, + * "sDefaultContent": "Edit", + * "aTargets": [ -1 ] + * } + * ] + * } ); + * } ); + * + * @example + * // Using aoColumns + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumns": [ + * null, + * null, + * null, + * { + * "mDataProp": null, + * "sDefaultContent": "Edit" + * } + * ] + * } ); + * } ); + */ + "sDefaultContent": null, + + + /** + * This parameter is only used in DataTables' server-side processing. It can + * be exceptionally useful to know what columns are being displayed on the + * client side, and to map these to database fields. When defined, the names + * also allow DataTables to reorder information from the server if it comes + * back in an unexpected order (i.e. if you switch your columns around on the + * client-side, your server-side code does not also need updating). + * @type string + * @default <i>Empty string</i> + * @dtopt Columns + * + * @example + * // Using aoColumnDefs + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumnDefs": [ + * { "sName": "engine", "aTargets": [ 0 ] }, + * { "sName": "browser", "aTargets": [ 1 ] }, + * { "sName": "platform", "aTargets": [ 2 ] }, + * { "sName": "version", "aTargets": [ 3 ] }, + * { "sName": "grade", "aTargets": [ 4 ] } + * ] + * } ); + * } ); + * + * @example + * // Using aoColumns + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumns": [ + * { "sName": "engine" }, + * { "sName": "browser" }, + * { "sName": "platform" }, + * { "sName": "version" }, + * { "sName": "grade" } + * ] + * } ); + * } ); + */ + "sName": "", + + + /** + * Defines a data source type for the sorting which can be used to read + * realtime information from the table (updating the internally cached + * version) prior to sorting. This allows sorting to occur on user editable + * elements such as form inputs. + * @type string + * @default std + * @dtopt Columns + * + * @example + * // Using aoColumnDefs + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumnDefs": [ + * { "sSortDataType": "dom-text", "aTargets": [ 2, 3 ] }, + * { "sType": "numeric", "aTargets": [ 3 ] }, + * { "sSortDataType": "dom-select", "aTargets": [ 4 ] }, + * { "sSortDataType": "dom-checkbox", "aTargets": [ 5 ] } + * ] + * } ); + * } ); + * + * @example + * // Using aoColumns + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumns": [ + * null, + * null, + * { "sSortDataType": "dom-text" }, + * { "sSortDataType": "dom-text", "sType": "numeric" }, + * { "sSortDataType": "dom-select" }, + * { "sSortDataType": "dom-checkbox" } + * ] + * } ); + * } ); + */ + "sSortDataType": "std", + + + /** + * The title of this column. + * @type string + * @default null <i>Derived from the 'TH' value for this column in the + * original HTML table.</i> + * @dtopt Columns + * + * @example + * // Using aoColumnDefs + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumnDefs": [ + * { "sTitle": "My column title", "aTargets": [ 0 ] } + * ] + * } ); + * } ); + * + * @example + * // Using aoColumns + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumns": [ + * { "sTitle": "My column title" }, + * null, + * null, + * null, + * null + * ] + * } ); + * } ); + */ + "sTitle": null, + + + /** + * The type allows you to specify how the data for this column will be sorted. + * Four types (string, numeric, date and html (which will strip HTML tags + * before sorting)) are currently available. Note that only date formats + * understood by Javascript's Date() object will be accepted as type date. For + * example: "Mar 26, 2008 5:03 PM". May take the values: 'string', 'numeric', + * 'date' or 'html' (by default). Further types can be adding through + * plug-ins. + * @type string + * @default null <i>Auto-detected from raw data</i> + * @dtopt Columns + * + * @example + * // Using aoColumnDefs + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumnDefs": [ + * { "sType": "html", "aTargets": [ 0 ] } + * ] + * } ); + * } ); + * + * @example + * // Using aoColumns + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumns": [ + * { "sType": "html" }, + * null, + * null, + * null, + * null + * ] + * } ); + * } ); + */ + "sType": null, + + + /** + * Defining the width of the column, this parameter may take any CSS value + * (3em, 20px etc). DataTables applys 'smart' widths to columns which have not + * been given a specific width through this interface ensuring that the table + * remains readable. + * @type string + * @default null <i>Automatic</i> + * @dtopt Columns + * + * @example + * // Using aoColumnDefs + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumnDefs": [ + * { "sWidth": "20%", "aTargets": [ 0 ] } + * ] + * } ); + * } ); + * + * @example + * // Using aoColumns + * $(document).ready(function() { + * $('#example').dataTable( { + * "aoColumns": [ + * { "sWidth": "20%" }, + * null, + * null, + * null, + * null + * ] + * } ); + * } ); + */ + "sWidth": null +}; + diff --git a/src/warden-server/contrib/wardenweb/datatables/media/src/model/model.defaults.js b/src/warden-server/contrib/wardenweb/datatables/media/src/model/model.defaults.js new file mode 100644 index 0000000..63c7f0a --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/src/model/model.defaults.js @@ -0,0 +1,1924 @@ + + +/** + * Initialisation options that can be given to DataTables at initialisation + * time. + * @namespace + */ +DataTable.defaults = { + /** + * An array of data to use for the table, passed in at initialisation which + * will be used in preference to any data which is already in the DOM. This is + * particularly useful for constructing tables purely in Javascript, for + * example with a custom Ajax call. + * @type array + * @default null + * @dtopt Option + * + * @example + * // Using a 2D array data source + * $(document).ready( function () { + * $('#example').dataTable( { + * "aaData": [ + * ['Trident', 'Internet Explorer 4.0', 'Win 95+', 4, 'X'], + * ['Trident', 'Internet Explorer 5.0', 'Win 95+', 5, 'C'], + * ], + * "aoColumns": [ + * { "sTitle": "Engine" }, + * { "sTitle": "Browser" }, + * { "sTitle": "Platform" }, + * { "sTitle": "Version" }, + * { "sTitle": "Grade" } + * ] + * } ); + * } ); + * + * @example + * // Using an array of objects as a data source (mDataProp) + * $(document).ready( function () { + * $('#example').dataTable( { + * "aaData": [ + * { + * "engine": "Trident", + * "browser": "Internet Explorer 4.0", + * "platform": "Win 95+", + * "version": 4, + * "grade": "X" + * }, + * { + * "engine": "Trident", + * "browser": "Internet Explorer 5.0", + * "platform": "Win 95+", + * "version": 5, + * "grade": "C" + * } + * ], + * "aoColumns": [ + * { "sTitle": "Engine", "mDataProp": "engine" }, + * { "sTitle": "Browser", "mDataProp": "browser" }, + * { "sTitle": "Platform", "mDataProp": "platform" }, + * { "sTitle": "Version", "mDataProp": "version" }, + * { "sTitle": "Grade", "mDataProp": "grade" } + * ] + * } ); + * } ); + */ + "aaData": null, + + + /** + * If sorting is enabled, then DataTables will perform a first pass sort on + * initialisation. You can define which column(s) the sort is performed upon, + * and the sorting direction, with this variable. The aaSorting array should + * contain an array for each column to be sorted initially containing the + * column's index and a direction string ('asc' or 'desc'). + * @type array + * @default [[0,'asc']] + * @dtopt Option + * + * @example + * // Sort by 3rd column first, and then 4th column + * $(document).ready( function() { + * $('#example').dataTable( { + * "aaSorting": [[2,'asc'], [3,'desc']] + * } ); + * } ); + * + * // No initial sorting + * $(document).ready( function() { + * $('#example').dataTable( { + * "aaSorting": [] + * } ); + * } ); + */ + "aaSorting": [[0,'asc']], + + + /** + * This parameter is basically identical to the aaSorting parameter, but + * cannot be overridden by user interaction with the table. What this means + * is that you could have a column (visible or hidden) which the sorting will + * always be forced on first - any sorting after that (from the user) will + * then be performed as required. This can be useful for grouping rows + * together. + * @type array + * @default null + * @dtopt Option + * + * @example + * $(document).ready( function() { + * $('#example').dataTable( { + * "aaSortingFixed": [[0,'asc']] + * } ); + * } ) + */ + "aaSortingFixed": null, + + + /** + * This parameter allows you to readily specify the entries in the length drop + * down menu that DataTables shows when pagination is enabled. It can be + * either a 1D array of options which will be used for both the displayed + * option and the value, or a 2D array which will use the array in the first + * position as the value, and the array in the second position as the + * displayed options (useful for language strings such as 'All'). + * @type array + * @default [ 10, 25, 50, 100 ] + * @dtopt Option + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "aLengthMenu": [[10, 25, 50, -1], [10, 25, 50, "All"]] + * } ); + * } ); + * + * @example + * // Setting the default display length as well as length menu + * // This is likely to be wanted if you remove the '10' option which + * // is the iDisplayLength default. + * $(document).ready(function() { + * $('#example').dataTable( { + * "iDisplayLength": 25, + * "aLengthMenu": [[25, 50, 100, -1], [25, 50, 100, "All"]] + * } ); + * } ); + */ + "aLengthMenu": [ 10, 25, 50, 100 ], + + + /** + * The aoColumns option in the initialisation parameter allows you to define + * details about the way individual columns behave. For a full list of + * column options that can be set, please see + * {@link DataTable.defaults.columns}. Note that if you use aoColumns to + * define your columns, you must have an entry in the array for every single + * column that you have in your table (these can be null if you don't which + * to specify any options). + * @member + */ + "aoColumns": null, + + /** + * Very similar to aoColumns, aoColumnDefs allows you to target a specific + * column, multiple columns, or all columns, using the aTargets property of + * each object in the array. This allows great flexibility when creating + * tables, as the aoColumnDefs arrays can be of any length, targeting the + * columns you specifically want. aoColumnDefs may use any of the column + * options available: {@link DataTable.defaults.columns}, but it _must_ + * have aTargets defined in each object in the array. Values in the aTargets + * array may be: + * <ul> + * <li>a string - class name will be matched on the TH for the column</li> + * <li>0 or a positive integer - column index counting from the left</li> + * <li>a negative integer - column index counting from the right</li> + * <li>the string "_all" - all columns (i.e. assign a default)</li> + * </ul> + * @member + */ + "aoColumnDefs": null, + + + /** + * Basically the same as oSearch, this parameter defines the individual column + * filtering state at initialisation time. The array must be of the same size + * as the number of columns, and each element be an object with the parameters + * "sSearch" and "bEscapeRegex" (the latter is optional). 'null' is also + * accepted and the default will be used. + * @type array + * @default [] + * @dtopt Option + * + * @example + * $(document).ready( function() { + * $('#example').dataTable( { + * "aoSearchCols": [ + * null, + * { "sSearch": "My filter" }, + * null, + * { "sSearch": "^[0-9]", "bEscapeRegex": false } + * ] + * } ); + * } ) + */ + "aoSearchCols": [], + + + /** + * An array of CSS classes that should be applied to displayed rows. This + * array may be of any length, and DataTables will apply each class + * sequentially, looping when required. + * @type array + * @default [ 'odd', 'even' ] + * @dtopt Option + * + * @example + * $(document).ready( function() { + * $('#example').dataTable( { + * "asStripeClasses": [ 'strip1', 'strip2', 'strip3' ] + * } ); + * } ) + */ + "asStripeClasses": [ 'odd', 'even' ], + + + /** + * Enable or disable automatic column width calculation. This can be disabled + * as an optimisation (it takes some time to calculate the widths) if the + * tables widths are passed in using aoColumns. + * @type boolean + * @default true + * @dtopt Features + * + * @example + * $(document).ready( function () { + * $('#example').dataTable( { + * "bAutoWidth": false + * } ); + * } ); + */ + "bAutoWidth": true, + + + /** + * Deferred rendering can provide DataTables with a huge speed boost when you + * are using an Ajax or JS data source for the table. This option, when set to + * true, will cause DataTables to defer the creation of the table elements for + * each row until they are needed for a draw - saving a significant amount of + * time. + * @type boolean + * @default false + * @dtopt Features + * + * @example + * $(document).ready(function() { + * var oTable = $('#example').dataTable( { + * "sAjaxSource": "sources/arrays.txt", + * "bDeferRender": true + * } ); + * } ); + */ + "bDeferRender": false, + + + /** + * Replace a DataTable which matches the given selector and replace it with + * one which has the properties of the new initialisation object passed. If no + * table matches the selector, then the new DataTable will be constructed as + * per normal. + * @type boolean + * @default false + * @dtopt Options + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "sScrollY": "200px", + * "bPaginate": false + * } ); + * + * // Some time later.... + * $('#example').dataTable( { + * "bFilter": false, + * "bDestroy": true + * } ); + * } ); + */ + "bDestroy": false, + + + /** + * Enable or disable filtering of data. Filtering in DataTables is "smart" in + * that it allows the end user to input multiple words (space separated) and + * will match a row containing those words, even if not in the order that was + * specified (this allow matching across multiple columns). Note that if you + * wish to use filtering in DataTables this must remain 'true' - to remove the + * default filtering input box and retain filtering abilities, please use + * @ref{sDom}. + * @type boolean + * @default true + * @dtopt Features + * + * @example + * $(document).ready( function () { + * $('#example').dataTable( { + * "bFilter": false + * } ); + * } ); + */ + "bFilter": true, + + + /** + * Enable or disable the table information display. This shows information + * about the data that is currently visible on the page, including information + * about filtered data if that action is being performed. + * @type boolean + * @default true + * @dtopt Features + * + * @example + * $(document).ready( function () { + * $('#example').dataTable( { + * "bInfo": false + * } ); + * } ); + */ + "bInfo": true, + + + /** + * Enable jQuery UI ThemeRoller support (required as ThemeRoller requires some + * slightly different and additional mark-up from what DataTables has + * traditionally used). + * @type boolean + * @default false + * @dtopt Features + * + * @example + * $(document).ready( function() { + * $('#example').dataTable( { + * "bJQueryUI": true + * } ); + * } ); + */ + "bJQueryUI": false, + + + /** + * Allows the end user to select the size of a formatted page from a select + * menu (sizes are 10, 25, 50 and 100). Requires pagination (bPaginate). + * @type boolean + * @default true + * @dtopt Features + * + * @example + * $(document).ready( function () { + * $('#example').dataTable( { + * "bLengthChange": false + * } ); + * } ); + */ + "bLengthChange": true, + + + /** + * Enable or disable pagination. + * @type boolean + * @default true + * @dtopt Features + * + * @example + * $(document).ready( function () { + * $('#example').dataTable( { + * "bPaginate": false + * } ); + * } ); + */ + "bPaginate": true, + + + /** + * Enable or disable the display of a 'processing' indicator when the table is + * being processed (e.g. a sort). This is particularly useful for tables with + * large amounts of data where it can take a noticeable amount of time to sort + * the entries. + * @type boolean + * @default false + * @dtopt Features + * + * @example + * $(document).ready( function () { + * $('#example').dataTable( { + * "bProcessing": true + * } ); + * } ); + */ + "bProcessing": false, + + + /** + * Retrieve the DataTables object for the given selector. Note that if the + * table has already been initialised, this parameter will cause DataTables + * to simply return the object that has already been set up - it will not take + * account of any changes you might have made to the initialisation object + * passed to DataTables (setting this parameter to true is an acknowledgement + * that you understand this). bDestroy can be used to reinitialise a table if + * you need. + * @type boolean + * @default false + * @dtopt Options + * + * @example + * $(document).ready(function() { + * initTable(); + * tableActions(); + * } ); + * + * function initTable () + * { + * return $('#example').dataTable( { + * "sScrollY": "200px", + * "bPaginate": false, + * "bRetrieve": true + * } ); + * } + * + * function tableActions () + * { + * var oTable = initTable(); + * // perform API operations with oTable + * } + */ + "bRetrieve": false, + + + /** + * Indicate if DataTables should be allowed to set the padding / margin + * etc for the scrolling header elements or not. Typically you will want + * this. + * @type boolean + * @default true + * @dtopt Options + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "bScrollAutoCss": false, + * "sScrollY": "200px" + * } ); + * } ); + */ + "bScrollAutoCss": true, + + + /** + * When vertical (y) scrolling is enabled, DataTables will force the height of + * the table's viewport to the given height at all times (useful for layout). + * However, this can look odd when filtering data down to a small data set, + * and the footer is left "floating" further down. This parameter (when + * enabled) will cause DataTables to collapse the table's viewport down when + * the result set will fit within the given Y height. + * @type boolean + * @default false + * @dtopt Options + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "sScrollY": "200", + * "bScrollCollapse": true + * } ); + * } ); + */ + "bScrollCollapse": false, + + + /** + * Enable infinite scrolling for DataTables (to be used in combination with + * sScrollY). Infinite scrolling means that DataTables will continually load + * data as a user scrolls through a table, which is very useful for large + * dataset. This cannot be used with pagination, which is automatically + * disabled. Note - the Scroller extra for DataTables is recommended in + * in preference to this option. + * @type boolean + * @default false + * @dtopt Features + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "bScrollInfinite": true, + * "bScrollCollapse": true, + * "sScrollY": "200px" + * } ); + * } ); + */ + "bScrollInfinite": false, + + + /** + * Configure DataTables to use server-side processing. Note that the + * sAjaxSource parameter must also be given in order to give DataTables a + * source to obtain the required data for each draw. + * @type boolean + * @default false + * @dtopt Features + * @dtopt Server-side + * + * @example + * $(document).ready( function () { + * $('#example').dataTable( { + * "bServerSide": true, + * "sAjaxSource": "xhr.php" + * } ); + * } ); + */ + "bServerSide": false, + + + /** + * Enable or disable sorting of columns. Sorting of individual columns can be + * disabled by the "bSortable" option for each column. + * @type boolean + * @default true + * @dtopt Features + * + * @example + * $(document).ready( function () { + * $('#example').dataTable( { + * "bSort": false + * } ); + * } ); + */ + "bSort": true, + + + /** + * Allows control over whether DataTables should use the top (true) unique + * cell that is found for a single column, or the bottom (false - default). + * This is useful when using complex headers. + * @type boolean + * @default false + * @dtopt Options + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "bSortCellsTop": true + * } ); + * } ); + */ + "bSortCellsTop": false, + + + /** + * Enable or disable the addition of the classes 'sorting_1', 'sorting_2' and + * 'sorting_3' to the columns which are currently being sorted on. This is + * presented as a feature switch as it can increase processing time (while + * classes are removed and added) so for large data sets you might want to + * turn this off. + * @type boolean + * @default true + * @dtopt Features + * + * @example + * $(document).ready( function () { + * $('#example').dataTable( { + * "bSortClasses": false + * } ); + * } ); + */ + "bSortClasses": true, + + + /** + * Enable or disable state saving. When enabled a cookie will be used to save + * table display information such as pagination information, display length, + * filtering and sorting. As such when the end user reloads the page the + * display display will match what thy had previously set up. + * @type boolean + * @default false + * @dtopt Features + * + * @example + * $(document).ready( function () { + * $('#example').dataTable( { + * "bStateSave": true + * } ); + * } ); + */ + "bStateSave": false, + + + /** + * Customise the cookie and / or the parameters being stored when using + * DataTables with state saving enabled. This function is called whenever + * the cookie is modified, and it expects a fully formed cookie string to be + * returned. Note that the data object passed in is a Javascript object which + * must be converted to a string (JSON.stringify for example). + * @type function + * @param {string} sName Name of the cookie defined by DataTables + * @param {object} oData Data to be stored in the cookie + * @param {string} sExpires Cookie expires string + * @param {string} sPath Path of the cookie to set + * @returns {string} Cookie formatted string (which should be encoded by + * using encodeURIComponent()) + * @dtopt Callbacks + * + * @example + * $(document).ready( function () { + * $('#example').dataTable( { + * "fnCookieCallback": function (sName, oData, sExpires, sPath) { + * // Customise oData or sName or whatever else here + * return sName + "="+JSON.stringify(oData)+"; expires=" + sExpires +"; path=" + sPath; + * } + * } ); + * } ); + */ + "fnCookieCallback": null, + + + /** + * This function is called when a TR element is created (and all TD child + * elements have been inserted), or registered if using a DOM source, allowing + * manipulation of the TR element (adding classes etc). + * @type function + * @param {node} nRow "TR" element for the current row + * @param {array} aData Raw data array for this row + * @param {int} iDataIndex The index of this row in aoData + * @dtopt Callbacks + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "fnCreatedRow": function( nRow, aData, iDataIndex ) { + * // Bold the grade for all 'A' grade browsers + * if ( aData[4] == "A" ) + * { + * $('td:eq(4)', nRow).html( '<b>A</b>' ); + * } + * } + * } ); + * } ); + */ + "fnCreatedRow": null, + + + /** + * This function is called on every 'draw' event, and allows you to + * dynamically modify any aspect you want about the created DOM. + * @type function + * @param {object} oSettings DataTables settings object + * @dtopt Callbacks + * + * @example + * $(document).ready( function() { + * $('#example').dataTable( { + * "fnDrawCallback": function() { + * alert( 'DataTables has redrawn the table' ); + * } + * } ); + * } ); + */ + "fnDrawCallback": null, + + + /** + * Identical to fnHeaderCallback() but for the table footer this function + * allows you to modify the table footer on every 'draw' even. + * @type function + * @param {node} nFoot "TR" element for the footer + * @param {array} aData Full table data (as derived from the original HTML) + * @param {int} iStart Index for the current display starting point in the + * display array + * @param {int} iEnd Index for the current display ending point in the + * display array + * @param {array int} aiDisplay Index array to translate the visual position + * to the full data array + * @dtopt Callbacks + * + * @example + * $(document).ready( function() { + * $('#example').dataTable( { + * "fnFooterCallback": function( nFoot, aData, iStart, iEnd, aiDisplay ) { + * nFoot.getElementsByTagName('th')[0].innerHTML = "Starting index is "+iStart; + * } + * } ); + * } ) + */ + "fnFooterCallback": null, + + + /** + * When rendering large numbers in the information element for the table + * (i.e. "Showing 1 to 10 of 57 entries") DataTables will render large numbers + * to have a comma separator for the 'thousands' units (e.g. 1 million is + * rendered as "1,000,000") to help readability for the end user. This + * function will override the default method DataTables uses. + * @type function + * @member + * @param {int} iIn number to be formatted + * @returns {string} formatted string for DataTables to show the number + * @dtopt Callbacks + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "fnFormatNumber": function ( iIn ) { + * if ( iIn < 1000 ) { + * return iIn; + * } else { + * var + * s=(iIn+""), + * a=s.split(""), out="", + * iLen=s.length; + * + * for ( var i=0 ; i<iLen ; i++ ) { + * if ( i%3 === 0 && i !== 0 ) { + * out = "'"+out; + * } + * out = a[iLen-i-1]+out; + * } + * } + * return out; + * }; + * } ); + * } ); + */ + "fnFormatNumber": function ( iIn ) { + if ( iIn < 1000 ) + { + // A small optimisation for what is likely to be the majority of use cases + return iIn; + } + + var s=(iIn+""), a=s.split(""), out="", iLen=s.length; + + for ( var i=0 ; i<iLen ; i++ ) + { + if ( i%3 === 0 && i !== 0 ) + { + out = this.oLanguage.sInfoThousands+out; + } + out = a[iLen-i-1]+out; + } + return out; + }, + + + /** + * This function is called on every 'draw' event, and allows you to + * dynamically modify the header row. This can be used to calculate and + * display useful information about the table. + * @type function + * @param {node} nHead "TR" element for the header + * @param {array} aData Full table data (as derived from the original HTML) + * @param {int} iStart Index for the current display starting point in the + * display array + * @param {int} iEnd Index for the current display ending point in the + * display array + * @param {array int} aiDisplay Index array to translate the visual position + * to the full data array + * @dtopt Callbacks + * + * @example + * $(document).ready( function() { + * $('#example').dataTable( { + * "fnHeaderCallback": function( nHead, aData, iStart, iEnd, aiDisplay ) { + * nHead.getElementsByTagName('th')[0].innerHTML = "Displaying "+(iEnd-iStart)+" records"; + * } + * } ); + * } ) + */ + "fnHeaderCallback": null, + + + /** + * The information element can be used to convey information about the current + * state of the table. Although the internationalisation options presented by + * DataTables are quite capable of dealing with most customisations, there may + * be times where you wish to customise the string further. This callback + * allows you to do exactly that. + * @type function + * @param {object} oSettings DataTables settings object + * @param {int} iStart Starting position in data for the draw + * @param {int} iEnd End position in data for the draw + * @param {int} iMax Total number of rows in the table (regardless of + * filtering) + * @param {int} iTotal Total number of rows in the data set, after filtering + * @param {string} sPre The string that DataTables has formatted using it's + * own rules + * @returns {string} The string to be displayed in the information element. + * @dtopt Callbacks + * + * @example + * $('#example').dataTable( { + * "fnInfoCallback": function( oSettings, iStart, iEnd, iMax, iTotal, sPre ) { + * return iStart +" to "+ iEnd; + * } + * } ); + */ + "fnInfoCallback": null, + + + /** + * Called when the table has been initialised. Normally DataTables will + * initialise sequentially and there will be no need for this function, + * however, this does not hold true when using external language information + * since that is obtained using an async XHR call. + * @type function + * @param {object} oSettings DataTables settings object + * @param {object} json The JSON object request from the server - only + * present if client-side Ajax sourced data is used + * @dtopt Callbacks + * + * @example + * $(document).ready( function() { + * $('#example').dataTable( { + * "fnInitComplete": function(oSettings, json) { + * alert( 'DataTables has finished its initialisation.' ); + * } + * } ); + * } ) + */ + "fnInitComplete": null, + + + /** + * Called at the very start of each table draw and can be used to cancel the + * draw by returning false, any other return (including undefined) results in + * the full draw occurring). + * @type function + * @param {object} oSettings DataTables settings object + * @returns {boolean} False will cancel the draw, anything else (including no + * return) will allow it to complete. + * @dtopt Callbacks + * + * @example + * $(document).ready( function() { + * $('#example').dataTable( { + * "fnPreDrawCallback": function( oSettings ) { + * if ( $('#test').val() == 1 ) { + * return false; + * } + * } + * } ); + * } ); + */ + "fnPreDrawCallback": null, + + + /** + * This function allows you to 'post process' each row after it have been + * generated for each table draw, but before it is rendered on screen. This + * function might be used for setting the row class name etc. + * @type function + * @param {node} nRow "TR" element for the current row + * @param {array} aData Raw data array for this row + * @param {int} iDisplayIndex The display index for the current table draw + * @param {int} iDisplayIndexFull The index of the data in the full list of + * rows (after filtering) + * @dtopt Callbacks + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "fnRowCallback": function( nRow, aData, iDisplayIndex, iDisplayIndexFull ) { + * // Bold the grade for all 'A' grade browsers + * if ( aData[4] == "A" ) + * { + * $('td:eq(4)', nRow).html( '<b>A</b>' ); + * } + * } + * } ); + * } ); + */ + "fnRowCallback": null, + + + /** + * This parameter allows you to override the default function which obtains + * the data from the server ($.getJSON) so something more suitable for your + * application. For example you could use POST data, or pull information from + * a Gears or AIR database. + * @type function + * @member + * @param {string} sSource HTTP source to obtain the data from (sAjaxSource) + * @param {array} aoData A key/value pair object containing the data to send + * to the server + * @param {function} fnCallback to be called on completion of the data get + * process that will draw the data on the page. + * @param {object} oSettings DataTables settings object + * @dtopt Callbacks + * @dtopt Server-side + * + * @example + * // POST data to server + * $(document).ready(function() { + * $('#example').dataTable( { + * "bProcessing": true, + * "bServerSide": true, + * "sAjaxSource": "xhr.php", + * "fnServerData": function ( sSource, aoData, fnCallback ) { + * $.ajax( { + * "dataType": 'json', + * "type": "POST", + * "url": sSource, + * "data": aoData, + * "success": fnCallback + * } ); + * } + * } ); + * } ); + */ + "fnServerData": function ( sUrl, aoData, fnCallback, oSettings ) { + oSettings.jqXHR = $.ajax( { + "url": sUrl, + "data": aoData, + "success": function (json) { + $(oSettings.oInstance).trigger('xhr', oSettings); + fnCallback( json ); + }, + "dataType": "json", + "cache": false, + "type": oSettings.sServerMethod, + "error": function (xhr, error, thrown) { + if ( error == "parsererror" ) { + alert( "DataTables warning: JSON data from server could not be parsed. "+ + "This is caused by a JSON formatting error." ); + } + } + } ); + }, + + + /** + * It is often useful to send extra data to the server when making an Ajax + * request - for example custom filtering information, and this callback + * function makes it trivial to send extra information to the server. The + * passed in parameter is the data set that has been constructed by + * DataTables, and you can add to this or modify it as you require. + * @type function + * @param {array} aoData Data array (array of objects which are name/value + * pairs) that has been constructed by DataTables and will be sent to the + * server. In the case of Ajax sourced data with server-side processing + * this will be an empty array, for server-side processing there will be a + * significant number of parameters! + * @returns {undefined} Ensure that you modify the aoData array passed in, + * as this is passed by reference. + * @dtopt Callbacks + * @dtopt Server-side + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "bProcessing": true, + * "bServerSide": true, + * "sAjaxSource": "scripts/server_processing.php", + * "fnServerParams": function ( aoData ) { + * aoData.push( { "name": "more_data", "value": "my_value" } ); + * } + * } ); + * } ); + */ + "fnServerParams": null, + + + /** + * Load the table state. With this function you can define from where, and how, the + * state of a table is loaded. By default DataTables will load from its state saving + * cookie, but you might wish to use local storage (HTML5) or a server-side database. + * @type function + * @member + * @param {object} oSettings DataTables settings object + * @return {object} The DataTables state object to be loaded + * @dtopt Callbacks + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "bStateSave": true, + * "fnStateSave": function (oSettings, oData) { + * var o; + * + * // Send an Ajax request to the server to get the data. Note that + * // this is a synchronous request. + * $.ajax( { + * "url": "/state_load", + * "async": false, + * "dataType": "json", + * "success": function (json) { + * o = json; + * } + * } ); + * + * return o; + * } + * } ); + * } ); + */ + "fnStateLoad": function ( oSettings ) { + var sData = this.oApi._fnReadCookie( oSettings.sCookiePrefix+oSettings.sInstance ); + var oData; + + try { + oData = (typeof $.parseJSON === 'function') ? + $.parseJSON(sData) : eval( '('+sData+')' ); + } catch (e) { + oData = null; + } + + return oData; + }, + + + /** + * Callback which allows modification of the saved state prior to loading that state. + * This callback is called when the table is loading state from the stored data, but + * prior to the settings object being modified by the saved state. Note that for + * plug-in authors, you should use the 'stateLoadParams' event to load parameters for + * a plug-in. + * @type function + * @param {object} oSettings DataTables settings object + * @param {object} oData The state object that is to be loaded + * @dtopt Callbacks + * + * @example + * // Remove a saved filter, so filtering is never loaded + * $(document).ready(function() { + * $('#example').dataTable( { + * "bStateSave": true, + * "fnStateLoadParams": function (oSettings, oData) { + * oData.oFilter.sSearch = ""; + * } ); + * } ); + * + * @example + * // Disallow state loading by returning false + * $(document).ready(function() { + * $('#example').dataTable( { + * "bStateSave": true, + * "fnStateLoadParams": function (oSettings, oData) { + * return false; + * } ); + * } ); + */ + "fnStateLoadParams": null, + + + /** + * Callback that is called when the state has been loaded from the state saving method + * and the DataTables settings object has been modified as a result of the loaded state. + * @type function + * @param {object} oSettings DataTables settings object + * @param {object} oData The state object that was loaded + * @dtopt Callbacks + * + * @example + * // Show an alert with the filtering value that was saved + * $(document).ready(function() { + * $('#example').dataTable( { + * "bStateSave": true, + * "fnStateLoaded": function (oSettings, oData) { + * alert( 'Saved filter was: '+oData.oFilter.sSearch ); + * } ); + * } ); + */ + "fnStateLoaded": null, + + + /** + * Save the table state. This function allows you to define where and how the state + * information for the table is stored - by default it will use a cookie, but you + * might want to use local storage (HTML5) or a server-side database. + * @type function + * @member + * @param {object} oSettings DataTables settings object + * @param {object} oData The state object to be saved + * @dtopt Callbacks + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "bStateSave": true, + * "fnStateSave": function (oSettings, oData) { + * // Send an Ajax request to the server with the state object + * $.ajax( { + * "url": "/state_save", + * "data": oData, + * "dataType": "json", + * "method": "POST" + * "success": function () {} + * } ); + * } + * } ); + * } ); + */ + "fnStateSave": function ( oSettings, oData ) { + this.oApi._fnCreateCookie( + oSettings.sCookiePrefix+oSettings.sInstance, + this.oApi._fnJsonString(oData), + oSettings.iCookieDuration, + oSettings.sCookiePrefix, + oSettings.fnCookieCallback + ); + }, + + + /** + * Callback which allows modification of the state to be saved. Called when the table + * has changed state a new state save is required. This method allows modification of + * the state saving object prior to actually doing the save, including addition or + * other state properties or modification. Note that for plug-in authors, you should + * use the 'stateSaveParams' event to save parameters for a plug-in. + * @type function + * @param {object} oSettings DataTables settings object + * @param {object} oData The state object to be saved + * @dtopt Callbacks + * + * @example + * // Remove a saved filter, so filtering is never saved + * $(document).ready(function() { + * $('#example').dataTable( { + * "bStateSave": true, + * "fnStateLoadParams": function (oSettings, oData) { + * oData.oFilter.sSearch = ""; + * } ); + * } ); + */ + "fnStateSaveParams": null, + + + /** + * Duration of the cookie which is used for storing session information. This + * value is given in seconds. + * @type int + * @default 7200 <i>(2 hours)</i> + * @dtopt Options + * + * @example + * $(document).ready( function() { + * $('#example').dataTable( { + * "iCookieDuration": 60*60*24 // 1 day + * } ); + * } ) + */ + "iCookieDuration": 7200, + + + /** + * When enabled DataTables will not make a request to the server for the first + * page draw - rather it will use the data already on the page (no sorting etc + * will be applied to it), thus saving on an XHR at load time. iDeferLoading + * is used to indicate that deferred loading is required, but it is also used + * to tell DataTables how many records there are in the full table (allowing + * the information element and pagination to be displayed correctly). + * @type int + * @default null + * @dtopt Options + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "bServerSide": true, + * "sAjaxSource": "scripts/server_processing.php", + * "iDeferLoading": 57 + * } ); + * } ); + */ + "iDeferLoading": null, + + + /** + * Number of rows to display on a single page when using pagination. If + * feature enabled (bLengthChange) then the end user will be able to override + * this to a custom setting using a pop-up menu. + * @type int + * @default 10 + * @dtopt Options + * + * @example + * $(document).ready( function() { + * $('#example').dataTable( { + * "iDisplayLength": 50 + * } ); + * } ) + */ + "iDisplayLength": 10, + + + /** + * Define the starting point for data display when using DataTables with + * pagination. Note that this parameter is the number of records, rather than + * the page number, so if you have 10 records per page and want to start on + * the third page, it should be "20". + * @type int + * @default 0 + * @dtopt Options + * + * @example + * $(document).ready( function() { + * $('#example').dataTable( { + * "iDisplayStart": 20 + * } ); + * } ) + */ + "iDisplayStart": 0, + + + /** + * The scroll gap is the amount of scrolling that is left to go before + * DataTables will load the next 'page' of data automatically. You typically + * want a gap which is big enough that the scrolling will be smooth for the + * user, while not so large that it will load more data than need. + * @type int + * @default 100 + * @dtopt Options + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "bScrollInfinite": true, + * "bScrollCollapse": true, + * "sScrollY": "200px", + * "iScrollLoadGap": 50 + * } ); + * } ); + */ + "iScrollLoadGap": 100, + + + /** + * By default DataTables allows keyboard navigation of the table (sorting, paging, + * and filtering) by adding a tabindex attribute to the required elements. This + * allows you to tab through the controls and press the enter key to activate them. + * The tabindex is default 0, meaning that the tab follows the flow of the document. + * You can overrule this using this parameter if you wish. Use a value of -1 to + * disable built-in keyboard navigation. + * @type int + * @default 0 + * @dtopt Options + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "iTabIndex": 1 + * } ); + * } ); + */ + "iTabIndex": 0, + + + /** + * All strings that DataTables uses in the user interface that it creates + * are defined in this object, allowing you to modified them individually or + * completely replace them all as required. + * @namespace + */ + "oLanguage": { + /** + * Strings that are used for WAI-ARIA labels and controls only (these are not + * actually visible on the page, but will be read by screenreaders, and thus + * must be internationalised as well). + * @namespace + */ + "oAria": { + /** + * ARIA label that is added to the table headers when the column may be + * sorted ascending by activing the column (click or return when focused). + * Note that the column header is prefixed to this string. + * @type string + * @default : activate to sort column ascending + * @dtopt Language + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "oLanguage": { + * "oAria": { + * "sSortAscending": " - click/return to sort ascending" + * } + * } + * } ); + * } ); + */ + "sSortAscending": ": activate to sort column ascending", + + /** + * ARIA label that is added to the table headers when the column may be + * sorted descending by activing the column (click or return when focused). + * Note that the column header is prefixed to this string. + * @type string + * @default : activate to sort column ascending + * @dtopt Language + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "oLanguage": { + * "oAria": { + * "sSortDescending": " - click/return to sort descending" + * } + * } + * } ); + * } ); + */ + "sSortDescending": ": activate to sort column descending" + }, + + /** + * Pagination string used by DataTables for the two built-in pagination + * control types ("two_button" and "full_numbers") + * @namespace + */ + "oPaginate": { + /** + * Text to use when using the 'full_numbers' type of pagination for the + * button to take the user to the first page. + * @type string + * @default First + * @dtopt Language + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "oLanguage": { + * "oPaginate": { + * "sFirst": "First page" + * } + * } + * } ); + * } ); + */ + "sFirst": "First", + + + /** + * Text to use when using the 'full_numbers' type of pagination for the + * button to take the user to the last page. + * @type string + * @default Last + * @dtopt Language + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "oLanguage": { + * "oPaginate": { + * "sLast": "Last page" + * } + * } + * } ); + * } ); + */ + "sLast": "Last", + + + /** + * Text to use when using the 'full_numbers' type of pagination for the + * button to take the user to the next page. + * @type string + * @default Next + * @dtopt Language + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "oLanguage": { + * "oPaginate": { + * "sNext": "Next page" + * } + * } + * } ); + * } ); + */ + "sNext": "Next", + + + /** + * Text to use when using the 'full_numbers' type of pagination for the + * button to take the user to the previous page. + * @type string + * @default Previous + * @dtopt Language + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "oLanguage": { + * "oPaginate": { + * "sPrevious": "Previous page" + * } + * } + * } ); + * } ); + */ + "sPrevious": "Previous" + }, + + /** + * This string is shown in preference to sZeroRecords when the table is + * empty of data (regardless of filtering). Note that this is an optional + * parameter - if it is not given, the value of sZeroRecords will be used + * instead (either the default or given value). + * @type string + * @default No data available in table + * @dtopt Language + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "oLanguage": { + * "sEmptyTable": "No data available in table" + * } + * } ); + * } ); + */ + "sEmptyTable": "No data available in table", + + + /** + * This string gives information to the end user about the information that + * is current on display on the page. The _START_, _END_ and _TOTAL_ + * variables are all dynamically replaced as the table display updates, and + * can be freely moved or removed as the language requirements change. + * @type string + * @default Showing _START_ to _END_ of _TOTAL_ entries + * @dtopt Language + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "oLanguage": { + * "sInfo": "Got a total of _TOTAL_ entries to show (_START_ to _END_)" + * } + * } ); + * } ); + */ + "sInfo": "Showing _START_ to _END_ of _TOTAL_ entries", + + + /** + * Display information string for when the table is empty. Typically the + * format of this string should match sInfo. + * @type string + * @default Showing 0 to 0 of 0 entries + * @dtopt Language + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "oLanguage": { + * "sInfoEmpty": "No entries to show" + * } + * } ); + * } ); + */ + "sInfoEmpty": "Showing 0 to 0 of 0 entries", + + + /** + * When a user filters the information in a table, this string is appended + * to the information (sInfo) to give an idea of how strong the filtering + * is. The variable _MAX_ is dynamically updated. + * @type string + * @default (filtered from _MAX_ total entries) + * @dtopt Language + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "oLanguage": { + * "sInfoFiltered": " - filtering from _MAX_ records" + * } + * } ); + * } ); + */ + "sInfoFiltered": "(filtered from _MAX_ total entries)", + + + /** + * If can be useful to append extra information to the info string at times, + * and this variable does exactly that. This information will be appended to + * the sInfo (sInfoEmpty and sInfoFiltered in whatever combination they are + * being used) at all times. + * @type string + * @default <i>Empty string</i> + * @dtopt Language + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "oLanguage": { + * "sInfoPostFix": "All records shown are derived from real information." + * } + * } ); + * } ); + */ + "sInfoPostFix": "", + + + /** + * DataTables has a build in number formatter (fnFormatNumber) which is used + * to format large numbers that are used in the table information. By + * default a comma is used, but this can be trivially changed to any + * character you wish with this parameter. + * @type string + * @default , + * @dtopt Language + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "oLanguage": { + * "sInfoThousands": "'" + * } + * } ); + * } ); + */ + "sInfoThousands": ",", + + + /** + * Detail the action that will be taken when the drop down menu for the + * pagination length option is changed. The '_MENU_' variable is replaced + * with a default select list of 10, 25, 50 and 100, and can be replaced + * with a custom select box if required. + * @type string + * @default Show _MENU_ entries + * @dtopt Language + * + * @example + * // Language change only + * $(document).ready(function() { + * $('#example').dataTable( { + * "oLanguage": { + * "sLengthMenu": "Display _MENU_ records" + * } + * } ); + * } ); + * + * @example + * // Language and options change + * $(document).ready(function() { + * $('#example').dataTable( { + * "oLanguage": { + * "sLengthMenu": 'Display <select>'+ + * '<option value="10">10</option>'+ + * '<option value="20">20</option>'+ + * '<option value="30">30</option>'+ + * '<option value="40">40</option>'+ + * '<option value="50">50</option>'+ + * '<option value="-1">All</option>'+ + * '</select> records' + * } + * } ); + * } ); + */ + "sLengthMenu": "Show _MENU_ entries", + + + /** + * When using Ajax sourced data and during the first draw when DataTables is + * gathering the data, this message is shown in an empty row in the table to + * indicate to the end user the the data is being loaded. Note that this + * parameter is not used when loading data by server-side processing, just + * Ajax sourced data with client-side processing. + * @type string + * @default Loading... + * @dtopt Language + * + * @example + * $(document).ready( function() { + * $('#example').dataTable( { + * "oLanguage": { + * "sLoadingRecords": "Please wait - loading..." + * } + * } ); + * } ); + */ + "sLoadingRecords": "Loading...", + + + /** + * Text which is displayed when the table is processing a user action + * (usually a sort command or similar). + * @type string + * @default Processing... + * @dtopt Language + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "oLanguage": { + * "sProcessing": "DataTables is currently busy" + * } + * } ); + * } ); + */ + "sProcessing": "Processing...", + + + /** + * Details the actions that will be taken when the user types into the + * filtering input text box. The variable "_INPUT_", if used in the string, + * is replaced with the HTML text box for the filtering input allowing + * control over where it appears in the string. If "_INPUT_" is not given + * then the input box is appended to the string automatically. + * @type string + * @default Search: + * @dtopt Language + * + * @example + * // Input text box will be appended at the end automatically + * $(document).ready(function() { + * $('#example').dataTable( { + * "oLanguage": { + * "sSearch": "Filter records:" + * } + * } ); + * } ); + * + * @example + * // Specify where the filter should appear + * $(document).ready(function() { + * $('#example').dataTable( { + * "oLanguage": { + * "sSearch": "Apply filter _INPUT_ to table" + * } + * } ); + * } ); + */ + "sSearch": "Search:", + + + /** + * All of the language information can be stored in a file on the + * server-side, which DataTables will look up if this parameter is passed. + * It must store the URL of the language file, which is in a JSON format, + * and the object has the same properties as the oLanguage object in the + * initialiser object (i.e. the above parameters). Please refer to one of + * the example language files to see how this works in action. + * @type string + * @default <i>Empty string - i.e. disabled</i> + * @dtopt Language + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "oLanguage": { + * "sUrl": "http://www.sprymedia.co.uk/dataTables/lang.txt" + * } + * } ); + * } ); + */ + "sUrl": "", + + + /** + * Text shown inside the table records when the is no information to be + * displayed after filtering. sEmptyTable is shown when there is simply no + * information in the table at all (regardless of filtering). + * @type string + * @default No matching records found + * @dtopt Language + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "oLanguage": { + * "sZeroRecords": "No records to display" + * } + * } ); + * } ); + */ + "sZeroRecords": "No matching records found" + }, + + + /** + * This parameter allows you to have define the global filtering state at + * initialisation time. As an object the "sSearch" parameter must be + * defined, but all other parameters are optional. When "bRegex" is true, + * the search string will be treated as a regular expression, when false + * (default) it will be treated as a straight string. When "bSmart" + * DataTables will use it's smart filtering methods (to word match at + * any point in the data), when false this will not be done. + * @namespace + * @extends DataTable.models.oSearch + * @dtopt Options + * + * @example + * $(document).ready( function() { + * $('#example').dataTable( { + * "oSearch": {"sSearch": "Initial search"} + * } ); + * } ) + */ + "oSearch": $.extend( {}, DataTable.models.oSearch ), + + + /** + * By default DataTables will look for the property 'aaData' when obtaining + * data from an Ajax source or for server-side processing - this parameter + * allows that property to be changed. You can use Javascript dotted object + * notation to get a data source for multiple levels of nesting. + * @type string + * @default aaData + * @dtopt Options + * @dtopt Server-side + * + * @example + * // Get data from { "data": [...] } + * $(document).ready(function() { + * var oTable = $('#example').dataTable( { + * "sAjaxSource": "sources/data.txt", + * "sAjaxDataProp": "data" + * } ); + * } ); + * + * @example + * // Get data from { "data": { "inner": [...] } } + * $(document).ready(function() { + * var oTable = $('#example').dataTable( { + * "sAjaxSource": "sources/data.txt", + * "sAjaxDataProp": "data.inner" + * } ); + * } ); + */ + "sAjaxDataProp": "aaData", + + + /** + * You can instruct DataTables to load data from an external source using this + * parameter (use aData if you want to pass data in you already have). Simply + * provide a url a JSON object can be obtained from. This object must include + * the parameter 'aaData' which is the data source for the table. + * @type string + * @default null + * @dtopt Options + * @dtopt Server-side + * + * @example + * $(document).ready( function() { + * $('#example').dataTable( { + * "sAjaxSource": "http://www.sprymedia.co.uk/dataTables/json.php" + * } ); + * } ) + */ + "sAjaxSource": null, + + + /** + * This parameter can be used to override the default prefix that DataTables + * assigns to a cookie when state saving is enabled. + * @type string + * @default SpryMedia_DataTables_ + * @dtopt Options + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "sCookiePrefix": "my_datatable_", + * } ); + * } ); + */ + "sCookiePrefix": "SpryMedia_DataTables_", + + + /** + * This initialisation variable allows you to specify exactly where in the + * DOM you want DataTables to inject the various controls it adds to the page + * (for example you might want the pagination controls at the top of the + * table). DIV elements (with or without a custom class) can also be added to + * aid styling. The follow syntax is used: + * <ul> + * <li>The following options are allowed: + * <ul> + * <li>'l' - Length changing</li + * <li>'f' - Filtering input</li> + * <li>'t' - The table!</li> + * <li>'i' - Information</li> + * <li>'p' - Pagination</li> + * <li>'r' - pRocessing</li> + * </ul> + * </li> + * <li>The following constants are allowed: + * <ul> + * <li>'H' - jQueryUI theme "header" classes ('fg-toolbar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix')</li> + * <li>'F' - jQueryUI theme "footer" classes ('fg-toolbar ui-widget-header ui-corner-bl ui-corner-br ui-helper-clearfix')</li> + * </ul> + * </li> + * <li>The following syntax is expected: + * <ul> + * <li>'<' and '>' - div elements</li> + * <li>'<"class" and '>' - div with a class</li> + * <li>'<"#id" and '>' - div with an ID</li> + * </ul> + * </li> + * <li>Examples: + * <ul> + * <li>'<"wrapper"flipt>'</li> + * <li>'<lf<t>ip>'</li> + * </ul> + * </li> + * </ul> + * @type string + * @default lfrtip <i>(when bJQueryUI is false)</i> <b>or</b> + * <"H"lfr>t<"F"ip> <i>(when bJQueryUI is true)</i> + * @dtopt Options + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "sDom": '<"top"i>rt<"bottom"flp><"clear"&lgt;' + * } ); + * } ); + */ + "sDom": "lfrtip", + + + /** + * DataTables features two different built-in pagination interaction methods + * ('two_button' or 'full_numbers') which present different page controls to + * the end user. Further methods can be added using the API (see below). + * @type string + * @default two_button + * @dtopt Options + * + * @example + * $(document).ready( function() { + * $('#example').dataTable( { + * "sPaginationType": "full_numbers" + * } ); + * } ) + */ + "sPaginationType": "two_button", + + + /** + * Enable horizontal scrolling. When a table is too wide to fit into a certain + * layout, or you have a large number of columns in the table, you can enable + * x-scrolling to show the table in a viewport, which can be scrolled. This + * property can by any CSS unit, or a number (in which case it will be treated + * as a pixel measurement). + * @type string + * @default <i>blank string - i.e. disabled</i> + * @dtopt Features + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "sScrollX": "100%", + * "bScrollCollapse": true + * } ); + * } ); + */ + "sScrollX": "", + + + /** + * This property can be used to force a DataTable to use more width than it + * might otherwise do when x-scrolling is enabled. For example if you have a + * table which requires to be well spaced, this parameter is useful for + * "over-sizing" the table, and thus forcing scrolling. This property can by + * any CSS unit, or a number (in which case it will be treated as a pixel + * measurement). + * @type string + * @default <i>blank string - i.e. disabled</i> + * @dtopt Options + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "sScrollX": "100%", + * "sScrollXInner": "110%" + * } ); + * } ); + */ + "sScrollXInner": "", + + + /** + * Enable vertical scrolling. Vertical scrolling will constrain the DataTable + * to the given height, an enable scrolling for any data which overflows the + * current viewport. This can be used as an alternative to paging to display + * a lot of data in a small area (although paging and scrolling can both be + * enabled at the same time). This property can by any CSS unit, or a number + * (in which case it will be treated as a pixel measurement). + * @type string + * @default <i>blank string - i.e. disabled</i> + * @dtopt Features + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "sScrollY": "200px", + * "bPaginate": false + * } ); + * } ); + */ + "sScrollY": "", + + + /** + * Set the HTTP method that is used to make the Ajax call for server-side + * processing or Ajax sourced data. + * @type string + * @default GET + * @dtopt Options + * @dtopt Server-side + * + * @example + * $(document).ready(function() { + * $('#example').dataTable( { + * "bServerSide": true, + * "sAjaxSource": "scripts/post.php", + * "sServerMethod": "POST" + * } ); + * } ); + */ + "sServerMethod": "GET" +}; + diff --git a/src/warden-server/contrib/wardenweb/datatables/media/src/model/model.ext.js b/src/warden-server/contrib/wardenweb/datatables/media/src/model/model.ext.js new file mode 100644 index 0000000..590eeb2 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/src/model/model.ext.js @@ -0,0 +1,549 @@ + + +/** + * DataTables extension options and plug-ins. This namespace acts as a collection "area" + * for plug-ins that can be used to extend the default DataTables behaviour - indeed many + * of the build in methods use this method to provide their own capabilities (sorting methods + * for example). + * + * Note that this namespace is aliased to jQuery.fn.dataTableExt so it can be readily accessed + * and modified by plug-ins. + * @namespace + */ +DataTable.models.ext = { + /** + * Plug-in filtering functions - this method of filtering is complimentary to the default + * type based filtering, and a lot more comprehensive as it allows you complete control + * over the filtering logic. Each element in this array is a function (parameters + * described below) that is called for every row in the table, and your logic decides if + * it should be included in the filtered data set or not. + * <ul> + * <li> + * Function input parameters: + * <ul> + * <li>{object} DataTables settings object: see {@link DataTable.models.oSettings}.</li> + * <li>{array|object} Data for the row to be processed (same as the original format + * that was passed in as the data source, or an array from a DOM data source</li> + * <li>{int} Row index in aoData ({@link DataTable.models.oSettings.aoData}), which can + * be useful to retrieve the TR element if you need DOM interaction.</li> + * </ul> + * </li> + * <li> + * Function return: + * <ul> + * <li>{boolean} Include the row in the filtered result set (true) or not (false)</li> + * </ul> + * </il> + * </ul> + * @type array + * @default [] + * + * @example + * // The following example shows custom filtering being applied to the fourth column (i.e. + * // the aData[3] index) based on two input values from the end-user, matching the data in + * // a certain range. + * $.fn.dataTableExt.afnFiltering.push( + * function( oSettings, aData, iDataIndex ) { + * var iMin = document.getElementById('min').value * 1; + * var iMax = document.getElementById('max').value * 1; + * var iVersion = aData[3] == "-" ? 0 : aData[3]*1; + * if ( iMin == "" && iMax == "" ) { + * return true; + * } + * else if ( iMin == "" && iVersion < iMax ) { + * return true; + * } + * else if ( iMin < iVersion && "" == iMax ) { + * return true; + * } + * else if ( iMin < iVersion && iVersion < iMax ) { + * return true; + * } + * return false; + * } + * ); + */ + "afnFiltering": [], + + + /** + * Plug-in sorting functions - this method of sorting is complimentary to the default type + * based sorting that DataTables does automatically, allowing much greater control over the + * the data that is being used to sort a column. This is useful if you want to do sorting + * based on live data (for example the contents of an 'input' element) rather than just the + * static string that DataTables knows of. The way these plug-ins work is that you create + * an array of the values you wish to be sorted for the column in question and then return + * that array. Which pre-sorting function is run here depends on the sSortDataType parameter + * that is used for the column (if any). This is the corollary of <i>ofnSearch</i> for sort + * data. + * <ul> + * <li> + * Function input parameters: + * <ul> + * <li>{object} DataTables settings object: see {@link DataTable.models.oSettings}.</li> + * <li>{int} Target column index</li> + * </ul> + * </li> + * <li> + * Function return: + * <ul> + * <li>{array} Data for the column to be sorted upon</li> + * </ul> + * </il> + * </ul> + * + * Note that as of v1.9, it is typically preferable to use <i>mDataProp</i> to prepare data for + * the different uses that DataTables can put the data to. Specifically <i>mDataProp</i> when + * used as a function will give you a 'type' (sorting, filtering etc) that you can use to + * prepare the data as required for the different types. As such, this method is deprecated. + * @type array + * @default [] + * @deprecated + * + * @example + * // Updating the cached sorting information with user entered values in HTML input elements + * jQuery.fn.dataTableExt.afnSortData['dom-text'] = function ( oSettings, iColumn ) + * { + * var aData = []; + * $( 'td:eq('+iColumn+') input', oSettings.oApi._fnGetTrNodes(oSettings) ).each( function () { + * aData.push( this.value ); + * } ); + * return aData; + * } + */ + "afnSortData": [], + + + /** + * Feature plug-ins - This is an array of objects which describe the feature plug-ins that are + * available to DataTables. These feature plug-ins are accessible through the sDom initialisation + * option. As such, each feature plug-in must describe a function that is used to initialise + * itself (fnInit), a character so the feature can be enabled by sDom (cFeature) and the name + * of the feature (sFeature). Thus the objects attached to this method must provide: + * <ul> + * <li>{function} fnInit Initialisation of the plug-in + * <ul> + * <li> + * Function input parameters: + * <ul> + * <li>{object} DataTables settings object: see {@link DataTable.models.oSettings}.</li> + * </ul> + * </li> + * <li> + * Function return: + * <ul> + * <li>{node|null} The element which contains your feature. Note that the return + * may also be void if your plug-in does not require to inject any DOM elements + * into DataTables control (sDom) - for example this might be useful when + * developing a plug-in which allows table control via keyboard entry.</li> + * </ul> + * </il> + * </ul> + * </li> + * <li>{character} cFeature Character that will be matched in sDom - case sensitive</li> + * <li>{string} sFeature Feature name</li> + * </ul> + * @type array + * @default [] + * + * @example + * // How TableTools initialises itself. + * $.fn.dataTableExt.aoFeatures.push( { + * "fnInit": function( oSettings ) { + * return new TableTools( { "oDTSettings": oSettings } ); + * }, + * "cFeature": "T", + * "sFeature": "TableTools" + * } ); + */ + "aoFeatures": [], + + + /** + * Type detection plug-in functions - DataTables utilises types to define how sorting and + * filtering behave, and types can be either be defined by the developer (sType for the + * column) or they can be automatically detected by the methods in this array. The functions + * defined in the array are quite simple, taking a single parameter (the data to analyse) + * and returning the type if it is a known type, or null otherwise. + * <ul> + * <li> + * Function input parameters: + * <ul> + * <li>{*} Data from the column cell to be analysed</li> + * </ul> + * </li> + * <li> + * Function return: + * <ul> + * <li>{string|null} Data type detected, or null if unknown (and thus pass it + * on to the other type detection functions.</li> + * </ul> + * </il> + * </ul> + * @type array + * @default [] + * + * @example + * // Currency type detection plug-in: + * jQuery.fn.dataTableExt.aTypes.push( + * function ( sData ) { + * var sValidChars = "0123456789.-"; + * var Char; + * + * // Check the numeric part + * for ( i=1 ; i<sData.length ; i++ ) { + * Char = sData.charAt(i); + * if (sValidChars.indexOf(Char) == -1) { + * return null; + * } + * } + * + * // Check prefixed by currency + * if ( sData.charAt(0) == '$' || sData.charAt(0) == '£' ) { + * return 'currency'; + * } + * return null; + * } + * ); + */ + "aTypes": [], + + + /** + * Provide a common method for plug-ins to check the version of DataTables being used, + * in order to ensure compatibility. + * @type function + * @param {string} sVersion Version string to check for, in the format "X.Y.Z". Note + * that the formats "X" and "X.Y" are also acceptable. + * @returns {boolean} true if this version of DataTables is greater or equal to the + * required version, or false if this version of DataTales is not suitable + * + * @example + * $(document).ready(function() { + * var oTable = $('#example').dataTable(); + * alert( oTable.fnVersionCheck( '1.9.0' ) ); + * } ); + */ + "fnVersionCheck": function( sVersion ) + { + /* This is cheap, but very effective */ + var fnZPad = function (Zpad, count) + { + while(Zpad.length < count) { + Zpad += '0'; + } + return Zpad; + }; + var aThis = DataTable.ext.sVersion.split('.'); + var aThat = sVersion.split('.'); + var sThis = '', sThat = ''; + + for ( var i=0, iLen=aThat.length ; i<iLen ; i++ ) + { + sThis += fnZPad( aThis[i], 3 ); + sThat += fnZPad( aThat[i], 3 ); + } + + return parseInt(sThis, 10) >= parseInt(sThat, 10); + }, + + + /** + * Index for what 'this' index API functions should use + * @type int + * @default 0 + */ + "iApiIndex": 0, + + + /** + * Pre-processing of filtering data plug-ins - When you assign the sType for a column + * (or have it automatically detected for you by DataTables or a type detection plug-in), + * you will typically be using this for custom sorting, but it can also be used to provide + * custom filtering by allowing you to pre-processing the data and returning the data in + * the format that should be filtered upon. This is done by adding functions this object + * with a parameter name which matches the sType for that target column. This is the + * corollary of <i>afnSortData</i> for filtering data. + * <ul> + * <li> + * Function input parameters: + * <ul> + * <li>{*} Data from the column cell to be prepared for filtering</li> + * </ul> + * </li> + * <li> + * Function return: + * <ul> + * <li>{string|null} Formatted string that will be used for the filtering.</li> + * </ul> + * </il> + * </ul> + * + * Note that as of v1.9, it is typically preferable to use <i>mDataProp</i> to prepare data for + * the different uses that DataTables can put the data to. Specifically <i>mDataProp</i> when + * used as a function will give you a 'type' (sorting, filtering etc) that you can use to + * prepare the data as required for the different types. As such, this method is deprecated. + * @type object + * @default {} + * @deprecated + * + * @example + * $.fn.dataTableExt.ofnSearch['title-numeric'] = function ( sData ) { + * return sData.replace(/\n/g," ").replace( /<.*?>/g, "" ); + * } + */ + "ofnSearch": {}, + + + /** + * Container for all private functions in DataTables so they can be exposed externally + * @type object + * @default {} + */ + "oApi": {}, + + + /** + * Storage for the various classes that DataTables uses + * @type object + * @default {} + */ + "oStdClasses": {}, + + + /** + * Storage for the various classes that DataTables uses - jQuery UI suitable + * @type object + * @default {} + */ + "oJUIClasses": {}, + + + /** + * Pagination plug-in methods - The style and controls of the pagination can significantly + * impact on how the end user interacts with the data in your table, and DataTables allows + * the addition of pagination controls by extending this object, which can then be enabled + * through the <i>sPaginationType</i> initialisation parameter. Each pagination type that + * is added is an object (the property name of which is what <i>sPaginationType</i> refers + * to) that has two properties, both methods that are used by DataTables to update the + * control's state. + * <ul> + * <li> + * fnInit - Initialisation of the paging controls. Called only during initialisation + * of the table. It is expected that this function will add the required DOM elements + * to the page for the paging controls to work. The element pointer + * 'oSettings.aanFeatures.p' array is provided by DataTables to contain the paging + * controls (note that this is a 2D array to allow for multiple instances of each + * DataTables DOM element). It is suggested that you add the controls to this element + * as children + * <ul> + * <li> + * Function input parameters: + * <ul> + * <li>{object} DataTables settings object: see {@link DataTable.models.oSettings}.</li> + * <li>{node} Container into which the pagination controls must be inserted</li> + * <li>{function} Draw callback function - whenever the controls cause a page + * change, this method must be called to redraw the table.</li> + * </ul> + * </li> + * <li> + * Function return: + * <ul> + * <li>No return required</li> + * </ul> + * </il> + * </ul> + * </il> + * <li> + * fnInit - This function is called whenever the paging status of the table changes and is + * typically used to update classes and/or text of the paging controls to reflex the new + * status. + * <ul> + * <li> + * Function input parameters: + * <ul> + * <li>{object} DataTables settings object: see {@link DataTable.models.oSettings}.</li> + * <li>{function} Draw callback function - in case you need to redraw the table again + * or attach new event listeners</li> + * </ul> + * </li> + * <li> + * Function return: + * <ul> + * <li>No return required</li> + * </ul> + * </il> + * </ul> + * </il> + * </ul> + * @type object + * @default {} + * + * @example + * $.fn.dataTableExt.oPagination.four_button = { + * "fnInit": function ( oSettings, nPaging, fnCallbackDraw ) { + * nFirst = document.createElement( 'span' ); + * nPrevious = document.createElement( 'span' ); + * nNext = document.createElement( 'span' ); + * nLast = document.createElement( 'span' ); + * + * nFirst.appendChild( document.createTextNode( oSettings.oLanguage.oPaginate.sFirst ) ); + * nPrevious.appendChild( document.createTextNode( oSettings.oLanguage.oPaginate.sPrevious ) ); + * nNext.appendChild( document.createTextNode( oSettings.oLanguage.oPaginate.sNext ) ); + * nLast.appendChild( document.createTextNode( oSettings.oLanguage.oPaginate.sLast ) ); + * + * nFirst.className = "paginate_button first"; + * nPrevious.className = "paginate_button previous"; + * nNext.className="paginate_button next"; + * nLast.className = "paginate_button last"; + * + * nPaging.appendChild( nFirst ); + * nPaging.appendChild( nPrevious ); + * nPaging.appendChild( nNext ); + * nPaging.appendChild( nLast ); + * + * $(nFirst).click( function () { + * oSettings.oApi._fnPageChange( oSettings, "first" ); + * fnCallbackDraw( oSettings ); + * } ); + * + * $(nPrevious).click( function() { + * oSettings.oApi._fnPageChange( oSettings, "previous" ); + * fnCallbackDraw( oSettings ); + * } ); + * + * $(nNext).click( function() { + * oSettings.oApi._fnPageChange( oSettings, "next" ); + * fnCallbackDraw( oSettings ); + * } ); + * + * $(nLast).click( function() { + * oSettings.oApi._fnPageChange( oSettings, "last" ); + * fnCallbackDraw( oSettings ); + * } ); + * + * $(nFirst).bind( 'selectstart', function () { return false; } ); + * $(nPrevious).bind( 'selectstart', function () { return false; } ); + * $(nNext).bind( 'selectstart', function () { return false; } ); + * $(nLast).bind( 'selectstart', function () { return false; } ); + * }, + * + * "fnUpdate": function ( oSettings, fnCallbackDraw ) { + * if ( !oSettings.aanFeatures.p ) { + * return; + * } + * + * // Loop over each instance of the pager + * var an = oSettings.aanFeatures.p; + * for ( var i=0, iLen=an.length ; i<iLen ; i++ ) { + * var buttons = an[i].getElementsByTagName('span'); + * if ( oSettings._iDisplayStart === 0 ) { + * buttons[0].className = "paginate_disabled_previous"; + * buttons[1].className = "paginate_disabled_previous"; + * } + * else { + * buttons[0].className = "paginate_enabled_previous"; + * buttons[1].className = "paginate_enabled_previous"; + * } + * + * if ( oSettings.fnDisplayEnd() == oSettings.fnRecordsDisplay() ) { + * buttons[2].className = "paginate_disabled_next"; + * buttons[3].className = "paginate_disabled_next"; + * } + * else { + * buttons[2].className = "paginate_enabled_next"; + * buttons[3].className = "paginate_enabled_next"; + * } + * } + * } + * }; + */ + "oPagination": {}, + + + /** + * Sorting plug-in methods - Sorting in DataTables is based on the detected type of the + * data column (you can add your own type detection functions, or override automatic + * detection using sType). With this specific type given to the column, DataTables will + * apply the required sort from the functions in the object. Each sort type must provide + * two mandatory methods, one each for ascending and descending sorting, and can optionally + * provide a pre-formatting method that will help speed up sorting by allowing DataTables + * to pre-format the sort data only once (rather than every time the actual sort functions + * are run). The two sorting functions are typical Javascript sort methods: + * <ul> + * <li> + * Function input parameters: + * <ul> + * <li>{*} Data to compare to the second parameter</li> + * <li>{*} Data to compare to the first parameter</li> + * </ul> + * </li> + * <li> + * Function return: + * <ul> + * <li>{int} Sorting match: <0 if first parameter should be sorted lower than + * the second parameter, ===0 if the two parameters are equal and >0 if + * the first parameter should be sorted height than the second parameter.</li> + * </ul> + * </il> + * </ul> + * @type object + * @default {} + * + * @example + * // Case-sensitive string sorting, with no pre-formatting method + * $.extend( $.fn.dataTableExt.oSort, { + * "string-case-asc": function(x,y) { + * return ((x < y) ? -1 : ((x > y) ? 1 : 0)); + * }, + * "string-case-desc": function(x,y) { + * return ((x < y) ? 1 : ((x > y) ? -1 : 0)); + * } + * } ); + * + * @example + * // Case-insensitive string sorting, with pre-formatting + * $.extend( $.fn.dataTableExt.oSort, { + * "string-pre": function(x) { + * return x.toLowerCase(); + * }, + * "string-asc": function(x,y) { + * return ((x < y) ? -1 : ((x > y) ? 1 : 0)); + * }, + * "string-desc": function(x,y) { + * return ((x < y) ? 1 : ((x > y) ? -1 : 0)); + * } + * } ); + */ + "oSort": {}, + + + /** + * Version string for plug-ins to check compatibility. Allowed format is + * a.b.c.d.e where: a:int, b:int, c:int, d:string(dev|beta), e:int. d and + * e are optional + * @type string + * @default Version number + */ + "sVersion": DataTable.version, + + + /** + * How should DataTables report an error. Can take the value 'alert' or 'throw' + * @type string + * @default alert + */ + "sErrMode": "alert", + + + /** + * Store information for DataTables to access globally about other instances + * @namespace + * @private + */ + "_oExternConfig": { + /* int:iNextUnique - next unique number for an instance */ + "iNextUnique": 0 + } +}; + diff --git a/src/warden-server/contrib/wardenweb/datatables/media/src/model/model.row.js b/src/warden-server/contrib/wardenweb/datatables/media/src/model/model.row.js new file mode 100644 index 0000000..f88ec69 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/src/model/model.row.js @@ -0,0 +1,64 @@ + + + +/** + * Template object for the way in which DataTables holds information about + * each individual row. This is the object format used for the settings + * aoData array. + * @namespace + */ +DataTable.models.oRow = { + /** + * TR element for the row + * @type node + * @default null + */ + "nTr": null, + + /** + * Data object from the original data source for the row. This is either + * an array if using the traditional form of DataTables, or an object if + * using mDataProp options. The exact type will depend on the passed in + * data from the data source, or will be an array if using DOM a data + * source. + * @type array|object + * @default [] + */ + "_aData": [], + + /** + * Sorting data cache - this array is ostensibly the same length as the + * number of columns (although each index is generated only as it is + * needed), and holds the data that is used for sorting each column in the + * row. We do this cache generation at the start of the sort in order that + * the formatting of the sort data need be done only once for each cell + * per sort. This array should not be read from or written to by anything + * other than the master sorting methods. + * @type array + * @default [] + * @private + */ + "_aSortData": [], + + /** + * Array of TD elements that are cached for hidden rows, so they can be + * reinserted into the table if a column is made visible again (or to act + * as a store if a column is made hidden). Only hidden columns have a + * reference in the array. For non-hidden columns the value is either + * undefined or null. + * @type array nodes + * @default [] + * @private + */ + "_anHidden": [], + + /** + * Cache of the class name that DataTables has applied to the row, so we + * can quickly look at this variable rather than needing to do a DOM check + * on className for the nTr property. + * @type string + * @default <i>Empty string</i> + * @private + */ + "_sRowStripe": "" +}; diff --git a/src/warden-server/contrib/wardenweb/datatables/media/src/model/model.search.js b/src/warden-server/contrib/wardenweb/datatables/media/src/model/model.search.js new file mode 100644 index 0000000..455fa29 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/src/model/model.search.js @@ -0,0 +1,40 @@ + + + +/** + * Template object for the way in which DataTables holds information about + * search information for the global filter and individual column filters. + * @namespace + */ +DataTable.models.oSearch = { + /** + * Flag to indicate if the filtering should be case insensitive or not + * @type boolean + * @default true + */ + "bCaseInsensitive": true, + + /** + * Applied search term + * @type string + * @default <i>Empty string</i> + */ + "sSearch": "", + + /** + * Flag to indicate if the search term should be interpreted as a + * regular expression (true) or not (false) and therefore and special + * regex characters escaped. + * @type boolean + * @default false + */ + "bRegex": false, + + /** + * Flag to indicate if DataTables is to use its smart filtering or not. + * @type boolean + * @default true + */ + "bSmart": true +}; + diff --git a/src/warden-server/contrib/wardenweb/datatables/media/src/model/model.settings.js b/src/warden-server/contrib/wardenweb/datatables/media/src/model/model.settings.js new file mode 100644 index 0000000..95c0e81 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/src/model/model.settings.js @@ -0,0 +1,858 @@ + + +/** + * DataTables settings object - this holds all the information needed for a + * given table, including configuration, data and current application of the + * table options. DataTables does not have a single instance for each DataTable + * with the settings attached to that instance, but rather instances of the + * DataTable "class" are created on-the-fly as needed (typically by a + * $().dataTable() call) and the settings object is then applied to that + * instance. + * + * Note that this object is related to {@link DataTable.defaults} but this + * one is the internal data store for DataTables's cache of columns. It should + * NOT be manipulated outside of DataTables. Any configuration should be done + * through the initialisation options. + * @namespace + * @todo Really should attach the settings object to individual instances so we + * don't need to create new instances on each $().dataTable() call (if the + * table already exists). It would also save passing oSettings around and + * into every single function. However, this is a very significant + * architecture change for DataTables and will almost certainly break + * backwards compatibility with older installations. This is something that + * will be done in 2.0. + */ +DataTable.models.oSettings = { + /** + * Primary features of DataTables and their enablement state. + * @namespace + */ + "oFeatures": { + + /** + * Flag to say if DataTables should automatically try to calculate the + * optimum table and columns widths (true) or not (false). + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type boolean + */ + "bAutoWidth": null, + + /** + * Delay the creation of TR and TD elements until they are actually + * needed by a driven page draw. This can give a significant speed + * increase for Ajax source and Javascript source data, but makes no + * difference at all fro DOM and server-side processing tables. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type boolean + */ + "bDeferRender": null, + + /** + * Enable filtering on the table or not. Note that if this is disabled + * then there is no filtering at all on the table, including fnFilter. + * To just remove the filtering input use sDom and remove the 'f' option. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type boolean + */ + "bFilter": null, + + /** + * Table information element (the 'Showing x of y records' div) enable + * flag. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type boolean + */ + "bInfo": null, + + /** + * Present a user control allowing the end user to change the page size + * when pagination is enabled. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type boolean + */ + "bLengthChange": null, + + /** + * Pagination enabled or not. Note that if this is disabled then length + * changing must also be disabled. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type boolean + */ + "bPaginate": null, + + /** + * Processing indicator enable flag whenever DataTables is enacting a + * user request - typically an Ajax request for server-side processing. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type boolean + */ + "bProcessing": null, + + /** + * Server-side processing enabled flag - when enabled DataTables will + * get all data from the server for every draw - there is no filtering, + * sorting or paging done on the client-side. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type boolean + */ + "bServerSide": null, + + /** + * Sorting enablement flag. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type boolean + */ + "bSort": null, + + /** + * Apply a class to the columns which are being sorted to provide a + * visual highlight or not. This can slow things down when enabled since + * there is a lot of DOM interaction. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type boolean + */ + "bSortClasses": null, + + /** + * State saving enablement flag. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type boolean + */ + "bStateSave": null + }, + + + /** + * Scrolling settings for a table. + * @namespace + */ + "oScroll": { + /** + * Indicate if DataTables should be allowed to set the padding / margin + * etc for the scrolling header elements or not. Typically you will want + * this. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type boolean + */ + "bAutoCss": null, + + /** + * When the table is shorter in height than sScrollY, collapse the + * table container down to the height of the table (when true). + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type boolean + */ + "bCollapse": null, + + /** + * Infinite scrolling enablement flag. Now deprecated in favour of + * using the Scroller plug-in. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type boolean + */ + "bInfinite": null, + + /** + * Width of the scrollbar for the web-browser's platform. Calculated + * during table initialisation. + * @type int + * @default 0 + */ + "iBarWidth": 0, + + /** + * Space (in pixels) between the bottom of the scrolling container and + * the bottom of the scrolling viewport before the next page is loaded + * when using infinite scrolling. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type int + */ + "iLoadGap": null, + + /** + * Viewport width for horizontal scrolling. Horizontal scrolling is + * disabled if an empty string. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type string + */ + "sX": null, + + /** + * Width to expand the table to when using x-scrolling. Typically you + * should not need to use this. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type string + * @deprecated + */ + "sXInner": null, + + /** + * Viewport height for vertical scrolling. Vertical scrolling is disabled + * if an empty string. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type string + */ + "sY": null + }, + + /** + * Language information for the table. + * @namespace + * @extends DataTable.defaults.oLanguage + */ + "oLanguage": { + /** + * Information callback function. See + * {@link DataTable.defaults.fnInfoCallback} + * @type function + * @default + */ + "fnInfoCallback": null + }, + + /** + * Array referencing the nodes which are used for the features. The + * parameters of this object match what is allowed by sDom - i.e. + * <ul> + * <li>'l' - Length changing</li> + * <li>'f' - Filtering input</li> + * <li>'t' - The table!</li> + * <li>'i' - Information</li> + * <li>'p' - Pagination</li> + * <li>'r' - pRocessing</li> + * </ul> + * @type array + * @default [] + */ + "aanFeatures": [], + + /** + * Store data information - see {@link DataTable.models.oRow} for detailed + * information. + * @type array + * @default [] + */ + "aoData": [], + + /** + * Array of indexes which are in the current display (after filtering etc) + * @type array + * @default [] + */ + "aiDisplay": [], + + /** + * Array of indexes for display - no filtering + * @type array + * @default [] + */ + "aiDisplayMaster": [], + + /** + * Store information about each column that is in use + * @type array + * @default [] + */ + "aoColumns": [], + + /** + * Store information about the table's header + * @type array + * @default [] + */ + "aoHeader": [], + + /** + * Store information about the table's footer + * @type array + * @default [] + */ + "aoFooter": [], + + /** + * Search data array for regular expression searching + * @type array + * @default [] + */ + "asDataSearch": [], + + /** + * Store the applied global search information in case we want to force a + * research or compare the old search to a new one. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @namespace + * @extends DataTable.models.oSearch + */ + "oPreviousSearch": {}, + + /** + * Store the applied search for each column - see + * {@link DataTable.models.oSearch} for the format that is used for the + * filtering information for each column. + * @type array + * @default [] + */ + "aoPreSearchCols": [], + + /** + * Sorting that is applied to the table. Note that the inner arrays are + * used in the following manner: + * <ul> + * <li>Index 0 - column number</li> + * <li>Index 1 - current sorting direction</li> + * <li>Index 2 - index of asSorting for this column</li> + * </ul> + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type array + * @todo These inner arrays should really be objects + */ + "aaSorting": null, + + /** + * Sorting that is always applied to the table (i.e. prefixed in front of + * aaSorting). + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type array|null + * @default null + */ + "aaSortingFixed": null, + + /** + * Classes to use for the striping of a table. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type array + * @default [] + */ + "asStripeClasses": null, + + /** + * If restoring a table - we should restore its striping classes as well + * @type array + * @default [] + */ + "asDestroyStripes": [], + + /** + * If restoring a table - we should restore its width + * @type int + * @default 0 + */ + "sDestroyWidth": 0, + + /** + * Callback functions array for every time a row is inserted (i.e. on a draw). + * @type array + * @default [] + */ + "aoRowCallback": [], + + /** + * Callback functions for the header on each draw. + * @type array + * @default [] + */ + "aoHeaderCallback": [], + + /** + * Callback function for the footer on each draw. + * @type array + * @default [] + */ + "aoFooterCallback": [], + + /** + * Array of callback functions for draw callback functions + * @type array + * @default [] + */ + "aoDrawCallback": [], + + /** + * Array of callback functions for row created function + * @type array + * @default [] + */ + "aoRowCreatedCallback": [], + + /** + * Callback functions for just before the table is redrawn. A return of + * false will be used to cancel the draw. + * @type array + * @default [] + */ + "aoPreDrawCallback": [], + + /** + * Callback functions for when the table has been initialised. + * @type array + * @default [] + */ + "aoInitComplete": [], + + + /** + * Callbacks for modifying the settings to be stored for state saving, prior to + * saving state. + * @type array + * @default [] + */ + "aoStateSaveParams": [], + + /** + * Callbacks for modifying the settings that have been stored for state saving + * prior to using the stored values to restore the state. + * @type array + * @default [] + */ + "aoStateLoadParams": [], + + /** + * Callbacks for operating on the settings object once the saved state has been + * loaded + * @type array + * @default [] + */ + "aoStateLoaded": [], + + /** + * Cache the table ID for quick access + * @type string + * @default <i>Empty string</i> + */ + "sTableId": "", + + /** + * The TABLE node for the main table + * @type node + * @default null + */ + "nTable": null, + + /** + * Permanent ref to the thead element + * @type node + * @default null + */ + "nTHead": null, + + /** + * Permanent ref to the tfoot element - if it exists + * @type node + * @default null + */ + "nTFoot": null, + + /** + * Permanent ref to the tbody element + * @type node + * @default null + */ + "nTBody": null, + + /** + * Cache the wrapper node (contains all DataTables controlled elements) + * @type node + * @default null + */ + "nTableWrapper": null, + + /** + * Indicate if when using server-side processing the loading of data + * should be deferred until the second draw. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type boolean + * @default false + */ + "bDeferLoading": false, + + /** + * Indicate if all required information has been read in + * @type boolean + * @default false + */ + "bInitialised": false, + + /** + * Information about open rows. Each object in the array has the parameters + * 'nTr' and 'nParent' + * @type array + * @default [] + */ + "aoOpenRows": [], + + /** + * Dictate the positioning of DataTables' control elements - see + * {@link DataTable.model.oInit.sDom}. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type string + * @default null + */ + "sDom": null, + + /** + * Which type of pagination should be used. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type string + * @default two_button + */ + "sPaginationType": "two_button", + + /** + * The cookie duration (for bStateSave) in seconds. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type int + * @default 0 + */ + "iCookieDuration": 0, + + /** + * The cookie name prefix. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type string + * @default <i>Empty string</i> + */ + "sCookiePrefix": "", + + /** + * Callback function for cookie creation. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type function + * @default null + */ + "fnCookieCallback": null, + + /** + * Array of callback functions for state saving. Each array element is an + * object with the following parameters: + * <ul> + * <li>function:fn - function to call. Takes two parameters, oSettings + * and the JSON string to save that has been thus far created. Returns + * a JSON string to be inserted into a json object + * (i.e. '"param": [ 0, 1, 2]')</li> + * <li>string:sName - name of callback</li> + * </ul> + * @type array + * @default [] + */ + "aoStateSave": [], + + /** + * Array of callback functions for state loading. Each array element is an + * object with the following parameters: + * <ul> + * <li>function:fn - function to call. Takes two parameters, oSettings + * and the object stored. May return false to cancel state loading</li> + * <li>string:sName - name of callback</li> + * </ul> + * @type array + * @default [] + */ + "aoStateLoad": [], + + /** + * State that was loaded from the cookie. Useful for back reference + * @type object + * @default null + */ + "oLoadedState": null, + + /** + * Source url for AJAX data for the table. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type string + * @default null + */ + "sAjaxSource": null, + + /** + * Property from a given object from which to read the table data from. This + * can be an empty string (when not server-side processing), in which case + * it is assumed an an array is given directly. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type string + */ + "sAjaxDataProp": null, + + /** + * Note if draw should be blocked while getting data + * @type boolean + * @default true + */ + "bAjaxDataGet": true, + + /** + * The last jQuery XHR object that was used for server-side data gathering. + * This can be used for working with the XHR information in one of the + * callbacks + * @type object + * @default null + */ + "jqXHR": null, + + /** + * Function to get the server-side data. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type function + */ + "fnServerData": null, + + /** + * Functions which are called prior to sending an Ajax request so extra + * parameters can easily be sent to the server + * @type array + * @default [] + */ + "aoServerParams": [], + + /** + * Send the XHR HTTP method - GET or POST (could be PUT or DELETE if + * required). + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type string + */ + "sServerMethod": null, + + /** + * Format numbers for display. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type function + */ + "fnFormatNumber": null, + + /** + * List of options that can be used for the user selectable length menu. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type array + * @default [] + */ + "aLengthMenu": null, + + /** + * Counter for the draws that the table does. Also used as a tracker for + * server-side processing + * @type int + * @default 0 + */ + "iDraw": 0, + + /** + * Indicate if a redraw is being done - useful for Ajax + * @type boolean + * @default false + */ + "bDrawing": false, + + /** + * Draw index (iDraw) of the last error when parsing the returned data + * @type int + * @default -1 + */ + "iDrawError": -1, + + /** + * Paging display length + * @type int + * @default 10 + */ + "_iDisplayLength": 10, + + /** + * Paging start point - aiDisplay index + * @type int + * @default 0 + */ + "_iDisplayStart": 0, + + /** + * Paging end point - aiDisplay index. Use fnDisplayEnd rather than + * this property to get the end point + * @type int + * @default 10 + * @private + */ + "_iDisplayEnd": 10, + + /** + * Server-side processing - number of records in the result set + * (i.e. before filtering), Use fnRecordsTotal rather than + * this property to get the value of the number of records, regardless of + * the server-side processing setting. + * @type int + * @default 0 + * @private + */ + "_iRecordsTotal": 0, + + /** + * Server-side processing - number of records in the current display set + * (i.e. after filtering). Use fnRecordsDisplay rather than + * this property to get the value of the number of records, regardless of + * the server-side processing setting. + * @type boolean + * @default 0 + * @private + */ + "_iRecordsDisplay": 0, + + /** + * Flag to indicate if jQuery UI marking and classes should be used. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type boolean + */ + "bJUI": null, + + /** + * The classes to use for the table + * @type object + * @default {} + */ + "oClasses": {}, + + /** + * Flag attached to the settings object so you can check in the draw + * callback if filtering has been done in the draw. Deprecated in favour of + * events. + * @type boolean + * @default false + * @deprecated + */ + "bFiltered": false, + + /** + * Flag attached to the settings object so you can check in the draw + * callback if sorting has been done in the draw. Deprecated in favour of + * events. + * @type boolean + * @default false + * @deprecated + */ + "bSorted": false, + + /** + * Indicate that if multiple rows are in the header and there is more than + * one unique cell per column, if the top one (true) or bottom one (false) + * should be used for sorting / title by DataTables. + * Note that this parameter will be set by the initialisation routine. To + * set a default use {@link DataTable.defaults}. + * @type boolean + */ + "bSortCellsTop": null, + + /** + * Initialisation object that is used for the table + * @type object + * @default null + */ + "oInit": null, + + /** + * Destroy callback functions - for plug-ins to attach themselves to the + * destroy so they can clean up markup and events. + * @type array + * @default [] + */ + "aoDestroyCallback": [], + + + /** + * Get the number of records in the current record set, before filtering + * @type function + */ + "fnRecordsTotal": function () + { + if ( this.oFeatures.bServerSide ) { + return parseInt(this._iRecordsTotal, 10); + } else { + return this.aiDisplayMaster.length; + } + }, + + /** + * Get the number of records in the current record set, after filtering + * @type function + */ + "fnRecordsDisplay": function () + { + if ( this.oFeatures.bServerSide ) { + return parseInt(this._iRecordsDisplay, 10); + } else { + return this.aiDisplay.length; + } + }, + + /** + * Set the display end point - aiDisplay index + * @type function + * @todo Should do away with _iDisplayEnd and calculate it on-the-fly here + */ + "fnDisplayEnd": function () + { + if ( this.oFeatures.bServerSide ) { + if ( this.oFeatures.bPaginate === false || this._iDisplayLength == -1 ) { + return this._iDisplayStart+this.aiDisplay.length; + } else { + return Math.min( this._iDisplayStart+this._iDisplayLength, + this._iRecordsDisplay ); + } + } else { + return this._iDisplayEnd; + } + }, + + /** + * The DataTables object for this table + * @type object + * @default null + */ + "oInstance": null, + + /** + * Unique identifier for each instance of the DataTables object. If there + * is an ID on the table node, then it takes that value, otherwise an + * incrementing internal counter is used. + * @type string + * @default null + */ + "sInstance": null, + + /** + * tabindex attribute value that is added to DataTables control elements, allowing + * keyboard navigation of the table and its controls. + */ + "iTabIndex": 0 +}; diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/controller.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/controller.js new file mode 100644 index 0000000..590b756 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/controller.js @@ -0,0 +1,94 @@ +var giTotalTestCount = 0; +var giActiveModule = 0; +var giModuleTests; +var giStartTime; +var giTest; +var gbStop = false; +var gtoTest; + +function fnTestStart ( sTestInfo ) +{ + gaoTest[ giActiveModule ].iTests++; + document.getElementById('test_info').innerHTML += + (giActiveModule+1)+'.'+(giModuleTests+1)+'. '+sTestInfo+'... '; + document.getElementById('test_number').innerHTML = giTotalTestCount+1; + giModuleTests++; + giTotalTestCount++; + + /* Set a timer to catch stalled script */ + gtoTest = setTimeout( function () { + fnMessage( '<span class="error">WARNING - test script stalled. Likely a JS error</span>' ); + gbStop = true; + }, 3000 ); +} + +function fnTestResult ( bResult ) +{ + clearTimeout( gtoTest ); + if ( bResult ) + { + fnMessage( 'Passed' ); + } + else + { + fnMessage( '<span class="error">FAILED</span>' ); + gbStop = true; + fnEnd( false ); + } +} + +function fnUnitStart( iTest ) +{ + if ( !gbStop ) + { + giModuleTests = 0; + window.parent.test_arena.location.href = + (iTest==0?"":"../")+'templates/'+gaoTest[iTest].sTemplate+'.php?scripts='+gaoTest[iTest].sTest; + giTest = iTest; + } +} + +function fnStartMessage( sMessage ) +{ + fnMessage( '<br><b>'+gaoTest[giTest].sGroup+' - '+sMessage+'</b>' ); +} + +function fnMessage( sMessage ) +{ + var nInfo = document.getElementById('test_info'); + nInfo.innerHTML += sMessage+'<br>'; + nInfo.scrollTop = nInfo.scrollHeight; +} + +function fnUnitComplete() +{ + if ( giActiveModule < gaoTest.length - 1 ) + { + fnUnitStart( ++giActiveModule ); + } + else + { + fnEnd( true ); + } +} + +function fnEnd( bSuccess ) +{ + var iEndTime = new Date().getTime(); + var sTime = '<br>This test run took '+parseInt((iEndTime-giStartTime)/1000, 10)+ + ' second(s) to complete.'; + + if ( bSuccess ) + { + $('#test_running').html( 'Tests complete. '+giTotalTestCount+' tests were run.'+sTime ); + } + else + { + $('#test_running').html( 'Unit tests failed at test '+giTotalTestCount+'.'+sTime ); + } +} + +$(document).ready( function () { + giStartTime = new Date().getTime(); + fnUnitStart( giActiveModule ); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/controller.php b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/controller.php new file mode 100644 index 0000000..33f751e --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/controller.php @@ -0,0 +1,100 @@ +<?php + header( 'Expires: Sat, 26 Jul 1997 05:00:00 GMT' ); + header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' ); + header( 'Cache-Control: no-store, no-cache, must-revalidate' ); + header( 'Cache-Control: post-check=0, pre-check=0', false ); + header( 'Pragma: no-cache' ); +?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" + "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="Content-type" content="text/html; charset=utf-8"> + <title>DataTables unit test controller</title> + + <style type="text/css" media="screen"> + #controller { + font: 12px/1.45em "Lucida Grande", Verdana, Arial, Helvetica, sans-serif; + margin: 0; + padding: 0 0 0 0.5em; + color: #333; + background-color: #fff; + } + + #test_info { + position: absolute; + top: 0; + right: 0; + width: 50%; + height: 100%; + font-size: 11px; + overflow: auto; + } + + .error { + color: red; + } + + #controller h1 { + color: #4E6CA3; + font-size: 18px; + } + </style> + + <script type="text/javascript" language="javascript" src="../js/jquery.js"></script> + <script type="text/javascript" charset="utf-8"> + var gaoTest = [ + <?php + function fnReadDir( &$aReturn, $path ) + { + $rDir = opendir( $path ); + while ( ($file = readdir($rDir)) !== false ) + { + if ( $file == "." || $file == ".." || $file == ".DS_Store" ) + { + continue; + } + else if ( is_dir( $path.'/'.$file ) ) + { + fnReadDir( $aReturn, $path.'/'.$file ); + } + else + { + array_push( $aReturn, $path.'/'.$file ); + } + } + closedir($rDir); + } + + /* Get the tests dynamically from the 'tests' directory, and their templates */ + $aFiles = array(); + fnReadDir( $aFiles, "tests" ); + + for ( $i=0 ; $i<count($aFiles) ; $i++ ) + { + $sTemplate; + $fp = fopen( $aFiles[$i], "r" ); + fscanf( $fp, "// DATA_TEMPLATE: %s", $sTemplate ); + fclose( $fp ); + + $aPath = explode('/', $aFiles[$i]); + + echo '{ '. + '"sTemplate": "'.$sTemplate.'", '. + '"sTest": "'.$aFiles[$i].'", '. + '"sGroup": "'.$aPath[1].'"},'."\n"; + } + + ?> + null ]; + gaoTest.pop(); /* No interest in the null */ + </script> + <script type="text/javascript" language="javascript" src="controller.js"></script> + </head> + <body id="controller"> + <h1>DataTables unit testing</h1> + <div id="test_running">Running test: <span id="test_number"></span></div> + <div id="test_info"> + <b>Test information:</b><br> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/index.html b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/index.html new file mode 100644 index 0000000..caab383 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/index.html @@ -0,0 +1,7 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd"> +<html> + <frameset rows="20%,80%"> + <frame name="controller" id="controller" src="controller.php"> + <frame name="test_arena" id="test_arena"> + </frameset> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/performance/draw.html b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/performance/draw.html new file mode 100644 index 0000000..32af1a9 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/performance/draw.html @@ -0,0 +1,482 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../css/demo_page.css"; + @import "../../css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + var oTable = $('#example').dataTable(); + var oSettings = oTable.fnSettings(); + var iStart = new Date().getTime(); + + //console.profile(); + //for ( var i=0, iLen=1000 ; i<iLen ; i++ ) + //{ + // oSettings._iDisplayLength = 100; + // oTable.oApi._fnCalculateEnd( oSettings ); + // oTable.oApi._fnDraw( oSettings ); + // + // oSettings._iDisplayLength = 10; + // oTable.oApi._fnCalculateEnd( oSettings ); + // oTable.oApi._fnDraw( oSettings ); + //} + //console.profileEnd(); + + var iEnd = new Date().getTime(); + document.getElementById('output').innerHTML = "Test took "+(iEnd-iStart)+"mS"; + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + <i>DataTables</i> performance test - draw + </div> + <div id="output"></div> + + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <div id="footer" style="text-align:center;"> + <span style="font-size:10px;"> + DataTables © Allan Jardine 2008-2009. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/performance/large.php b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/performance/large.php new file mode 100644 index 0000000..c491152 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/performance/large.php @@ -0,0 +1,108 @@ +<?php + /* MySQL connection */ + include( $_SERVER['DOCUMENT_ROOT']."/datatables/mysql.php" ); /* ;-) */ + + $gaSql['link'] = mysql_pconnect( $gaSql['server'], $gaSql['user'], $gaSql['password'] ) or + die( 'Could not open connection to server' ); + + mysql_select_db( $gaSql['db'], $gaSql['link'] ) or + die( 'Could not select database '. $gaSql['db'] ); + +?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../css/demo_page.css"; + @import "../../css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + var oTable = $('#example').dataTable(); + var iStart = new Date().getTime(); + + //if ( typeof console != 'undefined' ) { + // console.profile(); + //} + for ( var i=0 ; i<10 ; i++ ) + { + var oTable = $('#example').dataTable({"bDestroy": true}); + } + //if ( typeof console != 'undefined' ) { + // console.profileEnd(); + //} + + //oTable.fnSort( [[ 1, 'asc' ]] ); + //oTable.fnSort( [[ 1, 'asc' ]] ); + //oTable.fnSort( [[ 2, 'asc' ]] ); + //oTable.fnSort( [[ 1, 'asc' ]] ); + //oTable.fnSort( [[ 2, 'asc' ]] ); + + var iEnd = new Date().getTime(); + document.getElementById('output').innerHTML = "Test took "+(iEnd-iStart)+" mS"; + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + <i>DataTables</i> performance test - draw + </div> + <div id="output"></div> + + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>id</th> + <th>name</th> + <th>phone</th> + <th>email</th> + <th>city</th> + <th>zip</th> + <th>state</th> + <th>country</th> + <th>zip2</th> + </tr> + </thead> + <tbody> +<?php + $sQuery = " + SELECT * + FROM testData + LIMIT 2000 + "; + $rResult = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error()); + while ( $aRow = mysql_fetch_array( $rResult ) ) + { + echo '<tr>'; + echo '<td><a href="1">'.$aRow['id'].'</a></td>'; + echo '<td>'.$aRow['name'].'</td>'; + echo '<td>'.$aRow['phone'].'</td>'; + echo '<td>'.$aRow['email'].'</td>'; + echo '<td>'.$aRow['city'].'</td>'; + echo '<td>'.$aRow['zip'].'</td>'; + echo '<td>'.$aRow['state'].'</td>'; + echo '<td>'.$aRow['country'].'</td>'; + echo '<td>'.$aRow['zip2'].'</td>'; + echo '</tr>'; + } +?> + </tbody> +</table> + </div> + <div class="spacer"></div> + + <div id="footer" style="text-align:center;"> + <span style="font-size:10px;"> + DataTables © Allan Jardine 2008-2009. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/performance/page.html b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/performance/page.html new file mode 100644 index 0000000..77c6c2a --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/performance/page.html @@ -0,0 +1,477 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../css/demo_page.css"; + @import "../../css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + var oTable = $('#example').dataTable(); + var oSettings = oTable.fnSettings(); + var iStart = new Date().getTime(); + + //for ( var i=0, iLen=100 ; i<iLen ; i++ ) + //{ + console.profile( ); + oTable.fnPageChange( "next" ); + oTable.fnPageChange( "previous" ); + console.profileEnd( ); + //} + + var iEnd = new Date().getTime(); + document.getElementById('output').innerHTML = "Test took "+(iEnd-iStart)+"mS"; + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + <i>DataTables</i> performance test - draw + </div> + <div id="output"></div> + + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <div id="footer" style="text-align:center;"> + <span style="font-size:10px;"> + DataTables © Allan Jardine 2008-2009. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/performance/sort.html b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/performance/sort.html new file mode 100644 index 0000000..d154fb0 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/performance/sort.html @@ -0,0 +1,477 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/favicon.ico" /> + + <title>DataTables example</title> + <style type="text/css" title="currentStyle"> + @import "../../css/demo_page.css"; + @import "../../css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../js/jquery.dataTables.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready(function() { + var oTable = $('#example').dataTable(); + var oSettings = oTable.fnSettings(); + var iStart = new Date().getTime(); + + for ( var i=0, iLen=100 ; i<iLen ; i++ ) + { + console.profile( ); + oTable.fnSort( [[1, 'asc']] ); + oTable.fnSort( [[0, 'asc']] ); + console.profileEnd( ); + } + + var iEnd = new Date().getTime(); + document.getElementById('output').innerHTML = "Test took "+(iEnd-iStart)+"mS"; + } ); + </script> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + <i>DataTables</i> performance test - draw + </div> + <div id="output"></div> + + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + + + <div id="footer" style="text-align:center;"> + <span style="font-size:10px;"> + DataTables © Allan Jardine 2008-2009. + </span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/-complex_header.php b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/-complex_header.php new file mode 100644 index 0000000..2cdc425 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/-complex_header.php @@ -0,0 +1,469 @@ +<?php + header( 'Expires: Sat, 26 Jul 1997 05:00:00 GMT' ); + header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' ); + header( 'Cache-Control: no-store, no-cache, must-revalidate' ); + header( 'Cache-Control: post-check=0, pre-check=0', false ); + header( 'Pragma: no-cache' ); +?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.sprymedia.co.uk/media/images/favicon.ico" /> + + <title>DataTables unit testing</title> + <style type="text/css" title="currentStyle"> + @import "../../css/demo_page.css"; + @import "../../css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../js/jquery.dataTables.js"></script> + <script type="text/javascript" language="javascript" src="../unit_test.js"></script> + <?php + $aScripts = explode( ":", $_GET['scripts'] ); + for ( $i=0 ; $i<count($aScripts) ; $i++ ) + { + echo '<script type="text/javascript" language="javascript" src="../'.$aScripts[$i].'?rand='.rand().'"></script>'."\n"; + } + ?> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + <i>DataTables</i> unit test template for reading DOM data + </div> + + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th rowspan="2" class="bl bt">Rendering engine</th> + <th colspan="3" class="bl br bt">Browser details</th> + <th class="br bt">CSS grade</th> + </tr> + <tr> + <th class="bl">Browser</th> + <th>Platform(s)</th> + <th class="br">Engine version</th> + <th class="br bt">CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/2512.php b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/2512.php new file mode 100644 index 0000000..9ef8e2f --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/2512.php @@ -0,0 +1,464 @@ +<?php + header( 'Expires: Sat, 26 Jul 1997 05:00:00 GMT' ); + header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' ); + header( 'Cache-Control: no-store, no-cache, must-revalidate' ); + header( 'Cache-Control: post-check=0, pre-check=0', false ); + header( 'Pragma: no-cache' ); +?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.sprymedia.co.uk/media/images/favicon.ico" /> + + <title>DataTables unit testing</title> + <style type="text/css" title="currentStyle"> + @import "../../css/demo_page.css"; + @import "../../css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../js/jquery.dataTables.js"></script> + <script type="text/javascript" language="javascript" src="../unit_test.js"></script> + <?php + $aScripts = explode( ":", $_GET['scripts'] ); + for ( $i=0 ; $i<count($aScripts) ; $i++ ) + { + echo '<script type="text/javascript" language="javascript" src="../'.$aScripts[$i].'?rand='.rand().'"></script>'."\n"; + } + ?> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + <i>DataTables</i> unit test template for reading DOM data + </div> + + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td>testsearchstring <br>html & entity</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/complex_header_2.php b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/complex_header_2.php new file mode 100644 index 0000000..6795dbe --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/complex_header_2.php @@ -0,0 +1,485 @@ +<?php + header( 'Expires: Sat, 26 Jul 1997 05:00:00 GMT' ); + header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' ); + header( 'Cache-Control: no-store, no-cache, must-revalidate' ); + header( 'Cache-Control: post-check=0, pre-check=0', false ); + header( 'Pragma: no-cache' ); +?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.sprymedia.co.uk/media/images/favicon.ico" /> + + <title>DataTables unit testing</title> + <style type="text/css" title="currentStyle"> + @import "../../css/demo_page.css"; + @import "../../css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../js/jquery.dataTables.js"></script> + <script type="text/javascript" language="javascript" src="../unit_test.js"></script> + <?php + $aScripts = explode( ":", $_GET['scripts'] ); + for ( $i=0 ; $i<count($aScripts) ; $i++ ) + { + echo '<script type="text/javascript" language="javascript" src="../'.$aScripts[$i].'?rand='.rand().'"></script>'."\n"; + } + ?> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + <i>DataTables</i> unit test template for reading DOM data + </div> + + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th class="bl bt">1</th> + <th colspan="3" rowspan="2" class="bl br bt">2</th> + <th class="br bt">3</th> + </tr> + <tr> + <th class="bl br" rowspan="3">4</th> + <td class="bl br">5</td> + </tr> + <tr> + <th class="bl br" colspan="2">6</th> + <th class="br" rowspan="3">7</th> + <th class="br bt" rowspan="3">8</th> + </tr> + <tr> + <th class="bl br">9</th> + <th class="bl br">10</th> + </tr> + <tr> + <th class="bl br" colspan="2">11</th> + <th class="bl br">12</th> + </tr> + </thead> + <tfoot> + <tr> + <th class="bl bt">1</th> + <th colspan="3" rowspan="2" class="bl br bt">2</th> + <th class="br bt">3</th> + </tr> + <tr> + <th class="bl br">4</th> + <th class="bl br">5</th> + </tr> + <tr> + <th class="bl br" colspan="5">6</th> + </tr> + </tfoot> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> +</table> + </div> + <div class="spacer"></div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/deferred_table.php b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/deferred_table.php new file mode 100644 index 0000000..d98a4de --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/deferred_table.php @@ -0,0 +1,132 @@ +<?php + header( 'Expires: Sat, 26 Jul 1997 05:00:00 GMT' ); + header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' ); + header( 'Cache-Control: no-store, no-cache, must-revalidate' ); + header( 'Cache-Control: post-check=0, pre-check=0', false ); + header( 'Pragma: no-cache' ); +?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.sprymedia.co.uk/media/images/favicon.ico" /> + + <title>DataTables unit testing</title> + <style type="text/css" title="currentStyle"> + @import "../../css/demo_page.css"; + @import "../../css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../js/jquery.dataTables.js"></script> + <script type="text/javascript" language="javascript" src="../unit_test.js"></script> + <?php + $aScripts = explode( ":", $_GET['scripts'] ); + for ( $i=0 ; $i<count($aScripts) ; $i++ ) + { + echo '<script type="text/javascript" language="javascript" src="../'.$aScripts[$i].'?rand='.rand().'"></script>'."\n"; + } + ?> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + <i>DataTables</i> unit test template for reading DOM data + </div> + + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/dom_data.php b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/dom_data.php new file mode 100644 index 0000000..b5fed47 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/dom_data.php @@ -0,0 +1,465 @@ +<?php + header( 'Expires: Sat, 26 Jul 1997 05:00:00 GMT' ); + header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' ); + header( 'Cache-Control: no-store, no-cache, must-revalidate' ); + header( 'Cache-Control: post-check=0, pre-check=0', false ); + header( 'Pragma: no-cache' ); +?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.sprymedia.co.uk/media/images/favicon.ico" /> + + <title>DataTables unit testing</title> + <style type="text/css" title="currentStyle"> + @import "../../css/demo_page.css"; + @import "../../css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../js/jquery.dataTables.js"></script> + <script type="text/javascript" language="javascript" src="../unit_test.js"></script> + <?php + $aScripts = explode( ":", $_GET['scripts'] ); + for ( $i=0 ; $i<count($aScripts) ; $i++ ) + { + echo '<script type="text/javascript" language="javascript" src="../'.$aScripts[$i].'?rand='.rand().'"></script>'."\n"; + } + ?> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + <i>DataTables</i> unit test template for reading DOM data + </div> + + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/dom_data_th.php b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/dom_data_th.php new file mode 100644 index 0000000..1faf9ab --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/dom_data_th.php @@ -0,0 +1,465 @@ +<?php + header( 'Expires: Sat, 26 Jul 1997 05:00:00 GMT' ); + header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' ); + header( 'Cache-Control: no-store, no-cache, must-revalidate' ); + header( 'Cache-Control: post-check=0, pre-check=0', false ); + header( 'Pragma: no-cache' ); +?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.sprymedia.co.uk/media/images/favicon.ico" /> + + <title>DataTables unit testing</title> + <style type="text/css" title="currentStyle"> + @import "../../css/demo_page.css"; + @import "../../css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../js/jquery.dataTables.js"></script> + <script type="text/javascript" language="javascript" src="../unit_test.js"></script> + <?php + $aScripts = explode( ":", $_GET['scripts'] ); + for ( $i=0 ; $i<count($aScripts) ; $i++ ) + { + echo '<script type="text/javascript" language="javascript" src="../'.$aScripts[$i].'?rand='.rand().'"></script>'."\n"; + } + ?> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + <i>DataTables</i> unit test template for reading DOM data + </div> + + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <th>Gecko</th> + <th>Netscape Navigator 9</th> + <th>Win 98+ / OSX.2+</th> + <th class="center">1.8</th> + <th class="center">A</th> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <th>Mozilla 1.0</th> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/dom_data_two_headers.php b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/dom_data_two_headers.php new file mode 100644 index 0000000..09093b9 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/dom_data_two_headers.php @@ -0,0 +1,472 @@ +<?php + header( 'Expires: Sat, 26 Jul 1997 05:00:00 GMT' ); + header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' ); + header( 'Cache-Control: no-store, no-cache, must-revalidate' ); + header( 'Cache-Control: post-check=0, pre-check=0', false ); + header( 'Pragma: no-cache' ); +?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.sprymedia.co.uk/media/images/favicon.ico" /> + + <title>DataTables unit testing</title> + <style type="text/css" title="currentStyle"> + @import "../../css/demo_page.css"; + @import "../../css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../js/jquery.dataTables.js"></script> + <script type="text/javascript" language="javascript" src="../unit_test.js"></script> + <?php + $aScripts = explode( ":", $_GET['scripts'] ); + for ( $i=0 ; $i<count($aScripts) ; $i++ ) + { + echo '<script type="text/javascript" language="javascript" src="../'.$aScripts[$i].'?rand='.rand().'"></script>'."\n"; + } + ?> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + <i>DataTables</i> unit test template for reading DOM data - with two rows in header + </div> + + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td>Internet + Explorer 4.0</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + <td class="center">1.9</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.2</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.4</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">1.6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + <td class="center">1.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.2</td> + <td>OSX.3</td> + <td class="center">125.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 1.3</td> + <td>OSX.3</td> + <td class="center">312.8</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 2.0</td> + <td>OSX.4+</td> + <td class="center">419.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>Safari 3.0</td> + <td>OSX.4+</td> + <td class="center">522.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>OmniWeb 5.5</td> + <td>OSX.4+</td> + <td class="center">420</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>iPod Touch / iPhone</td> + <td>iPod</td> + <td class="center">420.1</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Webkit</td> + <td>S60</td> + <td>S60</td> + <td class="center">413</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.0</td> + <td>Win 95+ / OSX.1+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 7.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.0</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 8.5</td> + <td>Win 95+ / OSX.2+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.0</td> + <td>Win 95+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.2</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera 9.5</td> + <td>Win 88+ / OSX.3+</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Opera for Wii</td> + <td>Wii</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nokia N800</td> + <td>N800</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Presto</td> + <td>Nintendo DS browser</td> + <td>Nintendo DS</td> + <td class="center">8.5</td> + <td class="center">C/A<sup>1</sup></td> + </tr> + <tr class="gradeC"> + <td>KHTML</td> + <td>Konqureror 3.1</td> + <td>KDE 3.1</td> + <td class="center">3.1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.3</td> + <td>KDE 3.3</td> + <td class="center">3.3</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>KHTML</td> + <td>Konqureror 3.5</td> + <td>KDE 3.5</td> + <td class="center">3.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Tasman</td> + <td>Internet Explorer 4.5</td> + <td>Mac OS 8-9</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.1</td> + <td>Mac OS 7.6-9</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Tasman</td> + <td>Internet Explorer 5.2</td> + <td>Mac OS 8-X</td> + <td class="center">1</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.1</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Misc</td> + <td>NetFront 3.4</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">A</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Dillo 0.8</td> + <td>Embedded devices</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Links</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeX"> + <td>Misc</td> + <td>Lynx</td> + <td>Text only</td> + <td class="center">-</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>IE Mobile</td> + <td>Windows Mobile 6</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeC"> + <td>Misc</td> + <td>PSP browser</td> + <td>PSP</td> + <td class="center">-</td> + <td class="center">C</td> + </tr> + <tr class="gradeU"> + <td>Other browsers</td> + <td>All others</td> + <td>-</td> + <td class="center">-</td> + <td class="center">U</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/dymanic_table.php b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/dymanic_table.php new file mode 100644 index 0000000..49606c5 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/dymanic_table.php @@ -0,0 +1,45 @@ +<?php + header( 'Expires: Sat, 26 Jul 1997 05:00:00 GMT' ); + header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' ); + header( 'Cache-Control: no-store, no-cache, must-revalidate' ); + header( 'Cache-Control: post-check=0, pre-check=0', false ); + header( 'Pragma: no-cache' ); +?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.sprymedia.co.uk/media/images/favicon.ico" /> + + <title>DataTables unit testing</title> + <style type="text/css" title="currentStyle"> + @import "../../css/demo_page.css"; + @import "../../css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../js/jquery.dataTables.js"></script> + <script type="text/javascript" language="javascript" src="../unit_test.js"></script> + <script type="text/javascript" charset="utf-8"> + $(document).ready( function () { + $('#demo').html( '<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"></table>' ); + } ); + </script> + <?php + $aScripts = explode( ":", $_GET['scripts'] ); + for ( $i=0 ; $i<count($aScripts) ; $i++ ) + { + echo '<script type="text/javascript" language="javascript" src="../'.$aScripts[$i].'?rand='.rand().'"></script>'."\n"; + } + ?> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + <i>DataTables</i> dynamic table template + </div> + + <h1>Live example</h1> + <div id="demo"></div> + <div class="spacer"></div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/empty_table.php b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/empty_table.php new file mode 100644 index 0000000..0647f30 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/empty_table.php @@ -0,0 +1,55 @@ +<?php + header( 'Expires: Sat, 26 Jul 1997 05:00:00 GMT' ); + header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' ); + header( 'Cache-Control: no-store, no-cache, must-revalidate' ); + header( 'Cache-Control: post-check=0, pre-check=0', false ); + header( 'Pragma: no-cache' ); +?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.sprymedia.co.uk/media/images/favicon.ico" /> + + <title>DataTables unit testing</title> + <style type="text/css" title="currentStyle"> + @import "../../css/demo_page.css"; + @import "../../css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../js/jquery.dataTables.js"></script> + <script type="text/javascript" language="javascript" src="../unit_test.js"></script> + <?php + $aScripts = explode( ":", $_GET['scripts'] ); + for ( $i=0 ; $i<count($aScripts) ; $i++ ) + { + echo '<script type="text/javascript" language="javascript" src="../'.$aScripts[$i].'?rand='.rand().'"></script>'."\n"; + } + ?> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + <i>DataTables</i> empty table template + </div> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + + </tbody> +</table> + </div> + <div class="spacer"></div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/html_table.php b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/html_table.php new file mode 100644 index 0000000..123f54b --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/html_table.php @@ -0,0 +1,66 @@ +<?php + header( 'Expires: Sat, 26 Jul 1997 05:00:00 GMT' ); + header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' ); + header( 'Cache-Control: no-store, no-cache, must-revalidate' ); + header( 'Cache-Control: post-check=0, pre-check=0', false ); + header( 'Pragma: no-cache' ); +?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.sprymedia.co.uk/media/images/favicon.ico" /> + + <title>DataTables unit testing</title> + <style type="text/css" title="currentStyle"> + @import "../../css/demo_page.css"; + @import "../../css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../js/jquery.dataTables.js"></script> + <script type="text/javascript" language="javascript" src="../unit_test.js"></script> + <?php + $aScripts = explode( ":", $_GET['scripts'] ); + for ( $i=0 ; $i<count($aScripts) ; $i++ ) + { + echo '<script type="text/javascript" language="javascript" src="../'.$aScripts[$i].'?rand='.rand().'"></script>'."\n"; + } + ?> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + <i>DataTables</i> table with HTML elements template + </div> + + <h1>Live example</h1> + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Reflection</th> + <th>Link</th> + </tr> + </thead> + <tbody> + <tr> + <td>1</td> + <td><a href="http://www.sprymedia.co.uk/article/DataTables">DataTables</a></td> + </tr> + <tr> + <td>2</td> + <td><a href="http://www.sprymedia.co.uk/article/Integrity">A link to Integrity</a></td> + </tr> + <tr> + <td>3</td> + <td><a href="http://www.sprymedia.co.uk/article/Integrity">Integrity</a></td> + </tr> + <tr> + <td>4</td> + <td>EIntegrity</td> + </tr> +</table> + </div> + <div class="spacer"></div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/js_data.php b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/js_data.php new file mode 100644 index 0000000..61f1852 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/js_data.php @@ -0,0 +1,124 @@ +<?php + header( 'Expires: Sat, 26 Jul 1997 05:00:00 GMT' ); + header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' ); + header( 'Cache-Control: no-store, no-cache, must-revalidate' ); + header( 'Cache-Control: post-check=0, pre-check=0', false ); + header( 'Pragma: no-cache' ); +?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.sprymedia.co.uk/media/images/favicon.ico" /> + + <title>DataTables unit testing</title> + <style type="text/css" title="currentStyle"> + @import "../../css/demo_page.css"; + @import "../../css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../js/jquery.dataTables.js"></script> + <script type="text/javascript" language="javascript" src="../unit_test.js"></script> + <script type="text/javascript" charset="utf-8"> + /* Make the data source available for testing */ + var gaaData = [ + ['Trident','Internet Explorer 4.0','Win 95+','4','X'], + ['Trident','Internet Explorer 5.0','Win 95+','5','C'], + ['Trident','Internet Explorer 5.5','Win 95+','5.5','A'], + ['Trident','Internet Explorer 6','Win 98+','6','A'], + ['Trident','Internet Explorer 7','Win XP SP2+','7','A'], + ['Trident','AOL browser (AOL desktop)','Win XP','6','A'], + ['Gecko','Firefox 1.0','Win 98+ / OSX.2+','1.7','A'], + ['Gecko','Firefox 1.5','Win 98+ / OSX.2+','1.8','A'], + ['Gecko','Firefox 2.0','Win 98+ / OSX.2+','1.8','A'], + ['Gecko','Firefox 3.0','Win 2k+ / OSX.3+','1.9','A'], + ['Gecko','Camino 1.0','OSX.2+','1.8','A'], + ['Gecko','Camino 1.5','OSX.3+','1.8','A'], + ['Gecko','Netscape 7.2','Win 95+ / Mac OS 8.6-9.2','1.7','A'], + ['Gecko','Netscape Browser 8','Win 98SE+','1.7','A'], + ['Gecko','Netscape Navigator 9','Win 98+ / OSX.2+','1.8','A'], + ['Gecko','Mozilla 1.0','Win 95+ / OSX.1+',1,'A'], + ['Gecko','Mozilla 1.1','Win 95+ / OSX.1+',1.1,'A'], + ['Gecko','Mozilla 1.2','Win 95+ / OSX.1+',1.2,'A'], + ['Gecko','Mozilla 1.3','Win 95+ / OSX.1+',1.3,'A'], + ['Gecko','Mozilla 1.4','Win 95+ / OSX.1+',1.4,'A'], + ['Gecko','Mozilla 1.5','Win 95+ / OSX.1+',1.5,'A'], + ['Gecko','Mozilla 1.6','Win 95+ / OSX.1+',1.6,'A'], + ['Gecko','Mozilla 1.7','Win 98+ / OSX.1+',1.7,'A'], + ['Gecko','Mozilla 1.8','Win 98+ / OSX.1+',1.8,'A'], + ['Gecko','Seamonkey 1.1','Win 98+ / OSX.2+','1.8','A'], + ['Gecko','Epiphany 2.20','Gnome','1.8','A'], + ['Webkit','Safari 1.2','OSX.3','125.5','A'], + ['Webkit','Safari 1.3','OSX.3','312.8','A'], + ['Webkit','Safari 2.0','OSX.4+','419.3','A'], + ['Webkit','Safari 3.0','OSX.4+','522.1','A'], + ['Webkit','OmniWeb 5.5','OSX.4+','420','A'], + ['Webkit','iPod Touch / iPhone','iPod','420.1','A'], + ['Webkit','S60','S60','413','A'], + ['Presto','Opera 7.0','Win 95+ / OSX.1+','-','A'], + ['Presto','Opera 7.5','Win 95+ / OSX.2+','-','A'], + ['Presto','Opera 8.0','Win 95+ / OSX.2+','-','A'], + ['Presto','Opera 8.5','Win 95+ / OSX.2+','-','A'], + ['Presto','Opera 9.0','Win 95+ / OSX.3+','-','A'], + ['Presto','Opera 9.2','Win 88+ / OSX.3+','-','A'], + ['Presto','Opera 9.5','Win 88+ / OSX.3+','-','A'], + ['Presto','Opera for Wii','Wii','-','A'], + ['Presto','Nokia N800','N800','-','A'], + ['Presto','Nintendo DS browser','Nintendo DS','8.5','C/A<sup>1</sup>'], + ['KHTML','Konqureror 3.1','KDE 3.1','3.1','C'], + ['KHTML','Konqureror 3.3','KDE 3.3','3.3','A'], + ['KHTML','Konqureror 3.5','KDE 3.5','3.5','A'], + ['Tasman','Internet Explorer 4.5','Mac OS 8-9','-','X'], + ['Tasman','Internet Explorer 5.1','Mac OS 7.6-9','1','C'], + ['Tasman','Internet Explorer 5.2','Mac OS 8-X','1','C'], + ['Misc','NetFront 3.1','Embedded devices','-','C'], + ['Misc','NetFront 3.4','Embedded devices','-','A'], + ['Misc','Dillo 0.8','Embedded devices','-','X'], + ['Misc','Links','Text only','-','X'], + ['Misc','Lynx','Text only','-','X'], + ['Misc','IE Mobile','Windows Mobile 6','-','C'], + ['Misc','PSP browser','PSP','-','C'], + ['Other browsers','All others','-','-','U'] + ]; + </script> + <?php + $aScripts = explode( ":", $_GET['scripts'] ); + for ( $i=0 ; $i<count($aScripts) ; $i++ ) + { + echo '<script type="text/javascript" language="javascript" src="../'.$aScripts[$i].'?rand='.rand().'"></script>'."\n"; + } + ?> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + <i>DataTables</i> unit test template for reading DOM data + </div> + + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/js_data_mixed_types.php b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/js_data_mixed_types.php new file mode 100644 index 0000000..9cdd0aa --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/js_data_mixed_types.php @@ -0,0 +1,124 @@ +<?php + header( 'Expires: Sat, 26 Jul 1997 05:00:00 GMT' ); + header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' ); + header( 'Cache-Control: no-store, no-cache, must-revalidate' ); + header( 'Cache-Control: post-check=0, pre-check=0', false ); + header( 'Pragma: no-cache' ); +?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.sprymedia.co.uk/media/images/favicon.ico" /> + + <title>DataTables unit testing</title> + <style type="text/css" title="currentStyle"> + @import "../../css/demo_page.css"; + @import "../../css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../js/jquery.dataTables.js"></script> + <script type="text/javascript" language="javascript" src="../unit_test.js"></script> + <script type="text/javascript" charset="utf-8"> + /* Make the data source available for testing */ + var gaaData = [ + ["Trident",null,"Win 95+","4","X"], + ["Trident","Internet Explorer 5.0","Win 95+","5","C"], + ["Trident","Internet Explorer 5.5","Win 95+","5.5","A"], + [null,"Internet Explorer 6","Win 98+","6","A"], + ["Trident","Internet Explorer 7","Win XP SP2+","7","A"], + ["Trident","AOL browser (AOL desktop)","Win XP","6","A"], + ["Gecko","Firefox 1.0","Win 98+ / OSX.2+","1.7","A"], + ["Gecko","Firefox 1.5","Win 98+ / OSX.2+",null,"A"], + ["Gecko","Firefox 2.0","Win 98+ / OSX.2+",1.8,"A"], + ["Gecko","Firefox 3.0","Win 2k+ / OSX.3+","","A"], + ["Gecko","Camino 1.0","OSX.2+","1.8","A"], + ["Gecko","Camino 1.5","OSX.3+","1.8","A"], + ["Gecko","Netscape 7.2","Win 95+ / Mac OS 8.6-9.2","1.7","A"], + ["Gecko","Netscape Browser 8","Win 98SE+","1.7","A"], + ["Gecko","Netscape Navigator 9","Win 98+ / OSX.2+","1.8","A"], + ["Gecko","Mozilla 1.0","Win 95+ / OSX.1+",1,"A"], + ["Gecko","Mozilla 1.1","Win 95+ / OSX.1+",1.1,"A"], + ["Gecko",true,"Win 95+ / OSX.1+",1.2,"A"], + ["Gecko",false,"Win 95+ / OSX.1+",1.3,"A"], + ["Gecko","Mozilla 1.4","Win 95+ / OSX.1+",1.4,"A"], + ["Gecko","Mozilla 1.5","Win 95+ / OSX.1+",1.5,"A"], + ["Gecko","Mozilla 1.6","Win 95+ / OSX.1+",1.6,"A"], + ["Gecko","Mozilla 1.7","Win 98+ / OSX.1+",1.7,"A"], + ["Gecko","Mozilla 1.8","Win 98+ / OSX.1+",1.8,"A"], + ["Gecko","Seamonkey 1.1","Win 98+ / OSX.2+","1.8","A"], + ["Gecko","Epiphany 2.20","Gnome","1.8","A"], + ["Webkit","Safari 1.2","OSX.3","125.5","A"], + ["Webkit","Safari 1.3","OSX.3","312.8","A"], + ["Webkit","Safari 2.0","OSX.4+","419.3","A"], + ["Webkit","Safari 3.0","OSX.4+","522.1","A"], + ["Webkit","OmniWeb 5.5","OSX.4+","420","A"], + ["Webkit","iPod Touch / iPhone","iPod","420.1","A"], + ["Webkit","S60","S60","413","A"], + ["Presto","Opera 7.0","Win 95+ / OSX.1+","-","A"], + ["Presto","Opera 7.5","Win 95+ / OSX.2+","-","A"], + ["Presto","Opera 8.0","Win 95+ / OSX.2+","-","A"], + ["Presto","Opera 8.5","Win 95+ / OSX.2+","-","A"], + ["Presto","Opera 9.0","Win 95+ / OSX.3+","-","A"], + ["Presto","Opera 9.2","Win 88+ / OSX.3+","-","A"], + ["Presto","Opera 9.5","Win 88+ / OSX.3+","-","A"], + ["Presto","Opera for Wii","Wii","-","A"], + ["Presto","Nokia N800","N800","-","A"], + ["Presto","Nintendo DS browser","Nintendo DS","8.5","C/A<sup>1</sup>"], + ["KHTML","Konqureror 3.1","KDE 3.1","3.1","C"], + ["KHTML","Konqureror 3.3","KDE 3.3","3.3","A"], + ["KHTML","Konqureror 3.5","KDE 3.5","3.5","A"], + ["Tasman","Internet Explorer 4.5","Mac OS 8-9","-","X"], + ["Tasman","Internet Explorer 5.1","Mac OS 7.6-9","1","C"], + ["Tasman","Internet Explorer 5.2","Mac OS 8-X","1","C"], + ["Misc","NetFront 3.1","Embedded devices","-","C"], + ["Misc","NetFront 3.4","Embedded devices","-","A"], + ["Misc","Dillo 0.8","Embedded devices","-","X"], + ["Misc","Links","Text only","-","X"], + ["Misc","Lynx","Text only","-","X"], + ["Misc","IE Mobile","Windows Mobile 6","-","C"], + ["Misc","PSP browser","PSP","-","C"], + ["Other browsers","All others","-","-","U"] + ]; + </script> + <?php + $aScripts = explode( ":", $_GET['scripts'] ); + for ( $i=0 ; $i<count($aScripts) ; $i++ ) + { + echo '<script type="text/javascript" language="javascript" src="../'.$aScripts[$i].'?rand='.rand().'"></script>'."\n"; + } + ?> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + <i>DataTables</i> unit test template for reading DOM data + </div> + + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/two_tables.php b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/two_tables.php new file mode 100644 index 0000000..89b2aa0 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/templates/two_tables.php @@ -0,0 +1,227 @@ +<?php + header( 'Expires: Sat, 26 Jul 1997 05:00:00 GMT' ); + header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' ); + header( 'Cache-Control: no-store, no-cache, must-revalidate' ); + header( 'Cache-Control: post-check=0, pre-check=0', false ); + header( 'Pragma: no-cache' ); +?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> +<html> + <head> + <meta http-equiv="content-type" content="text/html; charset=utf-8" /> + <link rel="shortcut icon" type="image/ico" href="http://www.sprymedia.co.uk/media/images/favicon.ico" /> + + <title>DataTables unit testing</title> + <style type="text/css" title="currentStyle"> + @import "../../css/demo_page.css"; + @import "../../css/demo_table.css"; + </style> + <script type="text/javascript" language="javascript" src="../../js/jquery.js"></script> + <script type="text/javascript" language="javascript" src="../../js/jquery.dataTables.js"></script> + <script type="text/javascript" language="javascript" src="../unit_test.js"></script> + <?php + $aScripts = explode( ":", $_GET['scripts'] ); + for ( $i=0 ; $i<count($aScripts) ; $i++ ) + { + echo '<script type="text/javascript" language="javascript" src="../'.$aScripts[$i].'?rand='.rand().'"></script>'."\n"; + } + ?> + </head> + <body id="dt_example"> + <div id="container"> + <div class="full_width big"> + <i>DataTables</i> unit test template for two tables + </div> + + <div id="demo"> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example1"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </thead> + <tbody> + <tr class="gradeX"> + <td>Trident</td> + <td>testsearchstring <br>html & entity</td> + <td>Win 95+</td> + <td class="center">4</td> + <td class="center">X</td> + </tr> + <tr class="gradeC"> + <td>Trident</td> + <td>Internet + Explorer 5.0</td> + <td>Win 95+</td> + <td class="center">5</td> + <td class="center">C</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 5.5</td> + <td>Win 95+</td> + <td class="center">5.5</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet + Explorer 6</td> + <td>Win 98+</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>Internet Explorer 7</td> + <td>Win XP SP2+</td> + <td class="center">7</td> + <td class="center">A</td> + </tr> + <tr class="gradeA"> + <td>Trident</td> + <td>AOL browser (AOL desktop)</td> + <td>Win XP</td> + <td class="center">6</td> + <td class="center">A</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + <th>Engine version</th> + <th>CSS grade</th> + </tr> + </tfoot> +</table> + + +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example2"> + <thead> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + </tr> + </thead> + <tbody> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.0</td> + <td>Win 98+ / OSX.2+</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 1.5</td> + <td>Win 98+ / OSX.2+</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 2.0</td> + <td>Win 98+ / OSX.2+</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Firefox 3.0</td> + <td>Win 2k+ / OSX.3+</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.0</td> + <td>OSX.2+</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Camino 1.5</td> + <td>OSX.3+</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape 7.2</td> + <td>Win 95+ / Mac OS 8.6-9.2</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Browser 8</td> + <td>Win 98SE+</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Netscape Navigator 9</td> + <td>Win 98+ / OSX.2+</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.0</td> + <td>Win 95+ / OSX.1+</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.1</td> + <td>Win 95+ / OSX.1+</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.2</td> + <td>Win 95+ / OSX.1+</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.3</td> + <td>Win 95+ / OSX.1+</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.4</td> + <td>Win 95+ / OSX.1+</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.5</td> + <td>Win 95+ / OSX.1+</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.6</td> + <td>Win 95+ / OSX.1+</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.7</td> + <td>Win 98+ / OSX.1+</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Mozilla 1.8</td> + <td>Win 98+ / OSX.1+</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Seamonkey 1.1</td> + <td>Win 98+ / OSX.2+</td> + </tr> + <tr class="gradeA"> + <td>Gecko</td> + <td>Epiphany 2.20</td> + <td>Gnome</td> + </tr> + </tbody> + <tfoot> + <tr> + <th>Rendering engine</th> + <th>Browser</th> + <th>Platform(s)</th> + </tr> + </tfoot> +</table> + </div> + <div class="spacer"></div> + </div> + </body> +</html> \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests/1_dom/_zero_config.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests/1_dom/_zero_config.js new file mode 100755 index 0000000..b3a941f --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests/1_dom/_zero_config.js @@ -0,0 +1,437 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "Sanity checks for DataTables with DOM data" ); + +oTest.fnTest( + "jQuery.dataTable function", + null, + function () { return typeof jQuery().dataTable == "function"; } +); + +oTest.fnTest( + "jQuery.dataTableSettings storage array", + null, + function () { return typeof jQuery().dataTableSettings == "object"; } +); + +oTest.fnTest( + "jQuery.dataTableExt plugin object", + null, + function () { return typeof jQuery().dataTableExt == "object"; } +); + +$(document).ready( function () { + $('#example').dataTable(); + + /* Basic checks */ + oTest.fnTest( + "Length changing div exists", + null, + function () { return document.getElementById('example_length') != null; } + ); + + oTest.fnTest( + "Filtering div exists", + null, + function () { return document.getElementById('example_filter') != null; } + ); + + oTest.fnTest( + "Information div exists", + null, + function () { return document.getElementById('example_info') != null; } + ); + + oTest.fnTest( + "Pagination div exists", + null, + function () { return document.getElementById('example_paginate') != null; } + ); + + oTest.fnTest( + "Processing div is off by default", + null, + function () { return document.getElementById('example_processing') == null; } + ); + + oTest.fnTest( + "10 rows shown on the first page", + null, + function () { return $('#example tbody tr').length == 10; } + ); + + oTest.fnTest( + "Initial sort occured", + null, + function () { return $('#example tbody td:eq(0)').html() == "Gecko"; } + ); + + /* Need to use the WaitTest for sorting due to the setTimeout datatables uses */ + oTest.fnTest( + "Sorting (first click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Sorting (second click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnTest( + "Sorting (third click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Sorting (first click) on numeric column", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "-"; } + ); + + oTest.fnTest( + "Sorting (second click) on numeric column", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "522.1"; } + ); + + oTest.fnTest( + "Sorting multi-column (first click)", + function () { + $('#example thead th:eq(0)').click(); + oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); }, + function () { var b = + $('#example tbody td:eq(0)').html() == "Gecko" && + $('#example tbody td:eq(1)').html() == "Camino 1.0"; return b; } + ); + + oTest.fnTest( + "Sorting multi-column - sorting second column only", + function () { + $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + /* Basic paging */ + oTest.fnTest( + "Paging to second page", + function () { $('#example_next').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "IE Mobile"; } + ); + + oTest.fnTest( + "Paging to first page", + function () { $('#example_previous').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Attempting to page back beyond the first page", + function () { $('#example_previous').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + /* Changing length */ + oTest.fnTest( + "Changing table length to 25 records", + function () { $("select[name=example_length]").val('25').change(); }, + function () { return $('#example tbody tr').length == 25; } + ); + + oTest.fnTest( + "Changing table length to 50 records", + function () { $("select[name=example_length]").val('50').change(); }, + function () { return $('#example tbody tr').length == 50; } + ); + + oTest.fnTest( + "Changing table length to 100 records", + function () { $("select[name=example_length]").val('100').change(); }, + function () { return $('#example tbody tr').length == 57; } + ); + + oTest.fnTest( + "Changing table length to 10 records", + function () { $("select[name=example_length]").val('10').change(); }, + function () { return $('#example tbody tr').length == 10; } + ); + + /* + * Information element + */ + oTest.fnTest( + "Information on zero config", + null, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Information on second page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 11 to 20 of 57 entries"; } + ); + + oTest.fnTest( + "Information on third page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 21 to 30 of 57 entries"; } + ); + + oTest.fnTest( + "Information on last page", + function () { + $('#example_next').click(); + $('#example_next').click(); + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 51 to 57 of 57 entries"; } + ); + + oTest.fnTest( + "Information back on first page", + function () { + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Information with 25 records", + function () { $("select[name=example_length]").val('25').change(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 25 of 57 entries"; } + ); + + oTest.fnTest( + "Information with 25 records - second page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 26 to 50 of 57 entries"; } + ); + + oTest.fnTest( + "Information with 100 records - first page", + function () { + $('#example_previous').click(); + $("select[name=example_length]").val('100').change(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 57 of 57 entries"; } + ); + + oTest.fnTest( + "Information back to 10 records", + function () { + $('#example_previous').click(); + $("select[name=example_length]").val('10').change(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Information with filter 'Win'", + function () { $('#example_filter input').val("Win").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' second page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' last page", + function () { + $('#example_next').click(); + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 31 to 31 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' back to first page", + function () { + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' second page - second time", + function () { + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter increased to 'Win 98'", + function () { $('#example_filter input').val("Win 98").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 9 of 9 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter decreased to 'Win'", + function () { $('#example_filter input').val("Win").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' second page - third time", + function () { + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter removed", + function () { $('#example_filter input').val("").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 57 entries"; } + ); + + + /* + * Filtering + */ + oTest.fnTest( + "Filter 'W' - rows", + function () { + /* Reset the table such that the old sorting doesn't mess things up */ + oSession.fnRestore(); + $('#example').dataTable(); + $('#example_filter input').val("W").keyup(); }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Gecko"; } + ); + + oTest.fnTest( + "Filter 'W' - info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 42 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Wi'", + function () { $('#example_filter input').val("Wi").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 32 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Win'", + function () { $('#example_filter input').val("Win").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting column 1", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "AOL browser (AOL desktop)"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting column 1 info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting column 1 reverse", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnTest( + "Filter 'Win XP' - maintaing reverse sorting col 1", + function () { $('#example_filter input').val("Win XP").keyup(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Internet Explorer 7"; } + ); + + oTest.fnTest( + "Filter 'Win XP' - sorting col 3", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "4"; } + ); + + oTest.fnTest( + "Filter 'Win XP' - sorting col 3 - reversed", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "7"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting col 3 - reversed info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 6 of 6 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'nothinghere'", + function () { $('#example_filter input').val("nothinghere").keyup(); }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == + "No matching records found"; } + ); + + oTest.fnTest( + "Filter 'nothinghere' - info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter back to blank and 1st column sorting", + function () { + $('#example_filter input').val("").keyup(); + $('#example thead th:eq(0)').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Prefixing a filter entry", + function () { + $('#example_filter input').val("Win").keyup(); + $('#example_filter input').val("GeckoWin").keyup(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Prefixing a filter entry with space", + function () { + $('#example_filter input').val("Gecko Win").keyup(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 17 entries (filtered from 57 total entries)"; } + ); + + + + + + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/-complex_header.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/-complex_header.js new file mode 100755 index 0000000..fb173a7 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/-complex_header.js @@ -0,0 +1,52 @@ +// DATA_TEMPLATE: -complex_header +oTest.fnStart( "Complex header" ); + + +$(document).ready( function () { + $('#example').dataTable(); + + oTest.fnTest( + "Sorting on colspan has no effect", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr td:eq(1)').html() == "Firefox 1.0"; } + ); + + oTest.fnTest( + "Sorting on non-unique TH and first TH has no effect", + function () { $('#example thead th:eq(2)').click(); }, + function () { return $('#example tbody tr td:eq(1)').html() == "Firefox 1.0"; } + ); + + oTest.fnTest( + "Sorting on non-unique TH and second TH will sort", + function () { $('#example thead th:eq(6)').click(); }, + function () { return $('#example tbody tr td:eq(4)').html() == "A"; } + ); + + oTest.fnTest( + "Sorting on non-unique TH and second TH will sort - reserve", + function () { $('#example thead th:eq(6)').click(); }, + function () { return $('#example tbody tr td:eq(4)').html() == "X"; } + ); + + oTest.fnTest( + "Sorting on unique TH will sort", + function () { $('#example thead th:eq(5)').click(); }, + function () { return $('#example tbody tr td:eq(3)').html() == "-"; } + ); + + oTest.fnTest( + "Sorting on unique TH will sort - reserve", + function () { $('#example thead th:eq(5)').click(); }, + function () { return $('#example tbody tr td:eq(3)').html() == "522.1"; } + ); + + oTest.fnTest( + "Sorting on unique rowspan TH will sort", + function () { $('#example thead th:eq(0)').click(); }, + function () { return $('#example tbody tr td:eq(0)').html() == "Gecko"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/-iDraw.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/-iDraw.js new file mode 100755 index 0000000..efbf741 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/-iDraw.js @@ -0,0 +1,41 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "iDraw - check that iDraw increments for each draw" ); + + +$(document).ready( function () { + var oTable = $('#example').dataTable(); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "After first draw, iDraw is 1", + null, + function () { return oSettings.iDraw == 1; } + ); + + oTest.fnTest( + "After second draw, iDraw is 2", + function () { oTable.fnDraw() }, + function () { return oSettings.iDraw == 2; } + ); + + oTest.fnTest( + "After sort", + function () { oTable.fnSort([[1,'asc']]) }, + function () { return oSettings.iDraw == 3; } + ); + + oTest.fnTest( + "After filter", + function () { oTable.fnFilter('gecko') }, + function () { return oSettings.iDraw == 4; } + ); + + oTest.fnTest( + "After another filter", + function () { oTable.fnFilter('gec') }, + function () { return oSettings.iDraw == 5; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/2512.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/2512.js new file mode 100755 index 0000000..e0c9179 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/2512.js @@ -0,0 +1,17 @@ +// DATA_TEMPLATE: 2512 +oTest.fnStart( "Check filtering with BR and HTML entity" ); + + +$(document).ready( function () { + $('#example').dataTable(); + + /* Basic checks */ + oTest.fnTest( + "Check filtering", + function () { $('#example').dataTable().fnFilter('testsearchstring'); }, + function () { return $('#example tbody tr').length == 1; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/2530-2.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/2530-2.js new file mode 100755 index 0000000..cba8cf8 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/2530-2.js @@ -0,0 +1,15 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "User given with is left when no scrolling" ); + +$(document).ready( function () { + $('#example')[0].style.width = "80%"; + $('#example').dataTable(); + + oTest.fnTest( + "Check user width is left", + null, + function () { return $('#example').width() == 640; } + ); + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/2530.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/2530.js new file mode 100755 index 0000000..29e642d --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/2530.js @@ -0,0 +1,29 @@ +// DATA_TEMPLATE: dymanic_table +oTest.fnStart( "2530 - Check width's when dealing with empty strings" ); + + +$(document).ready( function () { + $('#example').dataTable( { + "aaData": [ + ['','Internet Explorer 4.0','Win 95+','4','X'], + ['','Internet Explorer 5.0','Win 95+','5','C'] + ], + "aoColumns": [ + { "sTitle": "", "sWidth": "40px" }, + { "sTitle": "Browser" }, + { "sTitle": "Platform" }, + { "sTitle": "Version", "sClass": "center" }, + { "sTitle": "Grade", "sClass": "center" } + ] + } ); + + /* Basic checks */ + oTest.fnTest( + "Check calculated widths", + null, + function () { return $('#example tbody tr td:eq(0)').width() < 100; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/2569.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/2569.js new file mode 100755 index 0000000..59eae2e --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/2569.js @@ -0,0 +1,36 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "Destroy with hidden columns" ); + +$(document).ready( function () { + $('#example').dataTable( { + "aoColumnDefs": [ + { "bSearchable": false, "bVisible": false, "aTargets": [ 2 ] }, + { "bVisible": false, "aTargets": [ 3 ] } + ] + } ); + $('#example').dataTable().fnDestroy(); + + oTest.fnTest( + "Check that the number of columns in table is correct", + null, + function () { return $('#example tbody tr:eq(0) td').length == 5; } + ); + + + oTest.fnTest( + "And with scrolling", + function () { + $('#example').dataTable( { + "sScrollY": 200, + "aoColumnDefs": [ + { "bSearchable": false, "bVisible": false, "aTargets": [ 2 ] }, + { "bVisible": false, "aTargets": [ 3 ] } + ] + } ); + $('#example').dataTable().fnDestroy(); + }, + function () { return $('#example tbody tr:eq(0) td').length == 5; } + ); + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/2600.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/2600.js new file mode 100755 index 0000000..7acda55 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/2600.js @@ -0,0 +1,44 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "2600 - Display rewind when changing length" ); + +$(document).ready( function () { + $('#example').dataTable(); + + oTest.fnTest( + "Info correct on init", + null, + function () { return $('#example_info').html() == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Page 2", + function () { $('#example_next').click(); }, + function () { return $('#example_info').html() == "Showing 11 to 20 of 57 entries"; } + ); + + oTest.fnTest( + "Page 3", + function () { $('#example_next').click(); }, + function () { return $('#example_info').html() == "Showing 21 to 30 of 57 entries"; } + ); + + oTest.fnTest( + "Page 4", + function () { $('#example_next').click(); }, + function () { return $('#example_info').html() == "Showing 31 to 40 of 57 entries"; } + ); + + oTest.fnTest( + "Page 5", + function () { $('#example_next').click(); }, + function () { return $('#example_info').html() == "Showing 41 to 50 of 57 entries"; } + ); + + oTest.fnTest( + "Rewind", + function () { $('#example_length select').val('100'); $('#example_length select').change(); }, + function () { return $('#example_info').html() == "Showing 1 to 57 of 57 entries"; } + ); + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/2608.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/2608.js new file mode 100644 index 0000000..e306c4f --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/2608.js @@ -0,0 +1,54 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "2608 - State saving escaping filters" ); + +$(document).ready( function () { + $('#example').dataTable( { + "bStateSave": true + } ); + + oTest.fnTest( + "Set the filter", + function () { + $('#example_filter input').val( '\\s*CVM\\s*$' ); + $('#example_filter input').keyup(); + }, + function () { return $('#example_filter input').val() == '\\s*CVM\\s*$'; } + ); + + oTest.fnTest( + "Destroy the table and remake it - checking the filter was saved", + function () { + $('#example').dataTable( { + "bStateSave": true, + "bDestroy": true + } ); + }, + function () { return $('#example_filter input').val() == '\\s*CVM\\s*$'; } + ); + + oTest.fnTest( + "Do it again without state saving and make sure filter is empty", + function () { + $('#example').dataTable( { + "bDestroy": true + } ); + }, + function () { return $('#example_filter input').val() == ''; } + ); + + oTest.fnTest( + "Clean up", + function () { + $('#example').dataTable( { + "bStateSave": true, + "bDestroy": true + } ); + $('#example_filter input').val( '' ); + $('#example_filter input').keyup(); + }, + function () { return $('#example_filter input').val() == ''; } + ); + + oTest.fnCookieDestroy( $('#example').dataTable() ); + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/2635.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/2635.js new file mode 100755 index 0000000..7226ea4 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/2635.js @@ -0,0 +1,40 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "2635 - Hiding column and state saving" ); + +$(document).ready( function () { + $('#example').dataTable( { + "bStateSave": true + } ); + + oTest.fnTest( + "Set the hidden column", + function () { + $('#example').dataTable().fnSetColumnVis( 2, false ); + }, + function () { return $('#example thead th').length == 4; } + ); + + oTest.fnTest( + "Destroy the table and remake it - checking one column was removed", + function () { + $('#example').dataTable( { + "bStateSave": true, + "bDestroy": true + } ); + }, + function () { return $('#example thead th').length == 4; } + ); + + oTest.fnTest( + "Do it again without state saving and make sure we are back to 5 columns", + function () { + $('#example').dataTable( { + "bDestroy": true + } ); + }, + function () { return $('#example thead th').length == 5; } + ); + + oTest.fnCookieDestroy( $('#example').dataTable() ); + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/2746-stable-sort.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/2746-stable-sort.js new file mode 100755 index 0000000..fbd3cf7 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/2746-stable-sort.js @@ -0,0 +1,199 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "2746 - Stable sorting" ); + +$(document).ready( function () { + $('#example').dataTable(); + + oTest.fnTest( + "Initial sort", + null, + function () { + var ret = + $('#example tbody tr:eq(0) td:eq(0)').html() == 'Gecko' && + $('#example tbody tr:eq(1) td:eq(0)').html() == 'Gecko' && + $('#example tbody tr:eq(0) td:eq(1)').html() == 'Firefox 1.0' && + $('#example tbody tr:eq(1) td:eq(1)').html() == 'Firefox 1.5' && + $('#example tbody tr:eq(2) td:eq(1)').html() == 'Firefox 2.0'; + return ret; + } + ); + + oTest.fnTest( + "Reserve initial sort", + function () { + $('#example thead th:eq(0)').click(); + }, + function () { + var ret = + $('#example tbody tr:eq(0) td:eq(0)').html() == 'Webkit' && + $('#example tbody tr:eq(1) td:eq(0)').html() == 'Webkit' && + $('#example tbody tr:eq(0) td:eq(1)').html() == 'Safari 1.2' && + $('#example tbody tr:eq(1) td:eq(1)').html() == 'Safari 1.3' && + $('#example tbody tr:eq(2) td:eq(1)').html() == 'Safari 2.0'; + return ret; + } + ); + + oTest.fnTest( + "Reserve to go back to initial sort sort", + function () { + $('#example thead th:eq(0)').click(); + }, + function () { + var ret = + $('#example tbody tr:eq(0) td:eq(0)').html() == 'Gecko' && + $('#example tbody tr:eq(1) td:eq(0)').html() == 'Gecko' && + $('#example tbody tr:eq(0) td:eq(1)').html() == 'Firefox 1.0' && + $('#example tbody tr:eq(1) td:eq(1)').html() == 'Firefox 1.5' && + $('#example tbody tr:eq(2) td:eq(1)').html() == 'Firefox 2.0'; + return ret; + } + ); + + oTest.fnTest( + "Reserve initial sort again", + function () { + $('#example thead th:eq(0)').click(); + }, + function () { + var ret = + $('#example tbody tr:eq(0) td:eq(0)').html() == 'Webkit' && + $('#example tbody tr:eq(1) td:eq(0)').html() == 'Webkit' && + $('#example tbody tr:eq(0) td:eq(1)').html() == 'Safari 1.2' && + $('#example tbody tr:eq(1) td:eq(1)').html() == 'Safari 1.3' && + $('#example tbody tr:eq(2) td:eq(1)').html() == 'Safari 2.0'; + return ret; + } + ); + + oTest.fnTest( + "And once more back to the initial sort", + function () { + $('#example thead th:eq(0)').click(); + }, + function () { + var ret = + $('#example tbody tr:eq(0) td:eq(0)').html() == 'Gecko' && + $('#example tbody tr:eq(1) td:eq(0)').html() == 'Gecko' && + $('#example tbody tr:eq(0) td:eq(1)').html() == 'Firefox 1.0' && + $('#example tbody tr:eq(1) td:eq(1)').html() == 'Firefox 1.5' && + $('#example tbody tr:eq(2) td:eq(1)').html() == 'Firefox 2.0'; + return ret; + } + ); + + oTest.fnTest( + "Sort on second column", + function () { + $('#example thead th:eq(1)').click(); + }, + function () { + var ret = + $('#example tbody tr:eq(0) td:eq(0)').html() == 'Other browsers' && + $('#example tbody tr:eq(1) td:eq(0)').html() == 'Trident' && + $('#example tbody tr:eq(0) td:eq(1)').html() == 'All others' && + $('#example tbody tr:eq(1) td:eq(1)').html() == 'AOL browser (AOL desktop)' && + $('#example tbody tr:eq(2) td:eq(1)').html() == 'Camino 1.0'; + return ret; + } + ); + + oTest.fnTest( + "Reserve sort on second column", + function () { + $('#example thead th:eq(1)').click(); + }, + function () { + var ret = + $('#example tbody tr:eq(0) td:eq(0)').html() == 'Gecko' && + $('#example tbody tr:eq(1) td:eq(0)').html() == 'Webkit' && + $('#example tbody tr:eq(0) td:eq(1)').html() == 'Seamonkey 1.1' && + $('#example tbody tr:eq(1) td:eq(1)').html() == 'Safari 3.0' && + $('#example tbody tr:eq(2) td:eq(1)').html() == 'Safari 2.0'; + return ret; + } + ); + + oTest.fnTest( + "And back to asc sorting on second column", + function () { + $('#example thead th:eq(1)').click(); + }, + function () { + var ret = + $('#example tbody tr:eq(0) td:eq(0)').html() == 'Other browsers' && + $('#example tbody tr:eq(1) td:eq(0)').html() == 'Trident' && + $('#example tbody tr:eq(0) td:eq(1)').html() == 'All others' && + $('#example tbody tr:eq(1) td:eq(1)').html() == 'AOL browser (AOL desktop)' && + $('#example tbody tr:eq(2) td:eq(1)').html() == 'Camino 1.0'; + return ret; + } + ); + + oTest.fnTest( + "Sort on third column, having now sorted on second", + function () { + $('#example thead th:eq(2)').click(); + }, + function () { + var ret = + $('#example tbody tr:eq(0) td:eq(0)').html() == 'Other browsers' && + $('#example tbody tr:eq(1) td:eq(0)').html() == 'Misc' && + $('#example tbody tr:eq(0) td:eq(1)').html() == 'All others' && + $('#example tbody tr:eq(1) td:eq(1)').html() == 'Dillo 0.8' && + $('#example tbody tr:eq(2) td:eq(1)').html() == 'NetFront 3.1'; + return ret; + } + ); + + oTest.fnTest( + "Reserve sort on third column", + function () { + $('#example thead th:eq(2)').click(); + }, + function () { + var ret = + $('#example tbody tr:eq(0) td:eq(0)').html() == 'Misc' && + $('#example tbody tr:eq(1) td:eq(0)').html() == 'Trident' && + $('#example tbody tr:eq(0) td:eq(1)').html() == 'IE Mobile' && + $('#example tbody tr:eq(1) td:eq(1)').html() == 'Internet Explorer 7' && + $('#example tbody tr:eq(2) td:eq(1)').html() == 'AOL browser (AOL desktop)'; + return ret; + } + ); + + oTest.fnTest( + "Return sorting on third column to asc", + function () { + $('#example thead th:eq(2)').click(); + }, + function () { + var ret = + $('#example tbody tr:eq(0) td:eq(0)').html() == 'Other browsers' && + $('#example tbody tr:eq(1) td:eq(0)').html() == 'Misc' && + $('#example tbody tr:eq(0) td:eq(1)').html() == 'All others' && + $('#example tbody tr:eq(1) td:eq(1)').html() == 'Dillo 0.8' && + $('#example tbody tr:eq(2) td:eq(1)').html() == 'NetFront 3.1'; + return ret; + } + ); + + oTest.fnTest( + "Sort on first column having sorted on second then third columns", + function () { + $('#example thead th:eq(0)').click(); + }, + function () { + var ret = + $('#example tbody tr:eq(0) td:eq(0)').html() == 'Gecko' && + $('#example tbody tr:eq(1) td:eq(0)').html() == 'Gecko' && + $('#example tbody tr:eq(0) td:eq(1)').html() == 'Epiphany 2.20' && + $('#example tbody tr:eq(1) td:eq(1)').html() == 'Camino 1.0' && + $('#example tbody tr:eq(2) td:eq(1)').html() == 'Camino 1.5'; + return ret; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/2799.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/2799.js new file mode 100755 index 0000000..fe3a2c6 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/2799.js @@ -0,0 +1,14 @@ +// DATA_TEMPLATE: two_tables +oTest.fnStart( "Initialise two tables" ); + +$(document).ready( function () { + $('table.display').dataTable(); + + oTest.fnTest( + "Check that initialisation was okay", + null, + function () { return true; } + ); + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/2840-restore-table-width.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/2840-restore-table-width.js new file mode 100755 index 0000000..435213f --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/2840-restore-table-width.js @@ -0,0 +1,19 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "2840 - Restore table width on fnDestroy" ); + +$(document).ready( function () { + document.cookie = ""; + $('#example').dataTable( { + "sScrollX": "100%", + "sScrollXInner": "110%" + } ); + $('#example').dataTable().fnDestroy(); + + oTest.fnTest( + "Width after destroy", + null, + function () { return $('#example').width() == "800"; } + ); + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/2914-state-save-sort.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/2914-state-save-sort.js new file mode 100755 index 0000000..0c616b6 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/2914-state-save-sort.js @@ -0,0 +1,39 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "2914 - State saving with an empty array" ); + +$(document).ready( function () { + document.cookie = ""; + $('#example').dataTable( { + "bStateSave": true, + "aaSorting": [] + } ); + + oTest.fnTest( + "No sort", + null, + function () { return $('#example tbody td:eq(3)').html() == "4"; } + ); + + oTest.fnTest( + "Next page", + function () { + $('#example').dataTable().fnPageChange( 'next' ); + }, + function () { return $('#example tbody td:eq(1)').html() == "Camino 1.0"; } + ); + + oTest.fnTest( + "Destroy the table and remake it - checking we are still on the next page", + function () { + $('#example').dataTable( { + "bStateSave": true, + "aaSorting": [], + "bDestroy": true + } ); + }, + function () { return $('#example tbody td:eq(1)').html() == "Camino 1.0"; } + ); + + oTest.fnCookieDestroy( $('#example').dataTable() ); + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/5396-fnUpdate-arrays.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/5396-fnUpdate-arrays.js new file mode 100755 index 0000000..4ab695b --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/5396-fnUpdate-arrays.js @@ -0,0 +1,103 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "5396 - fnUpdate with 2D arrays for a single row" ); + +$(document).ready( function () { + $('#example thead tr').append( '<th>6</th>' ); + $('#example thead tr').append( '<th>7</th>' ); + $('#example thead tr').append( '<th>8</th>' ); + $('#example thead tr').append( '<th>9</th>' ); + $('#example thead tr').append( '<th>10</th>' ); + + var aDataSet = [ + [ + "1", + "í™ê¸¸ë™", + "1154315", + "etc1", + [ + [ "test1@daum.net", "2011-03-04" ], + [ "test1@naver.com", "2009-07-06" ], + [ "test4@naver.com", ",hide" ], + [ "test5?@naver.com", "" ] + ], + "2011-03-04", + "show" + ], + [ + "2", + "í™ê¸¸ìˆœ", + "2154315", + "etc2", + [ + [ "test2@daum.net", "2009-09-26" ], + [ "test2@naver.com", "2009-05-21,hide" ], + [ "lsb@naver.com", "2010-03-05" ], + [ "lsb3@naver.com", ",hide" ], + [ "sooboklee9@daum.net", "2010-03-05" ] + ], + "2010-03-05", + "show" + ] +] + + var oTable = $('#example').dataTable({ + "aaData": aDataSet, + "aoColumns": [ + { "mDataProp": "0"}, + { "mDataProp": "1"}, + { "mDataProp": "2"}, + { "mDataProp": "3"}, + { "mDataProp": "4.0.0"}, + { "mDataProp": "4.0.1"}, + { "mDataProp": "4.1.0"}, + { "mDataProp": "4.1.1"}, + { "mDataProp": "5"}, + { "mDataProp": "6"} + ] + }); + + + oTest.fnTest( + "Initialisation", + null, + function () { + return $('#example tbody tr:eq(0) td:eq(0)').html() == '1'; + } + ); + + oTest.fnTest( + "Update row", + function () { + $('#example').dataTable().fnUpdate( [ + "0", + "í™ê¸¸ìˆœ", + "2154315", + "etc2", + [ + [ "test2@daum.net", "2009-09-26" ], + [ "test2@naver.com", "2009-05-21,hide" ], + [ "lsb@naver.com", "2010-03-05" ], + [ "lsb3@naver.com", ",hide" ], + [ "sooboklee9@daum.net", "2010-03-05" ] + ], + "2010-03-05", + "show" + ], 1 ); + }, + function () { + return $('#example tbody tr:eq(0) td:eq(0)').html() == '0'; + } + ); + + oTest.fnTest( + "Original row preserved", + null, + function () { + return $('#example tbody tr:eq(1) td:eq(0)').html() == '1'; + } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/5508-xscroll-zero-content.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/5508-xscroll-zero-content.js new file mode 100755 index 0000000..f71ae8f --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/5508-xscroll-zero-content.js @@ -0,0 +1,23 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "5508 - Table container width doesn't change when filtering applied to scrolling table" ); + +$(document).ready( function () { + $('#example').dataTable( { + "sScrollY": "300px", + "bPaginate": false + } ); + + oTest.fnTest( + "Width of container 800px on init with scroll", + null, + function () { return $('div.dataTables_scrollBody').width() == 800; } + ); + + oTest.fnTest( + "Unaltered when filter applied", + function () { $('#example').dataTable().fnFilter('123'); }, + function () { return $('div.dataTables_scrollBody').width() == 800; } + ); + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/_zero_config.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/_zero_config.js new file mode 100755 index 0000000..b3a941f --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/_zero_config.js @@ -0,0 +1,437 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "Sanity checks for DataTables with DOM data" ); + +oTest.fnTest( + "jQuery.dataTable function", + null, + function () { return typeof jQuery().dataTable == "function"; } +); + +oTest.fnTest( + "jQuery.dataTableSettings storage array", + null, + function () { return typeof jQuery().dataTableSettings == "object"; } +); + +oTest.fnTest( + "jQuery.dataTableExt plugin object", + null, + function () { return typeof jQuery().dataTableExt == "object"; } +); + +$(document).ready( function () { + $('#example').dataTable(); + + /* Basic checks */ + oTest.fnTest( + "Length changing div exists", + null, + function () { return document.getElementById('example_length') != null; } + ); + + oTest.fnTest( + "Filtering div exists", + null, + function () { return document.getElementById('example_filter') != null; } + ); + + oTest.fnTest( + "Information div exists", + null, + function () { return document.getElementById('example_info') != null; } + ); + + oTest.fnTest( + "Pagination div exists", + null, + function () { return document.getElementById('example_paginate') != null; } + ); + + oTest.fnTest( + "Processing div is off by default", + null, + function () { return document.getElementById('example_processing') == null; } + ); + + oTest.fnTest( + "10 rows shown on the first page", + null, + function () { return $('#example tbody tr').length == 10; } + ); + + oTest.fnTest( + "Initial sort occured", + null, + function () { return $('#example tbody td:eq(0)').html() == "Gecko"; } + ); + + /* Need to use the WaitTest for sorting due to the setTimeout datatables uses */ + oTest.fnTest( + "Sorting (first click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Sorting (second click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnTest( + "Sorting (third click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Sorting (first click) on numeric column", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "-"; } + ); + + oTest.fnTest( + "Sorting (second click) on numeric column", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "522.1"; } + ); + + oTest.fnTest( + "Sorting multi-column (first click)", + function () { + $('#example thead th:eq(0)').click(); + oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); }, + function () { var b = + $('#example tbody td:eq(0)').html() == "Gecko" && + $('#example tbody td:eq(1)').html() == "Camino 1.0"; return b; } + ); + + oTest.fnTest( + "Sorting multi-column - sorting second column only", + function () { + $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + /* Basic paging */ + oTest.fnTest( + "Paging to second page", + function () { $('#example_next').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "IE Mobile"; } + ); + + oTest.fnTest( + "Paging to first page", + function () { $('#example_previous').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Attempting to page back beyond the first page", + function () { $('#example_previous').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + /* Changing length */ + oTest.fnTest( + "Changing table length to 25 records", + function () { $("select[name=example_length]").val('25').change(); }, + function () { return $('#example tbody tr').length == 25; } + ); + + oTest.fnTest( + "Changing table length to 50 records", + function () { $("select[name=example_length]").val('50').change(); }, + function () { return $('#example tbody tr').length == 50; } + ); + + oTest.fnTest( + "Changing table length to 100 records", + function () { $("select[name=example_length]").val('100').change(); }, + function () { return $('#example tbody tr').length == 57; } + ); + + oTest.fnTest( + "Changing table length to 10 records", + function () { $("select[name=example_length]").val('10').change(); }, + function () { return $('#example tbody tr').length == 10; } + ); + + /* + * Information element + */ + oTest.fnTest( + "Information on zero config", + null, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Information on second page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 11 to 20 of 57 entries"; } + ); + + oTest.fnTest( + "Information on third page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 21 to 30 of 57 entries"; } + ); + + oTest.fnTest( + "Information on last page", + function () { + $('#example_next').click(); + $('#example_next').click(); + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 51 to 57 of 57 entries"; } + ); + + oTest.fnTest( + "Information back on first page", + function () { + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Information with 25 records", + function () { $("select[name=example_length]").val('25').change(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 25 of 57 entries"; } + ); + + oTest.fnTest( + "Information with 25 records - second page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 26 to 50 of 57 entries"; } + ); + + oTest.fnTest( + "Information with 100 records - first page", + function () { + $('#example_previous').click(); + $("select[name=example_length]").val('100').change(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 57 of 57 entries"; } + ); + + oTest.fnTest( + "Information back to 10 records", + function () { + $('#example_previous').click(); + $("select[name=example_length]").val('10').change(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Information with filter 'Win'", + function () { $('#example_filter input').val("Win").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' second page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' last page", + function () { + $('#example_next').click(); + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 31 to 31 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' back to first page", + function () { + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' second page - second time", + function () { + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter increased to 'Win 98'", + function () { $('#example_filter input').val("Win 98").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 9 of 9 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter decreased to 'Win'", + function () { $('#example_filter input').val("Win").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' second page - third time", + function () { + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter removed", + function () { $('#example_filter input').val("").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 57 entries"; } + ); + + + /* + * Filtering + */ + oTest.fnTest( + "Filter 'W' - rows", + function () { + /* Reset the table such that the old sorting doesn't mess things up */ + oSession.fnRestore(); + $('#example').dataTable(); + $('#example_filter input').val("W").keyup(); }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Gecko"; } + ); + + oTest.fnTest( + "Filter 'W' - info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 42 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Wi'", + function () { $('#example_filter input').val("Wi").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 32 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Win'", + function () { $('#example_filter input').val("Win").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting column 1", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "AOL browser (AOL desktop)"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting column 1 info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting column 1 reverse", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnTest( + "Filter 'Win XP' - maintaing reverse sorting col 1", + function () { $('#example_filter input').val("Win XP").keyup(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Internet Explorer 7"; } + ); + + oTest.fnTest( + "Filter 'Win XP' - sorting col 3", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "4"; } + ); + + oTest.fnTest( + "Filter 'Win XP' - sorting col 3 - reversed", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "7"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting col 3 - reversed info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 6 of 6 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'nothinghere'", + function () { $('#example_filter input').val("nothinghere").keyup(); }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == + "No matching records found"; } + ); + + oTest.fnTest( + "Filter 'nothinghere' - info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter back to blank and 1st column sorting", + function () { + $('#example_filter input').val("").keyup(); + $('#example thead th:eq(0)').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Prefixing a filter entry", + function () { + $('#example_filter input').val("Win").keyup(); + $('#example_filter input').val("GeckoWin").keyup(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Prefixing a filter entry with space", + function () { + $('#example_filter input').val("Gecko Win").keyup(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 17 entries (filtered from 57 total entries)"; } + ); + + + + + + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aaSorting.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aaSorting.js new file mode 100755 index 0000000..848b85e --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aaSorting.js @@ -0,0 +1,183 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "aaSorting" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable(); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "Default sorting is single column", + null, + function () { + return oSettings.aaSorting.length == 1 && typeof oSettings.aaSorting[0] == 'object'; + } + ); + + oTest.fnTest( + "Default sorting is first column asc", + null, + function () { + return oSettings.aaSorting[0].length == 3 && oSettings.aaSorting[0][0] == 0 && + oSettings.aaSorting[0][1] == 'asc'; + } + ); + + oTest.fnTest( + "Sorting is applied", + null, + function () { return $('#example tbody td:eq(0)').html() == "Gecko"; } + ); + + + oTest.fnTest( + "Custom sorting on single string column asc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaSorting": [['1','asc']] + } ); + }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + + oTest.fnTest( + "Custom sorting on single string column desc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaSorting": [['1','desc']] + } ); + }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + + oTest.fnTest( + "Custom sorting on single int column asc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaSorting": [['1','asc']] + } ); + }, + function () { return $('#example tbody td:eq(3)').html() == "-"; } + ); + + + oTest.fnTest( + "Custom sorting on single int column desc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaSorting": [['1','desc']] + } ); + }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + + oTest.fnTest( + "Multi-column sorting (2 column) - string asc / string asc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaSorting": [['0','asc'], ['1','asc']] + } ); + }, + function () { return $('#example tbody td:eq(1)').html() == "Camino 1.0"; } + ); + + oTest.fnTest( + "Multi-column sorting (2 column) - string asc / string desc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaSorting": [['0','asc'], ['1','desc']] + } ); + }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnTest( + "Multi-column sorting (2 column) - string desc / string asc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaSorting": [['0','desc'], ['1','asc']] + } ); + }, + function () { return $('#example tbody td:eq(1)').html() == "iPod Touch / iPhone"; } + ); + + oTest.fnTest( + "Multi-column sorting (2 column) - string desc / string desc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaSorting": [['0','desc'], ['1','desc']] + } ); + }, + function () { return $('#example tbody td:eq(1)').html() == "Safari 3.0"; } + ); + + + oTest.fnTest( + "Multi-column sorting (2 column) - string asc / int asc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaSorting": [['0','asc'], ['3','asc']] + } ); + }, + function () { return $('#example tbody td:eq(3)').html() == "1"; } + ); + + oTest.fnTest( + "Multi-column sorting (2 column) - string asc / int desc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaSorting": [['0','asc'], ['3','desc']] + } ); + }, + function () { return $('#example tbody td:eq(3)').html() == "1.9"; } + ); + + oTest.fnTest( + "Multi-column sorting (2 column) - string desc / int asc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaSorting": [['0','desc'], ['3','asc']] + } ); + }, + function () { return $('#example tbody td:eq(3)').html() == "125.5"; } + ); + + oTest.fnTest( + "Multi-column sorting (2 column) - string desc / int desc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaSorting": [['0','desc'], ['3','desc']] + } ); + }, + function () { return $('#example tbody td:eq(3)').html() == "522.1"; } + ); + + oTest.fnTest( + "Multi-column sorting (3 column) - string asc / int asc / string asc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaSorting": [['0','asc'], ['3','asc'], ['1','asc']] + } ); + }, + function () { return $('#example tbody tr:eq(7) td:eq(1)').html() == "Firefox 1.0"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aaSortingFixed.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aaSortingFixed.js new file mode 100755 index 0000000..bc470e2 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aaSortingFixed.js @@ -0,0 +1,60 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "aaSortingFixed" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable(); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "No fixed sorting by default", + null, + function () { + return oSettings.aaSortingFixed == null; + } + ); + + + oTest.fnTest( + "Fixed sorting on first column (string/asc) with user sorting on second column (string/asc)", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaSortingFixed": [['0','asc']] + } ); + $('#example thead th:eq(1)').click(); + }, + function () { return $('#example tbody td:eq(1)').html() == "Camino 1.0"; } + ); + + oTest.fnTest( + "Fixed sorting on first column (string/asc) with user sorting on second column (string/desc)", + function () { + $('#example thead th:eq(1)').click(); + }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnTest( + "Fixed sorting on fourth column (int/asc) with user sorting on second column (string/asc)", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaSortingFixed": [['3','asc']] + } ); + $('#example thead th:eq(1)').click(); + }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Fixed sorting on fourth column (int/asc) with user sorting on second column (string/desc)", + function () { + $('#example thead th:eq(1)').click(); + }, + function () { return $('#example tbody td:eq(1)').html() == "PSP browser"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aoColumns.bSearchable.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aoColumns.bSearchable.js new file mode 100755 index 0000000..27c211a --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aoColumns.bSearchable.js @@ -0,0 +1,67 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "aoColumns.bSeachable" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable(); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "Columns are searchable by default", + function () { oTable.fnFilter("Camino"); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html().match(/Camino/); } + ); + + oTest.fnTest( + "Disabling sorting on a column removes it from the global filter", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aoColumns": [ + null, + { "bSearchable": false }, + null, + null, + null + ] + } ); + oSettings = oTable.fnSettings(); + oTable.fnFilter("Camino"); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; } + ); + + oTest.fnTest( + "Disabled on one column has no effect on other columns", + function () { oTable.fnFilter("Webkit"); }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Webkit"; } + ); + + oTest.fnTest( + "Disable filtering on multiple columns", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aoColumns": [ + { "bSearchable": false }, + { "bSearchable": false }, + null, + null, + null + ] + } ); + oSettings = oTable.fnSettings(); + oTable.fnFilter("Webkit"); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; } + ); + + oTest.fnTest( + "Filter on second disabled column", + function () { oTable.fnFilter("Camino"); }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aoColumns.bSortable.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aoColumns.bSortable.js new file mode 100755 index 0000000..bbb41cd --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aoColumns.bSortable.js @@ -0,0 +1,105 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "aoColumns.bSortable" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable(); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "All columns are sortable by default", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Can disable sorting from one column", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aoColumns": [ + null, + { "bSortable": false }, + null, + null, + null + ] + } ); + $('#example thead th:eq(1)').click(); + }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() != "All others"; } + ); + + oTest.fnTest( + "Disabled column has no sorting class", + null, + function () { return $('#example thead th:eq(1)').hasClass("sorting_asc") == false; } + ); + + oTest.fnTest( + "Other columns can still sort", + function () { + $('#example thead th:eq(4)').click(); + $('#example thead th:eq(4)').click(); + }, + function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == "X"; } + ); + + oTest.fnTest( + "Disable sorting on multiple columns - no sorting classes", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aoColumns": [ + null, + { "bSortable": false }, + null, + { "bSortable": false }, + null + ] + } ); + }, + function () { + var bReturn = + $('#example thead th:eq(1)').hasClass("sorting") || + $('#example thead th:eq(3)').hasClass("sorting") + return bReturn == false; + } + ); + + oTest.fnTest( + "Sorting on disabled column 1 has no effect", + function () { + $('#example thead th:eq(1)').click(); + }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() != "All others"; } + ); + + oTest.fnTest( + "Sorting on disabled column 2 has no effect", + function () { + $('#example thead th:eq(3)').click(); + }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() != "-"; } + ); + + oTest.fnTest( + "Second sort on disabled column 2 has no effect", + function () { + $('#example thead th:eq(3)').click(); + }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() != "-"; } + ); + + oTest.fnTest( + "Even with multiple disabled sorting columns other columns can still sort", + function () { + $('#example thead th:eq(4)').click(); + $('#example thead th:eq(4)').click(); + }, + function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == "X"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aoColumns.bUseRendered.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aoColumns.bUseRendered.js new file mode 100755 index 0000000..161c412 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aoColumns.bUseRendered.js @@ -0,0 +1,145 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "aoColumns.bUseRendered" ); + +/* bUseRendered is used to alter sorting data, if false then the original data is used for + * sorting rather than the rendered data + */ + +$(document).ready( function () { + /* Check the default */ + var mTmp = 0; + + var oTable = $('#example').dataTable( { + "aoColumns": [ + null, + { "fnRender": function (a) { + if ( mTmp == 0 ) { + mTmp++; + return "aaa"; + } else + return a.aData[a.iDataColumn]; + } }, + null, + null, + null + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "Default for bUseRendered is true - rendered data is used for sorting", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'aaa'; } + ); + + oTest.fnTest( + "When bUseRendered is false, original data is used for sorting", + function () { + mTmp = 0; + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aoColumns": [ + null, + { + "bUseRendered": false, + "fnRender": function (a) { + if ( mTmp == 0 ) { + mTmp++; + return "aaa"; + } else { + return a.aData[a.iDataColumn]; + } + } + }, + null, + null, + null + ] + } ); + $('#example thead th:eq(1)').click(); + }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'All others'; } + ); + + + oTest.fnTest( + "bUseRendered set to false on one columns and true (default) on two others", + function () { + mTmp = 0; + var mTmp2 = 0; + var mTmp3 = 0; + + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aoColumns": [ + { + "fnRender": function (a) { + if ( mTmp == 0 ) { + mTmp++; + return "aaa1"; + } else { + return a.aData[a.iDataColumn]; + } + } + }, + { + "bUseRendered": false, + "fnRender": function (a) { + if ( mTmp2 == 0 ) { + mTmp2++; + return "aaa2"; + } else { + return a.aData[a.iDataColumn]; + } + } + }, + { + "fnRender": function (a) { + if ( mTmp3 == 0 ) { + mTmp3++; + return "zzz3"; + } else { + return a.aData[a.iDataColumn]; + } + } + }, + null, + null + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == 'aaa1'; } + ); + + oTest.fnTest( + "Multi-column rendering - 2nd column sorting", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'All others'; } + ); + + oTest.fnTest( + "Multi-column rendering - 3rd column sorting", + function () { + $('#example thead th:eq(2)').click(); + $('#example thead th:eq(2)').click(); + }, + function () { return $('#example tbody tr:eq(0) td:eq(2)').html() == 'zzz3'; } + ); + + oTest.fnTest( + "Multi-column rendering - 4th column sorting", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == '-'; } + ); + + oTest.fnTest( + "Multi-column rendering - 5th column sorting", + function () { $('#example thead th:eq(4)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'A'; } + ); + + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aoColumns.bVisible.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aoColumns.bVisible.js new file mode 100755 index 0000000..84f1ee6 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aoColumns.bVisible.js @@ -0,0 +1,132 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "aoColumns.bVisible" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable(); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "All columns are visible by default", + null, + function () { return $('#example tbody tr:eq(0) td').length == 5; } + ); + + oTest.fnTest( + "Can hide one column and it removes td column from DOM", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aoColumns": [ + null, + { "bVisible": false }, + null, + null, + null + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td').length == 4; } + ); + + oTest.fnTest( + "Can hide one column and it removes thead th column from DOM", + null, + function () { return $('#example thead tr:eq(0) th').length == 4; } + ); + + oTest.fnTest( + "Can hide one column and it removes tfoot th column from DOM", + null, + function () { return $('#example tfoot tr:eq(0) th').length == 4; } + ); + + oTest.fnTest( + "The correct thead column has been hidden", + null, + function () { + var jqNodes = $('#example thead tr:eq(0) th'); + var bReturn = + jqNodes[0].innerHTML == "Rendering engine" && + jqNodes[1].innerHTML == "Platform(s)" && + jqNodes[2].innerHTML == "Engine version" && + jqNodes[3].innerHTML == "CSS grade"; + return bReturn; + } + ); + + oTest.fnTest( + "The correct tbody column has been hidden", + function () { + oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); + }, + function () { + var jqNodes = $('#example tbody tr:eq(0) td'); + var bReturn = + jqNodes[0].innerHTML == "Gecko" && + jqNodes[1].innerHTML == "Gnome" && + jqNodes[2].innerHTML == "1.8" && + jqNodes[3].innerHTML == "A"; + return bReturn; + } + ); + + + oTest.fnTest( + "Can hide multiple columns and it removes td column from DOM", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aoColumns": [ + null, + { "bVisible": false }, + { "bVisible": false }, + null, + { "bVisible": false } + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td').length == 2; } + ); + + oTest.fnTest( + "Multiple hide - removes thead th column from DOM", + null, + function () { return $('#example thead tr:eq(0) th').length == 2; } + ); + + oTest.fnTest( + "Multiple hide - removes tfoot th column from DOM", + null, + function () { return $('#example tfoot tr:eq(0) th').length == 2; } + ); + + oTest.fnTest( + "Multiple hide - the correct thead columns have been hidden", + null, + function () { + var jqNodes = $('#example thead tr:eq(0) th'); + var bReturn = + jqNodes[0].innerHTML == "Rendering engine" && + jqNodes[1].innerHTML == "Engine version" + return bReturn; + } + ); + + oTest.fnTest( + "Multiple hide - the correct tbody columns have been hidden", + function () { + oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); + }, + function () { + var jqNodes = $('#example tbody tr:eq(0) td'); + var bReturn = + jqNodes[0].innerHTML == "Gecko" && + jqNodes[1].innerHTML == "1" + return bReturn; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aoColumns.bVisible2.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aoColumns.bVisible2.js new file mode 100755 index 0000000..5dbe214 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aoColumns.bVisible2.js @@ -0,0 +1,268 @@ +// DATA_TEMPLATE: complex_header_2 +oTest.fnStart( "aoColumns.bVisible with complex headers" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable(); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "All columns are visible by default", + null, + function () { return $('#example tbody tr:eq(0) td').length == 5; } + ); + + oTest.fnTest( + "Hide the first column", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aoColumns": [ + { "bVisible": false }, + null, + null, + null, + null + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td').length == 4; } + ); + + oTest.fnTest( + "First cell is '2' - first column hidden", + null, + function () { return $('#example thead tr:eq(0) th:eq(0)').html() == "2"; } + ); + + oTest.fnTest( + "First cell has colspan of 3", + null, + function () { return $('#example thead tr:eq(0) th:eq(0)')[0].getAttribute('colspan') == 3; } + ); + + oTest.fnTest( + "First cell has rowspan of 2", + null, + function () { return $('#example thead tr:eq(0) th:eq(0)')[0].getAttribute('rowspan') == 2; } + ); + + oTest.fnTest( + "First cell in last column is '11'", + null, + function () { return $('#example thead tr:eq(4) th:eq(0)').html() == 11; } + ); + + oTest.fnTest( + "First cell in last column has been truncated to one column", + null, + function () { return $('#example thead tr:eq(4) th:eq(0)')[0].getAttribute('colspan') == 1; } + ); + + + oTest.fnTest( + "Hide the second column", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aoColumns": [ + null, + { "bVisible": false }, + null, + null, + null + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td').length == 4; } + ); + + oTest.fnTest( + "First cell is '1' - second column hidden", + null, + function () { return $('#example thead tr:eq(0) th:eq(0)').html() == "1"; } + ); + + oTest.fnTest( + "Second cell is '2' - second column hidden", + null, + function () { return $('#example thead tr:eq(0) th:eq(1)').html() == "2"; } + ); + + oTest.fnTest( + "First cell in fourth row is '10' (visibly the first) - second column hidden", + null, + function () { return $('#example thead tr:eq(3) th:eq(0)').html() == "10"; } + ); + + oTest.fnTest( + "First cell has colspan of 1", + null, + function () { return $('#example thead tr:eq(0) th:eq(0)')[0].getAttribute('colspan') == 1; } + ); + + oTest.fnTest( + "Second cell has colspan of 2", + null, + function () { return $('#example thead tr:eq(0) th:eq(1)')[0].getAttribute('colspan') == 2; } + ); + + oTest.fnTest( + "First cell has rowspan of 1", + null, + function () { return $('#example thead tr:eq(0) th:eq(0)')[0].getAttribute('rowspan') == 1; } + ); + + oTest.fnTest( + "Second cell has rowspan of 2", + null, + function () { return $('#example thead tr:eq(0) th:eq(1)')[0].getAttribute('rowspan') == 2; } + ); + + oTest.fnTest( + "First cell in last column is '11'", + null, + function () { return $('#example thead tr:eq(4) th:eq(0)').html() == 11; } + ); + + oTest.fnTest( + "First cell in last column has been truncated to one column", + null, + function () { return $('#example thead tr:eq(4) th:eq(0)')[0].getAttribute('colspan') == 1; } + ); + + + oTest.fnTest( + "Hide the first two columns", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aoColumns": [ + { "bVisible": false }, + { "bVisible": false }, + null, + null, + null + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td').length == 3; } + ); + + oTest.fnTest( + "First cell is '2' - first two columns hidden", + null, + function () { return $('#example thead tr:eq(0) th:eq(0)').html() == "2"; } + ); + + oTest.fnTest( + "Second cell is '3' - first two columns hidden", + null, + function () { return $('#example thead tr:eq(0) th:eq(1)').html() == "3"; } + ); + + oTest.fnTest( + "First cell in third row is '6' - first two columns hidden", + null, + function () { return $('#example thead tr:eq(2) th:eq(0)').html() == "6"; } + ); + + oTest.fnTest( + "First cell has colspan of 2", + null, + function () { return $('#example thead tr:eq(0) th:eq(0)')[0].getAttribute('colspan') == 2; } + ); + + oTest.fnTest( + "First cell has rowspan of 2", + null, + function () { return $('#example thead tr:eq(0) th:eq(0)')[0].getAttribute('rowspan') == 2; } + ); + + oTest.fnTest( + "Second cell has rowspan of 1", + null, + function () { return $('#example thead tr:eq(0) th:eq(1)')[0].getAttribute('rowspan') == 1; } + ); + + oTest.fnTest( + "First cell in last column is '12'", + null, + function () { return $('#example thead tr:eq(4) th:eq(0)').html() == 12; } + ); + + + oTest.fnTest( + "Hide the third column", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aoColumns": [ + null, + null, + { "bVisible": false }, + null, + null + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td').length == 4; } + ); + + oTest.fnTest( + "First cell is '1' - third column hidden", + null, + function () { return $('#example thead tr:eq(0) th:eq(0)').html() == "1"; } + ); + + oTest.fnTest( + "Second cell is '2' - third column hidden", + null, + function () { return $('#example thead tr:eq(0) th:eq(1)').html() == "2"; } + ); + + oTest.fnTest( + "First cell (visible second) in third row is '6' - third column hidden", + null, + function () { return $('#example thead tr:eq(2) th:eq(0)').html() == "6"; } + ); + + oTest.fnTest( + "Second cell has colspan of 2", + null, + function () { return $('#example thead tr:eq(0) th:eq(1)')[0].getAttribute('colspan') == 2; } + ); + + oTest.fnTest( + "Second cell has rowspan of 2", + null, + function () { return $('#example thead tr:eq(0) th:eq(1)')[0].getAttribute('rowspan') == 2; } + ); + + oTest.fnTest( + "Third row first cell (second visible) colspan is 1", + null, + function () { return $('#example thead tr:eq(2) th:eq(0)')[0].getAttribute('colspan') == 1; } + ); + + oTest.fnTest( + "Third row second cell (third visible) value is 7", + null, + function () { return $('#example thead tr:eq(2) th:eq(1)').html() == "7"; } + ); + + oTest.fnTest( + "Third row second cell (third visible) colspan is 1", + null, + function () { return $('#example thead tr:eq(2) th:eq(1)')[0].getAttribute('colspan') == 1; } + ); + + oTest.fnTest( + "Third row second cell (third visible) rowspan is 3", + null, + function () { return $('#example thead tr:eq(2) th:eq(1)')[0].getAttribute('rowspan') == 3; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aoColumns.fnRender.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aoColumns.fnRender.js new file mode 100755 index 0000000..8060ddb --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aoColumns.fnRender.js @@ -0,0 +1,176 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "aoColumns.fnRender" ); + +$(document).ready( function () { + /* Check the default */ + var mTmp = 0; + var oTable = $('#example').dataTable( { + "aoColumns": [ + null, + { "fnRender": function (a) { + mTmp++; + return a.aData[a.iDataColumn]; + } }, + null, + null, + null + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "Single column - fnRender is called once for each row", + null, + function () { return mTmp == 57; } + ); + + oTest.fnTest( + "Confirm that fnRender passes two arguments with four parameters", + function () { + mTmp = true; + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aoColumns": [ + null, + { "fnRender": function (a, v) { + if ( arguments.length != 2 || typeof a.iDataRow=='undefined' || + typeof a.iDataColumn=='undefined' || typeof a.aData=='undefined' || + typeof a.mDataProp=='undefined' ) + { + mTmp = false; + } + return a.aData[a.iDataColumn]; + } }, + null, + null, + null + ] + } ); + }, + function () { return mTmp; } + ); + + oTest.fnTest( + "fnRender iDataColumn is row number", + function () { + var iCount = 0; + mTmp = true; + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aoColumns": [ + null, + { "fnRender": function (a) { + if ( iCount != a.iDataRow ) + { + mTmp = false; + } + iCount++; + return a.aData[a.iDataColumn]; + } }, + null, + null, + null + ] + } ); + }, + function () { return mTmp; } + ); + + oTest.fnTest( + "fnRender iDataColumn is the column", + function () { + mTmp = true; + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aoColumns": [ + null, + { "fnRender": function (a) { + if ( a.iDataColumn != 1 ) + { + mTmp = false; + } + return a.aData[a.iDataColumn]; + } }, + null, + null, + null + ] + } ); + }, + function () { return mTmp; } + ); + + oTest.fnTest( + "fnRender aData is data array of correct size", + function () { + mTmp = true; + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aoColumns": [ + null, + { "fnRender": function (a) { + if ( a.aData.length != 5 ) + { + mTmp = false; + } + return a.aData[a.iDataColumn]; + } }, + null, + null, + null + ] + } ); + }, + function () { return mTmp; } + ); + + oTest.fnTest( + "Passed back data is put into the DOM", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aoColumns": [ + null, + { "fnRender": function (a) { + return 'unittest'; + } }, + null, + null, + null + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'unittest'; } + ); + + oTest.fnTest( + "Passed back data is put into the DOM", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aoColumns": [ + null, + null, + { "fnRender": function (a) { + return 'unittest1'; + } }, + { "fnRender": function (a) { + return 'unittest2'; + } }, + null + ] + } ); + }, + function () { + var bReturn = + $('#example tbody tr:eq(0) td:eq(2)').html() == 'unittest1' && + $('#example tbody tr:eq(0) td:eq(3)').html() == 'unittest2'; + return bReturn; } + ); + + + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aoColumns.iDataSort.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aoColumns.iDataSort.js new file mode 100755 index 0000000..e9366ff --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aoColumns.iDataSort.js @@ -0,0 +1,88 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "aoColumns.iDataSort" ); + +$(document).ready( function () { + /* Should know that sorting already works by default from other tests, so we can jump + * right in here + */ + var oTable = $('#example').dataTable( { + "aoColumns": [ + null, + { "iDataSort": 4 }, + null, + null, + null + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "Sorting on first column is uneffected", + null, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == 'Gecko'; } + ); + + oTest.fnTest( + "Sorting on second column is the order of the fifth", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'A'; } + ); + + oTest.fnTest( + "Reserve sorting on second column uses fifth column as well", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'X'; } + ); + + oTest.fnTest( + "Sorting on 5th column retains it's own sorting", + function () { $('#example thead th:eq(4)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'A'; } + ); + + + oTest.fnTest( + "Use 2nd col for sorting 5th col and via-versa - no effect on first col sorting", + function () { + mTmp = 0; + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aoColumns": [ + null, + { "iDataSort": 4 }, + null, + null, + { "iDataSort": 1 } + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == 'Gecko'; } + ); + + oTest.fnTest( + "2nd col sorting uses fifth col", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'A'; } + ); + + oTest.fnTest( + "2nd col sorting uses fifth col - reversed", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'X'; } + ); + + oTest.fnTest( + "5th col sorting uses 2nd col", + function () { $('#example thead th:eq(4)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'All others'; } + ); + + oTest.fnTest( + "5th col sorting uses 2nd col - reversed", + function () { $('#example thead th:eq(4)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'Seamonkey 1.1'; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aoColumns.sClass.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aoColumns.sClass.js new file mode 100755 index 0000000..09149bb --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aoColumns.sClass.js @@ -0,0 +1,111 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "aoColumns.sClass" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable(); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "By default the test class hasn't been applied to the column (sanity!)", + null, + function () { return $('#example tbody tr:eq(0) td:eq(2)').hasClass('unittest') == false; } + ); + + oTest.fnTest( + "Add a class to a single column - first row", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aoColumns": [ + null, + null, + { "sClass": 'unittest' }, + null, + null + ] + } ); + }, + function () { return $('#example tbody tr:eq(1) td:eq(2)').hasClass('unittest'); } + ); + + oTest.fnTest( + "Add a class to a single column - third row", + null, + function () { return $('#example tbody tr:eq(3) td:eq(2)').hasClass('unittest'); } + ); + + oTest.fnTest( + "Add a class to a single column - last row", + null, + function () { return $('#example tbody tr:eq(9) td:eq(2)').hasClass('unittest'); } + ); + + oTest.fnTest( + "Add a class to a single column - has not applied to other columns - 1st", + null, + function () { return $('#example tbody tr:eq(3) td:eq(0)').hasClass('unittest') == false; } + ); + + oTest.fnTest( + "Add a class to a single column - has not applied to other columns - 5th", + null, + function () { return $('#example tbody tr:eq(3) td:eq(4)').hasClass('unittest') == false; } + ); + + oTest.fnTest( + "Add a class to a single column - seventh row - second page", + function () { $('#example_next').click(); }, + function () { return $('#example tbody tr:eq(6) td:eq(2)').hasClass('unittest'); } + ); + + oTest.fnTest( + "Add a class to a single column - has not applied to header", + null, + function () { return $('#example thead tr:eq(3) th:eq(4)').hasClass('unittest') == false; } + ); + + oTest.fnTest( + "Add a class to a single column - has not applied to footer", + null, + function () { return $('#example thead tr:eq(3) th:eq(4)').hasClass('unittest') == false; } + ); + + + oTest.fnTest( + "Class defined for multiple columns - first row", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aoColumns": [ + { "sClass": 'unittest2' }, + null, + null, + { "sClass": 'unittest1' }, + null + ] + } ); + }, + function () { + var bReturn = + $('#example tbody tr:eq(3) td:eq(0)').hasClass('unittest2') && + $('#example tbody tr:eq(8) td:eq(3)').hasClass('unittest1'); + return bReturn; + } + ); + + oTest.fnTest( + "Class defined for multiple columns - has not applied to other columns - 5th 1", + null, + function () { return $('#example tbody tr:eq(0) td:eq(4)').hasClass('unittest1') == false; } + ); + + oTest.fnTest( + "Class defined for multiple columns - has not applied to other columns - 5th 2", + null, + function () { return $('#example tbody tr:eq(6) td:eq(4)').hasClass('unittest2') == false; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aoColumns.sName.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aoColumns.sName.js new file mode 100755 index 0000000..14a4c18 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aoColumns.sName.js @@ -0,0 +1,27 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "aoColumns.sName" ); + +/* This has no effect at all in DOM methods - so we just check that it has applied the name */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "aoColumns": [ + null, + null, + null, + { "sName": 'unit test' }, + null + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "Names are stored in the columns object", + null, + function () { return oSettings.aoColumns[3].sName =="unit test"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aoColumns.sTitle.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aoColumns.sTitle.js new file mode 100755 index 0000000..5ebac2f --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aoColumns.sTitle.js @@ -0,0 +1,78 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "aoColumns.sTitle" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable(); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "Column names are read from the DOM by default", + null, + function () { + var jqNodes = $('#example thead tr:eq(0) th'); + var bReturn = + jqNodes[0].innerHTML == "Rendering engine" && + jqNodes[1].innerHTML == "Browser" && + jqNodes[2].innerHTML == "Platform(s)" && + jqNodes[3].innerHTML == "Engine version" && + jqNodes[4].innerHTML == "CSS grade"; + return bReturn; + } + ); + + oTest.fnTest( + "Can set a single column title - and others are read from DOM", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aoColumns": [ + null, + { "sTitle": 'unit test' }, + null, + null, + null + ] + } ); + }, + function () { + var jqNodes = $('#example thead tr:eq(0) th'); + var bReturn = + jqNodes[0].innerHTML == "Rendering engine" && + jqNodes[1].innerHTML == "unit test" && + jqNodes[2].innerHTML == "Platform(s)" && + jqNodes[3].innerHTML == "Engine version" && + jqNodes[4].innerHTML == "CSS grade"; + return bReturn; + } + ); + + oTest.fnTest( + "Can set multiple column titles", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aoColumns": [ + null, + { "sTitle": 'unit test 1' }, + null, + null, + { "sTitle": 'unit test 2' } + ] + } ); + }, + function () { + var jqNodes = $('#example thead tr:eq(0) th'); + var bReturn = + jqNodes[0].innerHTML == "Rendering engine" && + jqNodes[1].innerHTML == "unit test 1" && + jqNodes[2].innerHTML == "Platform(s)" && + jqNodes[3].innerHTML == "Engine version" && + jqNodes[4].innerHTML == "unit test 2"; + return bReturn; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aoColumns.sWidth.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aoColumns.sWidth.js new file mode 100755 index 0000000..e2777f6 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aoColumns.sWidth.js @@ -0,0 +1,84 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "aoColumns.sWidth" ); + +/* NOTE - we need to disable the auto width for the majority of these test in order to preform + * these tests as the auto width will convert the width to a px value. We can do 'non-exact' tests + * with auto width enabled however to ensure it scales columns as required + */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "bAutoWidth": false, + "aoColumns": [ + null, + { "sWidth": '40%' }, + null, + null, + null + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "With auto width disabled the width for one column is appled", + null, + function () { return $('#example thead th:eq(1)')[0].style.width == "40%"; } + ); + + oTest.fnTest( + "With auto width disabled the width for one column is appled", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "bAutoWidth": false, + "aoColumns": [ + null, + null, + { "sWidth": '20%' }, + { "sWidth": '30%' }, + null + ] + } ); + }, + function () { + var bReturn = + $('#example thead th:eq(2)')[0].style.width == "20%" && + $('#example thead th:eq(3)')[0].style.width == "30%"; + return bReturn; + } + ); + + + oTest.fnTest( + "With auto width, it will make the smallest column the largest with percentage width given", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aoColumns": [ + null, + null, + null, + { "sWidth": '40%' }, + null + ] + } ); + }, + function () { + var anThs = $('#example thead th'); + var a0 = anThs[0].offsetWidth; + var a1 = anThs[1].offsetWidth; + var a2 = anThs[2].offsetWidth; + var a3 = anThs[3].offsetWidth; + var a4 = anThs[4].offsetWidth; + + if ( a3>a0 && a3>a1 && a3>a2 && a3>a4 ) + return true; + else + return false; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aoSearchCols.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aoSearchCols.js new file mode 100755 index 0000000..9a1a3ec --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/aoSearchCols.js @@ -0,0 +1,112 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "aoSearchCols" ); + +/* We could be here forever testing this one, so we test a limited subset on a couple of colums */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable(); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "Default should be to have a empty colums array", + null, + function () { + var bReturn = + oSettings.aoPreSearchCols[0].sSearch == 0 && !oSettings.aoPreSearchCols[0].bRegex && + oSettings.aoPreSearchCols[1].sSearch == 0 && !oSettings.aoPreSearchCols[1].bRegex && + oSettings.aoPreSearchCols[2].sSearch == 0 && !oSettings.aoPreSearchCols[2].bRegex && + oSettings.aoPreSearchCols[3].sSearch == 0 && !oSettings.aoPreSearchCols[3].bRegex && + oSettings.aoPreSearchCols[4].sSearch == 0 && !oSettings.aoPreSearchCols[4].bRegex; + return bReturn; + } + ); + + + oTest.fnTest( + "Search on a single column - no regex statement given", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aoSearchCols": [ + null, + { "sSearch": "Mozilla" }, + null, + { "sSearch": "1" }, + null + ] + } ); + }, + function () { return $('#example_info').html() == "Showing 1 to 9 of 9 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Search on two columns - no regex statement given", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aoSearchCols": [ + null, + { "sSearch": "Mozilla" }, + null, + { "sSearch": "1.5" }, + null + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "1.5"; } + ); + + oTest.fnTest( + "Search on single column - escape regex false", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aoSearchCols": [ + { "sSearch": ".*ML", "bEscapeRegex": false }, + null, + null, + null, + null + ] + } ); + }, + function () { return $('#example_info').html() == "Showing 1 to 3 of 3 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Search on two columns - escape regex false on first, true on second", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aoSearchCols": [ + { "sSearch": ".*ML", "bEscapeRegex": false }, + { "sSearch": "3.3", "bEscapeRegex": true }, + null, + null, + null + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Konqureror 3.3"; } + ); + + oTest.fnTest( + "Search on two columns (no records) - escape regex false on first, true on second", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aoSearchCols": [ + { "sSearch": ".*ML", "bEscapeRegex": false }, + { "sSearch": "Allan", "bEscapeRegex": true }, + null, + null, + null + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; } + ); + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/asStripClasses.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/asStripClasses.js new file mode 100755 index 0000000..906fc78 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/asStripClasses.js @@ -0,0 +1,106 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "asStripeClasses" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable(); + + oTest.fnTest( + "Default row striping is applied", + null, + function () { + return $('#example tbody tr:eq(0)').hasClass('odd') && + $('#example tbody tr:eq(1)').hasClass('even') && + $('#example tbody tr:eq(2)').hasClass('odd') && + $('#example tbody tr:eq(3)').hasClass('even'); + } + ); + + oTest.fnTest( + "Row striping does not effect current classes", + null, + function () { + return $('#example tbody tr:eq(0)').hasClass('gradeA') && + $('#example tbody tr:eq(1)').hasClass('gradeA') && + $('#example tbody tr:eq(2)').hasClass('gradeA') && + $('#example tbody tr:eq(3)').hasClass('gradeA'); + } + ); + + oTest.fnTest( + "Row striping on the second page", + function () { $('#example_next').click(); }, + function () { + return $('#example tbody tr:eq(0)').hasClass('odd') && + $('#example tbody tr:eq(1)').hasClass('even') && + $('#example tbody tr:eq(2)').hasClass('odd') && + $('#example tbody tr:eq(3)').hasClass('even'); + } + ); + + /* No striping */ + oTest.fnTest( + "No row striping", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "asStripeClasses": [] + } ); + }, + function () { + return $('#example tbody tr:eq(0)')[0].className == "gradeA" && + $('#example tbody tr:eq(1)')[0].className == "gradeA" && + $('#example tbody tr:eq(2)')[0].className == "gradeA" && + $('#example tbody tr:eq(3)')[0].className == "gradeA"; + } + ); + + /* Custom striping */ + oTest.fnTest( + "Custom striping [2]", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "asStripeClasses": [ 'test1', 'test2' ] + } ); + }, + function () { + return $('#example tbody tr:eq(0)').hasClass('test1') && + $('#example tbody tr:eq(1)').hasClass('test2') && + $('#example tbody tr:eq(2)').hasClass('test1') && + $('#example tbody tr:eq(3)').hasClass('test2'); + } + ); + + + /* long array of striping */ + oTest.fnTest( + "Custom striping [4]", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "asStripeClasses": [ 'test1', 'test2', 'test3', 'test4' ] + } ); + }, + function () { + return $('#example tbody tr:eq(0)').hasClass('test1') && + $('#example tbody tr:eq(1)').hasClass('test2') && + $('#example tbody tr:eq(2)').hasClass('test3') && + $('#example tbody tr:eq(3)').hasClass('test4'); + } + ); + + oTest.fnTest( + "Custom striping is restarted on second page [2]", + function () { $('#example_next').click(); }, + function () { + return $('#example tbody tr:eq(0)').hasClass('test1') && + $('#example tbody tr:eq(1)').hasClass('test2') && + $('#example tbody tr:eq(2)').hasClass('test3') && + $('#example tbody tr:eq(3)').hasClass('test4'); + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/bAutoWidth.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/bAutoWidth.js new file mode 100755 index 0000000..e88930b --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/bAutoWidth.js @@ -0,0 +1,138 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "bAutoWidth" ); + +/* It's actually a little tricky to test this. We can't test absolute numbers because + * different browsers and different platforms will render the width of the columns slightly + * differently. However, we certainly can test the principle of what should happen (column + * width doesn't change over pages) + */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable(); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "Auto width is enabled by default", + null, + function () { return oSettings.oFeatures.bAutoWidth; } + ); + + oTest.fnTest( + "First column has a width assigned to it", + null, + function () { return $('#example thead th:eq(0)').attr('style').match(/width/i); } + ); + + /* + This would seem like a better test - but there appear to be difficulties with tables + which are bigger (calculated) than there is actually room for. I suspect this is actually + a bug in datatables + oTest.fnTest( + "Check column widths on first page match second page", + null, + function () { + var anThs = $('#example thead th'); + var a0 = anThs[0].offsetWidth; + var a1 = anThs[1].offsetWidth; + var a2 = anThs[2].offsetWidth; + var a3 = anThs[3].offsetWidth; + var a4 = anThs[4].offsetWidth; + $('#example_next').click(); + var b0 = anThs[0].offsetWidth; + var b1 = anThs[1].offsetWidth; + var b2 = anThs[2].offsetWidth; + var b3 = anThs[3].offsetWidth; + var b4 = anThs[4].offsetWidth; + console.log( a0, b0, a1, b1, a2, b2, a3, b3 ); + if ( a0==b0 && a1==b1 && a2==b2 && a3==b3 ) + return true; + else + return false; + } + ); + + oTest.fnTest( + "Check column widths on second page match thid page", + null, + function () { + var anThs = $('#example thead th'); + var a0 = anThs[0].offsetWidth; + var a1 = anThs[1].offsetWidth; + var a2 = anThs[2].offsetWidth; + var a3 = anThs[3].offsetWidth; + var a4 = anThs[4].offsetWidth; + $('#example_next').click(); + var b0 = anThs[0].offsetWidth; + var b1 = anThs[1].offsetWidth; + var b2 = anThs[2].offsetWidth; + var b3 = anThs[3].offsetWidth; + var b4 = anThs[4].offsetWidth; + if ( a0==b0 && a1==b1 && a2==b2 && a3==b3 ) + return true; + else + return false; + } + ); + */ + + /* Check can disable */ + oTest.fnTest( + "Auto width can be disabled", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "bAutoWidth": false + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oFeatures.bAutoWidth == false; } + ); + + oTest.fnTest( + "First column does not have a width assigned to it", + null, + function () { return $('#example thead th:eq(0)').attr('style') == null; } + ); + + /* + oTest.fnTest( + "Check column widths on first page do not match second page", + null, + function () { + var anThs = $('#example thead th'); + var a0 = anThs[0].offsetWidth; + var a1 = anThs[1].offsetWidth; + var a2 = anThs[2].offsetWidth; + var a3 = anThs[3].offsetWidth; + var a4 = anThs[4].offsetWidth; + $('#example_next').click(); + var b0 = anThs[0].offsetWidth; + var b1 = anThs[1].offsetWidth; + var b2 = anThs[2].offsetWidth; + var b3 = anThs[3].offsetWidth; + var b4 = anThs[4].offsetWidth; + if ( a0==b0 && a1==b1 && a2==b2 && a3==b3 ) + return false; + else + return true; + } + ); + */ + + /* Enable makes no difference */ + oTest.fnTest( + "Auto width enabled override", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "bAutoWidth": true + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oFeatures.bAutoWidth; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/bFilter.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/bFilter.js new file mode 100755 index 0000000..f4ec315 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/bFilter.js @@ -0,0 +1,40 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "bFilter" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable(); + + oTest.fnTest( + "Filtering div exists by default", + null, + function () { return document.getElementById('example_filter') != null; } + ); + + /* Check can disable */ + oTest.fnTest( + "Fltering can be disabled", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bFilter": false + } ); + }, + function () { return document.getElementById('example_filter') == null; } + ); + + /* Enable makes no difference */ + oTest.fnTest( + "Filtering enabled override", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bFilter": true + } ); + }, + function () { return document.getElementById('example_filter') != null; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/bInfiniteScroll.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/bInfiniteScroll.js new file mode 100755 index 0000000..ce73892 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/bInfiniteScroll.js @@ -0,0 +1,130 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "bInfiniteScroll" ); + + +$(document).ready( function () { + var oTable = $('#example').dataTable( { + "bScrollInfinite": true, + "sScrollY": "200px" + } ); + + oTest.fnTest( + "10 rows by default", + null, + function () { return $('#example tbody tr').length == 10; } + ); + + oTest.fnTest( + "Info", + null, + function () { return $('#example_info').html() == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Get nodes", + null, + function () { return $('#example tbody>tr').length == 10; } + ); + + oTest.fnWaitTest( + "Scroll on 20px adds 10 rows", + function () { $('div.dataTables_scrollBody').scrollTop(20); }, + function () { return $('#example tbody tr').length == 20; } + ); + + oTest.fnTest( + "Info after 20px scroll", + null, + function () { return $('#example_info').html() == "Showing 1 to 20 of 57 entries"; } + ); + + oTest.fnTest( + "Get nodes after 20px scroll", + null, + function () { return $('#example tbody>tr').length == 20; } + ); + + oTest.fnTest( + "Scroll on 10px more results in the same number of rows", + function () { $('div.dataTables_scrollBody').scrollTop(30); }, + function () { return $('#example tbody tr').length == 20; } + ); + + oTest.fnTest( + "Info after 10 more px scroll", + null, + function () { return $('#example_info').html() == "Showing 1 to 20 of 57 entries"; } + ); + + oTest.fnWaitTest( + "Scroll to 240px adds another 10 rows", + function () { $('div.dataTables_scrollBody').scrollTop(240); }, + function () { return $('#example tbody tr').length == 30; } + ); + + oTest.fnTest( + "Info after 240px scroll", + null, + function () { return $('#example_info').html() == "Showing 1 to 30 of 57 entries"; } + ); + + oTest.fnTest( + "Get nodes after 240px scroll", + null, + function () { return $('#example tbody>tr').length == 30; } + ); + + oTest.fnTest( + "Filtering will drop back to 10 rows", + function () { + $('div.dataTables_scrollBody').scrollTop(0); + oTable.fnFilter('gec') + }, + function () { return $('#example tbody tr').length == 10; } + ); + + oTest.fnTest( + "Info after filtering", + null, + function () { return $('#example_info').html() == "Showing 1 to 10 of 20 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Get nodes after filtering", + null, + function () { return $('#example tbody>tr').length == 10; } + ); + + oTest.fnWaitTest( + "Scroll after filtering adds 10", + function () { $('div.dataTables_scrollBody').scrollTop(20); }, + function () { return $('#example tbody tr').length == 20; } + ); + + oTest.fnTest( + "Get nodes after filtering", + null, + function () { return $('#example tbody>tr').length == 20; } + ); + + oTest.fnTest( + "Sorting will drop back to 10 rows", + function () { oTable.fnSort([[1,'asc']]) }, + function () { return $('#example tbody tr').length == 10; } + ); + + oTest.fnWaitTest( + "Scroll after sorting adds 10", + function () { $('div.dataTables_scrollBody').scrollTop(20); }, + function () { return $('#example tbody tr').length == 20; } + ); + + oTest.fnTest( + "Get nodes after scrolling", + null, + function () { return $('#example tbody>tr').length == 20; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/bInfo.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/bInfo.js new file mode 100755 index 0000000..54d470f --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/bInfo.js @@ -0,0 +1,40 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "bInfo" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable(); + + oTest.fnTest( + "Info div exists by default", + null, + function () { return document.getElementById('example_info') != null; } + ); + + /* Check can disable */ + oTest.fnTest( + "Info can be disabled", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bInfo": false + } ); + }, + function () { return document.getElementById('example_info') == null; } + ); + + /* Enable makes no difference */ + oTest.fnTest( + "Info enabled override", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bInfo": true + } ); + }, + function () { return document.getElementById('example_info') != null; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/bJQueryUI.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/bJQueryUI.js new file mode 100755 index 0000000..6c68546 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/bJQueryUI.js @@ -0,0 +1,40 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "bJQueryUI" ); + +$(document).ready( function () { + $('#example').dataTable( { + "bJQueryUI": true + } ); + + oTest.fnTest( + "Header elements are fully wrapped by DIVs", + null, + function () { + var test = true; + $('#example thead th').each( function () { + if ( this.childNodes > 1 ) { + test = false; + } + } ); + return test; + } + ); + + oTest.fnTest( + "One div for each header element", + null, + function () { + return $('#example thead th div').length == 5; + } + ); + + oTest.fnTest( + "One span for each header element, nested as child of div", + null, + function () { + return $('#example thead th div>span').length == 5; + } + ); + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/bLengthChange.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/bLengthChange.js new file mode 100755 index 0000000..1c8ef40 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/bLengthChange.js @@ -0,0 +1,71 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "bLengthChange" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable(); + + oTest.fnTest( + "Length div exists by default", + null, + function () { return document.getElementById('example_length') != null; } + ); + + oTest.fnTest( + "Four default options", + null, + function () { return $("select[name=example_length] option").length == 4; } + ); + + oTest.fnTest( + "Default options", + null, + function () { + var opts = $("select[name='example_length'] option"); + return opts[0].getAttribute('value') == 10 && opts[1].getAttribute('value') == 25 && + opts[2].getAttribute('value') == 50 && opts[3].getAttribute('value') == 100; + } + ); + + oTest.fnTest( + "Info takes length into account", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 57 entries"; } + ); + + /* Check can disable */ + oTest.fnTest( + "Change length can be disabled", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bLengthChange": false + } ); + }, + function () { return document.getElementById('example_length') == null; } + ); + + oTest.fnTest( + "Information takes length disabled into account", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 57 entries"; } + ); + + /* Enable makes no difference */ + oTest.fnTest( + "Length change enabled override", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bLengthChange": true + } ); + }, + function () { return document.getElementById('example_length') != null; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/bPaginate.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/bPaginate.js new file mode 100755 index 0000000..560114e --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/bPaginate.js @@ -0,0 +1,55 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "bPaginate" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable(); + + oTest.fnTest( + "Pagiantion div exists by default", + null, + function () { return document.getElementById('example_paginate') != null; } + ); + + oTest.fnTest( + "Information div takes paging into account", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 57 entries"; } + ); + + /* Check can disable */ + oTest.fnTest( + "Pagiantion can be disabled", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bPaginate": false + } ); + }, + function () { return document.getElementById('example_paginate') == null; } + ); + + oTest.fnTest( + "Information div takes paging disabled into account", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 57 of 57 entries"; } + ); + + /* Enable makes no difference */ + oTest.fnTest( + "Pagiantion enabled override", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bPaginate": true + } ); + }, + function () { return document.getElementById('example_paginate') != null; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/bProcessing.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/bProcessing.js new file mode 100755 index 0000000..e342a40 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/bProcessing.js @@ -0,0 +1,99 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "bProcessing" ); + +/* It's actually a bit hard to set this one due to the fact that it will only be shown + * when DataTables is doing some kind of processing. The server-side processing is a bit + * better to test this than here - so we just the interal functions to enable it and check + * that it is available + */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable(); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "Processing is off by default", + null, + function () { return oSettings.oFeatures.bProcessing == false; } + ); + + oTest.fnTest( + "Processing div is not in the DOM", + function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); }, + function () { return document.getElementById('example_processing') == null; } + ); + + oTest.fnTest( + "Processing div cannot be shown", + function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); }, + function () { return document.getElementById('example_processing') == null; } + ); + + oTest.fnTest( + "Processing div cannot be hidden", + function () { oTable.oApi._fnProcessingDisplay( oSettings, false ); }, + function () { return document.getElementById('example_processing') == null; } + ); + + + /* Check can disable */ + oTest.fnTest( + "Processing can be enabled", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "bProcessing": true + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oFeatures.bProcessing == true; } + ); + + oTest.fnTest( + "Processing div is in the DOM", + function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); }, + function () { return document.getElementById('example_processing'); } + ); + + oTest.fnTest( + "Processing div is hidden by default", + function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); }, + function () { return document.getElementById('example_processing').style.visibility = "hidden"; } + ); + + oTest.fnTest( + "Processing div can be shown", + function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); }, + function () { return document.getElementById('example_processing').style.visibility = "visible"; } + ); + + oTest.fnTest( + "Processing div can be hidden", + function () { oTable.oApi._fnProcessingDisplay( oSettings, false ); }, + function () { return document.getElementById('example_processing').style.visibility = "hidden"; } + ); + + /* Enable makes no difference */ + oTest.fnTest( + "Processing disabled override", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "bProcessing": false + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oFeatures.bProcessing == false; } + ); + + oTest.fnTest( + "Processing div is not in the DOM", + function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); }, + function () { return document.getElementById('example_processing') == null; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/bServerSide.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/bServerSide.js new file mode 100755 index 0000000..c6aacec --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/bServerSide.js @@ -0,0 +1,18 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "bServerSide" ); + +/* Not interested in server-side processing here other than to check that it is off */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable(); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "Server side is off by default", + null, + function () { return oSettings.oFeatures.bServerSide == false; } + ); + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/bSort.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/bSort.js new file mode 100755 index 0000000..ecaf168 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/bSort.js @@ -0,0 +1,101 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "bSort" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable(); + + oTest.fnTest( + "Sorting is on by default", + null, + function () { return $('#example tbody td:eq(0)').html() == "Gecko"; } + ); + + oTest.fnTest( + "Sorting Asc by default class applied", + null, + function () { return $('#example thead th:eq(0)').hasClass("sorting_asc"); } + ); + + oTest.fnTest( + "Click on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Sorting class removed from first column", + null, + function () { return $('#example thead th:eq(0)').hasClass("sorting_asc") != true; } + ); + + oTest.fnTest( + "Sorting asc class applied to second column", + null, + function () { return $('#example thead th:eq(1)').hasClass("sorting_asc"); } + ); + + oTest.fnTest( + "Reverse on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnTest( + "Sorting acs class removed from second column", + null, + function () { return $('#example thead th:eq(1)').hasClass("sorting_asc") != true; } + ); + + oTest.fnTest( + "Sorting desc class applied to second column", + null, + function () { return $('#example thead th:eq(1)').hasClass("sorting_desc"); } + ); + + /* Check can disable */ + oTest.fnTest( + "Pagiantion can be disabled", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bSort": false + } ); + }, + function () { return $('#example tbody td:eq(3)').html() == "4"; } + ); + + oTest.fnTest( + "Disabled classes applied", + null, + function () { return $('#example thead th:eq(0)').hasClass('sorting_disabled'); } + ); + + oTest.fnTest( + "Click on second column has no effect", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "4"; } + ); + + oTest.fnTest( + "Reverse on second column has no effect", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "4"; } + ); + + /* Enable makes no difference */ + oTest.fnTest( + "Sorting enabled override", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bSort": true + } ); + }, + function () { return $('#example tbody td:eq(0)').html() == "Gecko"; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/bSortCellsTop.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/bSortCellsTop.js new file mode 100755 index 0000000..fc550d5 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/bSortCellsTop.js @@ -0,0 +1,77 @@ +// DATA_TEMPLATE: dom_data_two_headers +oTest.fnStart( "bSortCellsTop" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable(); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "Sorting class is on the bottom cells by default", + null, + function () { return $('#example thead tr:eq(1) th:eq(0)').hasClass('sorting_asc'); } + ); + + oTest.fnTest( + "Sorting is performed on bottom cells", + function () { return $('#example thead tr:eq(1) th:eq(0)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Webkit"; } + ); + + oTest.fnTest( + "Sorting class is updated on the bottom cells", + null, + function () { return $('#example thead tr:eq(1) th:eq(0)').hasClass('sorting_desc'); } + ); + + oTest.fnTest( + "Clicking on top cells has no effect", + function () { return $('#example thead tr:eq(0) th:eq(0)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Webkit"; } + ); + + oTest.fnTest( + "Clicking on another top cell has no effect", + function () { return $('#example thead tr:eq(0) th:eq(3)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Webkit"; } + ); + + + oTest.fnTest( + "Sorting class is on the top cell when bSortCellsTop is true", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bSortCellsTop": true + } ); + }, + function () { return $('#example thead tr:eq(0) th:eq(0)').hasClass('sorting_asc'); } + ); + + oTest.fnTest( + "Sorting is performed on top cells now", + function () { return $('#example thead tr:eq(0) th:eq(0)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Webkit"; } + ); + + oTest.fnTest( + "Sorting class is updated on the top cells", + null, + function () { return $('#example thead tr:eq(0) th:eq(0)').hasClass('sorting_desc'); } + ); + + oTest.fnTest( + "Clicking on bottom cells has no effect", + function () { return $('#example thead tr:eq(1) th:eq(0)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Webkit"; } + ); + + oTest.fnTest( + "Clicking on another bottom cell has no effect", + function () { return $('#example thead tr:eq(1) th:eq(3)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Webkit"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/bSortClasses.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/bSortClasses.js new file mode 100755 index 0000000..97f0c1f --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/bSortClasses.js @@ -0,0 +1,128 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "bSortClasses" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable(); + + oTest.fnTest( + "Sorting classes are applied by default", + null, + function () { return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1'); } + ); + + oTest.fnTest( + "Sorting classes are applied to all required cells", + null, + function () { return $('#example tbody tr:eq(7) td:eq(0)').hasClass('sorting_1'); } + ); + + oTest.fnTest( + "Sorting classes are not applied to non-sorting columns", + null, + function () { return $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_1') == false; } + ); + + oTest.fnTest( + "Sorting multi-column - add column 1", + function () { + oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); }, + function () { + return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') && + $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2'); + } + ); + + oTest.fnTest( + "Sorting multi-column - add column 2", + function () { + oDispacher.click( $('#example thead th:eq(2)')[0], { 'shift': true } ); }, + function () { + return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') && + $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') && + $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3'); + } + ); + + oTest.fnTest( + "Sorting multi-column - add column 3", + function () { + oDispacher.click( $('#example thead th:eq(3)')[0], { 'shift': true } ); + }, + function () { + return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') && + $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') && + $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3') && + $('#example tbody tr:eq(0) td:eq(3)').hasClass('sorting_3'); + } + ); + + oTest.fnTest( + "Remove sorting classes on single column sort", + function () { + $('#example thead th:eq(4)').click(); + }, + function () { + return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false && + $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') == false && + $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3') == false && + $('#example tbody tr:eq(0) td:eq(3)').hasClass('sorting_3') == false; + } + ); + + oTest.fnTest( + "Sorting class 1 was added", + null, + function () { return $('#example tbody tr:eq(1) td:eq(4)').hasClass('sorting_1'); } + ); + + + /* Check can disable */ + oTest.fnTest( + "Sorting classes can be disabled", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bSortClasses": false + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false; } + ); + + oTest.fnTest( + "Sorting classes disabled - add column 1 - no effect", + function () { + oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); }, + function () { + return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false && + $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') == false; + } + ); + + oTest.fnTest( + "Sorting classes disabled - add column 2 - no effect", + function () { + oDispacher.click( $('#example thead th:eq(2)')[0], { 'shift': true } ); }, + function () { + return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false && + $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') == false && + $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3') == false; + } + ); + + + /* Enable makes no difference */ + oTest.fnTest( + "Sorting classes enabled override", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bSortClasses": true + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1'); } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnCookieCallback.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnCookieCallback.js new file mode 100755 index 0000000..31d0393 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnCookieCallback.js @@ -0,0 +1,97 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "Cookie callback" ); + + +$(document).ready( function () { + var mPass; + /* Note that in order to be fully effective here for saving state, there would need to be a + * stringify function to serialise the data array + */ + + oTest.fnTest( + "null by default", + function () { + $('#example').dataTable(); + }, + function () { return $('#example').dataTable().fnSettings().fnCookieCallback == null; } + ); + + oTest.fnTest( + "Number of arguments", + function () { + $('#example').dataTable( { + "bDestroy": true, + "bStateSave": true, + "fnCookieCallback": function (sName, oData, sExpires, sPath) { + mPass = arguments.length; + return sName + "=; expires=" + sExpires +"; path=" + sPath; + } + } ); + }, + function () { return mPass == 4; } + ); + + oTest.fnTest( + "Name", + function () { + $('#example').dataTable( { + "bDestroy": true, + "bStateSave": true, + "fnCookieCallback": function (sName, oData, sExpires, sPath) { + mPass = sName=="SpryMedia_DataTables_example_dom_data.php"; + return sName + "=; expires=" + sExpires +"; path=" + sPath; + } + } ); + }, + function () { return mPass; } + ); + + oTest.fnTest( + "Data", + function () { + $('#example').dataTable( { + "bDestroy": true, + "bStateSave": true, + "fnCookieCallback": function (sName, oData, sExpires, sPath) { + mPass = typeof oData.iStart != 'undefined'; + return sName + "=; expires=" + sExpires +"; path=" + sPath; + } + } ); + }, + function () { return mPass; } + ); + + oTest.fnTest( + "Expires", + function () { + $('#example').dataTable( { + "bDestroy": true, + "bStateSave": true, + "fnCookieCallback": function (sName, oData, sExpires, sPath) { + mPass = typeof sExpires == 'string'; + return sName + "=; expires=" + sExpires +"; path=" + sPath; + } + } ); + }, + function () { return mPass; } + ); + + oTest.fnTest( + "Path", + function () { + $('#example').dataTable( { + "bDestroy": true, + "bStateSave": true, + "fnCookieCallback": function (sName, oData, sExpires, sPath) { + mPass = sPath.match(/media\/unit_testing\/templates/); + return sName + "=; expires=" + sExpires +"; path=" + sPath; + } + } ); + }, + function () { return mPass; } + ); + + + oTest.fnCookieDestroy( $('#example').dataTable() ); + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnCreatedCell.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnCreatedCell.js new file mode 100755 index 0000000..1de4967 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnCreatedCell.js @@ -0,0 +1,151 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "fnCreatedCell tests" ); + +$(document).ready( function () { + var tmp = 0; + + $('#example').dataTable( { + "aoColumnDefs": [ { + fnCreatedCell: function () { + tmp++; + }, + "aTargets": ["_all"] + } ] + } ); + + oTest.fnTest( + "Cell created is called once for each cell on init", + null, + function () { return tmp===285; } + ); + + oTest.fnTest( + "Created isn't called back on other draws", + function () { $('#example th:eq(1)').click(); }, + function () { return tmp===285; } + ); + + oTest.fnTest( + "Four arguments for the function", + function () { + oSession.fnRestore(); + tmp = true; + + $('#example').dataTable( { + "aoColumnDefs": [ { + fnCreatedRow: function () { + if ( arguments.length !== 4 ) { + tmp = false; + } + }, + "aTargets": ["_all"] + } ] + } ); + }, + function () { return tmp; } + ); + + oTest.fnTest( + "First argument is a TD element", + function () { + oSession.fnRestore(); + tmp = true; + + $('#example').dataTable( { + "aoColumnDefs": [ { + fnCreatedRow: function () { + if ( arguments[0].nodeName !== "TD" ) { + tmp = false; + } + }, + "aTargets": ["_all"] + } ] + } ); + }, + function () { return tmp; } + ); + + oTest.fnTest( + "Second argument is the HTML value", + function () { + oSession.fnRestore(); + tmp = true; + + $('#example').dataTable( { + "aoColumnDefs": [ { + fnCreatedRow: function () { + if ( arguments[1] != $('td').html() ) { + tmp = false; + } + }, + "aTargets": ["_all"] + } ] + } ); + }, + function () { return tmp; } + ); + + oTest.fnTest( + "Third argument is the data array", + function () { + oSession.fnRestore(); + tmp = true; + + $('#example').dataTable( { + "aoColumnDefs": [ { + fnCreatedRow: function () { + if ( arguments[2].length !== 5 ) { + tmp = false; + } + }, + "aTargets": ["_all"] + } ] + } ); + }, + function () { return tmp; } + ); + + oTest.fnTest( + "Fourth argument is the data source for the row", + function () { + oSession.fnRestore(); + tmp = true; + + $('#example').dataTable( { + "aoColumnDefs": [ { + fnCreatedRow: function () { + if ( arguments[2] !== this.fnSettings().aoData[ arguments[2] ]._aData ) { + tmp = false; + } + }, + "aTargets": ["_all"] + } ] + } ); + }, + function () { return tmp; } + ); + + oTest.fnTest( + "Fifth argument is the the col index", + function () { + oSession.fnRestore(); + tmp = true; + + $('#example').dataTable( { + "aoColumnDefs": [ { + fnCreatedRow: function () { + if ( arguments[1] != $('td:eq('+arguments[4]+')', arguments[0].parentNode).html() ) { + tmp = false; + } + }, + "aTargets": ["_all"] + } ] + } ); + }, + function () { return tmp; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnCreatedRow.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnCreatedRow.js new file mode 100755 index 0000000..e408f70 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnCreatedRow.js @@ -0,0 +1,115 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "fnCreatedRow tests" ); + +$(document).ready( function () { + var tmp = 0; + + $('#example').dataTable( { + fnCreatedRow: function () { + tmp++; + } + } ); + + oTest.fnTest( + "Row created is called once for each row on init", + null, + function () { return tmp===57; } + ); + + oTest.fnTest( + "Created isn't called back on other draws", + function () { $('#example th:eq(1)').click(); }, + function () { return tmp===57; } + ); + + oTest.fnTest( + "Three arguments for the function", + function () { + oSession.fnRestore(); + tmp = true; + + $('#example').dataTable( { + fnCreatedRow: function () { + if ( arguments.length !== 3 ) { + tmp = false; + } + } + } ); + }, + function () { return tmp; } + ); + + oTest.fnTest( + "First argument is a TR element", + function () { + oSession.fnRestore(); + tmp = true; + + $('#example').dataTable( { + fnCreatedRow: function () { + if ( arguments[0].nodeName !== "TR" ) { + tmp = false; + } + } + } ); + }, + function () { return tmp; } + ); + + oTest.fnTest( + "Second argument is an array with 5 elements", + function () { + oSession.fnRestore(); + tmp = true; + + $('#example').dataTable( { + fnCreatedRow: function () { + if ( arguments[1].length !== 5 ) { + tmp = false; + } + } + } ); + }, + function () { return tmp; } + ); + + oTest.fnTest( + "Third argument is the data source for the row", + function () { + oSession.fnRestore(); + tmp = true; + + $('#example').dataTable( { + fnCreatedRow: function () { + if ( arguments[1] !== this.fnSettings().aoData[ arguments[2] ]._aData ) { + tmp = false; + } + } + } ); + }, + function () { return tmp; } + ); + + oTest.fnTest( + "TR element is tied to the correct data", + function () { + oSession.fnRestore(); + tmp = false; + + $('#example').dataTable( { + fnCreatedRow: function (tr, data, index) { + if ( data[1] === "Firefox 1.0" ) { + if ( $('td:eq(3)', tr).html() == "1.7" ) { + tmp = true; + } + } + } + } ); + }, + function () { return tmp; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnDeleteRow.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnDeleteRow.js new file mode 100755 index 0000000..29a0b3f --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnDeleteRow.js @@ -0,0 +1,30 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "fnDeleteRow" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable(); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "Check that the default data is sane", + null, + function () { return oSettings.asDataSearch.join(' ').match(/4.0/g).length == 3; } + ); + + oTest.fnTest( + "Remove the first data row, and check that hte search data has been updated", + function () { oTable.fnDeleteRow( 0 ); }, + function () { return oSettings.asDataSearch.join(' ').match(/4.0/g).length == 2; } + ); + + oTest.fnTest( + "Check that the info element has been updated", + null, + function () { return $('#example_info').html() == "Showing 1 to 10 of 56 entries"; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnDrawCallback.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnDrawCallback.js new file mode 100755 index 0000000..ffa5f81 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnDrawCallback.js @@ -0,0 +1,80 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "fnDrawCallback" ); + +/* Fairly boring function compared to the others! */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable(); + var oSettings = oTable.fnSettings(); + var mPass; + + oTest.fnTest( + "Default should be null", + null, + function () { return oSettings.fnDrawCallback == null; } + ); + + + oTest.fnTest( + "One argument passed", + function () { + oSession.fnRestore(); + + mPass = -1; + $('#example').dataTable( { + "fnDrawCallback": function ( ) { + mPass = arguments.length; + } + } ); + }, + function () { return mPass == 1; } + ); + + + oTest.fnTest( + "That one argument is the settings object", + function () { + oSession.fnRestore(); + + oTable = $('#example').dataTable( { + "fnDrawCallback": function ( oSettings ) { + mPass = oSettings; + } + } ); + }, + function () { return oTable.fnSettings() == mPass; } + ); + + + oTest.fnTest( + "fnRowCallback called once on first draw", + function () { + oSession.fnRestore(); + + mPass = 0; + $('#example').dataTable( { + "fnDrawCallback": function ( ) { + mPass++; + } + } ); + }, + function () { return mPass == 1; } + ); + + oTest.fnTest( + "fnRowCallback called once on each draw there after as well", + function () { + $('#example_next').click(); + $('#example_next').click(); + $('#example_next').click(); + }, + function () { return mPass == 4; } + ); + + + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnFilter.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnFilter.js new file mode 100755 index 0000000..1e18b22 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnFilter.js @@ -0,0 +1,16 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "fnFilter" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable(); + oTable.fnFilter(1); + + oTest.fnTest( + "Filtering with a non-string input is valid", + null, + function () { return $('#example_info').html() == "Showing 1 to 10 of 32 entries (filtered from 57 total entries)"; } + ); + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnFooterCallback.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnFooterCallback.js new file mode 100755 index 0000000..a02f8de --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnFooterCallback.js @@ -0,0 +1,227 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "fnFooterCallback" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable(); + var oSettings = oTable.fnSettings(); + var mPass; + + oTest.fnTest( + "Default should be null", + null, + function () { return oSettings.fnFooterCallback == null; } + ); + + + oTest.fnTest( + "Five arguments passed", + function () { + oSession.fnRestore(); + + mPass = -1; + $('#example').dataTable( { + "fnFooterCallback": function ( ) { + mPass = arguments.length; + } + } ); + }, + function () { return mPass == 5; } + ); + + + oTest.fnTest( + "fnRowCallback called once per draw", + function () { + oSession.fnRestore(); + + mPass = 0; + $('#example').dataTable( { + "fnFooterCallback": function ( nFoot, aasData, iStart, iEnd, aiDisplay ) { + mPass++; + } + } ); + }, + function () { return mPass == 1; } + ); + + oTest.fnTest( + "fnRowCallback called on paging (i.e. another draw)", + function () { $('#example_next').click(); }, + function () { return mPass == 2; } + ); + + + oTest.fnTest( + "fnRowCallback allows us to alter row information", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "fnFooterCallback": function ( nFoot, aasData, iStart, iEnd, aiDisplay ) { + nFoot.getElementsByTagName('th')[0].innerHTML = "Displaying "+(iEnd-iStart)+" records"; + } + } ); + }, + function () { return $('#example tfoot th:eq(0)').html() == "Displaying 10 records"; } + ); + + + oTest.fnTest( + "Data array has length matching original data", + function () { + oSession.fnRestore(); + + mPass = true; + $('#example').dataTable( { + "fnFooterCallback": function ( nFoot, aasData, iStart, iEnd, aiDisplay ) { + if ( aasData.length != 57 ) + { + mPass = false; + } + } + } ); + }, + function () { return mPass; } + ); + + oTest.fnTest( + "Data array's column lengths match original data", + function () { + oSession.fnRestore(); + + mPass = true; + $('#example').dataTable( { + "fnFooterCallback": function ( nFoot, aasData, iStart, iEnd, aiDisplay ) { + for ( var i=0, iLen=aasData.length ; i<iLen ; i++ ) + { + if ( aasData[i].length != 5 ) + { + mPass = false; + } + } + } + } ); + }, + function () { return mPass; } + ); + + + oTest.fnTest( + "iStart correct on first page", + function () { + oSession.fnRestore(); + + mPass = true; + $('#example').dataTable( { + "fnFooterCallback": function ( nFoot, aasData, iStart, iEnd, aiDisplay ) { + if ( iStart != 0 ) + { + mPass = false; + } + } + } ); + }, + function () { return mPass; } + ); + + + oTest.fnTest( + "iStart correct on second page", + function () { + oSession.fnRestore(); + + mPass = false; + $('#example').dataTable( { + "fnFooterCallback": function ( nFoot, aasData, iStart, iEnd, aiDisplay ) { + if ( iStart == 10 ) + { + mPass = true; + } + } + } ); + $('#example_next').click(); + }, + function () { return mPass; } + ); + + + oTest.fnTest( + "iEnd correct on first page", + function () { + oSession.fnRestore(); + + mPass = true; + $('#example').dataTable( { + "fnFooterCallback": function ( nFoot, aasData, iStart, iEnd, aiDisplay ) { + if ( iEnd != 10 ) + { + mPass = false; + } + } + } ); + }, + function () { return mPass; } + ); + + + oTest.fnTest( + "iEnd correct on second page", + function () { + oSession.fnRestore(); + + mPass = false; + $('#example').dataTable( { + "fnFooterCallback": function ( nFoot, aasData, iStart, iEnd, aiDisplay ) { + if ( iEnd == 20 ) + { + mPass = true; + } + } + } ); + $('#example_next').click(); + }, + function () { return mPass; } + ); + + + oTest.fnTest( + "aiDisplay length is full data when not filtered", + function () { + oSession.fnRestore(); + + mPass = false; + $('#example').dataTable( { + "fnFooterCallback": function ( nFoot, aasData, iStart, iEnd, aiDisplay ) { + if ( aiDisplay.length == 57 ) + { + mPass = true; + } + } + } ); + }, + function () { return mPass; } + ); + + oTest.fnTest( + "aiDisplay length is 9 when filtering on 'Mozilla'", + function () { + oSession.fnRestore(); + + mPass = false; + oTable = $('#example').dataTable( { + "fnFooterCallback": function ( nFoot, aasData, iStart, iEnd, aiDisplay ) { + if ( aiDisplay.length == 9 ) + { + mPass = true; + } + } + } ); + oTable.fnFilter( "Mozilla" ); + }, + function () { return mPass; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnHeaderCallback.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnHeaderCallback.js new file mode 100755 index 0000000..0acc487 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnHeaderCallback.js @@ -0,0 +1,227 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "fnHeaderCallback" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable(); + var oSettings = oTable.fnSettings(); + var mPass; + + oTest.fnTest( + "Default should be null", + null, + function () { return oSettings.fnHeaderCallback == null; } + ); + + + oTest.fnTest( + "Five arguments passed", + function () { + oSession.fnRestore(); + + mPass = -1; + $('#example').dataTable( { + "fnHeaderCallback": function ( ) { + mPass = arguments.length; + } + } ); + }, + function () { return mPass == 5; } + ); + + + oTest.fnTest( + "fnRowCallback called once per draw", + function () { + oSession.fnRestore(); + + mPass = 0; + $('#example').dataTable( { + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + mPass++; + } + } ); + }, + function () { return mPass == 1; } + ); + + oTest.fnTest( + "fnRowCallback called on paging (i.e. another draw)", + function () { $('#example_next').click(); }, + function () { return mPass == 2; } + ); + + + oTest.fnTest( + "fnRowCallback allows us to alter row information", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + nHead.getElementsByTagName('th')[0].innerHTML = "Displaying "+(iEnd-iStart)+" records"; + } + } ); + }, + function () { return $('#example thead th:eq(0)').html() == "Displaying 10 records"; } + ); + + + oTest.fnTest( + "Data array has length matching original data", + function () { + oSession.fnRestore(); + + mPass = true; + $('#example').dataTable( { + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + if ( aasData.length != 57 ) + { + mPass = false; + } + } + } ); + }, + function () { return mPass; } + ); + + oTest.fnTest( + "Data array's column lengths match original data", + function () { + oSession.fnRestore(); + + mPass = true; + $('#example').dataTable( { + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + for ( var i=0, iLen=aasData.length ; i<iLen ; i++ ) + { + if ( aasData[i].length != 5 ) + { + mPass = false; + } + } + } + } ); + }, + function () { return mPass; } + ); + + + oTest.fnTest( + "iStart correct on first page", + function () { + oSession.fnRestore(); + + mPass = true; + $('#example').dataTable( { + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + if ( iStart != 0 ) + { + mPass = false; + } + } + } ); + }, + function () { return mPass; } + ); + + + oTest.fnTest( + "iStart correct on second page", + function () { + oSession.fnRestore(); + + mPass = false; + $('#example').dataTable( { + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + if ( iStart == 10 ) + { + mPass = true; + } + } + } ); + $('#example_next').click(); + }, + function () { return mPass; } + ); + + + oTest.fnTest( + "iEnd correct on first page", + function () { + oSession.fnRestore(); + + mPass = true; + $('#example').dataTable( { + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + if ( iEnd != 10 ) + { + mPass = false; + } + } + } ); + }, + function () { return mPass; } + ); + + + oTest.fnTest( + "iEnd correct on second page", + function () { + oSession.fnRestore(); + + mPass = false; + $('#example').dataTable( { + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + if ( iEnd == 20 ) + { + mPass = true; + } + } + } ); + $('#example_next').click(); + }, + function () { return mPass; } + ); + + + oTest.fnTest( + "aiDisplay length is full data when not filtered", + function () { + oSession.fnRestore(); + + mPass = false; + $('#example').dataTable( { + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + if ( aiDisplay.length == 57 ) + { + mPass = true; + } + } + } ); + }, + function () { return mPass; } + ); + + oTest.fnTest( + "aiDisplay length is 9 when filtering on 'Mozilla'", + function () { + oSession.fnRestore(); + + mPass = false; + oTable = $('#example').dataTable( { + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + if ( aiDisplay.length == 9 ) + { + mPass = true; + } + } + } ); + oTable.fnFilter( "Mozilla" ); + }, + function () { return mPass; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnInfoCallback.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnInfoCallback.js new file mode 100755 index 0000000..b4501d5 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnInfoCallback.js @@ -0,0 +1,115 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "fnInfoCallback checks" ); + +$(document).ready( function () { + var mPass; + + $('#example').dataTable(); + + /* Basic checks */ + oTest.fnTest( + "null by default", + null, + function () { return $('#example').dataTable().fnSettings().oLanguage.fnInfoCallback == null; } + ); + + oTest.fnTest( + "Agrument length", + function () { + $('#example').dataTable( { + "bDestroy": true, + "fnInfoCallback": function( oS, iStart, iEnd, iMax, iTotal, sPre ) { + mPass = arguments.length; + return sPre; + } + } ); + }, + function () { return mPass == 6; } + ); + + oTest.fnTest( + "Settings first", + function () { + $('#example').dataTable( { + "bDestroy": true, + "fnInfoCallback": function( oS, iStart, iEnd, iMax, iTotal, sPre ) { + mPass = (oS == $('#example').dataTable().fnSettings()) ? true : false; + return sPre; + } + } ); + }, + function () { return mPass; } + ); + + oTest.fnTest( + "Start arg", + function () { + $('#example').dataTable( { + "bDestroy": true, + "fnInfoCallback": function( oS, iStart, iEnd, iMax, iTotal, sPre ) { + return iStart; + } + } ); + }, + function () { return $('#example_info').html() == "1"; } + ); + + oTest.fnTest( + "End arg", + function () { + $('#example').dataTable( { + "bDestroy": true, + "fnInfoCallback": function( oS, iStart, iEnd, iMax, iTotal, sPre ) { + return iEnd; + } + } ); + }, + function () { return $('#example_info').html() == "10"; } + ); + + oTest.fnTest( + "Max arg", + function () { + $('#example').dataTable( { + "bDestroy": true, + "fnInfoCallback": function( oS, iStart, iEnd, iMax, iTotal, sPre ) { + return iMax; + } + } ); + }, + function () { return $('#example_info').html() == "57"; } + ); + + oTest.fnTest( + "Max arg - filter", + function () { + $('#example').dataTable().fnFilter("1.0"); + }, + function () { return $('#example_info').html() == "57"; } + ); + + oTest.fnTest( + "Total arg", + function () { + $('#example').dataTable( { + "bDestroy": true, + "fnInfoCallback": function( oS, iStart, iEnd, iMax, iTotal, sPre ) { + return iTotal; + } + } ); + }, + function () { return $('#example_info').html() == "57"; } + ); + + oTest.fnTest( + "Total arg - filter", + function () { + $('#example').dataTable().fnFilter("1.0"); + }, + function () { return $('#example_info').html() == "3"; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnInitComplete.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnInitComplete.js new file mode 100755 index 0000000..1659d12 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnInitComplete.js @@ -0,0 +1,94 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "fnInitComplete" ); + +/* Fairly boring function compared to the others! */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable(); + var oSettings = oTable.fnSettings(); + var mPass; + + oTest.fnTest( + "Default should be null", + null, + function () { return oSettings.fnInitComplete == null; } + ); + + + oTest.fnTest( + "Two arguments passed", + function () { + oSession.fnRestore(); + + mPass = -1; + $('#example').dataTable( { + "fnInitComplete": function ( ) { + mPass = arguments.length===2 && arguments[1]===undefined; + } + } ); + }, + function () { return mPass; } + ); + + + oTest.fnTest( + "That one argument is the settings object", + function () { + oSession.fnRestore(); + + oTable = $('#example').dataTable( { + "fnInitComplete": function ( oSettings ) { + mPass = oSettings; + } + } ); + }, + function () { return oTable.fnSettings() == mPass; } + ); + + + oTest.fnTest( + "fnInitComplete called once on first draw", + function () { + oSession.fnRestore(); + + mPass = 0; + $('#example').dataTable( { + "fnInitComplete": function ( ) { + mPass++; + } + } ); + }, + function () { return mPass == 1; } + ); + + oTest.fnTest( + "fnInitComplete never called there after", + function () { + $('#example_next').click(); + $('#example_next').click(); + $('#example_next').click(); + }, + function () { return mPass == 1; } + ); + + + oTest.fnWaitTest( + "10 rows in the table on complete", + function () { + oSession.fnRestore(); + + mPass = 0; + $('#example').dataTable( { + "fnInitComplete": function ( ) { + mPass = $('#example tbody tr').length; + } + } ); + }, + function () { return mPass == 10; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnRowCallback.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnRowCallback.js new file mode 100755 index 0000000..df4e72f --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnRowCallback.js @@ -0,0 +1,105 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "fnRowCallback" ); + +/* Note - fnRowCallback MUST return the first arguments (modified or not) */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable(); + var oSettings = oTable.fnSettings(); + var mPass; + + oTest.fnTest( + "Default should be null", + null, + function () { return oSettings.fnRowCallback == null; } + ); + + + oTest.fnTest( + "Four arguments passed", + function () { + oSession.fnRestore(); + + mPass = -1; + $('#example').dataTable( { + "fnRowCallback": function ( nTr ) { + mPass = arguments.length; + return nTr; + } + } ); + }, + function () { return mPass == 4; } + ); + + + oTest.fnTest( + "fnRowCallback called once for each drawn row", + function () { + oSession.fnRestore(); + + mPass = 0; + $('#example').dataTable( { + "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) { + mPass++; + return nTr; + } + } ); + }, + function () { return mPass == 10; } + ); + + oTest.fnTest( + "fnRowCallback allows us to alter row information", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) { + $(nTr).addClass('unit_test'); + return nTr; + } + } ); + }, + function () { return $('#example tbody tr:eq(1)').hasClass('unit_test'); } + ); + + oTest.fnTest( + "Data array has length matching columns", + function () { + oSession.fnRestore(); + + mPass = true; + $('#example').dataTable( { + "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) { + if ( asData.length != 5 ) + mPass = false; + return nTr; + } + } ); + }, + function () { return mPass; } + ); + + oTest.fnTest( + "Data array has length matching columns", + function () { + oSession.fnRestore(); + + mPass = true; + var iCount = 0; + $('#example').dataTable( { + "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) { + if ( iCount != iDrawIndex ) + mPass = false; + iCount++; + return nTr; + } + } ); + }, + function () { return mPass; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnSetColumnVis.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnSetColumnVis.js new file mode 100755 index 0000000..41d85e7 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnSetColumnVis.js @@ -0,0 +1,120 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "fnSetColumnVis" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable(); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "All columns are visible by default", + null, + function () { return $('#example tbody tr:eq(0) td').length == 5; } + ); + + oTest.fnTest( + "Can hide one column and it removes td column from DOM", + function () { + oSession.fnRestore(); + $('#example').dataTable(); + $('#example').dataTable().fnSetColumnVis( 1, false ); + }, + function () { return $('#example tbody tr:eq(0) td').length == 4; } + ); + + oTest.fnTest( + "Can hide one column and it removes thead th column from DOM", + null, + function () { return $('#example thead tr:eq(0) th').length == 4; } + ); + + oTest.fnTest( + "Can hide one column and it removes tfoot th column from DOM", + null, + function () { return $('#example tfoot tr:eq(0) th').length == 4; } + ); + + oTest.fnTest( + "The correct thead column has been hidden", + null, + function () { + var jqNodes = $('#example thead tr:eq(0) th'); + var bReturn = + jqNodes[0].innerHTML == "Rendering engine" && + jqNodes[1].innerHTML == "Platform(s)" && + jqNodes[2].innerHTML == "Engine version" && + jqNodes[3].innerHTML == "CSS grade"; + return bReturn; + } + ); + + oTest.fnTest( + "The correct tbody column has been hidden", + function () { + oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); + }, + function () { + var jqNodes = $('#example tbody tr:eq(0) td'); + var bReturn = + jqNodes[0].innerHTML == "Gecko" && + jqNodes[1].innerHTML == "Gnome" && + jqNodes[2].innerHTML == "1.8" && + jqNodes[3].innerHTML == "A"; + return bReturn; + } + ); + + + oTest.fnTest( + "Can hide multiple columns and it removes td column from DOM", + function () { + oSession.fnRestore(); + $('#example').dataTable(); + $('#example').dataTable().fnSetColumnVis( 1, false ); + $('#example').dataTable().fnSetColumnVis( 2, false ); + $('#example').dataTable().fnSetColumnVis( 4, false ); + }, + function () { return $('#example tbody tr:eq(0) td').length == 2; } + ); + + oTest.fnTest( + "Multiple hide - removes thead th column from DOM", + null, + function () { return $('#example thead tr:eq(0) th').length == 2; } + ); + + oTest.fnTest( + "Multiple hide - removes tfoot th column from DOM", + null, + function () { return $('#example tfoot tr:eq(0) th').length == 2; } + ); + + oTest.fnTest( + "Multiple hide - the correct thead columns have been hidden", + null, + function () { + var jqNodes = $('#example thead tr:eq(0) th'); + var bReturn = + jqNodes[0].innerHTML == "Rendering engine" && + jqNodes[1].innerHTML == "Engine version" + return bReturn; + } + ); + + oTest.fnTest( + "Multiple hide - the correct tbody columns have been hidden", + function () { + oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); + }, + function () { + var jqNodes = $('#example tbody tr:eq(0) td'); + var bReturn = + jqNodes[0].innerHTML == "Gecko" && + jqNodes[1].innerHTML == "1" + return bReturn; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnSetColumnVis2.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnSetColumnVis2.js new file mode 100755 index 0000000..722fe11 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/fnSetColumnVis2.js @@ -0,0 +1,236 @@ +// DATA_TEMPLATE: complex_header_2 +oTest.fnStart( "fnSetColumnVis with complex headers" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable(); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "All columns are visible by default", + null, + function () { return $('#example tbody tr:eq(0) td').length == 5; } + ); + + oTest.fnTest( + "Hide the first column", + function () { + $('#example').dataTable().fnSetColumnVis( 0, false ); + }, + function () { return $('#example tbody tr:eq(0) td').length == 4; } + ); + + oTest.fnTest( + "First cell is '2' - first column hidden", + null, + function () { return $('#example thead tr:eq(0) th:eq(0)').html() == "2"; } + ); + + oTest.fnTest( + "First cell has colspan of 3", + null, + function () { return $('#example thead tr:eq(0) th:eq(0)')[0].getAttribute('colspan') == 3; } + ); + + oTest.fnTest( + "First cell has rowspan of 2", + null, + function () { return $('#example thead tr:eq(0) th:eq(0)')[0].getAttribute('rowspan') == 2; } + ); + + oTest.fnTest( + "First cell in last column is '11'", + null, + function () { return $('#example thead tr:eq(4) th:eq(0)').html() == 11; } + ); + + oTest.fnTest( + "First cell in last column has been truncated to one column", + null, + function () { return $('#example thead tr:eq(4) th:eq(0)')[0].getAttribute('colspan') == 1; } + ); + + + oTest.fnTest( + "Hide the second column", + function () { + $('#example').dataTable().fnSetColumnVis( 0, true ); + $('#example').dataTable().fnSetColumnVis( 1, false ); + }, + function () { return $('#example tbody tr:eq(0) td').length == 4; } + ); + + oTest.fnTest( + "First cell is '1' - second column hidden", + null, + function () { return $('#example thead tr:eq(0) th:eq(0)').html() == "1"; } + ); + + oTest.fnTest( + "Second cell is '2' - second column hidden", + null, + function () { return $('#example thead tr:eq(0) th:eq(1)').html() == "2"; } + ); + + oTest.fnTest( + "First cell in fourth row is '10' (visibly the first) - second column hidden", + null, + function () { return $('#example thead tr:eq(3) th:eq(0)').html() == "10"; } + ); + + oTest.fnTest( + "First cell has colspan of 1", + null, + function () { return $('#example thead tr:eq(0) th:eq(0)')[0].getAttribute('colspan') == 1; } + ); + + oTest.fnTest( + "Second cell has colspan of 2", + null, + function () { return $('#example thead tr:eq(0) th:eq(1)')[0].getAttribute('colspan') == 2; } + ); + + oTest.fnTest( + "First cell has rowspan of 1", + null, + function () { return $('#example thead tr:eq(0) th:eq(0)')[0].getAttribute('rowspan') == 1; } + ); + + oTest.fnTest( + "Second cell has rowspan of 2", + null, + function () { return $('#example thead tr:eq(0) th:eq(1)')[0].getAttribute('rowspan') == 2; } + ); + + oTest.fnTest( + "First cell in last column is '11'", + null, + function () { return $('#example thead tr:eq(4) th:eq(0)').html() == 11; } + ); + + oTest.fnTest( + "First cell in last column has been truncated to one column", + null, + function () { return $('#example thead tr:eq(4) th:eq(0)')[0].getAttribute('colspan') == 1; } + ); + + + oTest.fnTest( + "Hide the first two columns", + function () { + $('#example').dataTable().fnSetColumnVis( 0, false ); + $('#example').dataTable().fnSetColumnVis( 1, false ); + }, + function () { return $('#example tbody tr:eq(0) td').length == 3; } + ); + + oTest.fnTest( + "First cell is '2' - first two columns hidden", + null, + function () { return $('#example thead tr:eq(0) th:eq(0)').html() == "2"; } + ); + + oTest.fnTest( + "Second cell is '3' - first two columns hidden", + null, + function () { return $('#example thead tr:eq(0) th:eq(1)').html() == "3"; } + ); + + oTest.fnTest( + "First cell in third row is '6' - first two columns hidden", + null, + function () { return $('#example thead tr:eq(2) th:eq(0)').html() == "6"; } + ); + + oTest.fnTest( + "First cell has colspan of 2", + null, + function () { return $('#example thead tr:eq(0) th:eq(0)')[0].getAttribute('colspan') == 2; } + ); + + oTest.fnTest( + "First cell has rowspan of 2", + null, + function () { return $('#example thead tr:eq(0) th:eq(0)')[0].getAttribute('rowspan') == 2; } + ); + + oTest.fnTest( + "Second cell has rowspan of 1", + null, + function () { return $('#example thead tr:eq(0) th:eq(1)')[0].getAttribute('rowspan') == 1; } + ); + + oTest.fnTest( + "First cell in last column is '12'", + null, + function () { return $('#example thead tr:eq(4) th:eq(0)').html() == 12; } + ); + + + oTest.fnTest( + "Hide the third column", + function () { + $('#example').dataTable().fnSetColumnVis( 0, true ); + $('#example').dataTable().fnSetColumnVis( 1, true ); + $('#example').dataTable().fnSetColumnVis( 2, false ); + }, + function () { return $('#example tbody tr:eq(0) td').length == 4; } + ); + + oTest.fnTest( + "First cell is '1' - third column hidden", + null, + function () { return $('#example thead tr:eq(0) th:eq(0)').html() == "1"; } + ); + + oTest.fnTest( + "Second cell is '2' - third column hidden", + null, + function () { return $('#example thead tr:eq(0) th:eq(1)').html() == "2"; } + ); + + oTest.fnTest( + "First cell (visible second) in third row is '6' - third column hidden", + null, + function () { return $('#example thead tr:eq(2) th:eq(0)').html() == "6"; } + ); + + oTest.fnTest( + "Second cell has colspan of 2", + null, + function () { return $('#example thead tr:eq(0) th:eq(1)')[0].getAttribute('colspan') == 2; } + ); + + oTest.fnTest( + "Second cell has rowspan of 2", + null, + function () { return $('#example thead tr:eq(0) th:eq(1)')[0].getAttribute('rowspan') == 2; } + ); + + oTest.fnTest( + "Third row first cell (second visible) colspan is 1", + null, + function () { return $('#example thead tr:eq(2) th:eq(0)')[0].getAttribute('colspan') == 1; } + ); + + oTest.fnTest( + "Third row second cell (third visible) value is 7", + null, + function () { return $('#example thead tr:eq(2) th:eq(1)').html() == "7"; } + ); + + oTest.fnTest( + "Third row second cell (third visible) colspan is 1", + null, + function () { return $('#example thead tr:eq(2) th:eq(1)')[0].getAttribute('colspan') == 1; } + ); + + oTest.fnTest( + "Third row second cell (third visible) rowspan is 3", + null, + function () { return $('#example thead tr:eq(2) th:eq(1)')[0].getAttribute('rowspan') == 3; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/html-autodetect-sort.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/html-autodetect-sort.js new file mode 100755 index 0000000..c0f4ec5 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/html-autodetect-sort.js @@ -0,0 +1,57 @@ +// DATA_TEMPLATE: html_table +oTest.fnStart( "HTML auto detect" ); + +$(document).ready( function () { + var oTable = $('#example').dataTable(); + + oTest.fnTest( + "Initial sort", + null, + function () { + var ret = + $('#example tbody tr:eq(0) td:eq(0)').html() == '1' && + $('#example tbody tr:eq(1) td:eq(0)').html() == '2' && + $('#example tbody tr:eq(2) td:eq(0)').html() == '3'; + return ret; + } + ); + + oTest.fnTest( + "HTML sort", + function () { $('#example thead th:eq(1)').click() }, + function () { + var ret = + $('#example tbody tr:eq(0) td:eq(0)').html() == '2' && + $('#example tbody tr:eq(1) td:eq(0)').html() == '1' && + $('#example tbody tr:eq(2) td:eq(0)').html() == '4'; + return ret; + } + ); + + oTest.fnTest( + "HTML reverse sort", + function () { $('#example thead th:eq(1)').click() }, + function () { + var ret = + $('#example tbody tr:eq(0) td:eq(0)').html() == '3' && + $('#example tbody tr:eq(1) td:eq(0)').html() == '4' && + $('#example tbody tr:eq(2) td:eq(0)').html() == '1'; + return ret; + } + ); + + oTest.fnTest( + "Numeric sort", + function () { $('#example thead th:eq(0)').click() }, + function () { + var ret = + $('#example tbody tr:eq(0) td:eq(0)').html() == '1' && + $('#example tbody tr:eq(1) td:eq(0)').html() == '2' && + $('#example tbody tr:eq(2) td:eq(0)').html() == '3'; + return ret; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/iDisplayLength.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/iDisplayLength.js new file mode 100755 index 0000000..8d4b5ae --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/iDisplayLength.js @@ -0,0 +1,76 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "iDisplayLength" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable(); + + oTest.fnTest( + "Default length is ten", + null, + function () { return $('#example tbody tr').length == 10; } + ); + + oTest.fnTest( + "Select menu shows 10", + null, + function () { return $('#example_length select').val() == 10; } + ); + + + oTest.fnTest( + "Set initial length to 25", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "iDisplayLength": 25 + } ); + }, + function () { return $('#example tbody tr').length == 25; } + ); + + oTest.fnTest( + "Select menu shows 25", + null, + function () { return $('#example_length select').val() == 25; } + ); + + + oTest.fnTest( + "Set initial length to 100", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "iDisplayLength": 100 + } ); + }, + function () { return $('#example tbody tr').length == 57; } + ); + + oTest.fnTest( + "Select menu shows 25", + null, + function () { return $('#example_length select').val() == 100; } + ); + + + oTest.fnTest( + "Set initial length to 23 (unknown select menu length)", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "iDisplayLength": 23 + } ); + }, + function () { return $('#example tbody tr').length == 23; } + ); + + oTest.fnTest( + "Select menu shows 10 (since 23 is unknow)", + null, + function () { return $('#example_length select').val() == 10; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/oLanguage.oPaginate.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/oLanguage.oPaginate.js new file mode 100755 index 0000000..e840348 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/oLanguage.oPaginate.js @@ -0,0 +1,80 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "oLanguage.oPaginate" ); + +/* Note that the paging language information only has relevence in full numbers */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { "sPaginationType": "full_numbers" } ); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "oLanguage.oPaginate defaults", + null, + function () { + var bReturn = + oSettings.oLanguage.oPaginate.sFirst == "First" && + oSettings.oLanguage.oPaginate.sPrevious == "Previous" && + oSettings.oLanguage.oPaginate.sNext == "Next" && + oSettings.oLanguage.oPaginate.sLast == "Last"; + return bReturn; + } + ); + + oTest.fnTest( + "oLanguage.oPaginate defaults are in the DOM", + null, + function () { + var bReturn = + $('#example_paginate .first').html() == "First" && + $('#example_paginate .previous').html() == "Previous" && + $('#example_paginate .next').html() == "Next" && + $('#example_paginate .last').html() == "Last"; + return bReturn; + } + ); + + + oTest.fnTest( + "oLanguage.oPaginate can be defined", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sPaginationType": "full_numbers", + "oLanguage": { + "oPaginate": { + "sFirst": "unit1", + "sPrevious": "test2", + "sNext": "unit3", + "sLast": "test4" + } + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { + var bReturn = + oSettings.oLanguage.oPaginate.sFirst == "unit1" && + oSettings.oLanguage.oPaginate.sPrevious == "test2" && + oSettings.oLanguage.oPaginate.sNext == "unit3" && + oSettings.oLanguage.oPaginate.sLast == "test4"; + return bReturn; + } + ); + + oTest.fnTest( + "oLanguage.oPaginate definitions are in the DOM", + null, + function () { + var bReturn = + $('#example_paginate .first').html() == "unit1" && + $('#example_paginate .previous').html() == "test2" && + $('#example_paginate .next').html() == "unit3" && + $('#example_paginate .last').html() == "test4"; + return bReturn; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/oLanguage.sInfo.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/oLanguage.sInfo.js new file mode 100755 index 0000000..25b23f4 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/oLanguage.sInfo.js @@ -0,0 +1,109 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "oLanguage.sInfo" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable(); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "Info language is 'Showing _START_ to _END_ of _TOTAL_ entries' by default", + null, + function () { return oSettings.oLanguage.sInfo == "Showing _START_ to _END_ of _TOTAL_ entries"; } + ); + + oTest.fnTest( + "Info language default is in the DOM", + null, + function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries"; } + ); + + + oTest.fnTest( + "Info language can be defined - without any macros", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "oLanguage": { + "sInfo": "unit test" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oLanguage.sInfo == "unit test"; } + ); + + oTest.fnTest( + "Info language definition is in the DOM", + null, + function () { return document.getElementById('example_info').innerHTML = "unit test"; } + ); + + oTest.fnTest( + "Info language can be defined - with macro _START_ only", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "oLanguage": { + "sInfo": "unit _START_ test" + } + } ); + }, + function () { return document.getElementById('example_info').innerHTML = "unit 1 test"; } + ); + + oTest.fnTest( + "Info language can be defined - with macro _END_ only", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "oLanguage": { + "sInfo": "unit _END_ test" + } + } ); + }, + function () { return document.getElementById('example_info').innerHTML = "unit 10 test"; } + ); + + oTest.fnTest( + "Info language can be defined - with macro _TOTAL_ only", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "oLanguage": { + "sInfo": "unit _END_ test" + } + } ); + }, + function () { return document.getElementById('example_info').innerHTML = "unit 57 test"; } + ); + + oTest.fnTest( + "Info language can be defined - with macros _START_ and _END_", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "oLanguage": { + "sInfo": "unit _START_ _END_ test" + } + } ); + }, + function () { return document.getElementById('example_info').innerHTML = "unit 1 10 test"; } + ); + + oTest.fnTest( + "Info language can be defined - with macros _START_, _END_ and _TOTAL_", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "oLanguage": { + "sInfo": "unit _START_ _END_ _TOTAL_ test" + } + } ); + }, + function () { return document.getElementById('example_info').innerHTML = "unit 1 10 57 test"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/oLanguage.sInfoEmpty.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/oLanguage.sInfoEmpty.js new file mode 100755 index 0000000..386e29d --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/oLanguage.sInfoEmpty.js @@ -0,0 +1,75 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "oLanguage.sInfoEmpty" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable(); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "Info empty language is 'Showing 0 to 0 of 0 entries' by default", + function () { oTable.fnFilter("nothinghere"); }, + function () { return oSettings.oLanguage.sInfoEmpty == "Showing 0 to 0 of 0 entries"; } + ); + + oTest.fnTest( + "Info empty language default is in the DOM", + null, + function () { + var bReturn = document.getElementById('example_info').innerHTML.replace( + ' '+oSettings.oLanguage.sInfoFiltered.replace( '_MAX_', '57' ), "" ) == + "Showing 0 to 0 of 0 entries"; + return bReturn; + } + ); + + + oTest.fnTest( + "Info empty language can be defined", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "oLanguage": { + "sInfoEmpty": "unit test" + } + } ); + oSettings = oTable.fnSettings(); + oTable.fnFilter("nothinghere"); + }, + function () { return oSettings.oLanguage.sInfoEmpty == "unit test"; } + ); + + oTest.fnTest( + "Info empty language default is in the DOM", + null, + function () { + var bReturn = document.getElementById('example_info').innerHTML.replace( + ' '+oSettings.oLanguage.sInfoFiltered.replace( '_MAX_', '57' ), "" ) == + "unit test"; + return bReturn; + } + ); + + + oTest.fnTest( + "Macro's not replaced", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "oLanguage": { + "sInfoEmpty": "unit _START_ _END_ _TOTAL_ test" + } + } ); + oTable.fnFilter("nothinghere"); + }, + function () { + var bReturn = document.getElementById('example_info').innerHTML.replace( + ' '+oSettings.oLanguage.sInfoFiltered.replace( '_MAX_', '57' ), "" ) == + "unit _START_ _END_ _TOTAL_ test"; + return bReturn; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/oLanguage.sInfoPostFix.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/oLanguage.sInfoPostFix.js new file mode 100755 index 0000000..f948c72 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/oLanguage.sInfoPostFix.js @@ -0,0 +1,73 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "oLanguage.sInfoPostFix" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable(); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "Info post fix language is '' (blank) by default", + null, + function () { return oSettings.oLanguage.sInfoPostFix == ""; } + ); + + oTest.fnTest( + "Width no post fix, the basic info shows", + null, + function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries"; } + ); + + + oTest.fnTest( + "Info post fix language can be defined", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "oLanguage": { + "sInfoPostFix": "unit test" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oLanguage.sInfoPostFix == "unit test"; } + ); + + oTest.fnTest( + "Info empty language default is in the DOM", + null, + function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries unit test"; } + ); + + + oTest.fnTest( + "Macros have no effect in the post fix", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "oLanguage": { + "sInfoPostFix": "unit _START_ _END_ _TOTAL_ test" + } + } ); + }, + function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries unit _START_ _END_ _TOTAL_ test"; } + ); + + + oTest.fnTest( + "Post fix is applied after fintering info", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "oLanguage": { + "sInfoPostFix": "unit test" + } + } ); + oTable.fnFilter("nothinghere"); + }, + function () { return document.getElementById('example_info').innerHTML = "Showing 0 to 0 of 0 entries unit (filtered from 57 total entries) test"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/oLanguage.sLengthMenu.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/oLanguage.sLengthMenu.js new file mode 100755 index 0000000..89f131e --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/oLanguage.sLengthMenu.js @@ -0,0 +1,106 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "oLanguage.sLengthMenu" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable(); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "Menu language is 'Show _MENU_ entries' by default", + null, + function () { return oSettings.oLanguage.sLengthMenu == "Show _MENU_ entries"; } + ); + + oTest.fnTest( + "_MENU_ macro is replaced by select menu in DOM", + null, + function () { return $('select', oSettings.aanFeatures.l[0]).length == 1 } + ); + + oTest.fnTest( + "A label input is used", + null, + function () { return $('label', oSettings.aanFeatures.l[0]).length == 1 } + ); + + oTest.fnTest( + "Default is put into DOM", + null, + function () { + var anChildren = $('label',oSettings.aanFeatures.l[0])[0].childNodes; + var bReturn = + anChildren[0].nodeValue == "Show " && + anChildren[2].nodeValue == " entries"; + return bReturn; + } + ); + + + oTest.fnTest( + "Menu length language can be defined - no _MENU_ macro", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "oLanguage": { + "sLengthMenu": "unit test" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oLanguage.sLengthMenu == "unit test"; } + ); + + oTest.fnTest( + "Menu length language definition is in the DOM", + null, + function () { + return $('label', oSettings.aanFeatures.l[0]).text() == "unit test"; + } + ); + + + oTest.fnTest( + "Menu length language can be defined - with _MENU_ macro", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "oLanguage": { + "sLengthMenu": "unit _MENU_ test" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { + var anChildren = $('label',oSettings.aanFeatures.l[0])[0].childNodes; + var bReturn = + anChildren[0].nodeValue == "unit " && + anChildren[2].nodeValue == " test"; + return bReturn; + } + ); + + + oTest.fnTest( + "Only the _MENU_ macro", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "oLanguage": { + "sLengthMenu": "_MENU_" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { + var anChildren = oSettings.aanFeatures.l[0].childNodes; + var bReturn = + anChildren.length == 1 && + $('select', oSettings.aanFeatures.l[0]).length == 1; + return bReturn; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/oLanguage.sProcessing.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/oLanguage.sProcessing.js new file mode 100755 index 0000000..55518ad --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/oLanguage.sProcessing.js @@ -0,0 +1,47 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "oLanguage.sProcessing" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "bProcessing": true + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "Processing language is 'Processing...' by default", + null, + function () { return oSettings.oLanguage.sProcessing == "Processing..."; } + ); + + oTest.fnTest( + "Processing language default is in the DOM", + null, + function () { return document.getElementById('example_processing').innerHTML = "Processing..."; } + ); + + + oTest.fnTest( + "Processing language can be defined", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "bProcessing": true, + "oLanguage": { + "sProcessing": "unit test" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oLanguage.sProcessing == "unit test"; } + ); + + oTest.fnTest( + "Processing language definition is in the DOM", + null, + function () { return document.getElementById('example_processing').innerHTML = "unit test"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/oLanguage.sSearch.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/oLanguage.sSearch.js new file mode 100755 index 0000000..60db49e --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/oLanguage.sSearch.js @@ -0,0 +1,66 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "oLanguage.sSearch" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable(); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "Search language is 'Search:' by default", + null, + function () { return oSettings.oLanguage.sSearch == "Search:"; } + ); + + oTest.fnTest( + "A label input is used", + null, + function () { return $('label', oSettings.aanFeatures.f[0]).length == 1 } + ); + + oTest.fnTest( + "Search language default is in the DOM", + null, + function () { return $('label', oSettings.aanFeatures.f[0]).text() + == "Search: "; } + ); + + + oTest.fnTest( + "Search language can be defined", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "oLanguage": { + "sSearch": "unit test" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oLanguage.sSearch == "unit test"; } + ); + + oTest.fnTest( + "Info language definition is in the DOM", + null, + function () { return $('label', oSettings.aanFeatures.f[0]).text().indexOf('unit test') !== -1; } + ); + + + oTest.fnTest( + "Blank search has a no (separator) inserted", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "oLanguage": { + "sSearch": "" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { return document.getElementById('example_filter').childNodes.length == 1; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/oLanguage.sUrl.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/oLanguage.sUrl.js new file mode 100755 index 0000000..61d2a93 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/oLanguage.sUrl.js @@ -0,0 +1,59 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "oLanguage.sUrl" ); + +/* Note that we only test the internal storage of language information pulled form a file here + * as the other language tests will check it goes into the DOM correctly + */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable(); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "sUrl is blank by default", + null, + function () { return oSettings.oLanguage.sUrl == ""; } + ); + + + oTest.fnWaitTest( + "Loading of German file loads language information", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "oLanguage": { + "sUrl": "../../../examples/examples_support/de_DE.txt" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { + var bReturn = + oSettings.oLanguage.sProcessing == "Bitte warten..." && + oSettings.oLanguage.sLengthMenu == "_MENU_ Einträge anzeigen" && + oSettings.oLanguage.sZeroRecords == "Keine Einträge vorhanden." && + oSettings.oLanguage.sInfo == "_START_ bis _END_ von _TOTAL_ Einträgen" && + oSettings.oLanguage.sInfoEmpty == "0 bis 0 von 0 Einträgen" && + oSettings.oLanguage.sInfoFiltered == "(gefiltert von _MAX_ Einträgen)" && + oSettings.oLanguage.sInfoPostFix == "" && + oSettings.oLanguage.sSearch == "Suchen" && + oSettings.oLanguage.oPaginate.sFirst == "Erster" && + oSettings.oLanguage.oPaginate.sPrevious == "Zurück" && + oSettings.oLanguage.oPaginate.sNext == "Nächster" && + oSettings.oLanguage.oPaginate.sLast == "Letzter"; + + return bReturn; + } + ); + + /* One DOM check just to ensure that they go into the DOM */ + oTest.fnTest( + "Loaded language goes into the DOM", + null, + function () { return document.getElementById('example_info').innerHTML = "1 bis 10 von 57 Einträgen"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/oLanguage.sZeroRecords.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/oLanguage.sZeroRecords.js new file mode 100755 index 0000000..72aec43 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/oLanguage.sZeroRecords.js @@ -0,0 +1,45 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "oLanguage.sZeroRecords" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable(); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "Zero records language is 'No matching records found' by default", + null, + function () { return oSettings.oLanguage.sZeroRecords == "No matching records found"; } + ); + + oTest.fnTest( + "Text is shown when empty table (after filtering)", + function () { oTable.fnFilter('nothinghere'); }, + function () { return $('#example tbody tr td')[0].innerHTML == "No matching records found" } + ); + + + + oTest.fnTest( + "Zero records language can be defined", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "oLanguage": { + "sZeroRecords": "unit test" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oLanguage.sZeroRecords == "unit test"; } + ); + + oTest.fnTest( + "Text is shown when empty table (after filtering)", + function () { oTable.fnFilter('nothinghere2'); }, + function () { return $('#example tbody tr td')[0].innerHTML == "unit test" } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/oSearch.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/oSearch.js new file mode 100755 index 0000000..8d23ee3 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/oSearch.js @@ -0,0 +1,101 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "oSearch" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable(); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "Default values should be blank", + null, + function () { + var bReturn = oSettings.oPreviousSearch.sSearch == "" && + !oSettings.oPreviousSearch.bRegex; + return bReturn; + } + ); + + /* This test might be considered iffy since the full object isn't given, but it's reasonable to + * expect DataTables to cope with this. It should just assumine regex false + */ + oTest.fnTest( + "Search term only in object", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "oSearch": { + "sSearch": "Mozilla" + } + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Gecko"; } + ); + + oTest.fnTest( + "New search will kill old one", + function () { + oTable.fnFilter("Opera"); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Presto"; } + ); + + oTest.fnTest( + "Search plain text term and escape regex true", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "oSearch": { + "sSearch": "DS", + "bRegex": false + } + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Nintendo DS browser"; } + ); + + oTest.fnTest( + "Search plain text term and escape regex false", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "oSearch": { + "sSearch": "Opera", + "bRegex": true + } + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Presto"; } + ); + + oTest.fnTest( + "Search regex text term and escape regex true", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "oSearch": { + "sSearch": "1.*", + "bRegex": false + } + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; } + ); + + oTest.fnTest( + "Search regex text term and escape regex false", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "oSearch": { + "sSearch": "1.*", + "bRegex": true + } + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Gecko"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/sAjaxSource.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/sAjaxSource.js new file mode 100755 index 0000000..ac61f9b --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/sAjaxSource.js @@ -0,0 +1,18 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "sAjaxSource" ); + +/* Not interested in ajax source here other than to check it's default */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable(); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "Server side is off by default", + null, + function () { return oSettings.sAjaxSource == null; } + ); + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/sDom.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/sDom.js new file mode 100755 index 0000000..165071c --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/sDom.js @@ -0,0 +1,319 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "sDom" ); + +/* This is going to be brutal on the browser! There is a lot that can be tested here... */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable(); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "Default DOM varaible", + null, + function () { return oSettings.sDom == "lfrtip"; } + ); + + oTest.fnTest( + "Default DOM in document", + null, + function () { + var nNodes = $('#demo div, #demo table'); + var nWrapper = document.getElementById('example_wrapper'); + var nLength = document.getElementById('example_length'); + var nFilter = document.getElementById('example_filter'); + var nInfo = document.getElementById('example_info'); + var nPaging = document.getElementById('example_paginate'); + var nTable = document.getElementById('example'); + + var bReturn = + nNodes[0] == nWrapper && + nNodes[1] == nLength && + nNodes[2] == nFilter && + nNodes[3] == nTable && + nNodes[4] == nInfo && + nNodes[5] == nPaging; + return bReturn; + } + ); + + oTest.fnTest( + "Check example 1 in code propagates", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sDom": '<"wrapper"flipt>' + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.sDom == '<"wrapper"flipt>'; } + ); + + oTest.fnTest( + "Check example 1 in DOM", + null, + function () { + var jqNodes = $('#demo div, #demo table'); + var nNodes = []; + + /* Strip the paging nodes */ + for ( var i=0, iLen=jqNodes.length ; i<iLen ; i++ ) + { + if ( jqNodes[i].getAttribute('id') != "example_previous" && + jqNodes[i].getAttribute('id') != "example_next" ) + { + nNodes.push( jqNodes[i] ); + } + } + + var nWrapper = document.getElementById('example_wrapper'); + var nLength = document.getElementById('example_length'); + var nFilter = document.getElementById('example_filter'); + var nInfo = document.getElementById('example_info'); + var nPaging = document.getElementById('example_paginate'); + var nTable = document.getElementById('example'); + var nCustomWrapper = $('div.wrapper')[0]; + + var bReturn = + nNodes[0] == nWrapper && + nNodes[1] == nCustomWrapper && + nNodes[2] == nFilter && + nNodes[3] == nLength && + nNodes[4] == nInfo && + nNodes[5] == nPaging && + nNodes[6] == nTable; + return bReturn; + } + ); + + oTest.fnTest( + "Check example 2 in DOM", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sDom": '<lf<t>ip>' + } ); + }, + function () { + var jqNodes = $('#demo div, #demo table'); + var nNodes = []; + var nCustomWrappers = [] + + /* Strip the paging nodes */ + for ( var i=0, iLen=jqNodes.length ; i<iLen ; i++ ) + { + if ( jqNodes[i].getAttribute('id') != "example_previous" && + jqNodes[i].getAttribute('id') != "example_next" ) + { + nNodes.push( jqNodes[i] ); + } + + /* Only the two custom divs don't have class names */ + if ( jqNodes[i].className == "" ) + { + nCustomWrappers.push( jqNodes[i] ); + } + } + + var nWrapper = document.getElementById('example_wrapper'); + var nLength = document.getElementById('example_length'); + var nFilter = document.getElementById('example_filter'); + var nInfo = document.getElementById('example_info'); + var nPaging = document.getElementById('example_paginate'); + var nTable = document.getElementById('example'); + + var bReturn = + nNodes[0] == nWrapper && + nNodes[1] == nCustomWrappers[0] && + nNodes[2] == nLength && + nNodes[3] == nFilter && + nNodes[4] == nCustomWrappers[1] && + nNodes[5] == nTable && + nNodes[6] == nInfo && + nNodes[7] == nPaging; + return bReturn; + } + ); + + oTest.fnTest( + "Check no length element", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sDom": 'frtip' + } ); + }, + function () { + var nNodes = $('#demo div, #demo table'); + var nWrapper = document.getElementById('example_wrapper'); + var nLength = document.getElementById('example_length'); + var nFilter = document.getElementById('example_filter'); + var nInfo = document.getElementById('example_info'); + var nPaging = document.getElementById('example_paginate'); + var nTable = document.getElementById('example'); + + var bReturn = + nNodes[0] == nWrapper && + null == nLength && + nNodes[1] == nFilter && + nNodes[2] == nTable && + nNodes[3] == nInfo && + nNodes[4] == nPaging; + return bReturn; + } + ); + + oTest.fnTest( + "Check no filter element", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sDom": 'lrtip' + } ); + }, + function () { + var nNodes = $('#demo div, #demo table'); + var nWrapper = document.getElementById('example_wrapper'); + var nLength = document.getElementById('example_length'); + var nFilter = document.getElementById('example_filter'); + var nInfo = document.getElementById('example_info'); + var nPaging = document.getElementById('example_paginate'); + var nTable = document.getElementById('example'); + + var bReturn = + nNodes[0] == nWrapper && + nNodes[1] == nLength && + null == nFilter && + nNodes[2] == nTable && + nNodes[3] == nInfo && + nNodes[4] == nPaging; + return bReturn; + } + ); + + /* Note we don't test for no table as this is not supported (and it would be fairly daft! */ + + oTest.fnTest( + "Check no info element", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sDom": 'lfrtp' + } ); + }, + function () { + var nNodes = $('#demo div, #demo table'); + var nWrapper = document.getElementById('example_wrapper'); + var nLength = document.getElementById('example_length'); + var nFilter = document.getElementById('example_filter'); + var nInfo = document.getElementById('example_info'); + var nPaging = document.getElementById('example_paginate'); + var nTable = document.getElementById('example'); + + var bReturn = + nNodes[0] == nWrapper && + nNodes[1] == nLength && + nNodes[2] == nFilter && + nNodes[3] == nTable && + null == nInfo && + nNodes[4] == nPaging; + return bReturn; + } + ); + + oTest.fnTest( + "Check no paging element", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sDom": 'lfrti' + } ); + }, + function () { + var nNodes = $('#demo div, #demo table'); + var nWrapper = document.getElementById('example_wrapper'); + var nLength = document.getElementById('example_length'); + var nFilter = document.getElementById('example_filter'); + var nInfo = document.getElementById('example_info'); + var nPaging = document.getElementById('example_paginate'); + var nTable = document.getElementById('example'); + + var bReturn = + nNodes[0] == nWrapper && + nNodes[1] == nLength && + nNodes[2] == nFilter && + nNodes[3] == nTable && + nNodes[4] == nInfo && + null == nPaging; + return bReturn; + } + ); + + oTest.fnTest( + "Element with an id", + function () { + $('#example').dataTable( { + "bDestroy": true, + "sDom": '<"#test"lf>rti' + } ); + }, + function () { + return $('#test').length == 1; + } + ); + + oTest.fnTest( + "Element with an id and a class", + function () { + $('#example').dataTable( { + "bDestroy": true, + "sDom": '<"#test.classTest"lf>rti' + } ); + }, + function () { + return ($('#test').length == 1 && $('#test')[0].className == "classTest"); + } + ); + + oTest.fnTest( + "Element with just a class", + function () { + $('#example').dataTable( { + "bDestroy": true, + "sDom": '<"classTest"lf>rti' + } ); + }, + function () { + return ($('div.classTest').length == 1 ); + } + ); + + oTest.fnTest( + "Two elements with an id", + function () { + $('#example').dataTable( { + "bDestroy": true, + "sDom": '<"#test1"lf>rti<"#test2"lf>' + } ); + }, + function () { + return ($('#test1').length == 1 && $('#test2').length == 1); + } + ); + + oTest.fnTest( + "Two elements with an id and one with a class", + function () { + $('#example').dataTable( { + "bDestroy": true, + "sDom": '<"#test1"lf>rti<"#test2.classTest"lf>' + } ); + }, + function () { + return ($('#test1').length == 1 && $('#test2').length == 1 && $('div.classTest').length == 1); + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/sPaginationType.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/sPaginationType.js new file mode 100755 index 0000000..8d975f5 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/sPaginationType.js @@ -0,0 +1,122 @@ +// DATA_TEMPLATE: dom_data +oTest.fnStart( "sPaginationType" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable(); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "Check two button paging is the default", + null, + function () { return oSettings.sPaginationType == "two_button"; } + ); + + oTest.fnTest( + "Check class is applied", + null, + function () { return $('#example_paginate').hasClass('paging_two_button'); } + ); + + oTest.fnTest( + "Two A elements are in the wrapper", + null, + function () { return $('#example_paginate a').length == 2; } + ); + + oTest.fnTest( + "We have the previous button", + null, + function () { return document.getElementById('example_previous'); } + ); + + oTest.fnTest( + "We have the next button", + null, + function () { return document.getElementById('example_next'); } + ); + + oTest.fnTest( + "Previous button is disabled", + null, + function () { return $('#example_previous').hasClass('paginate_disabled_previous'); } + ); + + oTest.fnTest( + "Next button is enabled", + null, + function () { return $('#example_next').hasClass('paginate_enabled_next'); } + ); + + /* Don't test paging - that's done by the zero config test script. */ + + + /* Two buttons paging */ + oTest.fnTest( + "Can enabled full numbers paging", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sPaginationType": "full_numbers" + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.sPaginationType == "full_numbers"; } + ); + + oTest.fnTest( + "Check full numbers class is applied", + null, + function () { return $('#example_paginate').hasClass('paging_full_numbers'); } + ); + + + var nFirst, nPrevious, nNext, nLast; + oTest.fnTest( + "Jump to last page", + function () { + nFirst = $('div.dataTables_paginate a.first'); + nPrevious = $('div.dataTables_paginate a.previous'); + nNext = $('div.dataTables_paginate a.next'); + nLast = $('div.dataTables_paginate a.last'); + nLast.click(); + }, + function () { + return document.getElementById('example_info').innerHTML == "Showing 51 to 57 of 57 entries"; + } + ); + + oTest.fnTest( + "Go to two pages previous", + function () { + nPrevious.click(); + nPrevious.click(); + }, + function () { + return document.getElementById('example_info').innerHTML == "Showing 31 to 40 of 57 entries"; + } + ); + + oTest.fnTest( + "Next (second last) page", + function () { + nNext.click(); + }, + function () { + return document.getElementById('example_info').innerHTML == "Showing 41 to 50 of 57 entries"; + } + ); + + oTest.fnTest( + "Jump to first page", + function () { + nFirst.click(); + }, + function () { + return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/th_in_body.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/th_in_body.js new file mode 100755 index 0000000..bbf5ee3 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/1_dom/th_in_body.js @@ -0,0 +1,437 @@ +// DATA_TEMPLATE: dom_data_th +oTest.fnStart( "Sanity checks for DataTables with DOM data and a TH in the body" ); + +oTest.fnTest( + "jQuery.dataTable function", + null, + function () { return typeof jQuery().dataTable == "function"; } +); + +oTest.fnTest( + "jQuery.dataTableSettings storage array", + null, + function () { return typeof jQuery().dataTableSettings == "object"; } +); + +oTest.fnTest( + "jQuery.dataTableExt plugin object", + null, + function () { return typeof jQuery().dataTableExt == "object"; } +); + +$(document).ready( function () { + $('#example').dataTable(); + + /* Basic checks */ + oTest.fnTest( + "Length changing div exists", + null, + function () { return document.getElementById('example_length') != null; } + ); + + oTest.fnTest( + "Filtering div exists", + null, + function () { return document.getElementById('example_filter') != null; } + ); + + oTest.fnTest( + "Information div exists", + null, + function () { return document.getElementById('example_info') != null; } + ); + + oTest.fnTest( + "Pagination div exists", + null, + function () { return document.getElementById('example_paginate') != null; } + ); + + oTest.fnTest( + "Processing div is off by default", + null, + function () { return document.getElementById('example_processing') == null; } + ); + + oTest.fnTest( + "10 rows shown on the first page", + null, + function () { return $('#example tbody tr').length == 10; } + ); + + oTest.fnTest( + "Initial sort occured", + null, + function () { return $('#example tbody td:eq(0)').html() == "Gecko"; } + ); + + /* Need to use the WaitTest for sorting due to the setTimeout datatables uses */ + oTest.fnTest( + "Sorting (first click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Sorting (second click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnTest( + "Sorting (third click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Sorting (first click) on numeric column", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "-"; } + ); + + oTest.fnTest( + "Sorting (second click) on numeric column", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "522.1"; } + ); + + oTest.fnTest( + "Sorting multi-column (first click)", + function () { + $('#example thead th:eq(0)').click(); + oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); }, + function () { var b = + $('#example tbody td:eq(0)').html() == "Gecko" && + $('#example tbody td:eq(1)').html() == "Camino 1.0"; return b; } + ); + + oTest.fnTest( + "Sorting multi-column - sorting second column only", + function () { + $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + /* Basic paging */ + oTest.fnTest( + "Paging to second page", + function () { $('#example_next').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "IE Mobile"; } + ); + + oTest.fnTest( + "Paging to first page", + function () { $('#example_previous').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Attempting to page back beyond the first page", + function () { $('#example_previous').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + /* Changing length */ + oTest.fnTest( + "Changing table length to 25 records", + function () { $("select[name=example_length]").val('25').change(); }, + function () { return $('#example tbody tr').length == 25; } + ); + + oTest.fnTest( + "Changing table length to 50 records", + function () { $("select[name=example_length]").val('50').change(); }, + function () { return $('#example tbody tr').length == 50; } + ); + + oTest.fnTest( + "Changing table length to 100 records", + function () { $("select[name=example_length]").val('100').change(); }, + function () { return $('#example tbody tr').length == 57; } + ); + + oTest.fnTest( + "Changing table length to 10 records", + function () { $("select[name=example_length]").val('10').change(); }, + function () { return $('#example tbody tr').length == 10; } + ); + + /* + * Information element + */ + oTest.fnTest( + "Information on zero config", + null, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Information on second page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 11 to 20 of 57 entries"; } + ); + + oTest.fnTest( + "Information on third page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 21 to 30 of 57 entries"; } + ); + + oTest.fnTest( + "Information on last page", + function () { + $('#example_next').click(); + $('#example_next').click(); + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 51 to 57 of 57 entries"; } + ); + + oTest.fnTest( + "Information back on first page", + function () { + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Information with 25 records", + function () { $("select[name=example_length]").val('25').change(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 25 of 57 entries"; } + ); + + oTest.fnTest( + "Information with 25 records - second page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 26 to 50 of 57 entries"; } + ); + + oTest.fnTest( + "Information with 100 records - first page", + function () { + $('#example_previous').click(); + $("select[name=example_length]").val('100').change(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 57 of 57 entries"; } + ); + + oTest.fnTest( + "Information back to 10 records", + function () { + $('#example_previous').click(); + $("select[name=example_length]").val('10').change(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Information with filter 'Win'", + function () { $('#example_filter input').val("Win").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' second page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' last page", + function () { + $('#example_next').click(); + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 31 to 31 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' back to first page", + function () { + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' second page - second time", + function () { + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter increased to 'Win 98'", + function () { $('#example_filter input').val("Win 98").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 9 of 9 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter decreased to 'Win'", + function () { $('#example_filter input').val("Win").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' second page - third time", + function () { + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter removed", + function () { $('#example_filter input').val("").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 57 entries"; } + ); + + + /* + * Filtering + */ + oTest.fnTest( + "Filter 'W' - rows", + function () { + /* Reset the table such that the old sorting doesn't mess things up */ + oSession.fnRestore(); + $('#example').dataTable(); + $('#example_filter input').val("W").keyup(); }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Gecko"; } + ); + + oTest.fnTest( + "Filter 'W' - info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 42 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Wi'", + function () { $('#example_filter input').val("Wi").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 32 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Win'", + function () { $('#example_filter input').val("Win").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting column 1", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "AOL browser (AOL desktop)"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting column 1 info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting column 1 reverse", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnTest( + "Filter 'Win XP' - maintaing reverse sorting col 1", + function () { $('#example_filter input').val("Win XP").keyup(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Internet Explorer 7"; } + ); + + oTest.fnTest( + "Filter 'Win XP' - sorting col 3", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "4"; } + ); + + oTest.fnTest( + "Filter 'Win XP' - sorting col 3 - reversed", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "7"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting col 3 - reversed info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 6 of 6 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'nothinghere'", + function () { $('#example_filter input').val("nothinghere").keyup(); }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == + "No matching records found"; } + ); + + oTest.fnTest( + "Filter 'nothinghere' - info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter back to blank and 1st column sorting", + function () { + $('#example_filter input').val("").keyup(); + $('#example thead th:eq(0)').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Prefixing a filter entry", + function () { + $('#example_filter input').val("Win").keyup(); + $('#example_filter input').val("GeckoWin").keyup(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Prefixing a filter entry with space", + function () { + $('#example_filter input').val("Gecko Win").keyup(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 17 entries (filtered from 57 total entries)"; } + ); + + + + + + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/6872-default-content-missing-props.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/6872-default-content-missing-props.js new file mode 100644 index 0000000..5ae4126 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/6872-default-content-missing-props.js @@ -0,0 +1,285 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "6872 - mDataProp and sDefaultContent for deep objects" ); + +$(document).ready( function () { + var test = false; + + $.fn.dataTable.ext.sErrMode = "throw"; + + + + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Shallow properties + */ + + $('#example').dataTable( { + "aaData": [ + { + "a": "a", + "b": "b", + "c": "c", + "d": "d", + "e": "e" + } + ], + "aoColumns": [ + { "mDataProp": "a" }, + { "mDataProp": "b" }, + { "mDataProp": "c" }, + { "mDataProp": "d" }, + { "mDataProp": "e" } + ] + } ); + + oTest.fnTest( + "Basic initialisation of objects works", + null, + function () { return $('#example tbody td:eq(0)').html() === "a"; } + ); + + oTest.fnTest( + "Error when property missing (no default content)", + function () { + oSession.fnRestore(); + test = false; + + try { + $('#example').dataTable( { + "aaData": [ + { + "a": "a", + "b": "b", + "d": "d", + "e": "e" + } + ], + "aoColumns": [ + { "mDataProp": "a" }, + { "mDataProp": "b" }, + { "mDataProp": "c" }, + { "mDataProp": "d" }, + { "mDataProp": "e" } + ] + } ); + } catch (e) { + test = true; + } + }, + function () { return test; } + ); + + oTest.fnTest( + "Default content used for missing prop and no error", + function () { + oSession.fnRestore(); + + $('#example').dataTable( { + "aaData": [ + { + "a": "a", + "b": "b", + "d": "d", + "e": "e" + } + ], + "aoColumns": [ + { "mDataProp": "a" }, + { "mDataProp": "b" }, + { "mDataProp": "c", "sDefaultContent": "test" }, + { "mDataProp": "d" }, + { "mDataProp": "e" } + ] + } ); + }, + function () { return $('#example tbody td:eq(2)').html() === "test"; } + ); + + + + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Deep properties with a single object + */ + + oTest.fnTest( + "Basic test with deep properties", + function () { + oSession.fnRestore(); + + $('#example').dataTable( { + "aaData": [ + { + "z": { + "a": "a", + "b": "b", + "c": "c", + "d": "d", + "e": "e" + } + } + ], + "aoColumns": [ + { "mDataProp": "z.a" }, + { "mDataProp": "z.b" }, + { "mDataProp": "z.c" }, + { "mDataProp": "z.d" }, + { "mDataProp": "z.e" } + ] + } ); + }, + function () { return $('#example tbody td:eq(0)').html() === "a"; } + ); + + oTest.fnTest( + "Error when property missing on deep get (no default content)", + function () { + oSession.fnRestore(); + test = false; + + try { + $('#example').dataTable( { + "aaData": [ + { + "z": { + "a": "a", + "b": "b", + "c": "c", + "e": "e" + } + } + ], + "aoColumns": [ + { "mDataProp": "z.a" }, + { "mDataProp": "z.b" }, + { "mDataProp": "z.c" }, + { "mDataProp": "z.d" }, + { "mDataProp": "z.e" } + ] + } ); + } catch (e) { + test = true; + } + }, + function () { return test; } + ); + + oTest.fnTest( + "Default content used for missing prop on deep get and no error", + function () { + oSession.fnRestore(); + + $('#example').dataTable( { + "aaData": [ + { + "z": { + "a": "a", + "b": "b", + "c": "c", + "e": "e" + } + } + ], + "aoColumns": [ + { "mDataProp": "z.a" }, + { "mDataProp": "z.b" }, + { "mDataProp": "z.c" }, + { "mDataProp": "z.d", "sDefaultContent": "test" }, + { "mDataProp": "z.e" } + ] + } ); + }, + function () { return $('#example tbody td:eq(3)').html() === "test"; } + ); + + + + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Deep properties with individual objects + */ + + oTest.fnTest( + "Basic test with deep individual properties", + function () { + oSession.fnRestore(); + + $('#example').dataTable( { + "aaData": [ + { + "m": { "a": "a" }, + "n": { "b": "b" }, + "o": { "c": "c" }, + "p": { "d": "d" }, + "q": { "e": "e" } + } + ], + "aoColumns": [ + { "mDataProp": "m.a" }, + { "mDataProp": "n.b" }, + { "mDataProp": "o.c" }, + { "mDataProp": "p.d" }, + { "mDataProp": "q.e" } + ] + } ); + }, + function () { return $('#example tbody td:eq(0)').html() === "a"; } + ); + + oTest.fnTest( + "Error when property missing on deep individual get (no default content)", + function () { + oSession.fnRestore(); + test = false; + + try { + $('#example').dataTable( { + "aaData": [ + { + "m": { "a": "a" }, + "n": { "b": "b" }, + "p": { "d": "d" }, + "q": { "e": "e" } + } + ], + "aoColumns": [ + { "mDataProp": "m.a" }, + { "mDataProp": "n.b" }, + { "mDataProp": "o.c" }, + { "mDataProp": "p.d" }, + { "mDataProp": "q.e" } + ] + } ); + } catch (e) { + test = true; + } + }, + function () { return test; } + ); + + oTest.fnTest( + "Default content used for missing prop on deep individual get and no error", + function () { + oSession.fnRestore(); + + $('#example').dataTable( { + "aaData": [ + { + "m": { "a": "a" }, + "n": { "b": "b" }, + "p": { "d": "d" }, + "q": { "e": "e" } + } + ], + "aoColumns": [ + { "mDataProp": "m.a" }, + { "mDataProp": "n.b" }, + { "mDataProp": "o.c", "sDefaultContent": "test" }, + { "mDataProp": "p.d" }, + { "mDataProp": "q.e" } + ] + } ); + }, + function () { return $('#example tbody td:eq(2)').html() === "test"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/_zero_config.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/_zero_config.js new file mode 100644 index 0000000..51abbad --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/_zero_config.js @@ -0,0 +1,440 @@ +// DATA_TEMPLATE: js_data +oTest.fnStart( "Sanity checks for DataTables with data from JS" ); + +oTest.fnTest( + "jQuery.dataTable function", + null, + function () { return typeof jQuery().dataTable == "function"; } +); + +oTest.fnTest( + "jQuery.dataTableSettings storage array", + null, + function () { return typeof jQuery().dataTableSettings == "object"; } +); + +oTest.fnTest( + "jQuery.dataTableExt plugin object", + null, + function () { return typeof jQuery().dataTableExt == "object"; } +); + +$(document).ready( function () { + var oInit = { + "aaData": gaaData + }; + $('#example').dataTable( oInit ); + + /* Basic checks */ + oTest.fnTest( + "Length changing div exists", + null, + function () { return document.getElementById('example_length') != null; } + ); + + oTest.fnTest( + "Filtering div exists", + null, + function () { return document.getElementById('example_filter') != null; } + ); + + oTest.fnTest( + "Information div exists", + null, + function () { return document.getElementById('example_info') != null; } + ); + + oTest.fnTest( + "Pagination div exists", + null, + function () { return document.getElementById('example_paginate') != null; } + ); + + oTest.fnTest( + "Processing div is off by default", + null, + function () { return document.getElementById('example_processing') == null; } + ); + + oTest.fnTest( + "10 rows shown on the first page", + null, + function () { return $('#example tbody tr').length == 10; } + ); + + oTest.fnTest( + "Initial sort occured", + null, + function () { return $('#example tbody td:eq(0)').html() == "Gecko"; } + ); + + /* Need to use the WaitTest for sorting due to the setTimeout datatables uses */ + oTest.fnTest( + "Sorting (first click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Sorting (second click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnTest( + "Sorting (third click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Sorting (first click) on numeric column", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "-"; } + ); + + oTest.fnTest( + "Sorting (second click) on numeric column", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "522.1"; } + ); + + oTest.fnTest( + "Sorting multi-column (first click)", + function () { + $('#example thead th:eq(0)').click(); + oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); }, + function () { var b = + $('#example tbody td:eq(0)').html() == "Gecko" && + $('#example tbody td:eq(1)').html() == "Camino 1.0"; return b; } + ); + + oTest.fnTest( + "Sorting multi-column - sorting second column only", + function () { + $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + /* Basic paging */ + oTest.fnTest( + "Paging to second page", + function () { $('#example_next').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "IE Mobile"; } + ); + + oTest.fnTest( + "Paging to first page", + function () { $('#example_previous').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Attempting to page back beyond the first page", + function () { $('#example_previous').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + /* Changing length */ + oTest.fnTest( + "Changing table length to 25 records", + function () { $("select[name=example_length]").val('25').change(); }, + function () { return $('#example tbody tr').length == 25; } + ); + + oTest.fnTest( + "Changing table length to 50 records", + function () { $("select[name=example_length]").val('50').change(); }, + function () { return $('#example tbody tr').length == 50; } + ); + + oTest.fnTest( + "Changing table length to 100 records", + function () { $("select[name=example_length]").val('100').change(); }, + function () { return $('#example tbody tr').length == 57; } + ); + + oTest.fnTest( + "Changing table length to 10 records", + function () { $("select[name=example_length]").val('10').change(); }, + function () { return $('#example tbody tr').length == 10; } + ); + + /* + * Information element + */ + oTest.fnTest( + "Information on zero config", + null, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Information on second page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 11 to 20 of 57 entries"; } + ); + + oTest.fnTest( + "Information on third page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 21 to 30 of 57 entries"; } + ); + + oTest.fnTest( + "Information on last page", + function () { + $('#example_next').click(); + $('#example_next').click(); + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 51 to 57 of 57 entries"; } + ); + + oTest.fnTest( + "Information back on first page", + function () { + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Information with 25 records", + function () { $("select[name=example_length]").val('25').change(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 25 of 57 entries"; } + ); + + oTest.fnTest( + "Information with 25 records - second page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 26 to 50 of 57 entries"; } + ); + + oTest.fnTest( + "Information with 100 records - first page", + function () { + $('#example_previous').click(); + $("select[name=example_length]").val('100').change(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 57 of 57 entries"; } + ); + + oTest.fnTest( + "Information back to 10 records", + function () { + $('#example_previous').click(); + $("select[name=example_length]").val('10').change(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Information with filter 'Win'", + function () { $('#example_filter input').val("Win").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' second page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' last page", + function () { + $('#example_next').click(); + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 31 to 31 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' back to first page", + function () { + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' second page - second time", + function () { + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter increased to 'Win 98'", + function () { $('#example_filter input').val("Win 98").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 9 of 9 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter decreased to 'Win'", + function () { $('#example_filter input').val("Win").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' second page - third time", + function () { + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter removed", + function () { $('#example_filter input').val("").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 57 entries"; } + ); + + + /* + * Filtering + */ + oTest.fnTest( + "Filter 'W' - rows", + function () { + /* Reset the table such that the old sorting doesn't mess things up */ + oSession.fnRestore(); + $('#example').dataTable( oInit ); + $('#example_filter input').val("W").keyup(); }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Gecko"; } + ); + + oTest.fnTest( + "Filter 'W' - info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 42 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Wi'", + function () { $('#example_filter input').val("Wi").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 32 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Win'", + function () { $('#example_filter input').val("Win").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting column 1", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "AOL browser (AOL desktop)"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting column 1 info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting column 1 reverse", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnTest( + "Filter 'Win XP' - maintaing reverse sorting col 1", + function () { $('#example_filter input').val("Win XP").keyup(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Internet Explorer 7"; } + ); + + oTest.fnTest( + "Filter 'Win XP' - sorting col 3", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "4"; } + ); + + oTest.fnTest( + "Filter 'Win XP' - sorting col 3 - reversed", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "7"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting col 3 - reversed info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 6 of 6 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'nothinghere'", + function () { $('#example_filter input').val("nothinghere").keyup(); }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == + "No matching records found"; } + ); + + oTest.fnTest( + "Filter 'nothinghere' - info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter back to blank and 1st column sorting", + function () { + $('#example_filter input').val("").keyup(); + $('#example thead th:eq(0)').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Prefixing a filter entry", + function () { + $('#example_filter input').val("Win").keyup(); + $('#example_filter input').val("GeckoWin").keyup(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Prefixing a filter entry with space", + function () { + $('#example_filter input').val("Gecko Win").keyup(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 17 entries (filtered from 57 total entries)"; } + ); + + + + + + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aaSorting.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aaSorting.js new file mode 100644 index 0000000..3b16828 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aaSorting.js @@ -0,0 +1,198 @@ +// DATA_TEMPLATE: js_data +oTest.fnStart( "aaSorting" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "aaData": gaaData + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "Default sorting is single column", + null, + function () { + return oSettings.aaSorting.length == 1 && typeof oSettings.aaSorting[0] == 'object'; + } + ); + + oTest.fnTest( + "Default sorting is first column asc", + null, + function () { + return oSettings.aaSorting[0].length == 3 && oSettings.aaSorting[0][0] == 0 && + oSettings.aaSorting[0][1] == 'asc'; + } + ); + + oTest.fnTest( + "Sorting is applied", + null, + function () { return $('#example tbody td:eq(0)').html() == "Gecko"; } + ); + + + oTest.fnTest( + "Custom sorting on single string column asc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "aaSorting": [['1','asc']] + } ); + }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + + oTest.fnTest( + "Custom sorting on single string column desc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "aaSorting": [['1','desc']] + } ); + }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + + oTest.fnTest( + "Custom sorting on single int column asc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "aaSorting": [['1','asc']] + } ); + }, + function () { return $('#example tbody td:eq(3)').html() == "-"; } + ); + + + oTest.fnTest( + "Custom sorting on single int column desc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "aaSorting": [['1','desc']] + } ); + }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + + oTest.fnTest( + "Multi-column sorting (2 column) - string asc / string asc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "aaSorting": [['0','asc'], ['1','asc']] + } ); + }, + function () { return $('#example tbody td:eq(1)').html() == "Camino 1.0"; } + ); + + oTest.fnTest( + "Multi-column sorting (2 column) - string asc / string desc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "aaSorting": [['0','asc'], ['1','desc']] + } ); + }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnTest( + "Multi-column sorting (2 column) - string desc / string asc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "aaSorting": [['0','desc'], ['1','asc']] + } ); + }, + function () { return $('#example tbody td:eq(1)').html() == "iPod Touch / iPhone"; } + ); + + oTest.fnTest( + "Multi-column sorting (2 column) - string desc / string desc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "aaSorting": [['0','desc'], ['1','desc']] + } ); + }, + function () { return $('#example tbody td:eq(1)').html() == "Safari 3.0"; } + ); + + + oTest.fnTest( + "Multi-column sorting (2 column) - string asc / int asc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "aaSorting": [['0','asc'], ['3','asc']] + } ); + }, + function () { return $('#example tbody td:eq(3)').html() == "1"; } + ); + + oTest.fnTest( + "Multi-column sorting (2 column) - string asc / int desc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "aaSorting": [['0','asc'], ['3','desc']] + } ); + }, + function () { return $('#example tbody td:eq(3)').html() == "1.9"; } + ); + + oTest.fnTest( + "Multi-column sorting (2 column) - string desc / int asc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "aaSorting": [['0','desc'], ['3','asc']] + } ); + }, + function () { return $('#example tbody td:eq(3)').html() == "125.5"; } + ); + + oTest.fnTest( + "Multi-column sorting (2 column) - string desc / int desc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "aaSorting": [['0','desc'], ['3','desc']] + } ); + }, + function () { return $('#example tbody td:eq(3)').html() == "522.1"; } + ); + + oTest.fnTest( + "Multi-column sorting (3 column) - string asc / int asc / string asc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "aaSorting": [['0','asc'], ['3','asc'], ['1','asc']] + } ); + }, + function () { return $('#example tbody tr:eq(7) td:eq(1)').html() == "Firefox 1.0"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aaSortingFixed.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aaSortingFixed.js new file mode 100644 index 0000000..a28e610 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aaSortingFixed.js @@ -0,0 +1,64 @@ +// DATA_TEMPLATE: js_data +oTest.fnStart( "aaSortingFixed" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "aaData": gaaData + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "No fixed sorting by default", + null, + function () { + return oSettings.aaSortingFixed == null; + } + ); + + + oTest.fnTest( + "Fixed sorting on first column (string/asc) with user sorting on second column (string/asc)", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "aaSortingFixed": [['0','asc']] + } ); + $('#example thead th:eq(1)').click(); + }, + function () { return $('#example tbody td:eq(1)').html() == "Camino 1.0"; } + ); + + oTest.fnTest( + "Fixed sorting on first column (string/asc) with user sorting on second column (string/desc)", + function () { + $('#example thead th:eq(1)').click(); + }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnTest( + "Fixed sorting on fourth column (int/asc) with user sorting on second column (string/asc)", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "aaSortingFixed": [['3','asc']] + } ); + $('#example thead th:eq(1)').click(); + }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Fixed sorting on fourth column (int/asc) with user sorting on second column (string/desc)", + function () { + $('#example thead th:eq(1)').click(); + }, + function () { return $('#example tbody td:eq(1)').html() == "PSP browser"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aoColumns.bSearchable.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aoColumns.bSearchable.js new file mode 100755 index 0000000..4ce9158 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aoColumns.bSearchable.js @@ -0,0 +1,71 @@ +// DATA_TEMPLATE: js_data +oTest.fnStart( "aoColumns.bSeachable" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "aaData": gaaData + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "Columns are searchable by default", + function () { oTable.fnFilter("Camino"); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html().match(/Camino/); } + ); + + oTest.fnTest( + "Disabling sorting on a column removes it from the global filter", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aaData": gaaData, + "aoColumns": [ + null, + { "bSearchable": false }, + null, + null, + null + ] + } ); + oSettings = oTable.fnSettings(); + oTable.fnFilter("Camino"); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; } + ); + + oTest.fnTest( + "Disabled on one column has no effect on other columns", + function () { oTable.fnFilter("Webkit"); }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Webkit"; } + ); + + oTest.fnTest( + "Disable filtering on multiple columns", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aaData": gaaData, + "aoColumns": [ + { "bSearchable": false }, + { "bSearchable": false }, + null, + null, + null + ] + } ); + oSettings = oTable.fnSettings(); + oTable.fnFilter("Webkit"); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; } + ); + + oTest.fnTest( + "Filter on second disabled column", + function () { oTable.fnFilter("Camino"); }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aoColumns.bSortable.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aoColumns.bSortable.js new file mode 100755 index 0000000..4e4548d --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aoColumns.bSortable.js @@ -0,0 +1,109 @@ +// DATA_TEMPLATE: js_data +oTest.fnStart( "aoColumns.bSortable" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "aaData": gaaData + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "All columns are sortable by default", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Can disable sorting from one column", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "aoColumns": [ + null, + { "bSortable": false }, + null, + null, + null + ] + } ); + $('#example thead th:eq(1)').click(); + }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() != "All others"; } + ); + + oTest.fnTest( + "Disabled column has no sorting class", + null, + function () { return $('#example thead th:eq(1)').hasClass("sorting_asc") == false; } + ); + + oTest.fnTest( + "Other columns can still sort", + function () { + $('#example thead th:eq(4)').click(); + $('#example thead th:eq(4)').click(); + }, + function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == "X"; } + ); + + oTest.fnTest( + "Disable sorting on multiple columns - no sorting classes", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "aoColumns": [ + null, + { "bSortable": false }, + null, + { "bSortable": false }, + null + ] + } ); + }, + function () { + var bReturn = + $('#example thead th:eq(1)').hasClass("sorting") || + $('#example thead th:eq(3)').hasClass("sorting") + return bReturn == false; + } + ); + + oTest.fnTest( + "Sorting on disabled column 1 has no effect", + function () { + $('#example thead th:eq(1)').click(); + }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() != "All others"; } + ); + + oTest.fnTest( + "Sorting on disabled column 2 has no effect", + function () { + $('#example thead th:eq(3)').click(); + }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() != "-"; } + ); + + oTest.fnTest( + "Second sort on disabled column 2 has no effect", + function () { + $('#example thead th:eq(3)').click(); + }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() != "-"; } + ); + + oTest.fnTest( + "Even with multiple disabled sorting columns other columns can still sort", + function () { + $('#example thead th:eq(4)').click(); + $('#example thead th:eq(4)').click(); + }, + function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == "X"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aoColumns.bUseRendered.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aoColumns.bUseRendered.js new file mode 100755 index 0000000..2e3a948 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aoColumns.bUseRendered.js @@ -0,0 +1,148 @@ +// DATA_TEMPLATE: js_data +oTest.fnStart( "aoColumns.bUseRendered" ); + +/* bUseRendered is used to alter sorting data, if false then the original data is used for + * sorting rather than the rendered data + */ + +$(document).ready( function () { + /* Check the default */ + var mTmp = 0; + + var oTable = $('#example').dataTable( { + "aaData": gaaData, + "aoColumns": [ + null, + { "fnRender": function (a) { + if ( mTmp == 0 ) { + mTmp++; + return "aaa"; + } else + return a.aData[a.iDataColumn]; + } }, + null, + null, + null + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "Default for bUseRendered is true - rendered data is used for sorting", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'aaa'; } + ); + + oTest.fnTest( + "When bUseRendered is false, original data is used for sorting", + function () { + mTmp = 0; + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aaData": gaaData, + "aoColumns": [ + null, + { + "bUseRendered": false, + "fnRender": function (a) { + if ( mTmp == 0 ) { + mTmp++; + return "aaa"; + } else { + return a.aData[a.iDataColumn]; + } + } + }, + null, + null, + null + ] + } ); + $('#example thead th:eq(1)').click(); + }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'All others'; } + ); + + + oTest.fnTest( + "bUseRendered set to false on one columns and true (default) on two others", + function () { + mTmp = 0; + var mTmp2 = 0; + var mTmp3 = 0; + + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aaData": gaaData, + "aoColumns": [ + { + "fnRender": function (a) { + if ( mTmp == 0 ) { + mTmp++; + return "aaa1"; + } else { + return a.aData[a.iDataColumn]; + } + } + }, + { + "bUseRendered": false, + "fnRender": function (a) { + if ( mTmp2 == 0 ) { + mTmp2++; + return "aaa2"; + } else { + return a.aData[a.iDataColumn]; + } + } + }, + { + "fnRender": function (a) { + if ( mTmp3 == 0 ) { + mTmp3++; + return "zzz3"; + } else { + return a.aData[a.iDataColumn]; + } + } + }, + null, + null + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == 'aaa1'; } + ); + + oTest.fnTest( + "Multi-column rendering - 2nd column sorting", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'All others'; } + ); + + oTest.fnTest( + "Multi-column rendering - 3rd column sorting", + function () { + $('#example thead th:eq(2)').click(); + $('#example thead th:eq(2)').click(); + }, + function () { return $('#example tbody tr:eq(0) td:eq(2)').html() == 'zzz3'; } + ); + + oTest.fnTest( + "Multi-column rendering - 4th column sorting", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == '-'; } + ); + + oTest.fnTest( + "Multi-column rendering - 5th column sorting", + function () { $('#example thead th:eq(4)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'A'; } + ); + + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aoColumns.bVisible.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aoColumns.bVisible.js new file mode 100755 index 0000000..e38948c --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aoColumns.bVisible.js @@ -0,0 +1,110 @@ +// DATA_TEMPLATE: js_data +oTest.fnStart( "aoColumns.bVisible" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "aaData": gaaData + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "All columns are visible by default", + null, + function () { return $('#example tbody tr:eq(0) td').length == 5; } + ); + + oTest.fnTest( + "Can hide one column and it removes td column from DOM", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "aoColumns": [ + null, + { "bVisible": false }, + null, + null, + null + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td').length == 4; } + ); + + oTest.fnTest( + "Can hide one column and it removes thead th column from DOM", + null, + function () { return $('#example thead tr:eq(0) th').length == 4; } + ); + + oTest.fnTest( + "Can hide one column and it removes tfoot th column from DOM", + null, + function () { return $('#example tfoot tr:eq(0) th').length == 4; } + ); + + oTest.fnTest( + "The correct tbody column has been hidden", + function () { + oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); + }, + function () { + var jqNodes = $('#example tbody tr:eq(0) td'); + var bReturn = + jqNodes[0].innerHTML == "Gecko" && + jqNodes[1].innerHTML == "Gnome" && + jqNodes[2].innerHTML == "1.8" && + jqNodes[3].innerHTML == "A"; + return bReturn; + } + ); + + + oTest.fnTest( + "Can hide multiple columns and it removes td column from DOM", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "aoColumns": [ + null, + { "bVisible": false }, + { "bVisible": false }, + null, + { "bVisible": false } + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td').length == 2; } + ); + + oTest.fnTest( + "Multiple hide - removes thead th column from DOM", + null, + function () { return $('#example thead tr:eq(0) th').length == 2; } + ); + + oTest.fnTest( + "Multiple hide - removes tfoot th column from DOM", + null, + function () { return $('#example tfoot tr:eq(0) th').length == 2; } + ); + + oTest.fnTest( + "Multiple hide - the correct tbody columns have been hidden", + function () { + oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); + }, + function () { + var jqNodes = $('#example tbody tr:eq(0) td'); + var bReturn = + jqNodes[0].innerHTML == "Gecko" && + jqNodes[1].innerHTML == "1" + return bReturn; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aoColumns.fnRender.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aoColumns.fnRender.js new file mode 100755 index 0000000..cb89aeb --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aoColumns.fnRender.js @@ -0,0 +1,156 @@ +// DATA_TEMPLATE: js_data +oTest.fnStart( "aoColumns.fnRender" ); + +$(document).ready( function () { + /* Check the default */ + var mTmp = 0; + var oTable = $('#example').dataTable( { + "aaData": gaaData, + "aoColumns": [ + null, + { "fnRender": function (a) { + mTmp++; + return a.aData[a.iDataColumn]; + } }, + null, + null, + null + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "Single column - fnRender is called once for each row", + null, + function () { return mTmp == 57; } + ); + + oTest.fnTest( + "Confirm that fnRender passes two arguments with four parameters", + function () { + mTmp = true; + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aaData": gaaData, + "aoColumns": [ + null, + { "fnRender": function (a) { + if ( arguments.length != 2 || typeof a.iDataRow=='undefined' || + typeof a.iDataColumn=='undefined' || typeof a.aData=='undefined' || + typeof a.mDataProp=='undefined' ) + { + mTmp = false; + } + return a.aData[a.iDataColumn]; + } }, + null, + null, + null + ] + } ); + }, + function () { return mTmp; } + ); + + oTest.fnTest( + "fnRender iDataColumn is the column", + function () { + mTmp = true; + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aaData": gaaData, + "aoColumns": [ + null, + { "fnRender": function (a) { + if ( a.iDataColumn != 1 ) + { + mTmp = false; + } + return a.aData[a.iDataColumn]; + } }, + null, + null, + null + ] + } ); + }, + function () { return mTmp; } + ); + + oTest.fnTest( + "fnRender aData is data array of correct size", + function () { + mTmp = true; + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aaData": gaaData, + "aoColumns": [ + null, + { "fnRender": function (a) { + if ( a.aData.length != 5 ) + { + mTmp = false; + } + return a.aData[a.iDataColumn]; + } }, + null, + null, + null + ] + } ); + }, + function () { return mTmp; } + ); + + oTest.fnTest( + "Passed back data is put into the DOM", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aaData": gaaData, + "aoColumns": [ + null, + { "fnRender": function (a) { + return 'unittest'; + } }, + null, + null, + null + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'unittest'; } + ); + + oTest.fnTest( + "Passed back data is put into the DOM", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aaData": gaaData, + "aoColumns": [ + null, + null, + { "fnRender": function (a) { + return 'unittest1'; + } }, + { "fnRender": function (a) { + return 'unittest2'; + } }, + null + ] + } ); + }, + function () { + var bReturn = + $('#example tbody tr:eq(0) td:eq(2)').html() == 'unittest1' && + $('#example tbody tr:eq(0) td:eq(3)').html() == 'unittest2'; + return bReturn; } + ); + + + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aoColumns.iDataSort.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aoColumns.iDataSort.js new file mode 100755 index 0000000..6c0c705 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aoColumns.iDataSort.js @@ -0,0 +1,90 @@ +// DATA_TEMPLATE: js_data +oTest.fnStart( "aoColumns.iDataSort" ); + +$(document).ready( function () { + /* Should know that sorting already works by default from other tests, so we can jump + * right in here + */ + var oTable = $('#example').dataTable( { + "aaData": gaaData, + "aoColumns": [ + null, + { "iDataSort": 4 }, + null, + null, + null + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "Sorting on first column is uneffected", + null, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == 'Gecko'; } + ); + + oTest.fnTest( + "Sorting on second column is the order of the fifth", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'A'; } + ); + + oTest.fnTest( + "Reserve sorting on second column uses fifth column as well", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'X'; } + ); + + oTest.fnTest( + "Sorting on 5th column retains it's own sorting", + function () { $('#example thead th:eq(4)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'A'; } + ); + + + oTest.fnTest( + "Use 2nd col for sorting 5th col and via-versa - no effect on first col sorting", + function () { + mTmp = 0; + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aaData": gaaData, + "aoColumns": [ + null, + { "iDataSort": 4 }, + null, + null, + { "iDataSort": 1 } + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == 'Gecko'; } + ); + + oTest.fnTest( + "2nd col sorting uses fifth col", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'A'; } + ); + + oTest.fnTest( + "2nd col sorting uses fifth col - reversed", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'X'; } + ); + + oTest.fnTest( + "5th col sorting uses 2nd col", + function () { $('#example thead th:eq(4)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'All others'; } + ); + + oTest.fnTest( + "5th col sorting uses 2nd col - reversed", + function () { $('#example thead th:eq(4)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'Seamonkey 1.1'; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aoColumns.sClass.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aoColumns.sClass.js new file mode 100755 index 0000000..b99cf18 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aoColumns.sClass.js @@ -0,0 +1,115 @@ +// DATA_TEMPLATE: js_data +oTest.fnStart( "aoColumns.sClass" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "aaData": gaaData + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "By default the test class hasn't been applied to the column (sanity!)", + null, + function () { return $('#example tbody tr:eq(0) td:eq(2)').hasClass('unittest') == false; } + ); + + oTest.fnTest( + "Add a class to a single column - first row", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "aoColumns": [ + null, + null, + { "sClass": 'unittest' }, + null, + null + ] + } ); + }, + function () { return $('#example tbody tr:eq(1) td:eq(2)').hasClass('unittest'); } + ); + + oTest.fnTest( + "Add a class to a single column - third row", + null, + function () { return $('#example tbody tr:eq(3) td:eq(2)').hasClass('unittest'); } + ); + + oTest.fnTest( + "Add a class to a single column - last row", + null, + function () { return $('#example tbody tr:eq(9) td:eq(2)').hasClass('unittest'); } + ); + + oTest.fnTest( + "Add a class to a single column - has not applied to other columns - 1st", + null, + function () { return $('#example tbody tr:eq(3) td:eq(0)').hasClass('unittest') == false; } + ); + + oTest.fnTest( + "Add a class to a single column - has not applied to other columns - 5th", + null, + function () { return $('#example tbody tr:eq(3) td:eq(4)').hasClass('unittest') == false; } + ); + + oTest.fnTest( + "Add a class to a single column - seventh row - second page", + function () { $('#example_next').click(); }, + function () { return $('#example tbody tr:eq(6) td:eq(2)').hasClass('unittest'); } + ); + + oTest.fnTest( + "Add a class to a single column - has not applied to header", + null, + function () { return $('#example thead tr:eq(3) th:eq(4)').hasClass('unittest') == false; } + ); + + oTest.fnTest( + "Add a class to a single column - has not applied to footer", + null, + function () { return $('#example thead tr:eq(3) th:eq(4)').hasClass('unittest') == false; } + ); + + + oTest.fnTest( + "Class defined for multiple columns - first row", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "aoColumns": [ + { "sClass": 'unittest2' }, + null, + null, + { "sClass": 'unittest1' }, + null + ] + } ); + }, + function () { + var bReturn = + $('#example tbody tr:eq(3) td:eq(0)').hasClass('unittest2') && + $('#example tbody tr:eq(8) td:eq(3)').hasClass('unittest1'); + return bReturn; + } + ); + + oTest.fnTest( + "Class defined for multiple columns - has not applied to other columns - 5th 1", + null, + function () { return $('#example tbody tr:eq(0) td:eq(4)').hasClass('unittest1') == false; } + ); + + oTest.fnTest( + "Class defined for multiple columns - has not applied to other columns - 5th 2", + null, + function () { return $('#example tbody tr:eq(6) td:eq(4)').hasClass('unittest2') == false; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aoColumns.sName.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aoColumns.sName.js new file mode 100755 index 0000000..b11f58c --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aoColumns.sName.js @@ -0,0 +1,28 @@ +// DATA_TEMPLATE: js_data +oTest.fnStart( "aoColumns.sName" ); + +/* This has no effect at all in DOM methods - so we just check that it has applied the name */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "aaData": gaaData, + "aoColumns": [ + null, + null, + null, + { "sName": 'unit test' }, + null + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "Names are stored in the columns object", + null, + function () { return oSettings.aoColumns[3].sName =="unit test"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aoColumns.sTitle.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aoColumns.sTitle.js new file mode 100755 index 0000000..da13f1c --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aoColumns.sTitle.js @@ -0,0 +1,82 @@ +// DATA_TEMPLATE: js_data +oTest.fnStart( "aoColumns.sTitle" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "aaData": gaaData + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "If not given, then the columns titles are empty", + null, + function () { + var jqNodes = $('#example thead tr:eq(0) th'); + var bReturn = + jqNodes[0].innerHTML == "Rendering engine" && + jqNodes[1].innerHTML == "Browser" && + jqNodes[2].innerHTML == "Platform(s)" && + jqNodes[3].innerHTML == "Engine version" && + jqNodes[4].innerHTML == "CSS grade"; + return bReturn; + } + ); + + oTest.fnTest( + "Can set a single column title - and others are read from DOM", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "aoColumns": [ + null, + { "sTitle": 'unit test' }, + null, + null, + null + ] + } ); + }, + function () { + var jqNodes = $('#example thead tr:eq(0) th'); + var bReturn = + jqNodes[0].innerHTML == "Rendering engine" && + jqNodes[1].innerHTML == "unit test" && + jqNodes[2].innerHTML == "Platform(s)" && + jqNodes[3].innerHTML == "Engine version" && + jqNodes[4].innerHTML == "CSS grade"; + return bReturn; + } + ); + + oTest.fnTest( + "Can set multiple column titles", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "aoColumns": [ + null, + { "sTitle": 'unit test 1' }, + null, + null, + { "sTitle": 'unit test 2' } + ] + } ); + }, + function () { + var jqNodes = $('#example thead tr:eq(0) th'); + var bReturn = + jqNodes[0].innerHTML == "Rendering engine" && + jqNodes[1].innerHTML == "unit test 1" && + jqNodes[2].innerHTML == "Platform(s)" && + jqNodes[3].innerHTML == "Engine version" && + jqNodes[4].innerHTML == "unit test 2"; + return bReturn; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aoColumns.sWidth.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aoColumns.sWidth.js new file mode 100755 index 0000000..960c056 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aoColumns.sWidth.js @@ -0,0 +1,87 @@ +// DATA_TEMPLATE: js_data +oTest.fnStart( "aoColumns.sWidth" ); + +/* NOTE - we need to disable the auto width for the majority of these test in order to preform + * these tests as the auto width will convert the width to a px value. We can do 'non-exact' tests + * with auto width enabled however to ensure it scales columns as required + */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "aaData": gaaData, + "bAutoWidth": false, + "aoColumns": [ + null, + { "sWidth": '40%' }, + null, + null, + null + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "With auto width disabled the width for one column is appled", + null, + function () { return $('#example thead th:eq(1)')[0].style.width == "40%"; } + ); + + oTest.fnTest( + "With auto width disabled the width for one column is appled", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aaData": gaaData, + "bAutoWidth": false, + "aoColumns": [ + null, + null, + { "sWidth": '20%' }, + { "sWidth": '30%' }, + null + ] + } ); + }, + function () { + var bReturn = + $('#example thead th:eq(2)')[0].style.width == "20%" && + $('#example thead th:eq(3)')[0].style.width == "30%"; + return bReturn; + } + ); + + + oTest.fnTest( + "With auto width, it will make the smallest column the largest with percentage width given", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aaData": gaaData, + "aoColumns": [ + null, + null, + null, + { "sWidth": '40%' }, + null + ] + } ); + }, + function () { + var anThs = $('#example thead th'); + var a0 = anThs[0].offsetWidth; + var a1 = anThs[1].offsetWidth; + var a2 = anThs[2].offsetWidth; + var a3 = anThs[3].offsetWidth; + var a4 = anThs[4].offsetWidth; + + if ( a3>a0 && a3>a1 && a3>a2 && a3>a4 ) + return true; + else + return false; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aoSearchCols.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aoSearchCols.js new file mode 100644 index 0000000..ac70b38 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/aoSearchCols.js @@ -0,0 +1,119 @@ +// DATA_TEMPLATE: js_data +oTest.fnStart( "aoSearchCols" ); + +/* We could be here forever testing this one, so we test a limited subset on a couple of colums */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "aaData": gaaData + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "Default should be to have a empty colums array", + null, + function () { + var bReturn = + oSettings.aoPreSearchCols[0].sSearch == 0 && !oSettings.aoPreSearchCols[0].bRegex && + oSettings.aoPreSearchCols[1].sSearch == 0 && !oSettings.aoPreSearchCols[1].bRegex && + oSettings.aoPreSearchCols[2].sSearch == 0 && !oSettings.aoPreSearchCols[2].bRegex && + oSettings.aoPreSearchCols[3].sSearch == 0 && !oSettings.aoPreSearchCols[3].bRegex && + oSettings.aoPreSearchCols[4].sSearch == 0 && !oSettings.aoPreSearchCols[4].bRegex; + return bReturn; + } + ); + + + oTest.fnTest( + "Search on a single column - no regex statement given", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aaData": gaaData, + "aoSearchCols": [ + null, + { "sSearch": "Mozilla" }, + null, + { "sSearch": "1" }, + null + ] + } ); + }, + function () { return $('#example_info').html() == "Showing 1 to 9 of 9 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Search on two columns - no regex statement given", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aaData": gaaData, + "aoSearchCols": [ + null, + { "sSearch": "Mozilla" }, + null, + { "sSearch": "1.5" }, + null + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "1.5"; } + ); + + oTest.fnTest( + "Search on single column - escape regex false", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aaData": gaaData, + "aoSearchCols": [ + { "sSearch": ".*ML", "bEscapeRegex": false }, + null, + null, + null, + null + ] + } ); + }, + function () { return $('#example_info').html() == "Showing 1 to 3 of 3 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Search on two columns - escape regex false on first, true on second", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aaData": gaaData, + "aoSearchCols": [ + { "sSearch": ".*ML", "bEscapeRegex": false }, + { "sSearch": "3.3", "bEscapeRegex": true }, + null, + null, + null + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Konqureror 3.3"; } + ); + + oTest.fnTest( + "Search on two columns (no records) - escape regex false on first, true on second", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aaData": gaaData, + "aoSearchCols": [ + { "sSearch": ".*ML", "bEscapeRegex": false }, + { "sSearch": "Allan", "bEscapeRegex": true }, + null, + null, + null + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; } + ); + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/asStripClasses.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/asStripClasses.js new file mode 100644 index 0000000..fa3af82 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/asStripClasses.js @@ -0,0 +1,100 @@ +// DATA_TEMPLATE: js_data +oTest.fnStart( "asStripeClasses" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable( { + "aaData": gaaData + } ); + + oTest.fnTest( + "Default row striping is applied", + null, + function () { + return $('#example tbody tr:eq(0)').hasClass('odd') && + $('#example tbody tr:eq(1)').hasClass('even') && + $('#example tbody tr:eq(2)').hasClass('odd') && + $('#example tbody tr:eq(3)').hasClass('even'); + } + ); + + oTest.fnTest( + "Row striping on the second page", + function () { $('#example_next').click(); }, + function () { + return $('#example tbody tr:eq(0)').hasClass('odd') && + $('#example tbody tr:eq(1)').hasClass('even') && + $('#example tbody tr:eq(2)').hasClass('odd') && + $('#example tbody tr:eq(3)').hasClass('even'); + } + ); + + /* No striping */ + oTest.fnTest( + "No row striping", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "asStripeClasses": [] + } ); + }, + function () { + return $('#example tbody tr:eq(0)')[0].className == "" && + $('#example tbody tr:eq(1)')[0].className == "" && + $('#example tbody tr:eq(2)')[0].className == "" && + $('#example tbody tr:eq(3)')[0].className == ""; + } + ); + + /* Custom striping */ + oTest.fnTest( + "Custom striping [2]", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "asStripeClasses": [ 'test1', 'test2' ] + } ); + }, + function () { + return $('#example tbody tr:eq(0)').hasClass('test1') && + $('#example tbody tr:eq(1)').hasClass('test2') && + $('#example tbody tr:eq(2)').hasClass('test1') && + $('#example tbody tr:eq(3)').hasClass('test2'); + } + ); + + + /* long array of striping */ + oTest.fnTest( + "Custom striping [4]", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "asStripeClasses": [ 'test1', 'test2', 'test3', 'test4' ] + } ); + }, + function () { + return $('#example tbody tr:eq(0)').hasClass('test1') && + $('#example tbody tr:eq(1)').hasClass('test2') && + $('#example tbody tr:eq(2)').hasClass('test3') && + $('#example tbody tr:eq(3)').hasClass('test4'); + } + ); + + oTest.fnTest( + "Custom striping is restarted on second page [2]", + function () { $('#example_next').click(); }, + function () { + return $('#example tbody tr:eq(0)').hasClass('test1') && + $('#example tbody tr:eq(1)').hasClass('test2') && + $('#example tbody tr:eq(2)').hasClass('test3') && + $('#example tbody tr:eq(3)').hasClass('test4'); + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/bAutoWidth.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/bAutoWidth.js new file mode 100644 index 0000000..094fe15 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/bAutoWidth.js @@ -0,0 +1,142 @@ +// DATA_TEMPLATE: js_data +oTest.fnStart( "bAutoWidth" ); + +/* It's actually a little tricky to test this. We can't test absolute numbers because + * different browsers and different platforms will render the width of the columns slightly + * differently. However, we certainly can test the principle of what should happen (column + * width doesn't change over pages) + */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "aaData": gaaData + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "Auto width is enabled by default", + null, + function () { return oSettings.oFeatures.bAutoWidth; } + ); + + oTest.fnTest( + "First column has a width assigned to it", + null, + function () { return $('#example thead th:eq(0)').attr('style').match(/width/i); } + ); + + /* + This would seem like a better test - but there appear to be difficulties with tables + which are bigger (calculated) than there is actually room for. I suspect this is actually + a bug in datatables + oTest.fnTest( + "Check column widths on first page match second page", + null, + function () { + var anThs = $('#example thead th'); + var a0 = anThs[0].offsetWidth; + var a1 = anThs[1].offsetWidth; + var a2 = anThs[2].offsetWidth; + var a3 = anThs[3].offsetWidth; + var a4 = anThs[4].offsetWidth; + $('#example_next').click(); + var b0 = anThs[0].offsetWidth; + var b1 = anThs[1].offsetWidth; + var b2 = anThs[2].offsetWidth; + var b3 = anThs[3].offsetWidth; + var b4 = anThs[4].offsetWidth; + console.log( a0, b0, a1, b1, a2, b2, a3, b3 ); + if ( a0==b0 && a1==b1 && a2==b2 && a3==b3 ) + return true; + else + return false; + } + ); + + oTest.fnTest( + "Check column widths on second page match thid page", + null, + function () { + var anThs = $('#example thead th'); + var a0 = anThs[0].offsetWidth; + var a1 = anThs[1].offsetWidth; + var a2 = anThs[2].offsetWidth; + var a3 = anThs[3].offsetWidth; + var a4 = anThs[4].offsetWidth; + $('#example_next').click(); + var b0 = anThs[0].offsetWidth; + var b1 = anThs[1].offsetWidth; + var b2 = anThs[2].offsetWidth; + var b3 = anThs[3].offsetWidth; + var b4 = anThs[4].offsetWidth; + if ( a0==b0 && a1==b1 && a2==b2 && a3==b3 ) + return true; + else + return false; + } + ); + */ + + /* Check can disable */ + oTest.fnTest( + "Auto width can be disabled", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aaData": gaaData, + "bAutoWidth": false + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oFeatures.bAutoWidth == false; } + ); + + oTest.fnTest( + "First column does not have a width assigned to it", + null, + function () { return $('#example thead th:eq(0)').attr('style') == null; } + ); + + /* + oTest.fnTest( + "Check column widths on first page do not match second page", + null, + function () { + var anThs = $('#example thead th'); + var a0 = anThs[0].offsetWidth; + var a1 = anThs[1].offsetWidth; + var a2 = anThs[2].offsetWidth; + var a3 = anThs[3].offsetWidth; + var a4 = anThs[4].offsetWidth; + $('#example_next').click(); + var b0 = anThs[0].offsetWidth; + var b1 = anThs[1].offsetWidth; + var b2 = anThs[2].offsetWidth; + var b3 = anThs[3].offsetWidth; + var b4 = anThs[4].offsetWidth; + if ( a0==b0 && a1==b1 && a2==b2 && a3==b3 ) + return false; + else + return true; + } + ); + */ + + /* Enable makes no difference */ + oTest.fnTest( + "Auto width enabled override", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aaData": gaaData, + "bAutoWidth": true + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oFeatures.bAutoWidth; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/bFilter.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/bFilter.js new file mode 100644 index 0000000..d838e4a --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/bFilter.js @@ -0,0 +1,44 @@ +// DATA_TEMPLATE: js_data +oTest.fnStart( "bFilter" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable( { + "aaData": gaaData + } ); + + oTest.fnTest( + "Filtering div exists by default", + null, + function () { return document.getElementById('example_filter') != null; } + ); + + /* Check can disable */ + oTest.fnTest( + "Fltering can be disabled", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "bFilter": false + } ); + }, + function () { return document.getElementById('example_filter') == null; } + ); + + /* Enable makes no difference */ + oTest.fnTest( + "Filtering enabled override", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "bFilter": true + } ); + }, + function () { return document.getElementById('example_filter') != null; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/bInfo.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/bInfo.js new file mode 100644 index 0000000..60a4273 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/bInfo.js @@ -0,0 +1,44 @@ +// DATA_TEMPLATE: js_data +oTest.fnStart( "bInfo" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable( { + "aaData": gaaData + } ); + + oTest.fnTest( + "Info div exists by default", + null, + function () { return document.getElementById('example_info') != null; } + ); + + /* Check can disable */ + oTest.fnTest( + "Info can be disabled", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "bInfo": false + } ); + }, + function () { return document.getElementById('example_info') == null; } + ); + + /* Enable makes no difference */ + oTest.fnTest( + "Info enabled override", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "bInfo": true + } ); + }, + function () { return document.getElementById('example_info') != null; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/bLengthChange.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/bLengthChange.js new file mode 100644 index 0000000..d67b4d2 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/bLengthChange.js @@ -0,0 +1,75 @@ +// DATA_TEMPLATE: js_data +oTest.fnStart( "bLengthChange" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable( { + "aaData": gaaData + } ); + + oTest.fnTest( + "Length div exists by default", + null, + function () { return document.getElementById('example_length') != null; } + ); + + oTest.fnTest( + "Four default options", + null, + function () { return $("select[name=example_length] option").length == 4; } + ); + + oTest.fnTest( + "Default options", + null, + function () { + var opts = $("select[name='example_length'] option"); + return opts[0].getAttribute('value') == 10 && opts[1].getAttribute('value') == 25 && + opts[2].getAttribute('value') == 50 && opts[3].getAttribute('value') == 100; + } + ); + + oTest.fnTest( + "Info takes length into account", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 57 entries"; } + ); + + /* Check can disable */ + oTest.fnTest( + "Change length can be disabled", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "bLengthChange": false + } ); + }, + function () { return document.getElementById('example_length') == null; } + ); + + oTest.fnTest( + "Information takes length disabled into account", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 57 entries"; } + ); + + /* Enable makes no difference */ + oTest.fnTest( + "Length change enabled override", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "bLengthChange": true + } ); + }, + function () { return document.getElementById('example_length') != null; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/bPaginate.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/bPaginate.js new file mode 100644 index 0000000..d386bbf --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/bPaginate.js @@ -0,0 +1,59 @@ +// DATA_TEMPLATE: js_data +oTest.fnStart( "bPaginate" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable( { + "aaData": gaaData + } ); + + oTest.fnTest( + "Pagiantion div exists by default", + null, + function () { return document.getElementById('example_paginate') != null; } + ); + + oTest.fnTest( + "Information div takes paging into account", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 57 entries"; } + ); + + /* Check can disable */ + oTest.fnTest( + "Pagiantion can be disabled", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "bPaginate": false + } ); + }, + function () { return document.getElementById('example_paginate') == null; } + ); + + oTest.fnTest( + "Information div takes paging disabled into account", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 57 of 57 entries"; } + ); + + /* Enable makes no difference */ + oTest.fnTest( + "Pagiantion enabled override", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "bPaginate": true + } ); + }, + function () { return document.getElementById('example_paginate') != null; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/bProcessing.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/bProcessing.js new file mode 100644 index 0000000..1408656 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/bProcessing.js @@ -0,0 +1,103 @@ +// DATA_TEMPLATE: js_data +oTest.fnStart( "bProcessing" ); + +/* It's actually a bit hard to set this one due to the fact that it will only be shown + * when DataTables is doing some kind of processing. The server-side processing is a bit + * better to test this than here - so we just the interal functions to enable it and check + * that it is available + */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "aaData": gaaData + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "Processing is off by default", + null, + function () { return oSettings.oFeatures.bProcessing == false; } + ); + + oTest.fnTest( + "Processing div is not in the DOM", + function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); }, + function () { return document.getElementById('example_processing') == null; } + ); + + oTest.fnTest( + "Processing div cannot be shown", + function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); }, + function () { return document.getElementById('example_processing') == null; } + ); + + oTest.fnTest( + "Processing div cannot be hidden", + function () { oTable.oApi._fnProcessingDisplay( oSettings, false ); }, + function () { return document.getElementById('example_processing') == null; } + ); + + + /* Check can disable */ + oTest.fnTest( + "Processing can be enabled", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aaData": gaaData, + "bProcessing": true + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oFeatures.bProcessing == true; } + ); + + oTest.fnTest( + "Processing div is in the DOM", + function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); }, + function () { return document.getElementById('example_processing'); } + ); + + oTest.fnTest( + "Processing div is hidden by default", + function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); }, + function () { return document.getElementById('example_processing').style.visibility = "hidden"; } + ); + + oTest.fnTest( + "Processing div can be shown", + function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); }, + function () { return document.getElementById('example_processing').style.visibility = "visible"; } + ); + + oTest.fnTest( + "Processing div can be hidden", + function () { oTable.oApi._fnProcessingDisplay( oSettings, false ); }, + function () { return document.getElementById('example_processing').style.visibility = "hidden"; } + ); + + /* Enable makes no difference */ + oTest.fnTest( + "Processing disabled override", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aaData": gaaData, + "bProcessing": false + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oFeatures.bProcessing == false; } + ); + + oTest.fnTest( + "Processing div is not in the DOM", + function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); }, + function () { return document.getElementById('example_processing') == null; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/bServerSide.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/bServerSide.js new file mode 100644 index 0000000..65c75b1 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/bServerSide.js @@ -0,0 +1,20 @@ +// DATA_TEMPLATE: js_data +oTest.fnStart( "bServerSide" ); + +/* Not interested in server-side processing here other than to check that it is off */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "aaData": gaaData + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "Server side is off by default", + null, + function () { return oSettings.oFeatures.bServerSide == false; } + ); + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/bSort.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/bSort.js new file mode 100644 index 0000000..9107937 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/bSort.js @@ -0,0 +1,99 @@ +// DATA_TEMPLATE: js_data +oTest.fnStart( "bSort" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable( { + "aaData": gaaData + } ); + + oTest.fnTest( + "Sorting is on by default", + null, + function () { return $('#example tbody td:eq(0)').html() == "Gecko"; } + ); + + oTest.fnTest( + "Sorting Asc by default class applied", + null, + function () { return $('#example thead th:eq(0)').hasClass("sorting_asc"); } + ); + + oTest.fnTest( + "Click on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Sorting class removed from first column", + null, + function () { return $('#example thead th:eq(0)').hasClass("sorting_asc") != true; } + ); + + oTest.fnTest( + "Sorting asc class applied to second column", + null, + function () { return $('#example thead th:eq(1)').hasClass("sorting_asc"); } + ); + + oTest.fnTest( + "Reverse on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnTest( + "Sorting acs class removed from second column", + null, + function () { return $('#example thead th:eq(1)').hasClass("sorting_asc") != true; } + ); + + oTest.fnTest( + "Sorting desc class applied to second column", + null, + function () { return $('#example thead th:eq(1)').hasClass("sorting_desc"); } + ); + + /* Check can disable */ + oTest.fnTest( + "Pagiantion can be disabled", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "bSort": false + } ); + }, + function () { return $('#example tbody td:eq(3)').html() == "4"; } + ); + + oTest.fnTest( + "Click on second column has no effect", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "4"; } + ); + + oTest.fnTest( + "Reverse on second column has no effect", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "4"; } + ); + + /* Enable makes no difference */ + oTest.fnTest( + "Sorting enabled override", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "bSort": true + } ); + }, + function () { return $('#example tbody td:eq(0)').html() == "Gecko"; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/bSortClasses.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/bSortClasses.js new file mode 100644 index 0000000..5726561 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/bSortClasses.js @@ -0,0 +1,132 @@ +// DATA_TEMPLATE: js_data +oTest.fnStart( "bSortClasses" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable( { + "aaData": gaaData + } ); + + oTest.fnTest( + "Sorting classes are applied by default", + null, + function () { return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1'); } + ); + + oTest.fnTest( + "Sorting classes are applied to all required cells", + null, + function () { return $('#example tbody tr:eq(7) td:eq(0)').hasClass('sorting_1'); } + ); + + oTest.fnTest( + "Sorting classes are not applied to non-sorting columns", + null, + function () { return $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_1') == false; } + ); + + oTest.fnTest( + "Sorting multi-column - add column 1", + function () { + oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); }, + function () { + return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') && + $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2'); + } + ); + + oTest.fnTest( + "Sorting multi-column - add column 2", + function () { + oDispacher.click( $('#example thead th:eq(2)')[0], { 'shift': true } ); }, + function () { + return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') && + $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') && + $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3'); + } + ); + + oTest.fnTest( + "Sorting multi-column - add column 3", + function () { + oDispacher.click( $('#example thead th:eq(3)')[0], { 'shift': true } ); + }, + function () { + return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') && + $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') && + $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3') && + $('#example tbody tr:eq(0) td:eq(3)').hasClass('sorting_3'); + } + ); + + oTest.fnTest( + "Remove sorting classes on single column sort", + function () { + $('#example thead th:eq(4)').click(); + }, + function () { + return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false && + $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') == false && + $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3') == false && + $('#example tbody tr:eq(0) td:eq(3)').hasClass('sorting_3') == false; + } + ); + + oTest.fnTest( + "Sorting class 1 was added", + null, + function () { return $('#example tbody tr:eq(1) td:eq(4)').hasClass('sorting_1'); } + ); + + + /* Check can disable */ + oTest.fnTest( + "Sorting classes can be disabled", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "bSortClasses": false + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false; } + ); + + oTest.fnTest( + "Sorting classes disabled - add column 1 - no effect", + function () { + oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); }, + function () { + return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false && + $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') == false; + } + ); + + oTest.fnTest( + "Sorting classes disabled - add column 2 - no effect", + function () { + oDispacher.click( $('#example thead th:eq(2)')[0], { 'shift': true } ); }, + function () { + return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false && + $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') == false && + $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3') == false; + } + ); + + + /* Enable makes no difference */ + oTest.fnTest( + "Sorting classes enabled override", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "bSortClasses": true + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1'); } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/fnCreatedCell.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/fnCreatedCell.js new file mode 100755 index 0000000..59fe717 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/fnCreatedCell.js @@ -0,0 +1,158 @@ +// DATA_TEMPLATE: js_data +oTest.fnStart( "fnCreatedCell tests" ); + +$(document).ready( function () { + var tmp = 0; + + $('#example').dataTable( { + "aaData": gaaData, + "aoColumnDefs": [ { + fnCreatedCell: function () { + tmp++; + }, + "aTargets": ["_all"] + } ] + } ); + + oTest.fnTest( + "Cell created is called once for each cell on init", + null, + function () { return tmp===285; } + ); + + oTest.fnTest( + "Created isn't called back on other draws", + function () { $('#example th:eq(1)').click(); }, + function () { return tmp===285; } + ); + + oTest.fnTest( + "Four arguments for the function", + function () { + oSession.fnRestore(); + tmp = true; + + $('#example').dataTable( { + "aaData": gaaData, + "aoColumnDefs": [ { + fnCreatedRow: function () { + if ( arguments.length !== 4 ) { + tmp = false; + } + }, + "aTargets": ["_all"] + } ] + } ); + }, + function () { return tmp; } + ); + + oTest.fnTest( + "First argument is a TD element", + function () { + oSession.fnRestore(); + tmp = true; + + $('#example').dataTable( { + "aaData": gaaData, + "aoColumnDefs": [ { + fnCreatedRow: function () { + if ( arguments[0].nodeName !== "TD" ) { + tmp = false; + } + }, + "aTargets": ["_all"] + } ] + } ); + }, + function () { return tmp; } + ); + + oTest.fnTest( + "Second argument is the HTML value", + function () { + oSession.fnRestore(); + tmp = true; + + $('#example').dataTable( { + "aaData": gaaData, + "aoColumnDefs": [ { + fnCreatedRow: function () { + if ( arguments[1] != $('td').html() ) { + tmp = false; + } + }, + "aTargets": ["_all"] + } ] + } ); + }, + function () { return tmp; } + ); + + oTest.fnTest( + "Third argument is the data array", + function () { + oSession.fnRestore(); + tmp = true; + + $('#example').dataTable( { + "aaData": gaaData, + "aoColumnDefs": [ { + fnCreatedRow: function () { + if ( arguments[2].length !== 5 ) { + tmp = false; + } + }, + "aTargets": ["_all"] + } ] + } ); + }, + function () { return tmp; } + ); + + oTest.fnTest( + "Fourth argument is the data source for the row", + function () { + oSession.fnRestore(); + tmp = true; + + $('#example').dataTable( { + "aaData": gaaData, + "aoColumnDefs": [ { + fnCreatedRow: function () { + if ( arguments[2] !== this.fnSettings().aoData[ arguments[2] ]._aData ) { + tmp = false; + } + }, + "aTargets": ["_all"] + } ] + } ); + }, + function () { return tmp; } + ); + + oTest.fnTest( + "Fifth argument is the the col index", + function () { + oSession.fnRestore(); + tmp = true; + + $('#example').dataTable( { + "aaData": gaaData, + "aoColumnDefs": [ { + fnCreatedRow: function () { + if ( arguments[1] != $('td:eq('+arguments[4]+')', arguments[0].parentNode).html() ) { + tmp = false; + } + }, + "aTargets": ["_all"] + } ] + } ); + }, + function () { return tmp; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/fnCreatedRow.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/fnCreatedRow.js new file mode 100755 index 0000000..72b2ddd --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/fnCreatedRow.js @@ -0,0 +1,121 @@ +// DATA_TEMPLATE: js_data +oTest.fnStart( "fnCreatedRow tests" ); + +$(document).ready( function () { + var tmp = 0; + + $('#example').dataTable( { + "aaData": gaaData, + fnCreatedRow: function () { + tmp++; + } + } ); + + oTest.fnTest( + "Row created is called once for each row on init", + null, + function () { return tmp===57; } + ); + + oTest.fnTest( + "Created isn't called back on other draws", + function () { $('#example th:eq(1)').click(); }, + function () { return tmp===57; } + ); + + oTest.fnTest( + "Three arguments for the function", + function () { + oSession.fnRestore(); + tmp = true; + + $('#example').dataTable( { + "aaData": gaaData, + fnCreatedRow: function () { + if ( arguments.length !== 3 ) { + tmp = false; + } + } + } ); + }, + function () { return tmp; } + ); + + oTest.fnTest( + "First argument is a TR element", + function () { + oSession.fnRestore(); + tmp = true; + + $('#example').dataTable( { + "aaData": gaaData, + fnCreatedRow: function () { + if ( arguments[0].nodeName !== "TR" ) { + tmp = false; + } + } + } ); + }, + function () { return tmp; } + ); + + oTest.fnTest( + "Second argument is an array with 5 elements", + function () { + oSession.fnRestore(); + tmp = true; + + $('#example').dataTable( { + "aaData": gaaData, + fnCreatedRow: function () { + if ( arguments[1].length !== 5 ) { + tmp = false; + } + } + } ); + }, + function () { return tmp; } + ); + + oTest.fnTest( + "Third argument is the data source for the row", + function () { + oSession.fnRestore(); + tmp = true; + + $('#example').dataTable( { + "aaData": gaaData, + fnCreatedRow: function () { + if ( arguments[1] !== this.fnSettings().aoData[ arguments[2] ]._aData ) { + tmp = false; + } + } + } ); + }, + function () { return tmp; } + ); + + oTest.fnTest( + "TR element is tied to the correct data", + function () { + oSession.fnRestore(); + tmp = false; + + $('#example').dataTable( { + "aaData": gaaData, + fnCreatedRow: function (tr, data, index) { + if ( data[1] === "Firefox 1.0" ) { + if ( $('td:eq(3)', tr).html() == "1.7" ) { + tmp = true; + } + } + } + } ); + }, + function () { return tmp; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/fnDrawCallback.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/fnDrawCallback.js new file mode 100644 index 0000000..28d5871 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/fnDrawCallback.js @@ -0,0 +1,85 @@ +// DATA_TEMPLATE: js_data +oTest.fnStart( "fnDrawCallback" ); + +/* Fairly boring function compared to the others! */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "aaData": gaaData + } ); + var oSettings = oTable.fnSettings(); + var mPass; + + oTest.fnTest( + "Default should be null", + null, + function () { return oSettings.fnDrawCallback == null; } + ); + + + oTest.fnTest( + "One argument passed", + function () { + oSession.fnRestore(); + + mPass = -1; + $('#example').dataTable( { + "aaData": gaaData, + "fnDrawCallback": function ( ) { + mPass = arguments.length; + } + } ); + }, + function () { return mPass == 1; } + ); + + + oTest.fnTest( + "That one argument is the settings object", + function () { + oSession.fnRestore(); + + oTable = $('#example').dataTable( { + "aaData": gaaData, + "fnDrawCallback": function ( oSettings ) { + mPass = oSettings; + } + } ); + }, + function () { return oTable.fnSettings() == mPass; } + ); + + + oTest.fnTest( + "fnRowCallback called once on first draw", + function () { + oSession.fnRestore(); + + mPass = 0; + $('#example').dataTable( { + "aaData": gaaData, + "fnDrawCallback": function ( ) { + mPass++; + } + } ); + }, + function () { return mPass == 1; } + ); + + oTest.fnTest( + "fnRowCallback called once on each draw there after as well", + function () { + $('#example_next').click(); + $('#example_next').click(); + $('#example_next').click(); + }, + function () { return mPass == 4; } + ); + + + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/fnFooterCallback.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/fnFooterCallback.js new file mode 100644 index 0000000..f16b921 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/fnFooterCallback.js @@ -0,0 +1,240 @@ +// DATA_TEMPLATE: js_data +oTest.fnStart( "fnFooterCallback" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "aaData": gaaData + } ); + var oSettings = oTable.fnSettings(); + var mPass; + + oTest.fnTest( + "Default should be null", + null, + function () { return oSettings.fnFooterCallback == null; } + ); + + + oTest.fnTest( + "Five arguments passed", + function () { + oSession.fnRestore(); + + mPass = -1; + $('#example').dataTable( { + "aaData": gaaData, + "fnFooterCallback": function ( ) { + mPass = arguments.length; + } + } ); + }, + function () { return mPass == 5; } + ); + + + oTest.fnTest( + "fnRowCallback called once per draw", + function () { + oSession.fnRestore(); + + mPass = 0; + $('#example').dataTable( { + "aaData": gaaData, + "fnFooterCallback": function ( nFoot, aasData, iStart, iEnd, aiDisplay ) { + mPass++; + } + } ); + }, + function () { return mPass == 1; } + ); + + oTest.fnTest( + "fnRowCallback called on paging (i.e. another draw)", + function () { $('#example_next').click(); }, + function () { return mPass == 2; } + ); + + + oTest.fnTest( + "fnRowCallback allows us to alter row information", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "fnFooterCallback": function ( nFoot, aasData, iStart, iEnd, aiDisplay ) { + nFoot.getElementsByTagName('th')[0].innerHTML = "Displaying "+(iEnd-iStart)+" records"; + } + } ); + }, + function () { return $('#example tfoot th:eq(0)').html() == "Displaying 10 records"; } + ); + + + oTest.fnTest( + "Data array has length matching original data", + function () { + oSession.fnRestore(); + + mPass = true; + $('#example').dataTable( { + "aaData": gaaData, + "fnFooterCallback": function ( nFoot, aasData, iStart, iEnd, aiDisplay ) { + if ( aasData.length != 57 ) + { + mPass = false; + } + } + } ); + }, + function () { return mPass; } + ); + + oTest.fnTest( + "Data array's column lengths match original data", + function () { + oSession.fnRestore(); + + mPass = true; + $('#example').dataTable( { + "aaData": gaaData, + "fnFooterCallback": function ( nFoot, aasData, iStart, iEnd, aiDisplay ) { + for ( var i=0, iLen=aasData.length ; i<iLen ; i++ ) + { + if ( aasData[i].length != 5 ) + { + mPass = false; + } + } + } + } ); + }, + function () { return mPass; } + ); + + + oTest.fnTest( + "iStart correct on first page", + function () { + oSession.fnRestore(); + + mPass = true; + $('#example').dataTable( { + "aaData": gaaData, + "fnFooterCallback": function ( nFoot, aasData, iStart, iEnd, aiDisplay ) { + if ( iStart != 0 ) + { + mPass = false; + } + } + } ); + }, + function () { return mPass; } + ); + + + oTest.fnTest( + "iStart correct on second page", + function () { + oSession.fnRestore(); + + mPass = false; + $('#example').dataTable( { + "aaData": gaaData, + "fnFooterCallback": function ( nFoot, aasData, iStart, iEnd, aiDisplay ) { + if ( iStart == 10 ) + { + mPass = true; + } + } + } ); + $('#example_next').click(); + }, + function () { return mPass; } + ); + + + oTest.fnTest( + "iEnd correct on first page", + function () { + oSession.fnRestore(); + + mPass = true; + $('#example').dataTable( { + "aaData": gaaData, + "fnFooterCallback": function ( nFoot, aasData, iStart, iEnd, aiDisplay ) { + if ( iEnd != 10 ) + { + mPass = false; + } + } + } ); + }, + function () { return mPass; } + ); + + + oTest.fnTest( + "iEnd correct on second page", + function () { + oSession.fnRestore(); + + mPass = false; + $('#example').dataTable( { + "aaData": gaaData, + "fnFooterCallback": function ( nFoot, aasData, iStart, iEnd, aiDisplay ) { + if ( iEnd == 20 ) + { + mPass = true; + } + } + } ); + $('#example_next').click(); + }, + function () { return mPass; } + ); + + + oTest.fnTest( + "aiDisplay length is full data when not filtered", + function () { + oSession.fnRestore(); + + mPass = false; + $('#example').dataTable( { + "aaData": gaaData, + "fnFooterCallback": function ( nFoot, aasData, iStart, iEnd, aiDisplay ) { + if ( aiDisplay.length == 57 ) + { + mPass = true; + } + } + } ); + }, + function () { return mPass; } + ); + + oTest.fnTest( + "aiDisplay length is 9 when filtering on 'Mozilla'", + function () { + oSession.fnRestore(); + + mPass = false; + oTable = $('#example').dataTable( { + "aaData": gaaData, + "fnFooterCallback": function ( nFoot, aasData, iStart, iEnd, aiDisplay ) { + if ( aiDisplay.length == 9 ) + { + mPass = true; + } + } + } ); + oTable.fnFilter( "Mozilla" ); + }, + function () { return mPass; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/fnHeaderCallback.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/fnHeaderCallback.js new file mode 100644 index 0000000..124500f --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/fnHeaderCallback.js @@ -0,0 +1,240 @@ +// DATA_TEMPLATE: js_data +oTest.fnStart( "fnHeaderCallback" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "aaData": gaaData + } ); + var oSettings = oTable.fnSettings(); + var mPass; + + oTest.fnTest( + "Default should be null", + null, + function () { return oSettings.fnHeaderCallback == null; } + ); + + + oTest.fnTest( + "Five arguments passed", + function () { + oSession.fnRestore(); + + mPass = -1; + $('#example').dataTable( { + "aaData": gaaData, + "fnHeaderCallback": function ( ) { + mPass = arguments.length; + } + } ); + }, + function () { return mPass == 5; } + ); + + + oTest.fnTest( + "fnRowCallback called once per draw", + function () { + oSession.fnRestore(); + + mPass = 0; + $('#example').dataTable( { + "aaData": gaaData, + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + mPass++; + } + } ); + }, + function () { return mPass == 1; } + ); + + oTest.fnTest( + "fnRowCallback called on paging (i.e. another draw)", + function () { $('#example_next').click(); }, + function () { return mPass == 2; } + ); + + + oTest.fnTest( + "fnRowCallback allows us to alter row information", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + nHead.getElementsByTagName('th')[0].innerHTML = "Displaying "+(iEnd-iStart)+" records"; + } + } ); + }, + function () { return $('#example thead th:eq(0)').html() == "Displaying 10 records"; } + ); + + + oTest.fnTest( + "Data array has length matching original data", + function () { + oSession.fnRestore(); + + mPass = true; + $('#example').dataTable( { + "aaData": gaaData, + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + if ( aasData.length != 57 ) + { + mPass = false; + } + } + } ); + }, + function () { return mPass; } + ); + + oTest.fnTest( + "Data array's column lengths match original data", + function () { + oSession.fnRestore(); + + mPass = true; + $('#example').dataTable( { + "aaData": gaaData, + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + for ( var i=0, iLen=aasData.length ; i<iLen ; i++ ) + { + if ( aasData[i].length != 5 ) + { + mPass = false; + } + } + } + } ); + }, + function () { return mPass; } + ); + + + oTest.fnTest( + "iStart correct on first page", + function () { + oSession.fnRestore(); + + mPass = true; + $('#example').dataTable( { + "aaData": gaaData, + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + if ( iStart != 0 ) + { + mPass = false; + } + } + } ); + }, + function () { return mPass; } + ); + + + oTest.fnTest( + "iStart correct on second page", + function () { + oSession.fnRestore(); + + mPass = false; + $('#example').dataTable( { + "aaData": gaaData, + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + if ( iStart == 10 ) + { + mPass = true; + } + } + } ); + $('#example_next').click(); + }, + function () { return mPass; } + ); + + + oTest.fnTest( + "iEnd correct on first page", + function () { + oSession.fnRestore(); + + mPass = true; + $('#example').dataTable( { + "aaData": gaaData, + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + if ( iEnd != 10 ) + { + mPass = false; + } + } + } ); + }, + function () { return mPass; } + ); + + + oTest.fnTest( + "iEnd correct on second page", + function () { + oSession.fnRestore(); + + mPass = false; + $('#example').dataTable( { + "aaData": gaaData, + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + if ( iEnd == 20 ) + { + mPass = true; + } + } + } ); + $('#example_next').click(); + }, + function () { return mPass; } + ); + + + oTest.fnTest( + "aiDisplay length is full data when not filtered", + function () { + oSession.fnRestore(); + + mPass = false; + $('#example').dataTable( { + "aaData": gaaData, + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + if ( aiDisplay.length == 57 ) + { + mPass = true; + } + } + } ); + }, + function () { return mPass; } + ); + + oTest.fnTest( + "aiDisplay length is 9 when filtering on 'Mozilla'", + function () { + oSession.fnRestore(); + + mPass = false; + oTable = $('#example').dataTable( { + "aaData": gaaData, + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + if ( aiDisplay.length == 9 ) + { + mPass = true; + } + } + } ); + oTable.fnFilter( "Mozilla" ); + }, + function () { return mPass; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/fnInitComplete.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/fnInitComplete.js new file mode 100644 index 0000000..08580e5 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/fnInitComplete.js @@ -0,0 +1,83 @@ +// DATA_TEMPLATE: js_data +oTest.fnStart( "fnInitComplete" ); + +/* Fairly boring function compared to the others! */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "aaData": gaaData + } ); + var oSettings = oTable.fnSettings(); + var mPass; + + oTest.fnTest( + "Default should be null", + null, + function () { return oSettings.fnInitComplete == null; } + ); + + + oTest.fnTest( + "Two arguments passed", + function () { + oSession.fnRestore(); + + mPass = -1; + $('#example').dataTable( { + "aaData": gaaData, + "fnInitComplete": function ( ) { + mPass = arguments.length===2 && arguments[1]===undefined; + } + } ); + }, + function () { return mPass; } + ); + + + oTest.fnTest( + "That one argument is the settings object", + function () { + oSession.fnRestore(); + + oTable = $('#example').dataTable( { + "aaData": gaaData, + "fnInitComplete": function ( oSettings ) { + mPass = oSettings; + } + } ); + }, + function () { return oTable.fnSettings() == mPass; } + ); + + + oTest.fnTest( + "fnInitComplete called once on first draw", + function () { + oSession.fnRestore(); + + mPass = 0; + $('#example').dataTable( { + "aaData": gaaData, + "fnInitComplete": function ( ) { + mPass++; + } + } ); + }, + function () { return mPass == 1; } + ); + + oTest.fnTest( + "fnInitComplete never called there after", + function () { + $('#example_next').click(); + $('#example_next').click(); + $('#example_next').click(); + }, + function () { return mPass == 1; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/fnRowCallback.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/fnRowCallback.js new file mode 100644 index 0000000..db8f442 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/fnRowCallback.js @@ -0,0 +1,112 @@ +// DATA_TEMPLATE: js_data +oTest.fnStart( "fnRowCallback" ); + +/* Note - fnRowCallback MUST return the first arguments (modified or not) */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "aaData": gaaData + } ); + var oSettings = oTable.fnSettings(); + var mPass; + + oTest.fnTest( + "Default should be null", + null, + function () { return oSettings.fnRowCallback == null; } + ); + + + oTest.fnTest( + "Four arguments passed", + function () { + oSession.fnRestore(); + + mPass = -1; + $('#example').dataTable( { + "aaData": gaaData, + "fnRowCallback": function ( nTr ) { + mPass = arguments.length; + return nTr; + } + } ); + }, + function () { return mPass == 4; } + ); + + + oTest.fnTest( + "fnRowCallback called once for each drawn row", + function () { + oSession.fnRestore(); + + mPass = 0; + $('#example').dataTable( { + "aaData": gaaData, + "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) { + mPass++; + return nTr; + } + } ); + }, + function () { return mPass == 10; } + ); + + oTest.fnTest( + "fnRowCallback allows us to alter row information", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) { + $(nTr).addClass('unit_test'); + return nTr; + } + } ); + }, + function () { return $('#example tbody tr:eq(1)').hasClass('unit_test'); } + ); + + oTest.fnTest( + "Data array has length matching columns", + function () { + oSession.fnRestore(); + + mPass = true; + $('#example').dataTable( { + "aaData": gaaData, + "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) { + if ( asData.length != 5 ) + mPass = false; + return nTr; + } + } ); + }, + function () { return mPass; } + ); + + oTest.fnTest( + "Data array has length matching columns", + function () { + oSession.fnRestore(); + + mPass = true; + var iCount = 0; + $('#example').dataTable( { + "aaData": gaaData, + "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) { + if ( iCount != iDrawIndex ) + mPass = false; + iCount++; + return nTr; + } + } ); + }, + function () { return mPass; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/iDisplayLength.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/iDisplayLength.js new file mode 100644 index 0000000..fcefbfa --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/iDisplayLength.js @@ -0,0 +1,81 @@ +// DATA_TEMPLATE: js_data +oTest.fnStart( "iDisplayLength" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable( { + "aaData": gaaData + } ); + + oTest.fnTest( + "Default length is ten", + null, + function () { return $('#example tbody tr').length == 10; } + ); + + oTest.fnTest( + "Select menu shows 10", + null, + function () { return $('#example_length select').val() == 10; } + ); + + + oTest.fnTest( + "Set initial length to 25", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "iDisplayLength": 25 + } ); + }, + function () { return $('#example tbody tr').length == 25; } + ); + + oTest.fnTest( + "Select menu shows 25", + null, + function () { return $('#example_length select').val() == 25; } + ); + + + oTest.fnTest( + "Set initial length to 100", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "iDisplayLength": 100 + } ); + }, + function () { return $('#example tbody tr').length == 57; } + ); + + oTest.fnTest( + "Select menu shows 25", + null, + function () { return $('#example_length select').val() == 100; } + ); + + + oTest.fnTest( + "Set initial length to 23 (unknown select menu length)", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "iDisplayLength": 23 + } ); + }, + function () { return $('#example tbody tr').length == 23; } + ); + + oTest.fnTest( + "Select menu shows 10 (since 23 is unknow)", + null, + function () { return $('#example_length select').val() == 10; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/js_data_mixed_types.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/js_data_mixed_types.js new file mode 100644 index 0000000..e538935 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/js_data_mixed_types.js @@ -0,0 +1,392 @@ +// DATA_TEMPLATE: js_data_mixed_types +oTest.fnStart( "Sanity checks for DataTables with data from JS with mixed data types" ); + +$(document).ready( function () { + var oInit = { + "aaData": gaaData + }; + $('#example').dataTable( oInit ); + + oTest.fnTest( + "10 rows shown on the first page", + null, + function () { return $('#example tbody tr').length == 10; } + ); + + oTest.fnTest( + "Initial sort occured", + null, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "" && + $('#example tbody tr:eq(1) td:eq(0)').html() == "Gecko"; } + ); + + /* Need to use the WaitTest for sorting due to the setTimeout datatables uses */ + oTest.fnTest( + "Sorting (first click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "true"; } + ); + + oTest.fnTest( + "Sorting (second click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnTest( + "Sorting (third click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "true"; } + ); + + oTest.fnTest( + "Sorting (first click) on numeric column", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "-"; } + ); + + oTest.fnTest( + "Sorting (second click) on numeric column", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "522.1"; } + ); + + oTest.fnTest( + "Sorting multi-column (first click)", + function () { + $('#example thead th:eq(0)').click(); + oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); }, + function () { var b = + $('#example tbody tr:eq(1) td:eq(0)').html() == "Gecko" && + $('#example tbody tr:eq(1) td:eq(1)').html() == "false"; return b; } + ); + + oTest.fnTest( + "Sorting multi-column - sorting second column only", + function () { + $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "false"; } + ); + + /* Basic paging */ + oTest.fnTest( + "Paging to second page", + function () { $('#example_next').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "Firefox 1.5"; } + ); + + oTest.fnTest( + "Paging to first page", + function () { $('#example_previous').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "false"; } + ); + + oTest.fnTest( + "Attempting to page back beyond the first page", + function () { $('#example_previous').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "false"; } + ); + + /* Changing length */ + oTest.fnTest( + "Changing table length to 25 records", + function () { $("select[name=example_length]").val('25').change(); }, + function () { return $('#example tbody tr').length == 25; } + ); + + oTest.fnTest( + "Changing table length to 50 records", + function () { $("select[name=example_length]").val('50').change(); }, + function () { return $('#example tbody tr').length == 50; } + ); + + oTest.fnTest( + "Changing table length to 100 records", + function () { $("select[name=example_length]").val('100').change(); }, + function () { return $('#example tbody tr').length == 57; } + ); + + oTest.fnTest( + "Changing table length to 10 records", + function () { $("select[name=example_length]").val('10').change(); }, + function () { return $('#example tbody tr').length == 10; } + ); + + /* + * Information element + */ + oTest.fnTest( + "Information on zero config", + null, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Information on second page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 11 to 20 of 57 entries"; } + ); + + oTest.fnTest( + "Information on third page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 21 to 30 of 57 entries"; } + ); + + oTest.fnTest( + "Information on last page", + function () { + $('#example_next').click(); + $('#example_next').click(); + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 51 to 57 of 57 entries"; } + ); + + oTest.fnTest( + "Information back on first page", + function () { + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Information with 25 records", + function () { $("select[name=example_length]").val('25').change(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 25 of 57 entries"; } + ); + + oTest.fnTest( + "Information with 25 records - second page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 26 to 50 of 57 entries"; } + ); + + oTest.fnTest( + "Information with 100 records - first page", + function () { + $('#example_previous').click(); + $("select[name=example_length]").val('100').change(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 57 of 57 entries"; } + ); + + oTest.fnTest( + "Information back to 10 records", + function () { + $('#example_previous').click(); + $("select[name=example_length]").val('10').change(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Information with filter 'Win'", + function () { $('#example_filter input').val("Win").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' second page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' last page", + function () { + $('#example_next').click(); + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 31 to 31 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' back to first page", + function () { + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' second page - second time", + function () { + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter increased to 'Win 98'", + function () { $('#example_filter input').val("Win 98").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 9 of 9 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter decreased to 'Win'", + function () { $('#example_filter input').val("Win").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' second page - third time", + function () { + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter removed", + function () { $('#example_filter input').val("").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 57 entries"; } + ); + + + /* + * Filtering + */ + oTest.fnTest( + "Filter 'W' - rows", + function () { + /* Reset the table such that the old sorting doesn't mess things up */ + oSession.fnRestore(); + $('#example').dataTable( oInit ); + $('#example_filter input').val("W").keyup(); }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == ""; } + ); + + oTest.fnTest( + "Filter 'W' - info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 42 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Wi'", + function () { $('#example_filter input').val("Wi").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 32 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Win'", + function () { $('#example_filter input').val("Win").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting column 1", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "true"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting column 1 info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting column 1 reverse", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnTest( + "Filter 'Win XP' - maintaing reverse sorting col 1", + function () { $('#example_filter input').val("Win XP").keyup(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Internet Explorer 7"; } + ); + + oTest.fnTest( + "Filter 'Win XP' - sorting col 3", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "5"; } + ); + + oTest.fnTest( + "Filter 'Win XP' - sorting col 3 - reversed", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "7"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting col 3 - reversed info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 5 of 5 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'nothinghere'", + function () { $('#example_filter input').val("nothinghere").keyup(); }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == + "No matching records found"; } + ); + + oTest.fnTest( + "Filter 'nothinghere' - info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter back to blank and 1st column sorting", + function () { + $('#example_filter input').val("").keyup(); + $('#example thead th:eq(0)').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Prefixing a filter entry", + function () { + $('#example_filter input').val("Win").keyup(); + $('#example_filter input').val("GeckoWin").keyup(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Prefixing a filter entry with space", + function () { + $('#example_filter input').val("Gecko Win").keyup(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 17 entries (filtered from 57 total entries)"; } + ); + + + + + + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/oLanguage.oPaginate.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/oLanguage.oPaginate.js new file mode 100644 index 0000000..0e872c0 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/oLanguage.oPaginate.js @@ -0,0 +1,84 @@ +// DATA_TEMPLATE: js_data +oTest.fnStart( "oLanguage.oPaginate" ); + +/* Note that the paging language information only has relevence in full numbers */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "aaData": gaaData, + "sPaginationType": "full_numbers" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "oLanguage.oPaginate defaults", + null, + function () { + var bReturn = + oSettings.oLanguage.oPaginate.sFirst == "First" && + oSettings.oLanguage.oPaginate.sPrevious == "Previous" && + oSettings.oLanguage.oPaginate.sNext == "Next" && + oSettings.oLanguage.oPaginate.sLast == "Last"; + return bReturn; + } + ); + + oTest.fnTest( + "oLanguage.oPaginate defaults are in the DOM", + null, + function () { + var bReturn = + $('#example_paginate .first').html() == "First" && + $('#example_paginate .previous').html() == "Previous" && + $('#example_paginate .next').html() == "Next" && + $('#example_paginate .last').html() == "Last"; + return bReturn; + } + ); + + + oTest.fnTest( + "oLanguage.oPaginate can be defined", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aaData": gaaData, + "sPaginationType": "full_numbers", + "oLanguage": { + "oPaginate": { + "sFirst": "unit1", + "sPrevious": "test2", + "sNext": "unit3", + "sLast": "test4" + } + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { + var bReturn = + oSettings.oLanguage.oPaginate.sFirst == "unit1" && + oSettings.oLanguage.oPaginate.sPrevious == "test2" && + oSettings.oLanguage.oPaginate.sNext == "unit3" && + oSettings.oLanguage.oPaginate.sLast == "test4"; + return bReturn; + } + ); + + oTest.fnTest( + "oLanguage.oPaginate definitions are in the DOM", + null, + function () { + var bReturn = + $('#example_paginate .first').html() == "unit1" && + $('#example_paginate .previous').html() == "test2" && + $('#example_paginate .next').html() == "unit3" && + $('#example_paginate .last').html() == "test4"; + return bReturn; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/oLanguage.sInfo.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/oLanguage.sInfo.js new file mode 100644 index 0000000..0ce3ef4 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/oLanguage.sInfo.js @@ -0,0 +1,117 @@ +// DATA_TEMPLATE: js_data +oTest.fnStart( "oLanguage.sInfo" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "aaData": gaaData + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "Info language is 'Showing _START_ to _END_ of _TOTAL_ entries' by default", + null, + function () { return oSettings.oLanguage.sInfo == "Showing _START_ to _END_ of _TOTAL_ entries"; } + ); + + oTest.fnTest( + "Info language default is in the DOM", + null, + function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries"; } + ); + + + oTest.fnTest( + "Info language can be defined - without any macros", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aaData": gaaData, + "oLanguage": { + "sInfo": "unit test" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oLanguage.sInfo == "unit test"; } + ); + + oTest.fnTest( + "Info language definition is in the DOM", + null, + function () { return document.getElementById('example_info').innerHTML = "unit test"; } + ); + + oTest.fnTest( + "Info language can be defined - with macro _START_ only", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "oLanguage": { + "sInfo": "unit _START_ test" + } + } ); + }, + function () { return document.getElementById('example_info').innerHTML = "unit 1 test"; } + ); + + oTest.fnTest( + "Info language can be defined - with macro _END_ only", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "oLanguage": { + "sInfo": "unit _END_ test" + } + } ); + }, + function () { return document.getElementById('example_info').innerHTML = "unit 10 test"; } + ); + + oTest.fnTest( + "Info language can be defined - with macro _TOTAL_ only", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "oLanguage": { + "sInfo": "unit _END_ test" + } + } ); + }, + function () { return document.getElementById('example_info').innerHTML = "unit 57 test"; } + ); + + oTest.fnTest( + "Info language can be defined - with macros _START_ and _END_", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "oLanguage": { + "sInfo": "unit _START_ _END_ test" + } + } ); + }, + function () { return document.getElementById('example_info').innerHTML = "unit 1 10 test"; } + ); + + oTest.fnTest( + "Info language can be defined - with macros _START_, _END_ and _TOTAL_", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "oLanguage": { + "sInfo": "unit _START_ _END_ _TOTAL_ test" + } + } ); + }, + function () { return document.getElementById('example_info').innerHTML = "unit 1 10 57 test"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/oLanguage.sInfoEmpty.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/oLanguage.sInfoEmpty.js new file mode 100644 index 0000000..86d6152 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/oLanguage.sInfoEmpty.js @@ -0,0 +1,79 @@ +// DATA_TEMPLATE: js_data +oTest.fnStart( "oLanguage.sInfoEmpty" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "aaData": gaaData + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "Info empty language is 'Showing 0 to 0 of 0 entries' by default", + function () { oTable.fnFilter("nothinghere"); }, + function () { return oSettings.oLanguage.sInfoEmpty == "Showing 0 to 0 of 0 entries"; } + ); + + oTest.fnTest( + "Info empty language default is in the DOM", + null, + function () { + var bReturn = document.getElementById('example_info').innerHTML.replace( + ' '+oSettings.oLanguage.sInfoFiltered.replace( '_MAX_', '57' ), "" ) == + "Showing 0 to 0 of 0 entries"; + return bReturn; + } + ); + + + oTest.fnTest( + "Info empty language can be defined", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aaData": gaaData, + "oLanguage": { + "sInfoEmpty": "unit test" + } + } ); + oSettings = oTable.fnSettings(); + oTable.fnFilter("nothinghere"); + }, + function () { return oSettings.oLanguage.sInfoEmpty == "unit test"; } + ); + + oTest.fnTest( + "Info empty language default is in the DOM", + null, + function () { + var bReturn = document.getElementById('example_info').innerHTML.replace( + ' '+oSettings.oLanguage.sInfoFiltered.replace( '_MAX_', '57' ), "" ) == + "unit test"; + return bReturn; + } + ); + + + oTest.fnTest( + "Macro's not replaced", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aaData": gaaData, + "oLanguage": { + "sInfoEmpty": "unit _START_ _END_ _TOTAL_ test" + } + } ); + oTable.fnFilter("nothinghere"); + }, + function () { + var bReturn = document.getElementById('example_info').innerHTML.replace( + ' '+oSettings.oLanguage.sInfoFiltered.replace( '_MAX_', '57' ), "" ) == + "unit _START_ _END_ _TOTAL_ test"; + return bReturn; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/oLanguage.sInfoPostFix.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/oLanguage.sInfoPostFix.js new file mode 100644 index 0000000..d5a6dcb --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/oLanguage.sInfoPostFix.js @@ -0,0 +1,78 @@ +// DATA_TEMPLATE: js_data +oTest.fnStart( "oLanguage.sInfoPostFix" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "aaData": gaaData + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "Info post fix language is '' (blank) by default", + null, + function () { return oSettings.oLanguage.sInfoPostFix == ""; } + ); + + oTest.fnTest( + "Width no post fix, the basic info shows", + null, + function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries"; } + ); + + + oTest.fnTest( + "Info post fix language can be defined", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aaData": gaaData, + "oLanguage": { + "sInfoPostFix": "unit test" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oLanguage.sInfoPostFix == "unit test"; } + ); + + oTest.fnTest( + "Info empty language default is in the DOM", + null, + function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries unit test"; } + ); + + + oTest.fnTest( + "Macros have no effect in the post fix", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aaData": gaaData, + "oLanguage": { + "sInfoPostFix": "unit _START_ _END_ _TOTAL_ test" + } + } ); + }, + function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries unit _START_ _END_ _TOTAL_ test"; } + ); + + + oTest.fnTest( + "Post fix is applied after fintering info", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aaData": gaaData, + "oLanguage": { + "sInfoPostFix": "unit test" + } + } ); + oTable.fnFilter("nothinghere"); + }, + function () { return document.getElementById('example_info').innerHTML = "Showing 0 to 0 of 0 entries unit (filtered from 57 total entries) test"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/oLanguage.sLengthMenu.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/oLanguage.sLengthMenu.js new file mode 100644 index 0000000..f831d35 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/oLanguage.sLengthMenu.js @@ -0,0 +1,111 @@ +// DATA_TEMPLATE: js_data +oTest.fnStart( "oLanguage.sLengthMenu" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "aaData": gaaData + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "Menu language is 'Show _MENU_ entries' by default", + null, + function () { return oSettings.oLanguage.sLengthMenu == "Show _MENU_ entries"; } + ); + + oTest.fnTest( + "_MENU_ macro is replaced by select menu in DOM", + null, + function () { return $('select', oSettings.aanFeatures.l[0]).length == 1 } + ); + + oTest.fnTest( + "A label input is used", + null, + function () { return $('label', oSettings.aanFeatures.l[0]).length == 1 } + ); + + oTest.fnTest( + "Default is put into DOM", + null, + function () { + var anChildren = $('label',oSettings.aanFeatures.l[0])[0].childNodes; + var bReturn = + anChildren[0].nodeValue == "Show " && + anChildren[2].nodeValue == " entries"; + return bReturn; + } + ); + + + oTest.fnTest( + "Menu length language can be defined - no _MENU_ macro", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aaData": gaaData, + "oLanguage": { + "sLengthMenu": "unit test" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oLanguage.sLengthMenu == "unit test"; } + ); + + oTest.fnTest( + "Menu length language definition is in the DOM", + null, + function () { + return $('label', oSettings.aanFeatures.l[0]).text() == "unit test"; + } + ); + + + oTest.fnTest( + "Menu length language can be defined - with _MENU_ macro", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aaData": gaaData, + "oLanguage": { + "sLengthMenu": "unit _MENU_ test" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { + var anChildren = $('label',oSettings.aanFeatures.l[0])[0].childNodes; + var bReturn = + anChildren[0].nodeValue == "unit " && + anChildren[2].nodeValue == " test"; + return bReturn; + } + ); + + + oTest.fnTest( + "Only the _MENU_ macro", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aaData": gaaData, + "oLanguage": { + "sLengthMenu": "_MENU_" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { + var anChildren = oSettings.aanFeatures.l[0].childNodes; + var bReturn = + anChildren.length == 1 && + $('select', oSettings.aanFeatures.l[0]).length == 1; + return bReturn; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/oLanguage.sProcessing.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/oLanguage.sProcessing.js new file mode 100644 index 0000000..f2e09be --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/oLanguage.sProcessing.js @@ -0,0 +1,49 @@ +// DATA_TEMPLATE: js_data +oTest.fnStart( "oLanguage.sProcessing" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "aaData": gaaData, + "bProcessing": true + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "Processing language is 'Processing...' by default", + null, + function () { return oSettings.oLanguage.sProcessing == "Processing..."; } + ); + + oTest.fnTest( + "Processing language default is in the DOM", + null, + function () { return document.getElementById('example_processing').innerHTML = "Processing..."; } + ); + + + oTest.fnTest( + "Processing language can be defined", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aaData": gaaData, + "bProcessing": true, + "oLanguage": { + "sProcessing": "unit test" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oLanguage.sProcessing == "unit test"; } + ); + + oTest.fnTest( + "Processing language definition is in the DOM", + null, + function () { return document.getElementById('example_processing').innerHTML = "unit test"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/oLanguage.sSearch.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/oLanguage.sSearch.js new file mode 100644 index 0000000..1f8d24f --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/oLanguage.sSearch.js @@ -0,0 +1,70 @@ +// DATA_TEMPLATE: js_data +oTest.fnStart( "oLanguage.sSearch" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "aaData": gaaData + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "Search language is 'Search:' by default", + null, + function () { return oSettings.oLanguage.sSearch == "Search:"; } + ); + + oTest.fnTest( + "A label input is used", + null, + function () { return $('label', oSettings.aanFeatures.f[0]).length == 1 } + ); + + oTest.fnTest( + "Search language default is in the DOM", + null, + function () { return $('label', oSettings.aanFeatures.f[0]).text() + == "Search: "; } + ); + + + oTest.fnTest( + "Search language can be defined", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aaData": gaaData, + "oLanguage": { + "sSearch": "unit test" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oLanguage.sSearch == "unit test"; } + ); + + oTest.fnTest( + "Info language definition is in the DOM", + null, + function () { return $('label', oSettings.aanFeatures.f[0]).text().indexOf('unit test') !== -1; } + ); + + + oTest.fnTest( + "Blank search has a no (separator) inserted", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aaData": gaaData, + "oLanguage": { + "sSearch": "" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { return document.getElementById('example_filter').childNodes.length == 1; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/oLanguage.sUrl.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/oLanguage.sUrl.js new file mode 100644 index 0000000..e28379d --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/oLanguage.sUrl.js @@ -0,0 +1,62 @@ +// DATA_TEMPLATE: js_data +oTest.fnStart( "oLanguage.sUrl" ); + +/* Note that we only test the internal storage of language information pulled form a file here + * as the other language tests will check it goes into the DOM correctly + */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "aaData": gaaData + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "sUrl is blank by default", + null, + function () { return oSettings.oLanguage.sUrl == ""; } + ); + + + oTest.fnWaitTest( + "Loading of German file loads language information", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aaData": gaaData, + "oLanguage": { + "sUrl": "../../../examples/examples_support/de_DE.txt" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { + var bReturn = + oSettings.oLanguage.sProcessing == "Bitte warten..." && + oSettings.oLanguage.sLengthMenu == "_MENU_ Einträge anzeigen" && + oSettings.oLanguage.sZeroRecords == "Keine Einträge vorhanden." && + oSettings.oLanguage.sInfo == "_START_ bis _END_ von _TOTAL_ Einträgen" && + oSettings.oLanguage.sInfoEmpty == "0 bis 0 von 0 Einträgen" && + oSettings.oLanguage.sInfoFiltered == "(gefiltert von _MAX_ Einträgen)" && + oSettings.oLanguage.sInfoPostFix == "" && + oSettings.oLanguage.sSearch == "Suchen" && + oSettings.oLanguage.oPaginate.sFirst == "Erster" && + oSettings.oLanguage.oPaginate.sPrevious == "Zurück" && + oSettings.oLanguage.oPaginate.sNext == "Nächster" && + oSettings.oLanguage.oPaginate.sLast == "Letzter"; + + return bReturn; + } + ); + + /* One DOM check just to ensure that they go into the DOM */ + oTest.fnTest( + "Loaded language goes into the DOM", + null, + function () { return document.getElementById('example_info').innerHTML = "1 bis 10 von 57 Einträgen"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/oLanguage.sZeroRecords.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/oLanguage.sZeroRecords.js new file mode 100644 index 0000000..a52651a --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/oLanguage.sZeroRecords.js @@ -0,0 +1,48 @@ +// DATA_TEMPLATE: js_data +oTest.fnStart( "oLanguage.sZeroRecords" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "aaData": gaaData + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "Zero records language is 'No matching records found' by default", + null, + function () { return oSettings.oLanguage.sZeroRecords == "No matching records found"; } + ); + + oTest.fnTest( + "Text is shown when empty table (after filtering)", + function () { oTable.fnFilter('nothinghere'); }, + function () { return $('#example tbody tr td')[0].innerHTML == "No matching records found" } + ); + + + + oTest.fnTest( + "Zero records language can be defined", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aaData": gaaData, + "oLanguage": { + "sZeroRecords": "unit test" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oLanguage.sZeroRecords == "unit test"; } + ); + + oTest.fnTest( + "Text is shown when empty table (after filtering)", + function () { oTable.fnFilter('nothinghere2'); }, + function () { return $('#example tbody tr td')[0].innerHTML == "unit test" } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/oSearch.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/oSearch.js new file mode 100644 index 0000000..fa935d6 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/oSearch.js @@ -0,0 +1,108 @@ +// DATA_TEMPLATE: js_data +oTest.fnStart( "oSearch" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "aaData": gaaData + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "Default values should be blank", + null, + function () { + var bReturn = oSettings.oPreviousSearch.sSearch == "" && + !oSettings.oPreviousSearch.bRegex; + return bReturn; + } + ); + + /* This test might be considered iffy since the full object isn't given, but it's reasonable to + * expect DataTables to cope with this. It should just assumine regex false + */ + oTest.fnTest( + "Search term only in object", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aaData": gaaData, + "oSearch": { + "sSearch": "Mozilla" + } + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Gecko"; } + ); + + oTest.fnTest( + "New search will kill old one", + function () { + oTable.fnFilter("Opera"); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Presto"; } + ); + + oTest.fnTest( + "Search plain text term and escape regex true", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "oSearch": { + "sSearch": "DS", + "bRegex": false + } + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Nintendo DS browser"; } + ); + + oTest.fnTest( + "Search plain text term and escape regex false", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "oSearch": { + "sSearch": "Opera", + "bRegex": true + } + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Presto"; } + ); + + oTest.fnTest( + "Search regex text term and escape regex true", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "oSearch": { + "sSearch": "1.*", + "bRegex": false + } + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; } + ); + + oTest.fnTest( + "Search regex text term and escape regex false", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "oSearch": { + "sSearch": "1.*", + "bRegex": true + } + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Gecko"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/sAjaxSource.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/sAjaxSource.js new file mode 100644 index 0000000..201ae73 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/sAjaxSource.js @@ -0,0 +1,20 @@ +// DATA_TEMPLATE: js_data +oTest.fnStart( "sAjaxSource" ); + +/* Not interested in ajax source here other than to check it's default */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "aaData": gaaData + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "Server side is off by default", + null, + function () { return oSettings.sAjaxSource == null; } + ); + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/sDom.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/sDom.js new file mode 100644 index 0000000..8293972 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/sDom.js @@ -0,0 +1,262 @@ +// DATA_TEMPLATE: js_data +oTest.fnStart( "sDom" ); + +/* This is going to be brutal on the browser! There is a lot that can be tested here... */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "aaData": gaaData + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "Default DOM varaible", + null, + function () { return oSettings.sDom == "lfrtip"; } + ); + + oTest.fnTest( + "Default DOM in document", + null, + function () { + var nNodes = $('#demo div, #demo table'); + var nWrapper = document.getElementById('example_wrapper'); + var nLength = document.getElementById('example_length'); + var nFilter = document.getElementById('example_filter'); + var nInfo = document.getElementById('example_info'); + var nPaging = document.getElementById('example_paginate'); + var nTable = document.getElementById('example'); + + var bReturn = + nNodes[0] == nWrapper && + nNodes[1] == nLength && + nNodes[2] == nFilter && + nNodes[3] == nTable && + nNodes[4] == nInfo && + nNodes[5] == nPaging; + return bReturn; + } + ); + + oTest.fnTest( + "Check example 1 in code propagates", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aaData": gaaData, + "sDom": '<"wrapper"flipt>' + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.sDom == '<"wrapper"flipt>'; } + ); + + oTest.fnTest( + "Check example 1 in DOM", + null, + function () { + var jqNodes = $('#demo div, #demo table'); + var nNodes = []; + + /* Strip the paging nodes */ + for ( var i=0, iLen=jqNodes.length ; i<iLen ; i++ ) + { + if ( jqNodes[i].getAttribute('id') != "example_previous" && + jqNodes[i].getAttribute('id') != "example_next" ) + { + nNodes.push( jqNodes[i] ); + } + } + + var nWrapper = document.getElementById('example_wrapper'); + var nLength = document.getElementById('example_length'); + var nFilter = document.getElementById('example_filter'); + var nInfo = document.getElementById('example_info'); + var nPaging = document.getElementById('example_paginate'); + var nTable = document.getElementById('example'); + var nCustomWrapper = $('div.wrapper')[0]; + + var bReturn = + nNodes[0] == nWrapper && + nNodes[1] == nCustomWrapper && + nNodes[2] == nFilter && + nNodes[3] == nLength && + nNodes[4] == nInfo && + nNodes[5] == nPaging && + nNodes[6] == nTable; + return bReturn; + } + ); + + oTest.fnTest( + "Check example 2 in DOM", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "sDom": '<lf<t>ip>' + } ); + }, + function () { + var jqNodes = $('#demo div, #demo table'); + var nNodes = []; + var nCustomWrappers = [] + + /* Strip the paging nodes */ + for ( var i=0, iLen=jqNodes.length ; i<iLen ; i++ ) + { + if ( jqNodes[i].getAttribute('id') != "example_previous" && + jqNodes[i].getAttribute('id') != "example_next" ) + { + nNodes.push( jqNodes[i] ); + } + + /* Only the two custom divs don't have class names */ + if ( jqNodes[i].className == "" ) + { + nCustomWrappers.push( jqNodes[i] ); + } + } + + var nWrapper = document.getElementById('example_wrapper'); + var nLength = document.getElementById('example_length'); + var nFilter = document.getElementById('example_filter'); + var nInfo = document.getElementById('example_info'); + var nPaging = document.getElementById('example_paginate'); + var nTable = document.getElementById('example'); + + var bReturn = + nNodes[0] == nWrapper && + nNodes[1] == nCustomWrappers[0] && + nNodes[2] == nLength && + nNodes[3] == nFilter && + nNodes[4] == nCustomWrappers[1] && + nNodes[5] == nTable && + nNodes[6] == nInfo && + nNodes[7] == nPaging; + return bReturn; + } + ); + + oTest.fnTest( + "Check no length element", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "sDom": 'frtip' + } ); + }, + function () { + var nNodes = $('#demo div, #demo table'); + var nWrapper = document.getElementById('example_wrapper'); + var nLength = document.getElementById('example_length'); + var nFilter = document.getElementById('example_filter'); + var nInfo = document.getElementById('example_info'); + var nPaging = document.getElementById('example_paginate'); + var nTable = document.getElementById('example'); + + var bReturn = + nNodes[0] == nWrapper && + null == nLength && + nNodes[1] == nFilter && + nNodes[2] == nTable && + nNodes[3] == nInfo && + nNodes[4] == nPaging; + return bReturn; + } + ); + + oTest.fnTest( + "Check no filter element", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "sDom": 'lrtip' + } ); + }, + function () { + var nNodes = $('#demo div, #demo table'); + var nWrapper = document.getElementById('example_wrapper'); + var nLength = document.getElementById('example_length'); + var nFilter = document.getElementById('example_filter'); + var nInfo = document.getElementById('example_info'); + var nPaging = document.getElementById('example_paginate'); + var nTable = document.getElementById('example'); + + var bReturn = + nNodes[0] == nWrapper && + nNodes[1] == nLength && + null == nFilter && + nNodes[2] == nTable && + nNodes[3] == nInfo && + nNodes[4] == nPaging; + return bReturn; + } + ); + + /* Note we don't test for no table as this is not supported (and it would be fairly daft! */ + + oTest.fnTest( + "Check no info element", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "sDom": 'lfrtp' + } ); + }, + function () { + var nNodes = $('#demo div, #demo table'); + var nWrapper = document.getElementById('example_wrapper'); + var nLength = document.getElementById('example_length'); + var nFilter = document.getElementById('example_filter'); + var nInfo = document.getElementById('example_info'); + var nPaging = document.getElementById('example_paginate'); + var nTable = document.getElementById('example'); + + var bReturn = + nNodes[0] == nWrapper && + nNodes[1] == nLength && + nNodes[2] == nFilter && + nNodes[3] == nTable && + null == nInfo && + nNodes[4] == nPaging; + return bReturn; + } + ); + + oTest.fnTest( + "Check no paging element", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "aaData": gaaData, + "sDom": 'lfrti' + } ); + }, + function () { + var nNodes = $('#demo div, #demo table'); + var nWrapper = document.getElementById('example_wrapper'); + var nLength = document.getElementById('example_length'); + var nFilter = document.getElementById('example_filter'); + var nInfo = document.getElementById('example_info'); + var nPaging = document.getElementById('example_paginate'); + var nTable = document.getElementById('example'); + + var bReturn = + nNodes[0] == nWrapper && + nNodes[1] == nLength && + nNodes[2] == nFilter && + nNodes[3] == nTable && + nNodes[4] == nInfo && + null == nPaging; + return bReturn; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/sPaginationType.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/sPaginationType.js new file mode 100644 index 0000000..7fa7407 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/2_js/sPaginationType.js @@ -0,0 +1,125 @@ +// DATA_TEMPLATE: js_data +oTest.fnStart( "sPaginationType" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "aaData": gaaData + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "Check two button paging is the default", + null, + function () { return oSettings.sPaginationType == "two_button"; } + ); + + oTest.fnTest( + "Check class is applied", + null, + function () { return $('#example_paginate').hasClass('paging_two_button'); } + ); + + oTest.fnTest( + "Two A elements are in the wrapper", + null, + function () { return $('#example_paginate a').length == 2; } + ); + + oTest.fnTest( + "We have the previous button", + null, + function () { return document.getElementById('example_previous'); } + ); + + oTest.fnTest( + "We have the next button", + null, + function () { return document.getElementById('example_next'); } + ); + + oTest.fnTest( + "Previous button is disabled", + null, + function () { return $('#example_previous').hasClass('paginate_disabled_previous'); } + ); + + oTest.fnTest( + "Next button is enabled", + null, + function () { return $('#example_next').hasClass('paginate_enabled_next'); } + ); + + /* Don't test paging - that's done by the zero config test script. */ + + + /* Two buttons paging */ + oTest.fnTest( + "Can enabled full numbers paging", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "aaData": gaaData, + "sPaginationType": "full_numbers" + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.sPaginationType == "full_numbers"; } + ); + + oTest.fnTest( + "Check full numbers class is applied", + null, + function () { return $('#example_paginate').hasClass('paging_full_numbers'); } + ); + + + var nFirst, nPrevious, nNext, nLast; + oTest.fnTest( + "Jump to last page", + function () { + nFirst = $('div.dataTables_paginate a.first'); + nPrevious = $('div.dataTables_paginate a.previous'); + nNext = $('div.dataTables_paginate a.next'); + nLast = $('div.dataTables_paginate a.last'); + nLast.click(); + }, + function () { + return document.getElementById('example_info').innerHTML == "Showing 51 to 57 of 57 entries"; + } + ); + + oTest.fnTest( + "Go to two pages previous", + function () { + nPrevious.click(); + nPrevious.click(); + }, + function () { + return document.getElementById('example_info').innerHTML == "Showing 31 to 40 of 57 entries"; + } + ); + + oTest.fnTest( + "Next (second last) page", + function () { + nNext.click(); + }, + function () { + return document.getElementById('example_info').innerHTML == "Showing 41 to 50 of 57 entries"; + } + ); + + oTest.fnTest( + "Jump to first page", + function () { + nFirst.click(); + }, + function () { + return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/_zero_config.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/_zero_config.js new file mode 100644 index 0000000..4e08b49 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/_zero_config.js @@ -0,0 +1,440 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "Sanity checks for DataTables with data from JS" ); + +oTest.fnTest( + "jQuery.dataTable function", + null, + function () { return typeof jQuery().dataTable == "function"; } +); + +oTest.fnTest( + "jQuery.dataTableSettings storage array", + null, + function () { return typeof jQuery().dataTableSettings == "object"; } +); + +oTest.fnTest( + "jQuery.dataTableExt plugin object", + null, + function () { return typeof jQuery().dataTableExt == "object"; } +); + +$(document).ready( function () { + var oInit = { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt" + }; + $('#example').dataTable( oInit ); + + /* Basic checks */ + oTest.fnWaitTest( + "Length changing div exists", + null, + function () { return document.getElementById('example_length') != null; } + ); + + oTest.fnTest( + "Filtering div exists", + null, + function () { return document.getElementById('example_filter') != null; } + ); + + oTest.fnTest( + "Information div exists", + null, + function () { return document.getElementById('example_info') != null; } + ); + + oTest.fnTest( + "Pagination div exists", + null, + function () { return document.getElementById('example_paginate') != null; } + ); + + oTest.fnTest( + "Processing div is off by default", + null, + function () { return document.getElementById('example_processing') == null; } + ); + + oTest.fnWaitTest( + "10 rows shown on the first page", + null, + function () { return $('#example tbody tr').length == 10; } + ); + + oTest.fnTest( + "Initial sort occured", + null, + function () { return $('#example tbody td:eq(0)').html() == "Gecko"; } + ); + + /* Need to use the WaitTest for sorting due to the setTimeout datatables uses */ + oTest.fnTest( + "Sorting (first click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Sorting (second click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnTest( + "Sorting (third click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Sorting (first click) on numeric column", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "-"; } + ); + + oTest.fnTest( + "Sorting (second click) on numeric column", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "522.1"; } + ); + + oTest.fnTest( + "Sorting multi-column (first click)", + function () { + $('#example thead th:eq(0)').click(); + oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); }, + function () { var b = + $('#example tbody td:eq(0)').html() == "Gecko" && + $('#example tbody td:eq(1)').html() == "Camino 1.0"; return b; } + ); + + oTest.fnTest( + "Sorting multi-column - sorting second column only", + function () { + $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + /* Basic paging */ + oTest.fnTest( + "Paging to second page", + function () { $('#example_next').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "IE Mobile"; } + ); + + oTest.fnTest( + "Paging to first page", + function () { $('#example_previous').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Attempting to page back beyond the first page", + function () { $('#example_previous').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + /* Changing length */ + oTest.fnTest( + "Changing table length to 25 records", + function () { $("select[name=example_length]").val('25').change(); }, + function () { return $('#example tbody tr').length == 25; } + ); + + oTest.fnTest( + "Changing table length to 50 records", + function () { $("select[name=example_length]").val('50').change(); }, + function () { return $('#example tbody tr').length == 50; } + ); + + oTest.fnTest( + "Changing table length to 100 records", + function () { $("select[name=example_length]").val('100').change(); }, + function () { return $('#example tbody tr').length == 57; } + ); + + oTest.fnTest( + "Changing table length to 10 records", + function () { $("select[name=example_length]").val('10').change(); }, + function () { return $('#example tbody tr').length == 10; } + ); + + /* + * Information element + */ + oTest.fnTest( + "Information on zero config", + null, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Information on second page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 11 to 20 of 57 entries"; } + ); + + oTest.fnTest( + "Information on third page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 21 to 30 of 57 entries"; } + ); + + oTest.fnTest( + "Information on last page", + function () { + $('#example_next').click(); + $('#example_next').click(); + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 51 to 57 of 57 entries"; } + ); + + oTest.fnTest( + "Information back on first page", + function () { + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Information with 25 records", + function () { $("select[name=example_length]").val('25').change(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 25 of 57 entries"; } + ); + + oTest.fnTest( + "Information with 25 records - second page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 26 to 50 of 57 entries"; } + ); + + oTest.fnTest( + "Information with 100 records - first page", + function () { + $('#example_previous').click(); + $("select[name=example_length]").val('100').change(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 57 of 57 entries"; } + ); + + oTest.fnTest( + "Information back to 10 records", + function () { + $('#example_previous').click(); + $("select[name=example_length]").val('10').change(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Information with filter 'Win'", + function () { $('#example_filter input').val("Win").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' second page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' last page", + function () { + $('#example_next').click(); + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 31 to 31 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' back to first page", + function () { + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' second page - second time", + function () { + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter increased to 'Win 98'", + function () { $('#example_filter input').val("Win 98").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 9 of 9 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter decreased to 'Win'", + function () { $('#example_filter input').val("Win").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' second page - third time", + function () { + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter removed", + function () { $('#example_filter input').val("").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 57 entries"; } + ); + + + /* + * Filtering + */ + oTest.fnWaitTest( + "Filter 'W' - rows", + function () { + /* Reset the table such that the old sorting doesn't mess things up */ + oSession.fnRestore(); + $('#example').dataTable( oInit ); + $('#example_filter input').val("W").keyup(); }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Gecko"; } + ); + + oTest.fnTest( + "Filter 'W' - info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 42 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Wi'", + function () { $('#example_filter input').val("Wi").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 32 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Win'", + function () { $('#example_filter input').val("Win").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting column 1", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "AOL browser (AOL desktop)"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting column 1 info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting column 1 reverse", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnTest( + "Filter 'Win XP' - maintaing reverse sorting col 1", + function () { $('#example_filter input').val("Win XP").keyup(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Internet Explorer 7"; } + ); + + oTest.fnTest( + "Filter 'Win XP' - sorting col 3", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "4"; } + ); + + oTest.fnTest( + "Filter 'Win XP' - sorting col 3 - reversed", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "7"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting col 3 - reversed info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 6 of 6 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'nothinghere'", + function () { $('#example_filter input').val("nothinghere").keyup(); }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == + "No matching records found"; } + ); + + oTest.fnTest( + "Filter 'nothinghere' - info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter back to blank and 1st column sorting", + function () { + $('#example_filter input').val("").keyup(); + $('#example thead th:eq(0)').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Prefixing a filter entry", + function () { + $('#example_filter input').val("Win").keyup(); + $('#example_filter input').val("GeckoWin").keyup(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Prefixing a filter entry with space", + function () { + $('#example_filter input').val("Gecko Win").keyup(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 17 entries (filtered from 57 total entries)"; } + ); + + + + + + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aaSorting.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aaSorting.js new file mode 100644 index 0000000..a299712 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aaSorting.js @@ -0,0 +1,198 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aaSorting" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Default sorting is single column", + null, + function () { + return oSettings.aaSorting.length == 1 && typeof oSettings.aaSorting[0] == 'object'; + } + ); + + oTest.fnWaitTest( + "Default sorting is first column asc", + null, + function () { + return oSettings.aaSorting[0].length == 3 && oSettings.aaSorting[0][0] == 0 && + oSettings.aaSorting[0][1] == 'asc'; + } + ); + + oTest.fnWaitTest( + "Sorting is applied", + null, + function () { return $('#example tbody td:eq(0)').html() == "Gecko"; } + ); + + + oTest.fnWaitTest( + "Custom sorting on single string column asc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "aaSorting": [['1','asc']] + } ); + }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + + oTest.fnWaitTest( + "Custom sorting on single string column desc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "aaSorting": [['1','desc']] + } ); + }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + + oTest.fnWaitTest( + "Custom sorting on single int column asc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "aaSorting": [['1','asc']] + } ); + }, + function () { return $('#example tbody td:eq(3)').html() == "-"; } + ); + + + oTest.fnWaitTest( + "Custom sorting on single int column desc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "aaSorting": [['1','desc']] + } ); + }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + + oTest.fnWaitTest( + "Multi-column sorting (2 column) - string asc / string asc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "aaSorting": [['0','asc'], ['1','asc']] + } ); + }, + function () { return $('#example tbody td:eq(1)').html() == "Camino 1.0"; } + ); + + oTest.fnWaitTest( + "Multi-column sorting (2 column) - string asc / string desc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "aaSorting": [['0','asc'], ['1','desc']] + } ); + }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnWaitTest( + "Multi-column sorting (2 column) - string desc / string asc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "aaSorting": [['0','desc'], ['1','asc']] + } ); + }, + function () { return $('#example tbody td:eq(1)').html() == "iPod Touch / iPhone"; } + ); + + oTest.fnWaitTest( + "Multi-column sorting (2 column) - string desc / string desc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "aaSorting": [['0','desc'], ['1','desc']] + } ); + }, + function () { return $('#example tbody td:eq(1)').html() == "Safari 3.0"; } + ); + + + oTest.fnWaitTest( + "Multi-column sorting (2 column) - string asc / int asc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "aaSorting": [['0','asc'], ['3','asc']] + } ); + }, + function () { return $('#example tbody td:eq(3)').html() == "1"; } + ); + + oTest.fnWaitTest( + "Multi-column sorting (2 column) - string asc / int desc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "aaSorting": [['0','asc'], ['3','desc']] + } ); + }, + function () { return $('#example tbody td:eq(3)').html() == "1.9"; } + ); + + oTest.fnWaitTest( + "Multi-column sorting (2 column) - string desc / int asc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "aaSorting": [['0','desc'], ['3','asc']] + } ); + }, + function () { return $('#example tbody td:eq(3)').html() == "125.5"; } + ); + + oTest.fnWaitTest( + "Multi-column sorting (2 column) - string desc / int desc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "aaSorting": [['0','desc'], ['3','desc']] + } ); + }, + function () { return $('#example tbody td:eq(3)').html() == "522.1"; } + ); + + oTest.fnWaitTest( + "Multi-column sorting (3 column) - string asc / int asc / string asc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "aaSorting": [['0','asc'], ['3','asc'], ['1','asc']] + } ); + }, + function () { return $('#example tbody tr:eq(7) td:eq(1)').html() == "Firefox 1.0"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aaSortingFixed.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aaSortingFixed.js new file mode 100644 index 0000000..083ada9 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aaSortingFixed.js @@ -0,0 +1,67 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aaSortingFixed" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "No fixed sorting by default", + null, + function () { + return oSettings.aaSortingFixed == null; + } + ); + + + oTest.fnWaitTest( + "Fixed sorting on first column (string/asc) with user sorting on second column (string/asc)", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "aaSortingFixed": [['0','asc']], + "fnInitComplete": function () { + $('#example thead th:eq(1)').click(); + } + } ); + // + }, + function () { return $('#example tbody td:eq(1)').html() == "Camino 1.0"; } + ); + + oTest.fnWaitTest( + "Fixed sorting on first column (string/asc) with user sorting on second column (string/desc)", + function () { + $('#example thead th:eq(1)').click(); + }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnWaitTest( + "Fixed sorting on fourth column (int/asc) with user sorting on second column (string/asc)", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "aaSortingFixed": [['3','asc']] + } ); + $('#example thead th:eq(1)').click(); + }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnWaitTest( + "Fixed sorting on fourth column (int/asc) with user sorting on second column (string/desc)", + function () { + $('#example thead th:eq(1)').click(); + }, + function () { return $('#example tbody td:eq(1)').html() == "PSP browser"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aoColumns.bSearchable.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aoColumns.bSearchable.js new file mode 100755 index 0000000..4f83469 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aoColumns.bSearchable.js @@ -0,0 +1,76 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aoColumns.bSeachable" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Columns are searchable by default", + function () { oTable.fnFilter("Camino"); }, + function () { + if ( $('#example tbody tr:eq(0) td:eq(1)')[0] ) + return $('#example tbody tr:eq(0) td:eq(1)').html().match(/Camino/); + else + return null; + } + ); + + oTest.fnWaitTest( + "Disabling sorting on a column removes it from the global filter", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "aoColumns": [ + null, + { "bSearchable": false }, + null, + null, + null + ] + } ); + oSettings = oTable.fnSettings(); + oTable.fnFilter("Camino"); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; } + ); + + oTest.fnWaitTest( + "Disabled on one column has no effect on other columns", + function () { oTable.fnFilter("Webkit"); }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Webkit"; } + ); + + oTest.fnWaitTest( + "Disable filtering on multiple columns", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "aoColumns": [ + { "bSearchable": false }, + { "bSearchable": false }, + null, + null, + null + ] + } ); + oSettings = oTable.fnSettings(); + oTable.fnFilter("Webkit"); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; } + ); + + oTest.fnWaitTest( + "Filter on second disabled column", + function () { oTable.fnFilter("Camino"); }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aoColumns.bSortable.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aoColumns.bSortable.js new file mode 100755 index 0000000..a6a8a2f --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aoColumns.bSortable.js @@ -0,0 +1,109 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aoColumns.bSortable" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "All columns are sortable by default", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "All others"; } + ); + + oTest.fnWaitTest( + "Can disable sorting from one column", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "aoColumns": [ + null, + { "bSortable": false }, + null, + null, + null + ] + } ); + $('#example thead th:eq(1)').click(); + }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() != "All others"; } + ); + + oTest.fnWaitTest( + "Disabled column has no sorting class", + null, + function () { return $('#example thead th:eq(1)').hasClass("sorting_asc") == false; } + ); + + oTest.fnWaitTest( + "Other columns can still sort", + function () { + $('#example thead th:eq(4)').click(); + $('#example thead th:eq(4)').click(); + }, + function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == "X"; } + ); + + oTest.fnWaitTest( + "Disable sorting on multiple columns - no sorting classes", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "aoColumns": [ + null, + { "bSortable": false }, + null, + { "bSortable": false }, + null + ] + } ); + }, + function () { + var bReturn = + $('#example thead th:eq(1)').hasClass("sorting") || + $('#example thead th:eq(3)').hasClass("sorting") + return bReturn == false; + } + ); + + oTest.fnWaitTest( + "Sorting on disabled column 1 has no effect", + function () { + $('#example thead th:eq(1)').click(); + }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() != "All others"; } + ); + + oTest.fnWaitTest( + "Sorting on disabled column 2 has no effect", + function () { + $('#example thead th:eq(3)').click(); + }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() != "-"; } + ); + + oTest.fnWaitTest( + "Second sort on disabled column 2 has no effect", + function () { + $('#example thead th:eq(3)').click(); + }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() != "-"; } + ); + + oTest.fnWaitTest( + "Even with multiple disabled sorting columns other columns can still sort", + function () { + $('#example thead th:eq(4)').click(); + $('#example thead th:eq(4)').click(); + }, + function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == "X"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aoColumns.bUseRendered.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aoColumns.bUseRendered.js new file mode 100755 index 0000000..b98c6cc --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aoColumns.bUseRendered.js @@ -0,0 +1,148 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aoColumns.bUseRendered" ); + +/* bUseRendered is used to alter sorting data, if false then the original data is used for + * sorting rather than the rendered data + */ + +$(document).ready( function () { + /* Check the default */ + var mTmp = 0; + + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "aoColumns": [ + null, + { "fnRender": function (a) { + if ( mTmp == 0 ) { + mTmp++; + return "aaa"; + } else + return a.aData[a.iDataColumn]; + } }, + null, + null, + null + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Default for bUseRendered is true - rendered data is used for sorting", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'aaa'; } + ); + + oTest.fnWaitTest( + "When bUseRendered is false, original data is used for sorting", + function () { + mTmp = 0; + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "aoColumns": [ + null, + { + "bUseRendered": false, + "fnRender": function (a) { + if ( mTmp == 0 ) { + mTmp++; + return "aaa"; + } else { + return a.aData[a.iDataColumn]; + } + } + }, + null, + null, + null + ] + } ); + $('#example thead th:eq(1)').click(); + }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'All others'; } + ); + + + oTest.fnWaitTest( + "bUseRendered set to false on one columns and true (default) on two others", + function () { + mTmp = 0; + var mTmp2 = 0; + var mTmp3 = 0; + + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "aoColumns": [ + { + "fnRender": function (a) { + if ( mTmp == 0 ) { + mTmp++; + return "aaa1"; + } else { + return a.aData[a.iDataColumn]; + } + } + }, + { + "bUseRendered": false, + "fnRender": function (a) { + if ( mTmp2 == 0 ) { + mTmp2++; + return "aaa2"; + } else { + return a.aData[a.iDataColumn]; + } + } + }, + { + "fnRender": function (a) { + if ( mTmp3 == 0 ) { + mTmp3++; + return "zzz3"; + } else { + return a.aData[a.iDataColumn]; + } + } + }, + null, + null + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == 'aaa1'; } + ); + + oTest.fnWaitTest( + "Multi-column rendering - 2nd column sorting", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'All others'; } + ); + + oTest.fnWaitTest( + "Multi-column rendering - 3rd column sorting", + function () { + $('#example thead th:eq(2)').click(); + $('#example thead th:eq(2)').click(); + }, + function () { return $('#example tbody tr:eq(0) td:eq(2)').html() == 'zzz3'; } + ); + + oTest.fnWaitTest( + "Multi-column rendering - 4th column sorting", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == '-'; } + ); + + oTest.fnWaitTest( + "Multi-column rendering - 5th column sorting", + function () { $('#example thead th:eq(4)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'A'; } + ); + + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aoColumns.bVisible.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aoColumns.bVisible.js new file mode 100755 index 0000000..9e9e7bb --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aoColumns.bVisible.js @@ -0,0 +1,124 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aoColumns.bVisible" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "All columns are visible by default", + null, + function () { return $('#example tbody tr:eq(0) td').length == 5; } + ); + + oTest.fnWaitTest( + "Can hide one column and it removes td column from DOM", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "aoColumns": [ + null, + { "bVisible": false }, + null, + null, + null + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td').length == 4; } + ); + + oTest.fnWaitTest( + "Can hide one column and it removes thead th column from DOM", + null, + function () { return $('#example thead tr:eq(0) th').length == 4; } + ); + + oTest.fnWaitTest( + "The correct thead column has been hidden", + null, + function () { + var jqNodes = $('#example thead tr:eq(0) th'); + var bReturn = + jqNodes[0].innerHTML == "Rendering engine" && + jqNodes[1].innerHTML == "Platform(s)" && + jqNodes[2].innerHTML == "Engine version" && + jqNodes[3].innerHTML == "CSS grade"; + return bReturn; + } + ); + + oTest.fnWaitTest( + "The correct tbody column has been hidden", + function () { + oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); + }, + function () { + var jqNodes = $('#example tbody tr:eq(0) td'); + var bReturn = + jqNodes[0].innerHTML == "Gecko" && + jqNodes[1].innerHTML == "Gnome" && + jqNodes[2].innerHTML == "1.8" && + jqNodes[3].innerHTML == "A"; + return bReturn; + } + ); + + + oTest.fnWaitTest( + "Can hide multiple columns and it removes td column from DOM", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "aoColumns": [ + null, + { "bVisible": false }, + { "bVisible": false }, + null, + { "bVisible": false } + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td').length == 2; } + ); + + oTest.fnWaitTest( + "Multiple hide - removes thead th column from DOM", + null, + function () { return $('#example thead tr:eq(0) th').length == 2; } + ); + + oTest.fnWaitTest( + "Multiple hide - the correct thead columns have been hidden", + null, + function () { + var jqNodes = $('#example thead tr:eq(0) th'); + var bReturn = + jqNodes[0].innerHTML == "Rendering engine" && + jqNodes[1].innerHTML == "Engine version" + return bReturn; + } + ); + + oTest.fnWaitTest( + "Multiple hide - the correct tbody columns have been hidden", + function () { + oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); + }, + function () { + var jqNodes = $('#example tbody tr:eq(0) td'); + var bReturn = + jqNodes[0].innerHTML == "Gecko" && + jqNodes[1].innerHTML == "1" + return bReturn; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aoColumns.fnRender.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aoColumns.fnRender.js new file mode 100755 index 0000000..ca6f601 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aoColumns.fnRender.js @@ -0,0 +1,156 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aoColumns.fnRender" ); + +$(document).ready( function () { + /* Check the default */ + var mTmp = 0; + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "aoColumns": [ + null, + { "fnRender": function (a) { + mTmp++; + return a.aData[a.iDataColumn]; + } }, + null, + null, + null + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Single column - fnRender is called twice for each row", + null, + function () { return mTmp == 57; } + ); + + oTest.fnWaitTest( + "Confirm that fnRender passes two arguments with four parameters", + function () { + mTmp = true; + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "aoColumns": [ + null, + { "fnRender": function (a) { + if ( arguments.length != 2 || typeof a.iDataRow=='undefined' || + typeof a.iDataColumn=='undefined' || typeof a.aData=='undefined' || + typeof a.mDataProp=='undefined' ) + { + mTmp = false; + } + return a.aData[a.iDataColumn]; + } }, + null, + null, + null + ] + } ); + }, + function () { return mTmp; } + ); + + oTest.fnWaitTest( + "fnRender iDataColumn is the column", + function () { + mTmp = true; + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "aoColumns": [ + null, + { "fnRender": function (a) { + if ( a.iDataColumn != 1 ) + { + mTmp = false; + } + return a.aData[a.iDataColumn]; + } }, + null, + null, + null + ] + } ); + }, + function () { return mTmp; } + ); + + oTest.fnWaitTest( + "fnRender aData is data array of correct size", + function () { + mTmp = true; + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "aoColumns": [ + null, + { "fnRender": function (a) { + if ( a.aData.length != 5 ) + { + mTmp = false; + } + return a.aData[a.iDataColumn]; + } }, + null, + null, + null + ] + } ); + }, + function () { return mTmp; } + ); + + oTest.fnWaitTest( + "Passed back data is put into the DOM", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "aoColumns": [ + null, + { "fnRender": function (a) { + return 'unittest'; + } }, + null, + null, + null + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'unittest'; } + ); + + oTest.fnWaitTest( + "Passed back data is put into the DOM", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "aoColumns": [ + null, + null, + { "fnRender": function (a) { + return 'unittest1'; + } }, + { "fnRender": function (a) { + return 'unittest2'; + } }, + null + ] + } ); + }, + function () { + var bReturn = + $('#example tbody tr:eq(0) td:eq(2)').html() == 'unittest1' && + $('#example tbody tr:eq(0) td:eq(3)').html() == 'unittest2'; + return bReturn; } + ); + + + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aoColumns.iDataSort.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aoColumns.iDataSort.js new file mode 100755 index 0000000..ab41697 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aoColumns.iDataSort.js @@ -0,0 +1,90 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aoColumns.iDataSort" ); + +$(document).ready( function () { + /* Should know that sorting already works by default from other tests, so we can jump + * right in here + */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "aoColumns": [ + null, + { "iDataSort": 4 }, + null, + null, + null + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Sorting on first column is uneffected", + null, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == 'Gecko'; } + ); + + oTest.fnWaitTest( + "Sorting on second column is the order of the fifth", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'A'; } + ); + + oTest.fnWaitTest( + "Reserve sorting on second column uses fifth column as well", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'X'; } + ); + + oTest.fnWaitTest( + "Sorting on 5th column retains it's own sorting", + function () { $('#example thead th:eq(4)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'A'; } + ); + + + oTest.fnWaitTest( + "Use 2nd col for sorting 5th col and via-versa - no effect on first col sorting", + function () { + mTmp = 0; + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "aoColumns": [ + null, + { "iDataSort": 4 }, + null, + null, + { "iDataSort": 1 } + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == 'Gecko'; } + ); + + oTest.fnWaitTest( + "2nd col sorting uses fifth col", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'A'; } + ); + + oTest.fnWaitTest( + "2nd col sorting uses fifth col - reversed", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'X'; } + ); + + oTest.fnWaitTest( + "5th col sorting uses 2nd col", + function () { $('#example thead th:eq(4)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'All others'; } + ); + + oTest.fnWaitTest( + "5th col sorting uses 2nd col - reversed", + function () { $('#example thead th:eq(4)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'Seamonkey 1.1'; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aoColumns.sClass.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aoColumns.sClass.js new file mode 100755 index 0000000..864ee96 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aoColumns.sClass.js @@ -0,0 +1,115 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aoColumns.sClass" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "By default the test class hasn't been applied to the column (sanity!)", + null, + function () { return $('#example tbody tr:eq(0) td:eq(2)').hasClass('unittest') == false; } + ); + + oTest.fnWaitTest( + "Add a class to a single column - first row", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "aoColumns": [ + null, + null, + { "sClass": 'unittest' }, + null, + null + ] + } ); + }, + function () { return $('#example tbody tr:eq(1) td:eq(2)').hasClass('unittest'); } + ); + + oTest.fnWaitTest( + "Add a class to a single column - third row", + null, + function () { return $('#example tbody tr:eq(3) td:eq(2)').hasClass('unittest'); } + ); + + oTest.fnWaitTest( + "Add a class to a single column - last row", + null, + function () { return $('#example tbody tr:eq(9) td:eq(2)').hasClass('unittest'); } + ); + + oTest.fnWaitTest( + "Add a class to a single column - has not applied to other columns - 1st", + null, + function () { return $('#example tbody tr:eq(3) td:eq(0)').hasClass('unittest') == false; } + ); + + oTest.fnWaitTest( + "Add a class to a single column - has not applied to other columns - 5th", + null, + function () { return $('#example tbody tr:eq(3) td:eq(4)').hasClass('unittest') == false; } + ); + + oTest.fnWaitTest( + "Add a class to a single column - seventh row - second page", + function () { $('#example_next').click(); }, + function () { return $('#example tbody tr:eq(6) td:eq(2)').hasClass('unittest'); } + ); + + oTest.fnWaitTest( + "Add a class to a single column - has not applied to header", + null, + function () { return $('#example thead tr:eq(3) th:eq(4)').hasClass('unittest') == false; } + ); + + oTest.fnWaitTest( + "Add a class to a single column - has not applied to footer", + null, + function () { return $('#example thead tr:eq(3) th:eq(4)').hasClass('unittest') == false; } + ); + + + oTest.fnWaitTest( + "Class defined for multiple columns - first row", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "aoColumns": [ + { "sClass": 'unittest2' }, + null, + null, + { "sClass": 'unittest1' }, + null + ] + } ); + }, + function () { + var bReturn = + $('#example tbody tr:eq(3) td:eq(0)').hasClass('unittest2') && + $('#example tbody tr:eq(8) td:eq(3)').hasClass('unittest1'); + return bReturn; + } + ); + + oTest.fnWaitTest( + "Class defined for multiple columns - has not applied to other columns - 5th 1", + null, + function () { return $('#example tbody tr:eq(0) td:eq(4)').hasClass('unittest1') == false; } + ); + + oTest.fnWaitTest( + "Class defined for multiple columns - has not applied to other columns - 5th 2", + null, + function () { return $('#example tbody tr:eq(6) td:eq(4)').hasClass('unittest2') == false; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aoColumns.sName.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aoColumns.sName.js new file mode 100755 index 0000000..99efddb --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aoColumns.sName.js @@ -0,0 +1,28 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aoColumns.sName" ); + +/* This has no effect at all in DOM methods - so we just check that it has applied the name */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "aoColumns": [ + null, + null, + null, + { "sName": 'unit test' }, + null + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Names are stored in the columns object", + null, + function () { return oSettings.aoColumns[3].sName =="unit test"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aoColumns.sTitle.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aoColumns.sTitle.js new file mode 100755 index 0000000..5f1f837 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aoColumns.sTitle.js @@ -0,0 +1,82 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aoColumns.sTitle" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "If not given, then the columns titles are empty", + null, + function () { + var jqNodes = $('#example thead tr:eq(0) th'); + var bReturn = + jqNodes[0].innerHTML == "Rendering engine" && + jqNodes[1].innerHTML == "Browser" && + jqNodes[2].innerHTML == "Platform(s)" && + jqNodes[3].innerHTML == "Engine version" && + jqNodes[4].innerHTML == "CSS grade"; + return bReturn; + } + ); + + oTest.fnWaitTest( + "Can set a single column title - and others are read from DOM", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "aoColumns": [ + null, + { "sTitle": 'unit test' }, + null, + null, + null + ] + } ); + }, + function () { + var jqNodes = $('#example thead tr:eq(0) th'); + var bReturn = + jqNodes[0].innerHTML == "Rendering engine" && + jqNodes[1].innerHTML == "unit test" && + jqNodes[2].innerHTML == "Platform(s)" && + jqNodes[3].innerHTML == "Engine version" && + jqNodes[4].innerHTML == "CSS grade"; + return bReturn; + } + ); + + oTest.fnWaitTest( + "Can set multiple column titles", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "aoColumns": [ + null, + { "sTitle": 'unit test 1' }, + null, + null, + { "sTitle": 'unit test 2' } + ] + } ); + }, + function () { + var jqNodes = $('#example thead tr:eq(0) th'); + var bReturn = + jqNodes[0].innerHTML == "Rendering engine" && + jqNodes[1].innerHTML == "unit test 1" && + jqNodes[2].innerHTML == "Platform(s)" && + jqNodes[3].innerHTML == "Engine version" && + jqNodes[4].innerHTML == "unit test 2"; + return bReturn; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aoColumns.sWidth.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aoColumns.sWidth.js new file mode 100755 index 0000000..cbcb4ab --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aoColumns.sWidth.js @@ -0,0 +1,87 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aoColumns.sWidth" ); + +/* NOTE - we need to disable the auto width for the majority of these test in order to preform + * these tests as the auto width will convert the width to a px value. We can do 'non-exact' tests + * with auto width enabled however to ensure it scales columns as required + */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bAutoWidth": false, + "aoColumns": [ + null, + { "sWidth": '40%' }, + null, + null, + null + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "With auto width disabled the width for one column is appled", + null, + function () { return $('#example thead th:eq(1)')[0].style.width == "40%"; } + ); + + oTest.fnWaitTest( + "With auto width disabled the width for one column is appled", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bAutoWidth": false, + "aoColumns": [ + null, + null, + { "sWidth": '20%' }, + { "sWidth": '30%' }, + null + ] + } ); + }, + function () { + var bReturn = + $('#example thead th:eq(2)')[0].style.width == "20%" && + $('#example thead th:eq(3)')[0].style.width == "30%"; + return bReturn; + } + ); + + + oTest.fnWaitTest( + "With auto width, it will make the smallest column the largest with percentage width given", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "aoColumns": [ + null, + null, + null, + { "sWidth": '40%' }, + null + ] + } ); + }, + function () { + var anThs = $('#example thead th'); + var a0 = anThs[0].offsetWidth; + var a1 = anThs[1].offsetWidth; + var a2 = anThs[2].offsetWidth; + var a3 = anThs[3].offsetWidth; + var a4 = anThs[4].offsetWidth; + + if ( a3>a0 && a3>a1 && a3>a2 && a3>a4 ) + return true; + else + return false; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aoSearchCols.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aoSearchCols.js new file mode 100644 index 0000000..d0a9a6b --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/aoSearchCols.js @@ -0,0 +1,119 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aoSearchCols" ); + +/* We could be here forever testing this one, so we test a limited subset on a couple of colums */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Default should be to have a empty colums array", + null, + function () { + var bReturn = + oSettings.aoPreSearchCols[0].sSearch == 0 && !oSettings.aoPreSearchCols[0].bRegex && + oSettings.aoPreSearchCols[1].sSearch == 0 && !oSettings.aoPreSearchCols[1].bRegex && + oSettings.aoPreSearchCols[2].sSearch == 0 && !oSettings.aoPreSearchCols[2].bRegex && + oSettings.aoPreSearchCols[3].sSearch == 0 && !oSettings.aoPreSearchCols[3].bRegex && + oSettings.aoPreSearchCols[4].sSearch == 0 && !oSettings.aoPreSearchCols[4].bRegex; + return bReturn; + } + ); + + + oTest.fnWaitTest( + "Search on a single column - no regex statement given", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "aoSearchCols": [ + null, + { "sSearch": "Mozilla" }, + null, + { "sSearch": "1" }, + null + ] + } ); + }, + function () { return $('#example_info').html() == "Showing 1 to 9 of 9 entries (filtered from 57 total entries)"; } + ); + + oTest.fnWaitTest( + "Search on two columns - no regex statement given", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "aoSearchCols": [ + null, + { "sSearch": "Mozilla" }, + null, + { "sSearch": "1.5" }, + null + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "1.5"; } + ); + + oTest.fnWaitTest( + "Search on single column - escape regex false", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "aoSearchCols": [ + { "sSearch": ".*ML", "bEscapeRegex": false }, + null, + null, + null, + null + ] + } ); + }, + function () { return $('#example_info').html() == "Showing 1 to 3 of 3 entries (filtered from 57 total entries)"; } + ); + + oTest.fnWaitTest( + "Search on two columns - escape regex false on first, true on second", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "aoSearchCols": [ + { "sSearch": ".*ML", "bEscapeRegex": false }, + { "sSearch": "3.3", "bEscapeRegex": true }, + null, + null, + null + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Konqureror 3.3"; } + ); + + oTest.fnWaitTest( + "Search on two columns (no records) - escape regex false on first, true on second", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "aoSearchCols": [ + { "sSearch": ".*ML", "bEscapeRegex": false }, + { "sSearch": "Allan", "bEscapeRegex": true }, + null, + null, + null + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; } + ); + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/asStripClasses.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/asStripClasses.js new file mode 100644 index 0000000..b195c40 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/asStripClasses.js @@ -0,0 +1,105 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "asStripeClasses" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt" + } ); + + oTest.fnWaitTest( + "Default row striping is applied", + null, + function () { + return $('#example tbody tr:eq(0)').hasClass('odd') && + $('#example tbody tr:eq(1)').hasClass('even') && + $('#example tbody tr:eq(2)').hasClass('odd') && + $('#example tbody tr:eq(3)').hasClass('even'); + } + ); + + oTest.fnWaitTest( + "Row striping on the second page", + function () { $('#example_next').click(); }, + function () { + return $('#example tbody tr:eq(0)').hasClass('odd') && + $('#example tbody tr:eq(1)').hasClass('even') && + $('#example tbody tr:eq(2)').hasClass('odd') && + $('#example tbody tr:eq(3)').hasClass('even'); + } + ); + + /* No striping */ + oTest.fnWaitTest( + "No row striping", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "asStripeClasses": [] + } ); + }, + function () { + if ( typeof $('#example tbody tr:eq(1)')[0] == 'undefined' ) + { + /* Use the 'wait for' to allow this to become true */ + return false; + } + return $('#example tbody tr:eq(0)')[0].className == "" && + $('#example tbody tr:eq(1)')[0].className == "" && + $('#example tbody tr:eq(2)')[0].className == "" && + $('#example tbody tr:eq(3)')[0].className == ""; + } + ); + + /* Custom striping */ + oTest.fnWaitTest( + "Custom striping [2]", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "asStripeClasses": [ 'test1', 'test2' ] + } ); + }, + function () { + return $('#example tbody tr:eq(0)').hasClass('test1') && + $('#example tbody tr:eq(1)').hasClass('test2') && + $('#example tbody tr:eq(2)').hasClass('test1') && + $('#example tbody tr:eq(3)').hasClass('test2'); + } + ); + + + /* long array of striping */ + oTest.fnWaitTest( + "Custom striping [4]", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "asStripeClasses": [ 'test1', 'test2', 'test3', 'test4' ] + } ); + }, + function () { + return $('#example tbody tr:eq(0)').hasClass('test1') && + $('#example tbody tr:eq(1)').hasClass('test2') && + $('#example tbody tr:eq(2)').hasClass('test3') && + $('#example tbody tr:eq(3)').hasClass('test4'); + } + ); + + oTest.fnWaitTest( + "Custom striping is restarted on second page [2]", + function () { $('#example_next').click(); }, + function () { + return $('#example tbody tr:eq(0)').hasClass('test1') && + $('#example tbody tr:eq(1)').hasClass('test2') && + $('#example tbody tr:eq(2)').hasClass('test3') && + $('#example tbody tr:eq(3)').hasClass('test4'); + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/bAutoWidth.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/bAutoWidth.js new file mode 100644 index 0000000..ee49f7c --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/bAutoWidth.js @@ -0,0 +1,142 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "bAutoWidth" ); + +/* It's actually a little tricky to test this. We can't test absolute numbers because + * different browsers and different platforms will render the width of the columns slightly + * differently. However, we certainly can test the principle of what should happen (column + * width doesn't change over pages) + */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Auto width is enabled by default", + null, + function () { return oSettings.oFeatures.bAutoWidth; } + ); + + oTest.fnWaitTest( + "First column has a width assigned to it", + null, + function () { return $('#example thead th:eq(0)').attr('style').match(/width/i); } + ); + + /* + This would seem like a better test - but there appear to be difficulties with tables + which are bigger (calculated) than there is actually room for. I suspect this is actually + a bug in datatables + oTest.fnWaitTest( + "Check column widths on first page match second page", + null, + function () { + var anThs = $('#example thead th'); + var a0 = anThs[0].offsetWidth; + var a1 = anThs[1].offsetWidth; + var a2 = anThs[2].offsetWidth; + var a3 = anThs[3].offsetWidth; + var a4 = anThs[4].offsetWidth; + $('#example_next').click(); + var b0 = anThs[0].offsetWidth; + var b1 = anThs[1].offsetWidth; + var b2 = anThs[2].offsetWidth; + var b3 = anThs[3].offsetWidth; + var b4 = anThs[4].offsetWidth; + console.log( a0, b0, a1, b1, a2, b2, a3, b3 ); + if ( a0==b0 && a1==b1 && a2==b2 && a3==b3 ) + return true; + else + return false; + } + ); + + oTest.fnWaitTest( + "Check column widths on second page match thid page", + null, + function () { + var anThs = $('#example thead th'); + var a0 = anThs[0].offsetWidth; + var a1 = anThs[1].offsetWidth; + var a2 = anThs[2].offsetWidth; + var a3 = anThs[3].offsetWidth; + var a4 = anThs[4].offsetWidth; + $('#example_next').click(); + var b0 = anThs[0].offsetWidth; + var b1 = anThs[1].offsetWidth; + var b2 = anThs[2].offsetWidth; + var b3 = anThs[3].offsetWidth; + var b4 = anThs[4].offsetWidth; + if ( a0==b0 && a1==b1 && a2==b2 && a3==b3 ) + return true; + else + return false; + } + ); + */ + + /* Check can disable */ + oTest.fnWaitTest( + "Auto width can be disabled", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bAutoWidth": false + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oFeatures.bAutoWidth == false; } + ); + + oTest.fnWaitTest( + "First column does not have a width assigned to it", + null, + function () { return $('#example thead th:eq(0)').attr('style') == null; } + ); + + /* + oTest.fnWaitTest( + "Check column widths on first page do not match second page", + null, + function () { + var anThs = $('#example thead th'); + var a0 = anThs[0].offsetWidth; + var a1 = anThs[1].offsetWidth; + var a2 = anThs[2].offsetWidth; + var a3 = anThs[3].offsetWidth; + var a4 = anThs[4].offsetWidth; + $('#example_next').click(); + var b0 = anThs[0].offsetWidth; + var b1 = anThs[1].offsetWidth; + var b2 = anThs[2].offsetWidth; + var b3 = anThs[3].offsetWidth; + var b4 = anThs[4].offsetWidth; + if ( a0==b0 && a1==b1 && a2==b2 && a3==b3 ) + return false; + else + return true; + } + ); + */ + + /* Enable makes no difference */ + oTest.fnWaitTest( + "Auto width enabled override", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bAutoWidth": true + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oFeatures.bAutoWidth; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/bFilter.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/bFilter.js new file mode 100644 index 0000000..8c32229 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/bFilter.js @@ -0,0 +1,44 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "bFilter" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt" + } ); + + oTest.fnWaitTest( + "Filtering div exists by default", + null, + function () { return document.getElementById('example_filter') != null; } + ); + + /* Check can disable */ + oTest.fnWaitTest( + "Fltering can be disabled", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bFilter": false + } ); + }, + function () { return document.getElementById('example_filter') == null; } + ); + + /* Enable makes no difference */ + oTest.fnWaitTest( + "Filtering enabled override", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bFilter": true + } ); + }, + function () { return document.getElementById('example_filter') != null; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/bInfo.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/bInfo.js new file mode 100644 index 0000000..24eeedf --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/bInfo.js @@ -0,0 +1,44 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "bInfo" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt" + } ); + + oTest.fnWaitTest( + "Info div exists by default", + null, + function () { return document.getElementById('example_info') != null; } + ); + + /* Check can disable */ + oTest.fnWaitTest( + "Info can be disabled", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bInfo": false + } ); + }, + function () { return document.getElementById('example_info') == null; } + ); + + /* Enable makes no difference */ + oTest.fnWaitTest( + "Info enabled override", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bInfo": true + } ); + }, + function () { return document.getElementById('example_info') != null; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/bLengthChange.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/bLengthChange.js new file mode 100644 index 0000000..551878c --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/bLengthChange.js @@ -0,0 +1,75 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "bLengthChange" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt" + } ); + + oTest.fnWaitTest( + "Length div exists by default", + null, + function () { return document.getElementById('example_length') != null; } + ); + + oTest.fnWaitTest( + "Four default options", + null, + function () { return $("select[name=example_length] option").length == 4; } + ); + + oTest.fnWaitTest( + "Default options", + null, + function () { + var opts = $("select[name='example_length'] option"); + return opts[0].getAttribute('value') == 10 && opts[1].getAttribute('value') == 25 && + opts[2].getAttribute('value') == 50 && opts[3].getAttribute('value') == 100; + } + ); + + oTest.fnWaitTest( + "Info takes length into account", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 57 entries"; } + ); + + /* Check can disable */ + oTest.fnWaitTest( + "Change length can be disabled", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bLengthChange": false + } ); + }, + function () { return document.getElementById('example_length') == null; } + ); + + oTest.fnWaitTest( + "Information takes length disabled into account", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 57 entries"; } + ); + + /* Enable makes no difference */ + oTest.fnWaitTest( + "Length change enabled override", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bLengthChange": true + } ); + }, + function () { return document.getElementById('example_length') != null; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/bPaginate.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/bPaginate.js new file mode 100644 index 0000000..6e3ec5e --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/bPaginate.js @@ -0,0 +1,59 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "bPaginate" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt" + } ); + + oTest.fnWaitTest( + "Pagiantion div exists by default", + null, + function () { return document.getElementById('example_paginate') != null; } + ); + + oTest.fnWaitTest( + "Information div takes paging into account", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 57 entries"; } + ); + + /* Check can disable */ + oTest.fnWaitTest( + "Pagiantion can be disabled", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bPaginate": false + } ); + }, + function () { return document.getElementById('example_paginate') == null; } + ); + + oTest.fnWaitTest( + "Information div takes paging disabled into account", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 57 of 57 entries"; } + ); + + /* Enable makes no difference */ + oTest.fnWaitTest( + "Pagiantion enabled override", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bPaginate": true + } ); + }, + function () { return document.getElementById('example_paginate') != null; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/bProcessing.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/bProcessing.js new file mode 100644 index 0000000..100db86 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/bProcessing.js @@ -0,0 +1,103 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "bProcessing" ); + +/* It's actually a bit hard to set this one due to the fact that it will only be shown + * when DataTables is doing some kind of processing. The server-side processing is a bit + * better to test this than here - so we just the interal functions to enable it and check + * that it is available + */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Processing is off by default", + null, + function () { return oSettings.oFeatures.bProcessing == false; } + ); + + oTest.fnWaitTest( + "Processing div is not in the DOM", + function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); }, + function () { return document.getElementById('example_processing') == null; } + ); + + oTest.fnWaitTest( + "Processing div cannot be shown", + function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); }, + function () { return document.getElementById('example_processing') == null; } + ); + + oTest.fnWaitTest( + "Processing div cannot be hidden", + function () { oTable.oApi._fnProcessingDisplay( oSettings, false ); }, + function () { return document.getElementById('example_processing') == null; } + ); + + + /* Check can disable */ + oTest.fnWaitTest( + "Processing can be enabled", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bProcessing": true + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oFeatures.bProcessing == true; } + ); + + oTest.fnWaitTest( + "Processing div is in the DOM", + function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); }, + function () { return document.getElementById('example_processing'); } + ); + + oTest.fnWaitTest( + "Processing div is hidden by default", + function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); }, + function () { return document.getElementById('example_processing').style.visibility = "hidden"; } + ); + + oTest.fnWaitTest( + "Processing div can be shown", + function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); }, + function () { return document.getElementById('example_processing').style.visibility = "visible"; } + ); + + oTest.fnWaitTest( + "Processing div can be hidden", + function () { oTable.oApi._fnProcessingDisplay( oSettings, false ); }, + function () { return document.getElementById('example_processing').style.visibility = "hidden"; } + ); + + /* Enable makes no difference */ + oTest.fnWaitTest( + "Processing disabled override", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bProcessing": false + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oFeatures.bProcessing == false; } + ); + + oTest.fnWaitTest( + "Processing div is not in the DOM", + function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); }, + function () { return document.getElementById('example_processing') == null; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/bServerSide.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/bServerSide.js new file mode 100644 index 0000000..61fdce4 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/bServerSide.js @@ -0,0 +1,20 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "bServerSide" ); + +/* Not interested in server-side processing here other than to check that it is off */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Server side is off by default", + null, + function () { return oSettings.oFeatures.bServerSide == false; } + ); + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/bSort.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/bSort.js new file mode 100644 index 0000000..066afee --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/bSort.js @@ -0,0 +1,99 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "bSort" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt" + } ); + + oTest.fnWaitTest( + "Sorting is on by default", + null, + function () { return $('#example tbody td:eq(0)').html() == "Gecko"; } + ); + + oTest.fnWaitTest( + "Sorting Asc by default class applied", + null, + function () { return $('#example thead th:eq(0)').hasClass("sorting_asc"); } + ); + + oTest.fnWaitTest( + "Click on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnWaitTest( + "Sorting class removed from first column", + null, + function () { return $('#example thead th:eq(0)').hasClass("sorting_asc") != true; } + ); + + oTest.fnWaitTest( + "Sorting asc class applied to second column", + null, + function () { return $('#example thead th:eq(1)').hasClass("sorting_asc"); } + ); + + oTest.fnWaitTest( + "Reverse on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnWaitTest( + "Sorting acs class removed from second column", + null, + function () { return $('#example thead th:eq(1)').hasClass("sorting_asc") != true; } + ); + + oTest.fnWaitTest( + "Sorting desc class applied to second column", + null, + function () { return $('#example thead th:eq(1)').hasClass("sorting_desc"); } + ); + + /* Check can disable */ + oTest.fnWaitTest( + "Pagiantion can be disabled", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bSort": false + } ); + }, + function () { return $('#example tbody td:eq(3)').html() == "4"; } + ); + + oTest.fnWaitTest( + "Click on second column has no effect", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "4"; } + ); + + oTest.fnWaitTest( + "Reverse on second column has no effect", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "4"; } + ); + + /* Enable makes no difference */ + oTest.fnWaitTest( + "Sorting enabled override", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bSort": true + } ); + }, + function () { return $('#example tbody td:eq(0)').html() == "Gecko"; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/bSortClasses.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/bSortClasses.js new file mode 100644 index 0000000..b957c80 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/bSortClasses.js @@ -0,0 +1,132 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "bSortClasses" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt" + } ); + + oTest.fnWaitTest( + "Sorting classes are applied by default", + null, + function () { return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1'); } + ); + + oTest.fnWaitTest( + "Sorting classes are applied to all required cells", + null, + function () { return $('#example tbody tr:eq(7) td:eq(0)').hasClass('sorting_1'); } + ); + + oTest.fnWaitTest( + "Sorting classes are not applied to non-sorting columns", + null, + function () { return $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_1') == false; } + ); + + oTest.fnWaitTest( + "Sorting multi-column - add column 1", + function () { + oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); }, + function () { + return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') && + $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2'); + } + ); + + oTest.fnWaitTest( + "Sorting multi-column - add column 2", + function () { + oDispacher.click( $('#example thead th:eq(2)')[0], { 'shift': true } ); }, + function () { + return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') && + $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') && + $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3'); + } + ); + + oTest.fnWaitTest( + "Sorting multi-column - add column 3", + function () { + oDispacher.click( $('#example thead th:eq(3)')[0], { 'shift': true } ); + }, + function () { + return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') && + $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') && + $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3') && + $('#example tbody tr:eq(0) td:eq(3)').hasClass('sorting_3'); + } + ); + + oTest.fnWaitTest( + "Remove sorting classes on single column sort", + function () { + $('#example thead th:eq(4)').click(); + }, + function () { + return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false && + $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') == false && + $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3') == false && + $('#example tbody tr:eq(0) td:eq(3)').hasClass('sorting_3') == false; + } + ); + + oTest.fnWaitTest( + "Sorting class 1 was added", + null, + function () { return $('#example tbody tr:eq(1) td:eq(4)').hasClass('sorting_1'); } + ); + + + /* Check can disable */ + oTest.fnWaitTest( + "Sorting classes can be disabled", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bSortClasses": false + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false; } + ); + + oTest.fnWaitTest( + "Sorting classes disabled - add column 1 - no effect", + function () { + oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); }, + function () { + return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false && + $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') == false; + } + ); + + oTest.fnWaitTest( + "Sorting classes disabled - add column 2 - no effect", + function () { + oDispacher.click( $('#example thead th:eq(2)')[0], { 'shift': true } ); }, + function () { + return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false && + $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') == false && + $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3') == false; + } + ); + + + /* Enable makes no difference */ + oTest.fnWaitTest( + "Sorting classes enabled override", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bSortClasses": true + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1'); } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/fnCreatedCell.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/fnCreatedCell.js new file mode 100755 index 0000000..e930d05 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/fnCreatedCell.js @@ -0,0 +1,183 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "fnCreatedCell tests" ); + +$(document).ready( function () { + var tmp = 0; + var complete = false; + + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "aoColumnDefs": [ { + fnCreatedCell: function () { + tmp++; + }, + "aTargets": ["_all"] + } ] + } ); + + oTest.fnWaitTest( + "Cell created is called once for each cell on init", + null, + function () { return tmp===285; } + ); + + oTest.fnTest( + "Created isn't called back on other draws", + function () { $('#example th:eq(1)').click(); }, + function () { return tmp===285; } + ); + + oTest.fnWaitTest( + "Four arguments for the function", + function () { + oSession.fnRestore(); + tmp = true; + complete = false; + + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "aoColumnDefs": [ { + fnCreatedRow: function () { + if ( arguments.length !== 4 ) { + tmp = false; + } + }, + "aTargets": ["_all"] + } ], + fnInitComplete: function () { + complete = true; + } + } ); + }, + function () { return (tmp && complete); } + ); + + oTest.fnWaitTest( + "First argument is a TD element", + function () { + oSession.fnRestore(); + tmp = true; + complete = false; + + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "aoColumnDefs": [ { + fnCreatedRow: function () { + if ( arguments[0].nodeName !== "TD" ) { + tmp = false; + } + }, + "aTargets": ["_all"] + } ], + fnInitComplete: function () { + complete = true; + } + } ); + }, + function () { return (tmp && complete); } + ); + + oTest.fnWaitTest( + "Second argument is the HTML value", + function () { + oSession.fnRestore(); + tmp = true; + complete = false; + + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "aoColumnDefs": [ { + fnCreatedRow: function () { + if ( arguments[1] != $('td').html() ) { + tmp = false; + } + }, + "aTargets": ["_all"] + } ], + fnInitComplete: function () { + complete = true; + } + } ); + }, + function () { return (tmp && complete); } + ); + + oTest.fnWaitTest( + "Third argument is the data array", + function () { + oSession.fnRestore(); + tmp = true; + complete = false; + + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "aoColumnDefs": [ { + fnCreatedRow: function () { + if ( arguments[2].length !== 5 ) { + tmp = false; + } + }, + "aTargets": ["_all"] + } ], + fnInitComplete: function () { + complete = true; + } + } ); + }, + function () { return (tmp && complete); } + ); + + oTest.fnWaitTest( + "Fourth argument is the data source for the row", + function () { + oSession.fnRestore(); + tmp = true; + complete = false; + + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "aoColumnDefs": [ { + fnCreatedRow: function () { + if ( arguments[2] !== this.fnSettings().aoData[ arguments[2] ]._aData ) { + tmp = false; + } + }, + "aTargets": ["_all"] + } ], + fnInitComplete: function () { + complete = true; + } + } ); + }, + function () { return (tmp && complete); } + ); + + oTest.fnWaitTest( + "Fifth argument is the the col index", + function () { + oSession.fnRestore(); + tmp = true; + complete = false; + + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "aoColumnDefs": [ { + fnCreatedRow: function () { + if ( arguments[1] != $('td:eq('+arguments[4]+')', arguments[0].parentNode).html() ) { + tmp = false; + } + }, + "aTargets": ["_all"] + } ], + fnInitComplete: function () { + complete = true; + } + } ); + }, + function () { return (tmp && complete); } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/fnCreatedRow.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/fnCreatedRow.js new file mode 100755 index 0000000..66fc328 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/fnCreatedRow.js @@ -0,0 +1,142 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "fnCreatedRow tests" ); + +$(document).ready( function () { + var tmp = 0; + var complete = false; + + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + fnCreatedRow: function () { + tmp++; + } + } ); + + oTest.fnWaitTest( + "Row created is called once for each row on init", + null, + function () { return tmp===57; } + ); + + oTest.fnTest( + "Created isn't called back on other draws", + function () { $('#example th:eq(1)').click(); }, + function () { return tmp===57; } + ); + + oTest.fnWaitTest( + "Three arguments for the function", + function () { + oSession.fnRestore(); + tmp = true; + complete = false; + + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + fnCreatedRow: function () { + if ( arguments.length !== 3 ) { + tmp = false; + } + }, + fnInitComplete: function () { + complete = true; + } + } ); + }, + function () { return (tmp && complete); } + ); + + oTest.fnWaitTest( + "First argument is a TR element", + function () { + oSession.fnRestore(); + tmp = true; + complete = false; + + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + fnCreatedRow: function () { + if ( arguments[0].nodeName !== "TR" ) { + tmp = false; + } + }, + fnInitComplete: function () { + complete = true; + } + } ); + }, + function () { return (tmp && complete); } + ); + + oTest.fnWaitTest( + "Second argument is an array with 5 elements", + function () { + oSession.fnRestore(); + tmp = true; + complete = false; + + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + fnCreatedRow: function () { + if ( arguments[1].length !== 5 ) { + tmp = false; + } + }, + fnInitComplete: function () { + complete = true; + } + } ); + }, + function () { return (tmp && complete); } + ); + + oTest.fnWaitTest( + "Third argument is the data source for the row", + function () { + oSession.fnRestore(); + tmp = true; + complete = false; + + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + fnCreatedRow: function () { + if ( arguments[1] !== this.fnSettings().aoData[ arguments[2] ]._aData ) { + tmp = false; + } + }, + fnInitComplete: function () { + complete = true; + } + } ); + }, + function () { return (tmp && complete); } + ); + + oTest.fnWaitTest( + "TR element is tied to the correct data", + function () { + oSession.fnRestore(); + tmp = false; + complete = false; + + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + fnCreatedRow: function (tr, data, index) { + if ( data[1] === "Firefox 1.0" ) { + if ( $('td:eq(3)', tr).html() == "1.7" ) { + tmp = true; + } + } + }, + fnInitComplete: function () { + complete = true; + } + } ); + }, + function () { return (tmp && complete); } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/fnDrawCallback.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/fnDrawCallback.js new file mode 100644 index 0000000..14c5ff1 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/fnDrawCallback.js @@ -0,0 +1,98 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "fnDrawCallback" ); + +/* Fairly boring function compared to the others! */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt" + } ); + var oSettings = oTable.fnSettings(); + var mPass, bInit; + + oTest.fnWaitTest( + "Default should be null", + null, + function () { return oSettings.fnDrawCallback == null; } + ); + + + oTest.fnWaitTest( + "One argument passed", + function () { + oSession.fnRestore(); + + mPass = -1; + bInit = false; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "fnDrawCallback": function ( ) { + mPass = arguments.length; + }, + "fnInitComplete": function () { + bInit = true; + } + } ); + }, + function () { return mPass == 1 && bInit; } + ); + + + oTest.fnWaitTest( + "That one argument is the settings object", + function () { + oSession.fnRestore(); + + bInit = false; + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "fnDrawCallback": function ( oSettings ) { + mPass = oSettings; + }, + "fnInitComplete": function () { + bInit = true; + } + } ); + }, + function () { return oTable.fnSettings() == mPass && bInit; } + ); + + + /* The draw callback is called once for the init and then when the data is added */ + oTest.fnWaitTest( + "fnRowCallback called once on first draw", + function () { + oSession.fnRestore(); + + mPass = 0; + bInit = false; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "fnDrawCallback": function ( ) { + mPass++; + }, + "fnInitComplete": function () { + bInit = true; + } + } ); + }, + function () { return mPass == 2 && bInit; } + ); + + oTest.fnWaitTest( + "fnRowCallback called once on each draw there after as well", + function () { + $('#example_next').click(); + $('#example_next').click(); + $('#example_next').click(); + }, + function () { return mPass == 5; } + ); + + + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/fnHeaderCallback.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/fnHeaderCallback.js new file mode 100644 index 0000000..dd16128 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/fnHeaderCallback.js @@ -0,0 +1,191 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "fnHeaderCallback" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt" + } ); + var oSettings = oTable.fnSettings(); + var mPass, bInit; + + oTest.fnWaitTest( + "Default should be null", + null, + function () { return oSettings.fnHeaderCallback == null; } + ); + + + oTest.fnWaitTest( + "Five arguments passed", + function () { + oSession.fnRestore(); + + mPass = -1; + bInit = false; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "fnHeaderCallback": function ( ) { + mPass = arguments.length; + }, + "fnInitComplete": function () { + bInit = true; + } + } ); + }, + function () { return mPass == 5 && bInit; } + ); + + + /* The header callback is called once for the init and then when the data is added */ + oTest.fnWaitTest( + "fnHeaderCallback called once per draw", + function () { + oSession.fnRestore(); + + mPass = 0; + bInit = false; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + mPass++; + }, + "fnInitComplete": function () { + bInit = true; + } + } ); + }, + function () { return mPass == 2 && bInit; } + ); + + oTest.fnWaitTest( + "fnRowCallback called on paging (i.e. another draw)", + function () { $('#example_next').click(); }, + function () { return mPass == 3; } + ); + + + oTest.fnWaitTest( + "fnRowCallback allows us to alter row information", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + nHead.getElementsByTagName('th')[0].innerHTML = "Displaying "+(iEnd-iStart)+" records"; + } + } ); + }, + function () { return $('#example thead th:eq(0)').html() == "Displaying 10 records"; } + ); + + + oTest.fnWaitTest( + "iStart correct on first page", + function () { + oSession.fnRestore(); + + mPass = true; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + if ( iStart != 0 ) + { + mPass = false; + } + } + } ); + }, + function () { return mPass; } + ); + + + oTest.fnWaitTest( + "iStart correct on second page", + function () { + oSession.fnRestore(); + + mPass = false; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + if ( iStart == 10 ) + { + mPass = true; + } + }, + "fnInitComplete": function () { + $('#example_next').click(); + } + } ); + }, + function () { return mPass; } + ); + + + oTest.fnWaitTest( + "iEnd correct on second page", + function () { + oSession.fnRestore(); + + mPass = false; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + if ( iEnd == 20 ) + { + mPass = true; + } + }, + "fnInitComplete": function () { + $('#example_next').click(); + } + } ); + }, + function () { return mPass; } + ); + + + oTest.fnWaitTest( + "aiDisplay length is full data when not filtered", + function () { + oSession.fnRestore(); + + mPass = false; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + if ( aiDisplay.length == 57 ) + { + mPass = true; + } + } + } ); + }, + function () { return mPass; } + ); + + oTest.fnWaitTest( + "aiDisplay length is 9 when filtering on 'Mozilla'", + function () { + oSession.fnRestore(); + + mPass = false; + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + if ( aiDisplay.length == 9 ) + { + mPass = true; + } + } + } ); + oTable.fnFilter( "Mozilla" ); + }, + function () { return mPass; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/fnInitComplete.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/fnInitComplete.js new file mode 100644 index 0000000..fe2c65e --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/fnInitComplete.js @@ -0,0 +1,100 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "fnInitComplete" ); + +/* Fairly boring function compared to the others! */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt" + } ); + var oSettings = oTable.fnSettings(); + var mPass; + + oTest.fnWaitTest( + "Default should be null", + null, + function () { return oSettings.fnInitComplete == null; } + ); + + + oTest.fnWaitTest( + "Two arguments passed (for Ajax!)", + function () { + oSession.fnRestore(); + + mPass = -1; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "fnInitComplete": function ( ) { + mPass = arguments.length; + } + } ); + }, + function () { return mPass == 2; } + ); + + + oTest.fnWaitTest( + "That one argument is the settings object", + function () { + oSession.fnRestore(); + + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "fnInitComplete": function ( oSettings ) { + mPass = oSettings; + } + } ); + }, + function () { return oTable.fnSettings() == mPass; } + ); + + + oTest.fnWaitTest( + "fnInitComplete called once on first draw", + function () { + oSession.fnRestore(); + + mPass = 0; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "fnInitComplete": function ( ) { + mPass++; + } + } ); + }, + function () { return mPass == 1; } + ); + + oTest.fnWaitTest( + "fnInitComplete never called there after", + function () { + $('#example_next').click(); + $('#example_next').click(); + $('#example_next').click(); + }, + function () { return mPass == 1; } + ); + + + oTest.fnWaitTest( + "10 rows in the table on complete", + function () { + oSession.fnRestore(); + + mPass = 0; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "fnInitComplete": function ( ) { + mPass = $('#example tbody tr').length; + } + } ); + }, + function () { return mPass == 10; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/fnRowCallback.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/fnRowCallback.js new file mode 100644 index 0000000..766f09a --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/fnRowCallback.js @@ -0,0 +1,112 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "fnRowCallback" ); + +/* Note - fnRowCallback MUST return the first arguments (modified or not) */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt" + } ); + var oSettings = oTable.fnSettings(); + var mPass; + + oTest.fnWaitTest( + "Default should be null", + null, + function () { return oSettings.fnRowCallback == null; } + ); + + + oTest.fnWaitTest( + "Four arguments passed", + function () { + oSession.fnRestore(); + + mPass = -1; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "fnRowCallback": function ( nTr ) { + mPass = arguments.length; + return nTr; + } + } ); + }, + function () { return mPass == 4; } + ); + + + oTest.fnWaitTest( + "fnRowCallback called once for each drawn row", + function () { + oSession.fnRestore(); + + mPass = 0; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) { + mPass++; + return nTr; + } + } ); + }, + function () { return mPass == 10; } + ); + + oTest.fnWaitTest( + "fnRowCallback allows us to alter row information", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) { + $(nTr).addClass('unit_test'); + return nTr; + } + } ); + }, + function () { return $('#example tbody tr:eq(1)').hasClass('unit_test'); } + ); + + oTest.fnWaitTest( + "Data array has length matching columns", + function () { + oSession.fnRestore(); + + mPass = true; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) { + if ( asData.length != 5 ) + mPass = false; + return nTr; + } + } ); + }, + function () { return mPass; } + ); + + oTest.fnWaitTest( + "Data array has length matching columns", + function () { + oSession.fnRestore(); + + mPass = true; + var iCount = 0; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) { + if ( iCount != iDrawIndex ) + mPass = false; + iCount++; + return nTr; + } + } ); + }, + function () { return mPass; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/fnServerData.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/fnServerData.js new file mode 100644 index 0000000..ab20ba3 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/fnServerData.js @@ -0,0 +1,64 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "fnServerData for Ajax sourced data" ); + +$(document).ready( function () { + var mPass; + + oTest.fnTest( + "Argument length", + function () { + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "fnServerData": function () { + mPass = arguments.length; + } + } ); + }, + function () { return mPass == 4; } + ); + + oTest.fnTest( + "Url", + function () { + $('#example').dataTable( { + "bDestroy": true, + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "fnServerData": function (sUrl, aoData, fnCallback, oSettings) { + mPass = sUrl == "../../../examples/ajax/sources/arrays.txt"; + } + } ); + }, + function () { return mPass; } + ); + + oTest.fnTest( + "Data array", + function () { + $('#example').dataTable( { + "bDestroy": true, + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "fnServerData": function (sUrl, aoData, fnCallback, oSettings) { + mPass = aoData.length==0; + } + } ); + }, + function () { return mPass; } + ); + + oTest.fnTest( + "Callback function", + function () { + $('#example').dataTable( { + "bDestroy": true, + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "fnServerData": function (sUrl, aoData, fnCallback, oSettings) { + mPass = typeof fnCallback == 'function'; + } + } ); + }, + function () { return mPass; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/iDisplayLength.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/iDisplayLength.js new file mode 100644 index 0000000..69e7abe --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/iDisplayLength.js @@ -0,0 +1,81 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "iDisplayLength" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt" + } ); + + oTest.fnWaitTest( + "Default length is ten", + null, + function () { return $('#example tbody tr').length == 10; } + ); + + oTest.fnWaitTest( + "Select menu shows 10", + null, + function () { return $('#example_length select').val() == 10; } + ); + + + oTest.fnWaitTest( + "Set initial length to 25", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "iDisplayLength": 25 + } ); + }, + function () { return $('#example tbody tr').length == 25; } + ); + + oTest.fnWaitTest( + "Select menu shows 25", + null, + function () { return $('#example_length select').val() == 25; } + ); + + + oTest.fnWaitTest( + "Set initial length to 100", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "iDisplayLength": 100 + } ); + }, + function () { return $('#example tbody tr').length == 57; } + ); + + oTest.fnWaitTest( + "Select menu shows 25", + null, + function () { return $('#example_length select').val() == 100; } + ); + + + oTest.fnWaitTest( + "Set initial length to 23 (unknown select menu length)", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "iDisplayLength": 23 + } ); + }, + function () { return $('#example tbody tr').length == 23; } + ); + + oTest.fnWaitTest( + "Select menu shows 10 (since 23 is unknow)", + null, + function () { return $('#example_length select').val() == 10; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/oLanguage.oPaginate.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/oLanguage.oPaginate.js new file mode 100644 index 0000000..0dc5812 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/oLanguage.oPaginate.js @@ -0,0 +1,84 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oLanguage.oPaginate" ); + +/* Note that the paging language information only has relevence in full numbers */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "sPaginationType": "full_numbers" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "oLanguage.oPaginate defaults", + null, + function () { + var bReturn = + oSettings.oLanguage.oPaginate.sFirst == "First" && + oSettings.oLanguage.oPaginate.sPrevious == "Previous" && + oSettings.oLanguage.oPaginate.sNext == "Next" && + oSettings.oLanguage.oPaginate.sLast == "Last"; + return bReturn; + } + ); + + oTest.fnTest( + "oLanguage.oPaginate defaults are in the DOM", + null, + function () { + var bReturn = + $('#example_paginate .first').html() == "First" && + $('#example_paginate .previous').html() == "Previous" && + $('#example_paginate .next').html() == "Next" && + $('#example_paginate .last').html() == "Last"; + return bReturn; + } + ); + + + oTest.fnWaitTest( + "oLanguage.oPaginate can be defined", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "sPaginationType": "full_numbers", + "oLanguage": { + "oPaginate": { + "sFirst": "unit1", + "sPrevious": "test2", + "sNext": "unit3", + "sLast": "test4" + } + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { + var bReturn = + oSettings.oLanguage.oPaginate.sFirst == "unit1" && + oSettings.oLanguage.oPaginate.sPrevious == "test2" && + oSettings.oLanguage.oPaginate.sNext == "unit3" && + oSettings.oLanguage.oPaginate.sLast == "test4"; + return bReturn; + } + ); + + oTest.fnTest( + "oLanguage.oPaginate definitions are in the DOM", + null, + function () { + var bReturn = + $('#example_paginate .first').html() == "unit1" && + $('#example_paginate .previous').html() == "test2" && + $('#example_paginate .next').html() == "unit3" && + $('#example_paginate .last').html() == "test4"; + return bReturn; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/oLanguage.sInfo.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/oLanguage.sInfo.js new file mode 100644 index 0000000..1a72a0a --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/oLanguage.sInfo.js @@ -0,0 +1,117 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oLanguage.sInfo" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Info language is 'Showing _START_ to _END_ of _TOTAL_ entries' by default", + null, + function () { return oSettings.oLanguage.sInfo == "Showing _START_ to _END_ of _TOTAL_ entries"; } + ); + + oTest.fnTest( + "Info language default is in the DOM", + null, + function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries"; } + ); + + + oTest.fnWaitTest( + "Info language can be defined - without any macros", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "oLanguage": { + "sInfo": "unit test" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oLanguage.sInfo == "unit test"; } + ); + + oTest.fnTest( + "Info language definition is in the DOM", + null, + function () { return document.getElementById('example_info').innerHTML = "unit test"; } + ); + + oTest.fnWaitTest( + "Info language can be defined - with macro _START_ only", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "oLanguage": { + "sInfo": "unit _START_ test" + } + } ); + }, + function () { return document.getElementById('example_info').innerHTML = "unit 1 test"; } + ); + + oTest.fnWaitTest( + "Info language can be defined - with macro _END_ only", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "oLanguage": { + "sInfo": "unit _END_ test" + } + } ); + }, + function () { return document.getElementById('example_info').innerHTML = "unit 10 test"; } + ); + + oTest.fnWaitTest( + "Info language can be defined - with macro _TOTAL_ only", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "oLanguage": { + "sInfo": "unit _END_ test" + } + } ); + }, + function () { return document.getElementById('example_info').innerHTML = "unit 57 test"; } + ); + + oTest.fnWaitTest( + "Info language can be defined - with macros _START_ and _END_", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "oLanguage": { + "sInfo": "unit _START_ _END_ test" + } + } ); + }, + function () { return document.getElementById('example_info').innerHTML = "unit 1 10 test"; } + ); + + oTest.fnWaitTest( + "Info language can be defined - with macros _START_, _END_ and _TOTAL_", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "oLanguage": { + "sInfo": "unit _START_ _END_ _TOTAL_ test" + } + } ); + }, + function () { return document.getElementById('example_info').innerHTML = "unit 1 10 57 test"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/oLanguage.sInfoEmpty.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/oLanguage.sInfoEmpty.js new file mode 100644 index 0000000..7079611 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/oLanguage.sInfoEmpty.js @@ -0,0 +1,79 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oLanguage.sInfoEmpty" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Info empty language is 'Showing 0 to 0 of 0 entries' by default", + function () { oTable.fnFilter("nothinghere"); }, + function () { return oSettings.oLanguage.sInfoEmpty == "Showing 0 to 0 of 0 entries"; } + ); + + oTest.fnTest( + "Info empty language default is in the DOM", + null, + function () { + var bReturn = document.getElementById('example_info').innerHTML.replace( + ' '+oSettings.oLanguage.sInfoFiltered.replace( '_MAX_', '57' ), "" ) == + "Showing 0 to 0 of 0 entries"; + return bReturn; + } + ); + + + oTest.fnWaitTest( + "Info empty language can be defined", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "oLanguage": { + "sInfoEmpty": "unit test" + } + } ); + oSettings = oTable.fnSettings(); + oTable.fnFilter("nothinghere"); + }, + function () { return oSettings.oLanguage.sInfoEmpty == "unit test"; } + ); + + oTest.fnTest( + "Info empty language default is in the DOM", + null, + function () { + var bReturn = document.getElementById('example_info').innerHTML.replace( + ' '+oSettings.oLanguage.sInfoFiltered.replace( '_MAX_', '57' ), "" ) == + "unit test"; + return bReturn; + } + ); + + + oTest.fnWaitTest( + "Macro's not replaced", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "oLanguage": { + "sInfoEmpty": "unit _START_ _END_ _TOTAL_ test" + } + } ); + oTable.fnFilter("nothinghere"); + }, + function () { + var bReturn = document.getElementById('example_info').innerHTML.replace( + ' '+oSettings.oLanguage.sInfoFiltered.replace( '_MAX_', '57' ), "" ) == + "unit _START_ _END_ _TOTAL_ test"; + return bReturn; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/oLanguage.sInfoPostFix.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/oLanguage.sInfoPostFix.js new file mode 100644 index 0000000..f91e5da --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/oLanguage.sInfoPostFix.js @@ -0,0 +1,78 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oLanguage.sInfoPostFix" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Info post fix language is '' (blank) by default", + null, + function () { return oSettings.oLanguage.sInfoPostFix == ""; } + ); + + oTest.fnTest( + "Width no post fix, the basic info shows", + null, + function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries"; } + ); + + + oTest.fnWaitTest( + "Info post fix language can be defined", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "oLanguage": { + "sInfoPostFix": "unit test" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oLanguage.sInfoPostFix == "unit test"; } + ); + + oTest.fnTest( + "Info empty language default is in the DOM", + null, + function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries unit test"; } + ); + + + oTest.fnWaitTest( + "Macros have no effect in the post fix", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "oLanguage": { + "sInfoPostFix": "unit _START_ _END_ _TOTAL_ test" + } + } ); + }, + function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries unit _START_ _END_ _TOTAL_ test"; } + ); + + + oTest.fnWaitTest( + "Post fix is applied after fintering info", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "oLanguage": { + "sInfoPostFix": "unit test" + } + } ); + oTable.fnFilter("nothinghere"); + }, + function () { return document.getElementById('example_info').innerHTML = "Showing 0 to 0 of 0 entries unit (filtered from 57 total entries) test"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/oLanguage.sLengthMenu.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/oLanguage.sLengthMenu.js new file mode 100644 index 0000000..6fae948 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/oLanguage.sLengthMenu.js @@ -0,0 +1,111 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oLanguage.sLengthMenu" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Menu language is 'Show _MENU_ entries' by default", + null, + function () { return oSettings.oLanguage.sLengthMenu == "Show _MENU_ entries"; } + ); + + oTest.fnTest( + "_MENU_ macro is replaced by select menu in DOM", + null, + function () { return $('select', oSettings.aanFeatures.l[0]).length == 1 } + ); + + oTest.fnTest( + "A label input is used", + null, + function () { return $('label', oSettings.aanFeatures.l[0]).length == 1 } + ); + + oTest.fnTest( + "Default is put into DOM", + null, + function () { + var anChildren = $('label',oSettings.aanFeatures.l[0])[0].childNodes; + var bReturn = + anChildren[0].nodeValue == "Show " && + anChildren[2].nodeValue == " entries"; + return bReturn; + } + ); + + + oTest.fnWaitTest( + "Menu length language can be defined - no _MENU_ macro", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "oLanguage": { + "sLengthMenu": "unit test" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oLanguage.sLengthMenu == "unit test"; } + ); + + oTest.fnTest( + "Menu length language definition is in the DOM", + null, + function () { + return $('label', oSettings.aanFeatures.l[0]).text() == "unit test"; + } + ); + + + oTest.fnWaitTest( + "Menu length language can be defined - with _MENU_ macro", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "oLanguage": { + "sLengthMenu": "unit _MENU_ test" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { + var anChildren = $('label',oSettings.aanFeatures.l[0])[0].childNodes; + var bReturn = + anChildren[0].nodeValue == "unit " && + anChildren[2].nodeValue == " test"; + return bReturn; + } + ); + + + oTest.fnWaitTest( + "Only the _MENU_ macro", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "oLanguage": { + "sLengthMenu": "_MENU_" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { + var anChildren = oSettings.aanFeatures.l[0].childNodes; + var bReturn = + anChildren.length == 1 && + $('select', oSettings.aanFeatures.l[0]).length == 1; + return bReturn; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/oLanguage.sLoadingRecords.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/oLanguage.sLoadingRecords.js new file mode 100644 index 0000000..616b0ef --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/oLanguage.sLoadingRecords.js @@ -0,0 +1,65 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oLanguage.sLoadingRecords" ); + +$(document).ready( function () { + var tmp = false; + oTest.fnTest( + "Default loading text is 'Loading...'", + function () { + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt" + } ); + tmp = $('#example tbody tr td')[0].innerHTML == "Loading..."; + }, + function () { return tmp; } + ); + + oTest.fnTest( + "Text can be overriden", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "oLanguage": { + "sLoadingRecords": "unitest" + }, + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt" + } ); + tmp = $('#example tbody tr td')[0].innerHTML == "unitest"; + }, + function () { return tmp; } + ); + + oTest.fnTest( + "When sZeroRecords is given but sLoadingRecords is not, sZeroRecords is used", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "oLanguage": { + "sZeroRecords": "unitest_sZeroRecords" + }, + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt" + } ); + tmp = $('#example tbody tr td')[0].innerHTML == "unitest_sZeroRecords"; + }, + function () { return tmp; } + ); + + oTest.fnTest( + "sLoadingRecords and sZeroRecords both given", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "oLanguage": { + "sZeroRecords": "unitest_sZeroRecords2", + "sLoadingRecords": "unitest2" + }, + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt" + } ); + tmp = $('#example tbody tr td')[0].innerHTML == "unitest2"; + }, + function () { return tmp; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/oLanguage.sProcessing.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/oLanguage.sProcessing.js new file mode 100644 index 0000000..3988619 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/oLanguage.sProcessing.js @@ -0,0 +1,49 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oLanguage.sProcessing" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bProcessing": true + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Processing language is 'Processing...' by default", + null, + function () { return oSettings.oLanguage.sProcessing == "Processing..."; } + ); + + oTest.fnTest( + "Processing language default is in the DOM", + null, + function () { return document.getElementById('example_processing').innerHTML = "Processing..."; } + ); + + + oTest.fnWaitTest( + "Processing language can be defined", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bProcessing": true, + "oLanguage": { + "sProcessing": "unit test" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oLanguage.sProcessing == "unit test"; } + ); + + oTest.fnTest( + "Processing language definition is in the DOM", + null, + function () { return document.getElementById('example_processing').innerHTML = "unit test"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/oLanguage.sSearch.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/oLanguage.sSearch.js new file mode 100644 index 0000000..5a1584d --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/oLanguage.sSearch.js @@ -0,0 +1,70 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oLanguage.sSearch" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Search language is 'Search:' by default", + null, + function () { return oSettings.oLanguage.sSearch == "Search:"; } + ); + + oTest.fnTest( + "A label input is used", + null, + function () { return $('label', oSettings.aanFeatures.f[0]).length == 1 } + ); + + oTest.fnTest( + "Search language default is in the DOM", + null, + function () { return $('label', oSettings.aanFeatures.f[0]).text() + == "Search: "; } + ); + + + oTest.fnWaitTest( + "Search language can be defined", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "oLanguage": { + "sSearch": "unit test" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oLanguage.sSearch == "unit test"; } + ); + + oTest.fnTest( + "Info language definition is in the DOM", + null, + function () { return $('label', oSettings.aanFeatures.f[0]).text().indexOf('unit test') !== -1; } + ); + + + oTest.fnWaitTest( + "Blank search has a no space (separator) inserted", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "oLanguage": { + "sSearch": "" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { return document.getElementById('example_filter').childNodes.length == 1; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/oLanguage.sUrl.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/oLanguage.sUrl.js new file mode 100644 index 0000000..5ebfe5d --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/oLanguage.sUrl.js @@ -0,0 +1,62 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oLanguage.sUrl" ); + +/* Note that we only test the internal storage of language information pulled form a file here + * as the other language tests will check it goes into the DOM correctly + */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "sUrl is blank by default", + null, + function () { return oSettings.oLanguage.sUrl == ""; } + ); + + + oTest.fnWaitTest( + "Loading of German file loads language information", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "oLanguage": { + "sUrl": "../../../examples/examples_support/de_DE.txt" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { + var bReturn = + oSettings.oLanguage.sProcessing == "Bitte warten..." && + oSettings.oLanguage.sLengthMenu == "_MENU_ Einträge anzeigen" && + oSettings.oLanguage.sZeroRecords == "Keine Einträge vorhanden." && + oSettings.oLanguage.sInfo == "_START_ bis _END_ von _TOTAL_ Einträgen" && + oSettings.oLanguage.sInfoEmpty == "0 bis 0 von 0 Einträgen" && + oSettings.oLanguage.sInfoFiltered == "(gefiltert von _MAX_ Einträgen)" && + oSettings.oLanguage.sInfoPostFix == "" && + oSettings.oLanguage.sSearch == "Suchen" && + oSettings.oLanguage.oPaginate.sFirst == "Erster" && + oSettings.oLanguage.oPaginate.sPrevious == "Zurück" && + oSettings.oLanguage.oPaginate.sNext == "Nächster" && + oSettings.oLanguage.oPaginate.sLast == "Letzter"; + + return bReturn; + } + ); + + /* One DOM check just to ensure that they go into the DOM */ + oTest.fnTest( + "Loaded language goes into the DOM", + null, + function () { return document.getElementById('example_info').innerHTML = "1 bis 10 von 57 Einträgen"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/oLanguage.sZeroRecords.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/oLanguage.sZeroRecords.js new file mode 100644 index 0000000..7dffc15 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/oLanguage.sZeroRecords.js @@ -0,0 +1,48 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oLanguage.sZeroRecords" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Zero records language is 'No matching records found' by default", + null, + function () { return oSettings.oLanguage.sZeroRecords == "No matching records found"; } + ); + + oTest.fnWaitTest( + "Text is shown when empty table (after filtering)", + function () { oTable.fnFilter('nothinghere'); }, + function () { return $('#example tbody tr td')[0].innerHTML == "No matching records found" } + ); + + + + oTest.fnWaitTest( + "Zero records language can be defined", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "oLanguage": { + "sZeroRecords": "unit test" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oLanguage.sZeroRecords == "unit test"; } + ); + + oTest.fnWaitTest( + "Text is shown when empty table (after filtering)", + function () { oTable.fnFilter('nothinghere2'); }, + function () { return $('#example tbody tr td')[0].innerHTML == "unit test" } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/oSearch.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/oSearch.js new file mode 100644 index 0000000..42f1b94 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/oSearch.js @@ -0,0 +1,108 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oSearch" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Default values should be blank", + null, + function () { + var bReturn = oSettings.oPreviousSearch.sSearch == "" && + !oSettings.oPreviousSearch.bRegex; + return bReturn; + } + ); + + /* This test might be considered iffy since the full object isn't given, but it's reasonable to + * expect DataTables to cope with this. It should just assumine regex false + */ + oTest.fnWaitTest( + "Search term only in object", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "oSearch": { + "sSearch": "Mozilla" + } + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Gecko"; } + ); + + oTest.fnWaitTest( + "New search will kill old one", + function () { + oTable.fnFilter("Opera"); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Presto"; } + ); + + oTest.fnWaitTest( + "Search plain text term and escape regex true", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "oSearch": { + "sSearch": "DS", + "bRegex": false + } + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Nintendo DS browser"; } + ); + + oTest.fnWaitTest( + "Search plain text term and escape regex false", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "oSearch": { + "sSearch": "Opera", + "bRegex": true + } + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Presto"; } + ); + + oTest.fnWaitTest( + "Search regex text term and escape regex true", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "oSearch": { + "sSearch": "1.*", + "bRegex": false + } + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; } + ); + + oTest.fnWaitTest( + "Search regex text term and escape regex false", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "oSearch": { + "sSearch": "1.*", + "bRegex": true + } + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Gecko"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/sAjaxDataProp.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/sAjaxDataProp.js new file mode 100644 index 0000000..5759c47 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/sAjaxDataProp.js @@ -0,0 +1,139 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "Custom data source property - property given" ); + + +$(document).ready( function () { + var oInit = { + "sAjaxSource": "../../../examples/ajax/sources/custom_prop.txt", + "sAjaxDataProp": "demo" + }; + $('#example').dataTable( oInit ); + + oTest.fnWaitTest( + "10 rows shown on the first page", + null, + function () { return $('#example tbody tr').length == 10; } + ); + + oTest.fnTest( + "Initial sort occured", + null, + function () { return $('#example tbody td:eq(0)').html() == "Gecko"; } + ); + + /* Need to use the WaitTest for sorting due to the setTimeout datatables uses */ + oTest.fnTest( + "Sorting (first click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Sorting (second click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnTest( + "Sorting (third click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Sorting (first click) on numeric column", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "-"; } + ); + + oTest.fnTest( + "Sorting (second click) on numeric column", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "522.1"; } + ); + + oTest.fnTest( + "Sorting multi-column (first click)", + function () { + $('#example thead th:eq(0)').click(); + oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); }, + function () { var b = + $('#example tbody td:eq(0)').html() == "Gecko" && + $('#example tbody td:eq(1)').html() == "Camino 1.0"; return b; } + ); + + oTest.fnTest( + "Sorting multi-column - sorting second column only", + function () { + $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + /* Basic paging */ + oTest.fnTest( + "Paging to second page", + function () { $('#example_next').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "IE Mobile"; } + ); + + oTest.fnTest( + "Paging to first page", + function () { $('#example_previous').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Attempting to page back beyond the first page", + function () { $('#example_previous').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + /* Changing length */ + oTest.fnTest( + "Changing table length to 25 records", + function () { $("select[name=example_length]").val('25').change(); }, + function () { return $('#example tbody tr').length == 25; } + ); + + oTest.fnTest( + "Changing table length to 50 records", + function () { $("select[name=example_length]").val('50').change(); }, + function () { return $('#example tbody tr').length == 50; } + ); + + oTest.fnTest( + "Changing table length to 100 records", + function () { $("select[name=example_length]").val('100').change(); }, + function () { return $('#example tbody tr').length == 57; } + ); + + oTest.fnTest( + "Changing table length to 10 records", + function () { $("select[name=example_length]").val('10').change(); }, + function () { return $('#example tbody tr').length == 10; } + ); + + /* + * Information element + */ + oTest.fnTest( + "Information on zero config", + null, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Information on second page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 11 to 20 of 57 entries"; } + ); + + oTest.fnTest( + "Information on third page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 21 to 30 of 57 entries"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/sAjaxDataProp2.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/sAjaxDataProp2.js new file mode 100644 index 0000000..646657e --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/sAjaxDataProp2.js @@ -0,0 +1,139 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "Custom data source property - array only" ); + + +$(document).ready( function () { + var oInit = { + "sAjaxSource": "../../../examples/ajax/sources/array_only.txt", + "sAjaxDataProp": "" + }; + $('#example').dataTable( oInit ); + + oTest.fnWaitTest( + "10 rows shown on the first page", + null, + function () { return $('#example tbody tr').length == 10; } + ); + + oTest.fnTest( + "Initial sort occured", + null, + function () { return $('#example tbody td:eq(0)').html() == "Gecko"; } + ); + + /* Need to use the WaitTest for sorting due to the setTimeout datatables uses */ + oTest.fnTest( + "Sorting (first click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Sorting (second click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnTest( + "Sorting (third click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Sorting (first click) on numeric column", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "-"; } + ); + + oTest.fnTest( + "Sorting (second click) on numeric column", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "522.1"; } + ); + + oTest.fnTest( + "Sorting multi-column (first click)", + function () { + $('#example thead th:eq(0)').click(); + oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); }, + function () { var b = + $('#example tbody td:eq(0)').html() == "Gecko" && + $('#example tbody td:eq(1)').html() == "Camino 1.0"; return b; } + ); + + oTest.fnTest( + "Sorting multi-column - sorting second column only", + function () { + $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + /* Basic paging */ + oTest.fnTest( + "Paging to second page", + function () { $('#example_next').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "IE Mobile"; } + ); + + oTest.fnTest( + "Paging to first page", + function () { $('#example_previous').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Attempting to page back beyond the first page", + function () { $('#example_previous').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + /* Changing length */ + oTest.fnTest( + "Changing table length to 25 records", + function () { $("select[name=example_length]").val('25').change(); }, + function () { return $('#example tbody tr').length == 25; } + ); + + oTest.fnTest( + "Changing table length to 50 records", + function () { $("select[name=example_length]").val('50').change(); }, + function () { return $('#example tbody tr').length == 50; } + ); + + oTest.fnTest( + "Changing table length to 100 records", + function () { $("select[name=example_length]").val('100').change(); }, + function () { return $('#example tbody tr').length == 57; } + ); + + oTest.fnTest( + "Changing table length to 10 records", + function () { $("select[name=example_length]").val('10').change(); }, + function () { return $('#example tbody tr').length == 10; } + ); + + /* + * Information element + */ + oTest.fnTest( + "Information on zero config", + null, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Information on second page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 11 to 20 of 57 entries"; } + ); + + oTest.fnTest( + "Information on third page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 21 to 30 of 57 entries"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/sAjaxSource.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/sAjaxSource.js new file mode 100644 index 0000000..b633d09 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/sAjaxSource.js @@ -0,0 +1,22 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "sAjaxSource" ); + +/* Sanitfy check really - all the other tests blast this */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Server side is off by default", + null, + function () { + return oSettings.sAjaxSource == "../../../examples/ajax/sources/arrays.txt"; + } + ); + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/sDom.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/sDom.js new file mode 100644 index 0000000..0af1f59 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/sDom.js @@ -0,0 +1,262 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "sDom" ); + +/* This is going to be brutal on the browser! There is a lot that can be tested here... */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Default DOM varaible", + null, + function () { return oSettings.sDom == "lfrtip"; } + ); + + oTest.fnWaitTest( + "Default DOM in document", + null, + function () { + var nNodes = $('#demo div, #demo table'); + var nWrapper = document.getElementById('example_wrapper'); + var nLength = document.getElementById('example_length'); + var nFilter = document.getElementById('example_filter'); + var nInfo = document.getElementById('example_info'); + var nPaging = document.getElementById('example_paginate'); + var nTable = document.getElementById('example'); + + var bReturn = + nNodes[0] == nWrapper && + nNodes[1] == nLength && + nNodes[2] == nFilter && + nNodes[3] == nTable && + nNodes[4] == nInfo && + nNodes[5] == nPaging; + return bReturn; + } + ); + + oTest.fnWaitTest( + "Check example 1 in code propagates", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "sDom": '<"wrapper"flipt>' + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.sDom == '<"wrapper"flipt>'; } + ); + + oTest.fnWaitTest( + "Check example 1 in DOM", + null, + function () { + var jqNodes = $('#demo div, #demo table'); + var nNodes = []; + + /* Strip the paging nodes */ + for ( var i=0, iLen=jqNodes.length ; i<iLen ; i++ ) + { + if ( jqNodes[i].getAttribute('id') != "example_previous" && + jqNodes[i].getAttribute('id') != "example_next" ) + { + nNodes.push( jqNodes[i] ); + } + } + + var nWrapper = document.getElementById('example_wrapper'); + var nLength = document.getElementById('example_length'); + var nFilter = document.getElementById('example_filter'); + var nInfo = document.getElementById('example_info'); + var nPaging = document.getElementById('example_paginate'); + var nTable = document.getElementById('example'); + var nCustomWrapper = $('div.wrapper')[0]; + + var bReturn = + nNodes[0] == nWrapper && + nNodes[1] == nCustomWrapper && + nNodes[2] == nFilter && + nNodes[3] == nLength && + nNodes[4] == nInfo && + nNodes[5] == nPaging && + nNodes[6] == nTable; + return bReturn; + } + ); + + oTest.fnWaitTest( + "Check example 2 in DOM", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "sDom": '<lf<t>ip>' + } ); + }, + function () { + var jqNodes = $('#demo div, #demo table'); + var nNodes = []; + var nCustomWrappers = [] + + /* Strip the paging nodes */ + for ( var i=0, iLen=jqNodes.length ; i<iLen ; i++ ) + { + if ( jqNodes[i].getAttribute('id') != "example_previous" && + jqNodes[i].getAttribute('id') != "example_next" ) + { + nNodes.push( jqNodes[i] ); + } + + /* Only the two custom divs don't have class names */ + if ( jqNodes[i].className == "" ) + { + nCustomWrappers.push( jqNodes[i] ); + } + } + + var nWrapper = document.getElementById('example_wrapper'); + var nLength = document.getElementById('example_length'); + var nFilter = document.getElementById('example_filter'); + var nInfo = document.getElementById('example_info'); + var nPaging = document.getElementById('example_paginate'); + var nTable = document.getElementById('example'); + + var bReturn = + nNodes[0] == nWrapper && + nNodes[1] == nCustomWrappers[0] && + nNodes[2] == nLength && + nNodes[3] == nFilter && + nNodes[4] == nCustomWrappers[1] && + nNodes[5] == nTable && + nNodes[6] == nInfo && + nNodes[7] == nPaging; + return bReturn; + } + ); + + oTest.fnWaitTest( + "Check no length element", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "sDom": 'frtip' + } ); + }, + function () { + var nNodes = $('#demo div, #demo table'); + var nWrapper = document.getElementById('example_wrapper'); + var nLength = document.getElementById('example_length'); + var nFilter = document.getElementById('example_filter'); + var nInfo = document.getElementById('example_info'); + var nPaging = document.getElementById('example_paginate'); + var nTable = document.getElementById('example'); + + var bReturn = + nNodes[0] == nWrapper && + null == nLength && + nNodes[1] == nFilter && + nNodes[2] == nTable && + nNodes[3] == nInfo && + nNodes[4] == nPaging; + return bReturn; + } + ); + + oTest.fnWaitTest( + "Check no filter element", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "sDom": 'lrtip' + } ); + }, + function () { + var nNodes = $('#demo div, #demo table'); + var nWrapper = document.getElementById('example_wrapper'); + var nLength = document.getElementById('example_length'); + var nFilter = document.getElementById('example_filter'); + var nInfo = document.getElementById('example_info'); + var nPaging = document.getElementById('example_paginate'); + var nTable = document.getElementById('example'); + + var bReturn = + nNodes[0] == nWrapper && + nNodes[1] == nLength && + null == nFilter && + nNodes[2] == nTable && + nNodes[3] == nInfo && + nNodes[4] == nPaging; + return bReturn; + } + ); + + /* Note we don't test for no table as this is not supported (and it would be fairly daft! */ + + oTest.fnWaitTest( + "Check no info element", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "sDom": 'lfrtp' + } ); + }, + function () { + var nNodes = $('#demo div, #demo table'); + var nWrapper = document.getElementById('example_wrapper'); + var nLength = document.getElementById('example_length'); + var nFilter = document.getElementById('example_filter'); + var nInfo = document.getElementById('example_info'); + var nPaging = document.getElementById('example_paginate'); + var nTable = document.getElementById('example'); + + var bReturn = + nNodes[0] == nWrapper && + nNodes[1] == nLength && + nNodes[2] == nFilter && + nNodes[3] == nTable && + null == nInfo && + nNodes[4] == nPaging; + return bReturn; + } + ); + + oTest.fnWaitTest( + "Check no paging element", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "sDom": 'lfrti' + } ); + }, + function () { + var nNodes = $('#demo div, #demo table'); + var nWrapper = document.getElementById('example_wrapper'); + var nLength = document.getElementById('example_length'); + var nFilter = document.getElementById('example_filter'); + var nInfo = document.getElementById('example_info'); + var nPaging = document.getElementById('example_paginate'); + var nTable = document.getElementById('example'); + + var bReturn = + nNodes[0] == nWrapper && + nNodes[1] == nLength && + nNodes[2] == nFilter && + nNodes[3] == nTable && + nNodes[4] == nInfo && + null == nPaging; + return bReturn; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/sPaginationType.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/sPaginationType.js new file mode 100644 index 0000000..71606c4 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/3_ajax/sPaginationType.js @@ -0,0 +1,134 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "sPaginationType" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Check two button paging is the default", + null, + function () { return oSettings.sPaginationType == "two_button"; } + ); + + oTest.fnWaitTest( + "Check class is applied", + null, + function () { return $('#example_paginate').hasClass('paging_two_button'); } + ); + + oTest.fnWaitTest( + "Two A elements are in the wrapper", + null, + function () { return $('#example_paginate a').length == 2; } + ); + + oTest.fnWaitTest( + "We have the previous button", + null, + function () { return document.getElementById('example_previous'); } + ); + + oTest.fnWaitTest( + "We have the next button", + null, + function () { return document.getElementById('example_next'); } + ); + + oTest.fnWaitTest( + "Previous button is disabled", + null, + function () { return $('#example_previous').hasClass('paginate_disabled_previous'); } + ); + + oTest.fnWaitTest( + "Next button is enabled", + null, + function () { return $('#example_next').hasClass('paginate_enabled_next'); } + ); + + /* Don't test paging - that's done by the zero config test script. */ + + + /* Two buttons paging */ + var bComplete = false; + oTest.fnWaitTest( + "Can enabled full numbers paging", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "sPaginationType": "full_numbers", + "fnInitComplete": function () { + bComplete = true; + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { + if ( bComplete ) + return oSettings.sPaginationType == "full_numbers"; + else + return false; + } + ); + + oTest.fnWaitTest( + "Check full numbers class is applied", + null, + function () { return $('#example_paginate').hasClass('paging_full_numbers'); } + ); + + + var nFirst, nPrevious, nNext, nLast; + oTest.fnWaitTest( + "Jump to last page", + function () { + nFirst = $('div.dataTables_paginate a.first'); + nPrevious = $('div.dataTables_paginate a.previous'); + nNext = $('div.dataTables_paginate a.next'); + nLast = $('div.dataTables_paginate a.last'); + nLast.click(); + }, + function () { + return document.getElementById('example_info').innerHTML == "Showing 51 to 57 of 57 entries"; + } + ); + + oTest.fnWaitTest( + "Go to two pages previous", + function () { + nPrevious.click(); + nPrevious.click(); + }, + function () { + return document.getElementById('example_info').innerHTML == "Showing 31 to 40 of 57 entries"; + } + ); + + oTest.fnWaitTest( + "Next (second last) page", + function () { + nNext.click(); + }, + function () { + return document.getElementById('example_info').innerHTML == "Showing 41 to 50 of 57 entries"; + } + ); + + oTest.fnWaitTest( + "Jump to first page", + function () { + nFirst.click(); + }, + function () { + return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/-iDraw.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/-iDraw.js new file mode 100755 index 0000000..1f9dc85 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/-iDraw.js @@ -0,0 +1,44 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "iDraw - check that iDraw increments for each draw" ); + + +$(document).ready( function () { + var oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "After first draw, iDraw is 1", + null, + function () { return oSettings.iDraw == 1; } + ); + + oTest.fnWaitTest( + "After second draw, iDraw is 2", + function () { oTable.fnDraw() }, + function () { return oSettings.iDraw == 2; } + ); + + oTest.fnWaitTest( + "After sort", + function () { oTable.fnSort([[1,'asc']]) }, + function () { return oSettings.iDraw == 3; } + ); + + oTest.fnWaitTest( + "After filter", + function () { oTable.fnFilter('gecko') }, + function () { return oSettings.iDraw == 4; } + ); + + oTest.fnWaitTest( + "After another filter", + function () { oTable.fnFilter('gec') }, + function () { return oSettings.iDraw == 5; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/2440.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/2440.js new file mode 100644 index 0000000..a18f051 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/2440.js @@ -0,0 +1,32 @@ +// DATA_TEMPLATE: empty_table +/* + * NOTE: There are some differences in this zero config script for server-side + * processing compared to the other data sources. The main reason for this is the + * difference in how the server-side processing does it's filtering. Also the + * sorting state is always reset on each draw. + */ +oTest.fnStart( "Info element with display all" ); + +$(document).ready( function () { + var oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php" + } ); + + oTable.fnSettings()._iDisplayLength = -1; + oTable.oApi._fnCalculateEnd( oTable.fnSettings() ); + oTable.fnDraw(); + + + /* Basic checks */ + oTest.fnWaitTest( + "Check length is correct when -1 length given", + null, + function () { + return document.getElementById('example_info').innerHTML == + "Showing 1 to 57 of 57 entries"; + } + ); + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/2569.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/2569.js new file mode 100755 index 0000000..fbfbeb4 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/2569.js @@ -0,0 +1,47 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "Destroy with hidden columns" ); + +$(document).ready( function () { + var mTest; + + + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "aoColumnDefs": [ + { "bSearchable": false, "bVisible": false, "aTargets": [ 2 ] }, + { "bVisible": false, "aTargets": [ 3 ] } + ], + "fnInitComplete": function () { + this.fnDestroy(); + } + } ); + + oTest.fnWaitTest( + "Check that the number of columns in table is correct", + null, + function () { return $('#example tbody tr:eq(0) td').length == 5; } + ); + + + oTest.fnTest( + "And with scrolling", + function () { + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "sScrollY": 200, + "aoColumnDefs": [ + { "bSearchable": false, "bVisible": false, "aTargets": [ 2 ] }, + { "bVisible": false, "aTargets": [ 3 ] } + ], + "fnInitComplete": function () { + this.fnDestroy(); + } + } ); + }, + function () { return $('#example tbody tr:eq(0) td').length == 5; } + ); + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/2600.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/2600.js new file mode 100755 index 0000000..e20f309 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/2600.js @@ -0,0 +1,47 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "2600 - Display rewind when changing length" ); + +$(document).ready( function () { + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php" + } ); + + oTest.fnWaitTest( + "Info correct on init", + null, + function () { return $('#example_info').html() == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnWaitTest( + "Page 2", + function () { $('#example_next').click(); }, + function () { return $('#example_info').html() == "Showing 11 to 20 of 57 entries"; } + ); + + oTest.fnWaitTest( + "Page 3", + function () { $('#example_next').click(); }, + function () { return $('#example_info').html() == "Showing 21 to 30 of 57 entries"; } + ); + + oTest.fnWaitTest( + "Page 4", + function () { $('#example_next').click(); }, + function () { return $('#example_info').html() == "Showing 31 to 40 of 57 entries"; } + ); + + oTest.fnWaitTest( + "Page 5", + function () { $('#example_next').click(); }, + function () { return $('#example_info').html() == "Showing 41 to 50 of 57 entries"; } + ); + + oTest.fnWaitTest( + "Rewind", + function () { $('#example_length select').val('100'); $('#example_length select').change(); }, + function () { return $('#example_info').html() == "Showing 1 to 57 of 57 entries"; } + ); + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/_zero_config.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/_zero_config.js new file mode 100644 index 0000000..fcd69cc --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/_zero_config.js @@ -0,0 +1,424 @@ +// DATA_TEMPLATE: empty_table +/* + * NOTE: There are some differences in this zero config script for server-side + * processing compared to the other data sources. The main reason for this is the + * difference in how the server-side processing does it's filtering. Also the + * sorting state is always reset on each draw. + */ +oTest.fnStart( "Sanity checks for DataTables with data from JS" ); + +oTest.fnWaitTest( + "jQuery.dataTable function", + null, + function () { return typeof jQuery().dataTable == "function"; } +); + +oTest.fnWaitTest( + "jQuery.dataTableSettings storage array", + null, + function () { return typeof jQuery().dataTableSettings == "object"; } +); + +oTest.fnWaitTest( + "jQuery.dataTableExt plugin object", + null, + function () { return typeof jQuery().dataTableExt == "object"; } +); + +$(document).ready( function () { + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php" + } ); + + /* Basic checks */ + oTest.fnWaitTest( + "Length changing div exists", + null, + function () { return document.getElementById('example_length') != null; } + ); + + oTest.fnWaitTest( + "Filtering div exists", + null, + function () { return document.getElementById('example_filter') != null; } + ); + + oTest.fnWaitTest( + "Information div exists", + null, + function () { return document.getElementById('example_info') != null; } + ); + + oTest.fnWaitTest( + "Pagination div exists", + null, + function () { return document.getElementById('example_paginate') != null; } + ); + + oTest.fnWaitTest( + "Processing div is off by default", + null, + function () { return document.getElementById('example_processing') == null; } + ); + + oTest.fnWaitTest( + "10 rows shown on the first page", + null, + function () { return $('#example tbody tr').length == 10; } + ); + + oTest.fnWaitTest( + "Initial sort occured", + null, + function () { return $('#example tbody td:eq(0)').html() == "Gecko"; } + ); + + /* Need to use the WaitTest for sorting due to the setTimeout datatables uses */ + oTest.fnWaitTest( + "Sorting (first click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnWaitTest( + "Sorting (second click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnWaitTest( + "Sorting (third click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnWaitTest( + "Sorting (first click) on numeric column", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "-"; } + ); + + oTest.fnWaitTest( + "Sorting (second click) on numeric column", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "522.1"; } + ); + + oTest.fnWaitTest( + "Sorting multi-column (first click)", + function () { + $('#example thead th:eq(0)').click(); + oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); }, + function () { var b = + $('#example tbody td:eq(0)').html() == "Gecko" && + $('#example tbody td:eq(1)').html() == "Camino 1.0"; return b; } + ); + + oTest.fnWaitTest( + "Sorting multi-column - sorting first column only", + function () { + $('#example thead th:eq(0)').click(); }, + function () { var b = + $('#example tbody td:eq(0)').html() == "Gecko" && + $('#example tbody td:eq(1)').html() == "Firefox 1.0"; return b; } + ); + + /* Basic paging */ + oTest.fnWaitTest( + "Paging to second page", + function () { $('#example_next').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "Mozilla 1.1"; } + ); + + oTest.fnWaitTest( + "Paging to first page", + function () { $('#example_previous').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "Firefox 1.0"; } + ); + + oTest.fnWaitTest( + "Attempting to page back beyond the first page", + function () { $('#example_previous').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "Firefox 1.0"; } + ); + + /* Changing length */ + oTest.fnWaitTest( + "Changing table length to 25 records", + function () { $("select[name=example_length]").val('25').change(); }, + function () { return $('#example tbody tr').length == 25; } + ); + + oTest.fnWaitTest( + "Changing table length to 50 records", + function () { $("select[name=example_length]").val('50').change(); }, + function () { return $('#example tbody tr').length == 50; } + ); + + oTest.fnWaitTest( + "Changing table length to 100 records", + function () { $("select[name=example_length]").val('100').change(); }, + function () { return $('#example tbody tr').length == 57; } + ); + + oTest.fnWaitTest( + "Changing table length to 10 records", + function () { $("select[name=example_length]").val('10').change(); }, + function () { return $('#example tbody tr').length == 10; } + ); + + /* + * Information element + */ + oTest.fnWaitTest( + "Information on zero config", + null, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnWaitTest( + "Information on second page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 11 to 20 of 57 entries"; } + ); + + oTest.fnWaitTest( + "Information on third page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 21 to 30 of 57 entries"; } + ); + + oTest.fnWaitTest( + "Information on last page", + function () { + $('#example_next').click(); + $('#example_next').click(); + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 51 to 57 of 57 entries"; } + ); + + oTest.fnWaitTest( + "Information back on first page", + function () { + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnWaitTest( + "Information with 25 records", + function () { $("select[name=example_length]").val('25').change(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 25 of 57 entries"; } + ); + + oTest.fnWaitTest( + "Information with 25 records - second page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 26 to 50 of 57 entries"; } + ); + + oTest.fnWaitTest( + "Information with 100 records - first page", + function () { + $('#example_previous').click(); + $("select[name=example_length]").val('100').change(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 57 of 57 entries"; } + ); + + oTest.fnWaitTest( + "Information back to 10 records", + function () { + $('#example_previous').click(); + $("select[name=example_length]").val('10').change(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnWaitTest( + "Information with filter 'Win'", + function () { $('#example_filter input').val("Win").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnWaitTest( + "Information with filter 'Win' second page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnWaitTest( + "Information with filter 'Win' last page", + function () { + $('#example_next').click(); + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 31 to 31 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnWaitTest( + "Information with filter 'Win' back to first page", + function () { + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnWaitTest( + "Information with filter 'Win' second page - second time", + function () { + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnWaitTest( + "Information with filter increased to 'Win 98'", + function () { $('#example_filter input').val("Win 98").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 9 of 9 entries (filtered from 57 total entries)"; } + ); + + oTest.fnWaitTest( + "Information with filter decreased to 'Win'", + function () { $('#example_filter input').val("Win").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnWaitTest( + "Information with filter 'Win' second page - third time", + function () { + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnWaitTest( + "Information with filter removed", + function () { $('#example_filter input').val("").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 57 entries"; } + ); + + + /* + * Filtering + */ + oTest.fnWaitTest( + "Filter 'W' - rows", + function () { + $('#example_filter input').val("W").keyup(); }, + function () { return $('#example tbody tr:eq(4) td:eq(1)').html() == "Netscape 7.2"; } + ); + + oTest.fnWaitTest( + "Filter 'W' - info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 42 entries (filtered from 57 total entries)"; } + ); + + oTest.fnWaitTest( + "Filter 'Wi'", + function () { $('#example_filter input').val("Wi").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 32 entries (filtered from 57 total entries)"; } + ); + + oTest.fnWaitTest( + "Filter 'Win'", + function () { $('#example_filter input').val("Win").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnWaitTest( + "Filter 'Win' - sorting column 1", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "AOL browser (AOL desktop)"; } + ); + + oTest.fnWaitTest( + "Filter 'Win' - sorting column 1 info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnWaitTest( + "Filter 'Win' - sorting column 1 reverse", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnWaitTest( + "Filter 'Win XP' - maintaing reverse sorting col 1", + function () { $('#example_filter input').val("Win XP").keyup(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Internet Explorer 7"; } + ); + + oTest.fnWaitTest( + "Filter 'Win XP' - sorting col 3", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "6"; } + ); + + /* Note the filtering is different from the DOM since the server doesn't do + * "smart filtering" like the client side does + */ + oTest.fnWaitTest( + "Filter 'Win XP' - sorting col 3 - reversed", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "7"; } + ); + + oTest.fnWaitTest( + "Filter 'Win' - sorting col 3 - reversed info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 2 of 2 entries (filtered from 57 total entries)"; } + ); + + oTest.fnWaitTest( + "Filter 'nothinghere'", + function () { $('#example_filter input').val("nothinghere").keyup(); }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == + "No matching records found"; } + ); + + oTest.fnWaitTest( + "Filter 'nothinghere' - info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; } + ); + + oTest.fnWaitTest( + "Filter back to blank and 1st column sorting", + function () { + $('#example_filter input').val("").keyup(); + $('#example thead th:eq(0)').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 57 entries"; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/aaSorting.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/aaSorting.js new file mode 100644 index 0000000..cf3e2e6 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/aaSorting.js @@ -0,0 +1,212 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aaSorting" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Default sorting is single column", + null, + function () { + return oSettings.aaSorting.length == 1 && typeof oSettings.aaSorting[0] == 'object'; + } + ); + + oTest.fnWaitTest( + "Default sorting is first column asc", + null, + function () { + return oSettings.aaSorting[0].length == 3 && oSettings.aaSorting[0][0] == 0 && + oSettings.aaSorting[0][1] == 'asc'; + } + ); + + oTest.fnWaitTest( + "Sorting is applied", + null, + function () { return $('#example tbody td:eq(1)').html() == "Firefox 1.0"; } + ); + + + oTest.fnWaitTest( + "Custom sorting on single string column asc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "aaSorting": [['1','asc']] + } ); + }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + + oTest.fnWaitTest( + "Custom sorting on single string column desc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "aaSorting": [['1','desc']] + } ); + }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + + oTest.fnWaitTest( + "Custom sorting on single int column asc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "aaSorting": [['1','asc']] + } ); + }, + function () { return $('#example tbody td:eq(3)').html() == "-"; } + ); + + + oTest.fnWaitTest( + "Custom sorting on single int column desc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "aaSorting": [['1','desc']] + } ); + }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + + oTest.fnWaitTest( + "Multi-column sorting (2 column) - string asc / string asc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "aaSorting": [['0','asc'], ['1','asc']] + } ); + }, + function () { return $('#example tbody td:eq(1)').html() == "Camino 1.0"; } + ); + + oTest.fnWaitTest( + "Multi-column sorting (2 column) - string asc / string desc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "aaSorting": [['0','asc'], ['1','desc']] + } ); + }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnWaitTest( + "Multi-column sorting (2 column) - string desc / string asc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "aaSorting": [['0','desc'], ['1','asc']] + } ); + }, + function () { return $('#example tbody td:eq(1)').html() == "iPod Touch / iPhone"; } + ); + + oTest.fnWaitTest( + "Multi-column sorting (2 column) - string desc / string desc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "aaSorting": [['0','desc'], ['1','desc']] + } ); + }, + function () { return $('#example tbody td:eq(1)').html() == "Safari 3.0"; } + ); + + + oTest.fnWaitTest( + "Multi-column sorting (2 column) - string asc / int asc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "aaSorting": [['0','asc'], ['3','asc']] + } ); + }, + function () { return $('#example tbody td:eq(3)').html() == "1"; } + ); + + oTest.fnWaitTest( + "Multi-column sorting (2 column) - string asc / int desc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "aaSorting": [['0','asc'], ['3','desc']] + } ); + }, + function () { return $('#example tbody td:eq(3)').html() == "1.9"; } + ); + + oTest.fnWaitTest( + "Multi-column sorting (2 column) - string desc / int asc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "aaSorting": [['0','desc'], ['3','asc']] + } ); + }, + function () { return $('#example tbody td:eq(3)').html() == "125.5"; } + ); + + oTest.fnWaitTest( + "Multi-column sorting (2 column) - string desc / int desc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "aaSorting": [['0','desc'], ['3','desc']] + } ); + }, + function () { return $('#example tbody td:eq(3)').html() == "522.1"; } + ); + + oTest.fnWaitTest( + "Multi-column sorting (3 column) - string asc / int asc / string asc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "aaSorting": [['0','asc'], ['3','asc'], ['1','asc']] + } ); + }, + function () { return $('#example tbody tr:eq(7) td:eq(1)').html() == "Firefox 1.0"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/aaSortingFixed.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/aaSortingFixed.js new file mode 100644 index 0000000..a7d5ad3 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/aaSortingFixed.js @@ -0,0 +1,67 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aaSortingFixed" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "No fixed sorting by default", + null, + function () { + return oSettings.aaSortingFixed == null; + } + ); + + + oTest.fnWaitTest( + "Fixed sorting on first column (string/asc) with user sorting on second column (string/asc)", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "aaSortingFixed": [['0','asc']] + } ); + $('#example thead th:eq(1)').click(); + }, + function () { return $('#example tbody td:eq(1)').html() == "Camino 1.0"; } + ); + + oTest.fnWaitTest( + "Fixed sorting on first column (string/asc) with user sorting on second column (string/desc)", + function () { + $('#example thead th:eq(1)').click(); + }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnWaitTest( + "Fixed sorting on fourth column (int/asc) with user sorting on second column (string/asc)", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "aaSortingFixed": [['3','asc']] + } ); + $('#example thead th:eq(1)').click(); + }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnWaitTest( + "Fixed sorting on fourth column (int/asc) with user sorting on second column (string/desc)", + function () { + $('#example thead th:eq(1)').click(); + }, + function () { return $('#example tbody td:eq(1)').html() == "PSP browser"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/aoColumns.bSearchable.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/aoColumns.bSearchable.js new file mode 100755 index 0000000..3ba1500 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/aoColumns.bSearchable.js @@ -0,0 +1,25 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aoColumns.bSeachable" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Columns are searchable by default", + function () { oTable.fnFilter("Camino"); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Camino 1.0"; } + ); + + /* NOT ACTUALLY GOING TO TEST BSEARCHABLE HERE. Reason being is that it requires the server + * side to alter it's processing, and this information about columns is not actually sent to + * the server + */ + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/aoColumns.bSortable.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/aoColumns.bSortable.js new file mode 100755 index 0000000..6b5fb42 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/aoColumns.bSortable.js @@ -0,0 +1,112 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aoColumns.bSortable" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "All columns are sortable by default", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "All others"; } + ); + + oTest.fnWaitTest( + "Can disable sorting from one column", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "aoColumns": [ + null, + { "bSortable": false }, + null, + null, + null + ] + } ); + $('#example thead th:eq(1)').click(); + }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Firefox 1.0"; } + ); + + oTest.fnWaitTest( + "Disabled column has no sorting class", + null, + function () { return $('#example thead th:eq(1)').hasClass("sorting_asc") == false; } + ); + + oTest.fnWaitTest( + "Other columns can still sort", + function () { + $('#example thead th:eq(4)').click(); + $('#example thead th:eq(4)').click(); + }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Internet Explorer 4.0"; } + ); + + oTest.fnWaitTest( + "Disable sorting on multiple columns - no sorting classes", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "aoColumns": [ + null, + { "bSortable": false }, + null, + { "bSortable": false }, + null + ] + } ); + }, + function () { + var bReturn = + $('#example thead th:eq(1)').hasClass("sorting") || + $('#example thead th:eq(3)').hasClass("sorting") + return bReturn == false; + } + ); + + oTest.fnWaitTest( + "Sorting on disabled column 1 has no effect", + function () { + $('#example thead th:eq(1)').click(); + }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Firefox 1.0"; } + ); + + oTest.fnWaitTest( + "Sorting on disabled column 2 has no effect", + function () { + $('#example thead th:eq(3)').click(); + }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Firefox 1.0"; } + ); + + oTest.fnWaitTest( + "Second sort on disabled column 2 has no effect", + function () { + $('#example thead th:eq(3)').click(); + }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Firefox 1.0"; } + ); + + oTest.fnWaitTest( + "Even with multiple disabled sorting columns other columns can still sort", + function () { + $('#example thead th:eq(4)').click(); + $('#example thead th:eq(4)').click(); + }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Internet Explorer 4.0"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/aoColumns.bUseRendered.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/aoColumns.bUseRendered.js new file mode 100755 index 0000000..6a79791 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/aoColumns.bUseRendered.js @@ -0,0 +1,43 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aoColumns.bUseRendered" ); + +/* bUseRendered is used to alter sorting data, if false then the original data is used for + * sorting rather than the rendered data + */ + +$(document).ready( function () { + /* Check the default */ + var mTmp = 0; + + var oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "aoColumns": [ + null, + { "fnRender": function (a) { + if ( mTmp == 0 ) { + mTmp++; + return "aaa"; + } else + return a.aData[a.iDataColumn]; + } }, + null, + null, + null + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Default for bUseRendered is true - rendered data is used for sorting", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'aaa'; } + ); + + /* Limited to what we can do here as the sorting is done on the server side. So stop here. */ + + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/aoColumns.bVisible.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/aoColumns.bVisible.js new file mode 100755 index 0000000..863f3da --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/aoColumns.bVisible.js @@ -0,0 +1,123 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aoColumns.bVisible" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "All columns are visible by default", + null, + function () { return $('#example tbody tr:eq(0) td').length == 5; } + ); + + oTest.fnWaitTest( + "Can hide one column and it removes td column from DOM", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "aoColumns": [ + null, + { "bVisible": false }, + null, + null, + null + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td').length == 4; } + ); + + oTest.fnWaitTest( + "Can hide one column and it removes thead th column from DOM", + null, + function () { return $('#example thead tr:eq(0) th').length == 4; } + ); + + oTest.fnWaitTest( + "The correct thead column has been hidden", + null, + function () { + var jqNodes = $('#example thead tr:eq(0) th'); + var bReturn = + jqNodes[0].innerHTML == "Rendering engine" && + jqNodes[1].innerHTML == "Platform(s)" && + jqNodes[2].innerHTML == "Engine version" && + jqNodes[3].innerHTML == "CSS grade"; + return bReturn; + } + ); + + oTest.fnWaitTest( + "The correct tbody column has been hidden", + null, + function () { + var jqNodes = $('#example tbody tr:eq(0) td'); + var bReturn = + jqNodes[0].innerHTML == "Gecko" && + jqNodes[1].innerHTML == "Win 98+ / OSX.2+" && + jqNodes[2].innerHTML == "1.7" && + jqNodes[3].innerHTML == "A"; + return bReturn; + } + ); + + + oTest.fnWaitTest( + "Can hide multiple columns and it removes td column from DOM", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "aoColumns": [ + null, + { "bVisible": false }, + { "bVisible": false }, + null, + { "bVisible": false } + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td').length == 2; } + ); + + oTest.fnWaitTest( + "Multiple hide - removes thead th column from DOM", + null, + function () { return $('#example thead tr:eq(0) th').length == 2; } + ); + + oTest.fnWaitTest( + "Multiple hide - the correct thead columns have been hidden", + null, + function () { + var jqNodes = $('#example thead tr:eq(0) th'); + var bReturn = + jqNodes[0].innerHTML == "Rendering engine" && + jqNodes[1].innerHTML == "Engine version" + return bReturn; + } + ); + + oTest.fnWaitTest( + "Multiple hide - the correct tbody columns have been hidden", + null, + function () { + var jqNodes = $('#example tbody tr:eq(0) td'); + var bReturn = + jqNodes[0].innerHTML == "Gecko" && + jqNodes[1].innerHTML == "1.7" + return bReturn; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/aoColumns.fnRender.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/aoColumns.fnRender.js new file mode 100755 index 0000000..4481b75 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/aoColumns.fnRender.js @@ -0,0 +1,162 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aoColumns.fnRender" ); + +$(document).ready( function () { + /* Check the default */ + var mTmp = 0; + var oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "aoColumns": [ + null, + { "fnRender": function (a) { + mTmp++; + return a.aData[a.iDataColumn]; + } }, + null, + null, + null + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Single column - fnRender is called once for each row", + null, + function () { return mTmp == 10; } + ); + + oTest.fnWaitTest( + "Confirm that fnRender passes two arguments with four parameters", + function () { + mTmp = true; + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "aoColumns": [ + null, + { "fnRender": function (a) { + if ( arguments.length != 2 || typeof a.iDataRow=='undefined' || + typeof a.iDataColumn=='undefined' || typeof a.aData=='undefined' || + typeof a.mDataProp=='undefined' ) + { + mTmp = false; + } + return a.aData[a.iDataColumn]; + } }, + null, + null, + null + ] + } ); + }, + function () { return mTmp; } + ); + + oTest.fnWaitTest( + "fnRender iDataColumn is the column", + function () { + mTmp = true; + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "aoColumns": [ + null, + { "fnRender": function (a) { + if ( a.iDataColumn != 1 ) + { + mTmp = false; + } + return a.aData[a.iDataColumn]; + } }, + null, + null, + null + ] + } ); + }, + function () { return mTmp; } + ); + + oTest.fnWaitTest( + "fnRender aData is data array of correct size", + function () { + mTmp = true; + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "aoColumns": [ + null, + { "fnRender": function (a) { + if ( a.aData.length != 5 ) + { + mTmp = false; + } + return a.aData[a.iDataColumn]; + } }, + null, + null, + null + ] + } ); + }, + function () { return mTmp; } + ); + + oTest.fnWaitTest( + "Passed back data is put into the DOM", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "aoColumns": [ + null, + { "fnRender": function (a) { + return 'unittest'; + } }, + null, + null, + null + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'unittest'; } + ); + + oTest.fnWaitTest( + "Passed back data is put into the DOM", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "aoColumns": [ + null, + null, + { "fnRender": function (a) { + return 'unittest1'; + } }, + { "fnRender": function (a) { + return 'unittest2'; + } }, + null + ] + } ); + }, + function () { + var bReturn = + $('#example tbody tr:eq(0) td:eq(2)').html() == 'unittest1' && + $('#example tbody tr:eq(0) td:eq(3)').html() == 'unittest2'; + return bReturn; } + ); + + + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/aoColumns.sClass.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/aoColumns.sClass.js new file mode 100755 index 0000000..b8286a0 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/aoColumns.sClass.js @@ -0,0 +1,118 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aoColumns.sClass" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "By default the test class hasn't been applied to the column (sanity!)", + null, + function () { return $('#example tbody tr:eq(0) td:eq(2)').hasClass('unittest') == false; } + ); + + oTest.fnWaitTest( + "Add a class to a single column - first row", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "aoColumns": [ + null, + null, + { "sClass": 'unittest' }, + null, + null + ] + } ); + }, + function () { return $('#example tbody tr:eq(1) td:eq(2)').hasClass('unittest'); } + ); + + oTest.fnWaitTest( + "Add a class to a single column - third row", + null, + function () { return $('#example tbody tr:eq(3) td:eq(2)').hasClass('unittest'); } + ); + + oTest.fnWaitTest( + "Add a class to a single column - last row", + null, + function () { return $('#example tbody tr:eq(9) td:eq(2)').hasClass('unittest'); } + ); + + oTest.fnWaitTest( + "Add a class to a single column - has not applied to other columns - 1st", + null, + function () { return $('#example tbody tr:eq(3) td:eq(0)').hasClass('unittest') == false; } + ); + + oTest.fnWaitTest( + "Add a class to a single column - has not applied to other columns - 5th", + null, + function () { return $('#example tbody tr:eq(3) td:eq(4)').hasClass('unittest') == false; } + ); + + oTest.fnWaitTest( + "Add a class to a single column - seventh row - second page", + function () { $('#example_next').click(); }, + function () { return $('#example tbody tr:eq(6) td:eq(2)').hasClass('unittest'); } + ); + + oTest.fnWaitTest( + "Add a class to a single column - has not applied to header", + null, + function () { return $('#example thead tr:eq(3) th:eq(4)').hasClass('unittest') == false; } + ); + + oTest.fnWaitTest( + "Add a class to a single column - has not applied to footer", + null, + function () { return $('#example thead tr:eq(3) th:eq(4)').hasClass('unittest') == false; } + ); + + + oTest.fnWaitTest( + "Class defined for multiple columns - first row", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "aoColumns": [ + { "sClass": 'unittest2' }, + null, + null, + { "sClass": 'unittest1' }, + null + ] + } ); + }, + function () { + var bReturn = + $('#example tbody tr:eq(3) td:eq(0)').hasClass('unittest2') && + $('#example tbody tr:eq(8) td:eq(3)').hasClass('unittest1'); + return bReturn; + } + ); + + oTest.fnWaitTest( + "Class defined for multiple columns - has not applied to other columns - 5th 1", + null, + function () { return $('#example tbody tr:eq(0) td:eq(4)').hasClass('unittest1') == false; } + ); + + oTest.fnWaitTest( + "Class defined for multiple columns - has not applied to other columns - 5th 2", + null, + function () { return $('#example tbody tr:eq(6) td:eq(4)').hasClass('unittest2') == false; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/aoColumns.sName.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/aoColumns.sName.js new file mode 100755 index 0000000..47034b7 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/aoColumns.sName.js @@ -0,0 +1,29 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aoColumns.sName" ); + +/* This has no effect at all in DOM methods - so we just check that it has applied the name */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "aoColumns": [ + null, + null, + null, + { "sName": 'unit test' }, + null + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Names are stored in the columns object", + null, + function () { return oSettings.aoColumns[3].sName =="unit test"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/aoColumns.sTitle.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/aoColumns.sTitle.js new file mode 100755 index 0000000..93b99c9 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/aoColumns.sTitle.js @@ -0,0 +1,85 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aoColumns.sTitle" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "If not given, then the columns titles are empty", + null, + function () { + var jqNodes = $('#example thead tr:eq(0) th'); + var bReturn = + jqNodes[0].innerHTML == "Rendering engine" && + jqNodes[1].innerHTML == "Browser" && + jqNodes[2].innerHTML == "Platform(s)" && + jqNodes[3].innerHTML == "Engine version" && + jqNodes[4].innerHTML == "CSS grade"; + return bReturn; + } + ); + + oTest.fnWaitTest( + "Can set a single column title - and others are read from DOM", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "aoColumns": [ + null, + { "sTitle": 'unit test' }, + null, + null, + null + ] + } ); + }, + function () { + var jqNodes = $('#example thead tr:eq(0) th'); + var bReturn = + jqNodes[0].innerHTML == "Rendering engine" && + jqNodes[1].innerHTML == "unit test" && + jqNodes[2].innerHTML == "Platform(s)" && + jqNodes[3].innerHTML == "Engine version" && + jqNodes[4].innerHTML == "CSS grade"; + return bReturn; + } + ); + + oTest.fnWaitTest( + "Can set multiple column titles", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "aoColumns": [ + null, + { "sTitle": 'unit test 1' }, + null, + null, + { "sTitle": 'unit test 2' } + ] + } ); + }, + function () { + var jqNodes = $('#example thead tr:eq(0) th'); + var bReturn = + jqNodes[0].innerHTML == "Rendering engine" && + jqNodes[1].innerHTML == "unit test 1" && + jqNodes[2].innerHTML == "Platform(s)" && + jqNodes[3].innerHTML == "Engine version" && + jqNodes[4].innerHTML == "unit test 2"; + return bReturn; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/aoColumns.sWidth.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/aoColumns.sWidth.js new file mode 100755 index 0000000..b001ed5 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/aoColumns.sWidth.js @@ -0,0 +1,90 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aoColumns.sWidth" ); + +/* NOTE - we need to disable the auto width for the majority of these test in order to preform + * these tests as the auto width will convert the width to a px value. We can do 'non-exact' tests + * with auto width enabled however to ensure it scales columns as required + */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "bAutoWidth": false, + "aoColumns": [ + null, + { "sWidth": '40%' }, + null, + null, + null + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "With auto width disabled the width for one column is appled", + null, + function () { return $('#example thead th:eq(1)')[0].style.width == "40%"; } + ); + + oTest.fnWaitTest( + "With auto width disabled the width for one column is appled", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "bAutoWidth": false, + "aoColumns": [ + null, + null, + { "sWidth": '20%' }, + { "sWidth": '30%' }, + null + ] + } ); + }, + function () { + var bReturn = + $('#example thead th:eq(2)')[0].style.width == "20%" && + $('#example thead th:eq(3)')[0].style.width == "30%"; + return bReturn; + } + ); + + + oTest.fnWaitTest( + "With auto width, it will make the smallest column the largest with percentage width given", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "aoColumns": [ + null, + null, + null, + { "sWidth": '40%' }, + null + ] + } ); + }, + function () { + var anThs = $('#example thead th'); + var a0 = anThs[0].offsetWidth; + var a1 = anThs[1].offsetWidth; + var a2 = anThs[2].offsetWidth; + var a3 = anThs[3].offsetWidth; + var a4 = anThs[4].offsetWidth; + + if ( a3>a0 && a3>a1 && a3>a2 && a3>a4 ) + return true; + else + return false; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/aoSearchCols.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/aoSearchCols.js new file mode 100644 index 0000000..345858f --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/aoSearchCols.js @@ -0,0 +1,70 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aoSearchCols" ); + +/* We could be here forever testing this one, so we test a limited subset on a couple of colums */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/filter_col.php" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Default should be to have a empty colums array", + null, + function () { + var bReturn = + oSettings.aoPreSearchCols[0].sSearch == 0 && !oSettings.aoPreSearchCols[0].bRegex && + oSettings.aoPreSearchCols[1].sSearch == 0 && !oSettings.aoPreSearchCols[1].bRegex && + oSettings.aoPreSearchCols[2].sSearch == 0 && !oSettings.aoPreSearchCols[2].bRegex && + oSettings.aoPreSearchCols[3].sSearch == 0 && !oSettings.aoPreSearchCols[3].bRegex && + oSettings.aoPreSearchCols[4].sSearch == 0 && !oSettings.aoPreSearchCols[4].bRegex; + return bReturn; + } + ); + + + oTest.fnWaitTest( + "Search on a single column - no regex statement given", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/filter_col.php", + "aoSearchCols": [ + null, + { "sSearch": "Mozilla" }, + null, + { "sSearch": "1" }, + null + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "1"; } + ); + + oTest.fnWaitTest( + "Search on two columns - no regex statement given", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/filter_col.php", + "aoSearchCols": [ + null, + { "sSearch": "Mozilla" }, + null, + { "sSearch": "1.5" }, + null + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "1.5"; } + ); + + /* No regex escape searches here - would need to be implemented on the server-side */ + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/asStripClasses.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/asStripClasses.js new file mode 100644 index 0000000..760ba4e --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/asStripClasses.js @@ -0,0 +1,109 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "asStripeClasses" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php" + } ); + + oTest.fnWaitTest( + "Default row striping is applied", + null, + function () { + return $('#example tbody tr:eq(0)').hasClass('odd') && + $('#example tbody tr:eq(1)').hasClass('even') && + $('#example tbody tr:eq(2)').hasClass('odd') && + $('#example tbody tr:eq(3)').hasClass('even'); + } + ); + + oTest.fnWaitTest( + "Row striping on the second page", + function () { $('#example_next').click(); }, + function () { + return $('#example tbody tr:eq(0)').hasClass('odd') && + $('#example tbody tr:eq(1)').hasClass('even') && + $('#example tbody tr:eq(2)').hasClass('odd') && + $('#example tbody tr:eq(3)').hasClass('even'); + } + ); + + /* No striping */ + oTest.fnWaitTest( + "No row striping", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "asStripeClasses": [] + } ); + }, + function () { + if ( typeof $('#example tbody tr:eq(1)')[0] == 'undefined' ) + { + /* Use the 'wait for' to allow this to become true */ + return false; + } + return $('#example tbody tr:eq(0)')[0].className == "" && + $('#example tbody tr:eq(1)')[0].className == "" && + $('#example tbody tr:eq(2)')[0].className == "" && + $('#example tbody tr:eq(3)')[0].className == ""; + } + ); + + /* Custom striping */ + oTest.fnWaitTest( + "Custom striping [2]", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "asStripeClasses": [ 'test1', 'test2' ] + } ); + }, + function () { + return $('#example tbody tr:eq(0)').hasClass('test1') && + $('#example tbody tr:eq(1)').hasClass('test2') && + $('#example tbody tr:eq(2)').hasClass('test1') && + $('#example tbody tr:eq(3)').hasClass('test2'); + } + ); + + + /* long array of striping */ + oTest.fnWaitTest( + "Custom striping [4]", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "asStripeClasses": [ 'test1', 'test2', 'test3', 'test4' ] + } ); + }, + function () { + return $('#example tbody tr:eq(0)').hasClass('test1') && + $('#example tbody tr:eq(1)').hasClass('test2') && + $('#example tbody tr:eq(2)').hasClass('test3') && + $('#example tbody tr:eq(3)').hasClass('test4'); + } + ); + + oTest.fnWaitTest( + "Custom striping is restarted on second page [2]", + function () { $('#example_next').click(); }, + function () { + return $('#example tbody tr:eq(0)').hasClass('test1') && + $('#example tbody tr:eq(1)').hasClass('test2') && + $('#example tbody tr:eq(2)').hasClass('test3') && + $('#example tbody tr:eq(3)').hasClass('test4'); + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/bAutoWidth.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/bAutoWidth.js new file mode 100644 index 0000000..ce6052c --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/bAutoWidth.js @@ -0,0 +1,145 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "bAutoWidth" ); + +/* It's actually a little tricky to test this. We can't test absolute numbers because + * different browsers and different platforms will render the width of the columns slightly + * differently. However, we certainly can test the principle of what should happen (column + * width doesn't change over pages) + */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Auto width is enabled by default", + null, + function () { return oSettings.oFeatures.bAutoWidth; } + ); + + oTest.fnWaitTest( + "First column has a width assigned to it", + null, + function () { return $('#example thead th:eq(0)').attr('style').match(/width/i); } + ); + + /* + This would seem like a better test - but there appear to be difficulties with tables + which are bigger (calculated) than there is actually room for. I suspect this is actually + a bug in datatables + oTest.fnWaitTest( + "Check column widths on first page match second page", + null, + function () { + var anThs = $('#example thead th'); + var a0 = anThs[0].offsetWidth; + var a1 = anThs[1].offsetWidth; + var a2 = anThs[2].offsetWidth; + var a3 = anThs[3].offsetWidth; + var a4 = anThs[4].offsetWidth; + $('#example_next').click(); + var b0 = anThs[0].offsetWidth; + var b1 = anThs[1].offsetWidth; + var b2 = anThs[2].offsetWidth; + var b3 = anThs[3].offsetWidth; + var b4 = anThs[4].offsetWidth; + console.log( a0, b0, a1, b1, a2, b2, a3, b3 ); + if ( a0==b0 && a1==b1 && a2==b2 && a3==b3 ) + return true; + else + return false; + } + ); + + oTest.fnWaitTest( + "Check column widths on second page match thid page", + null, + function () { + var anThs = $('#example thead th'); + var a0 = anThs[0].offsetWidth; + var a1 = anThs[1].offsetWidth; + var a2 = anThs[2].offsetWidth; + var a3 = anThs[3].offsetWidth; + var a4 = anThs[4].offsetWidth; + $('#example_next').click(); + var b0 = anThs[0].offsetWidth; + var b1 = anThs[1].offsetWidth; + var b2 = anThs[2].offsetWidth; + var b3 = anThs[3].offsetWidth; + var b4 = anThs[4].offsetWidth; + if ( a0==b0 && a1==b1 && a2==b2 && a3==b3 ) + return true; + else + return false; + } + ); + */ + + /* Check can disable */ + oTest.fnWaitTest( + "Auto width can be disabled", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "bAutoWidth": false + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oFeatures.bAutoWidth == false; } + ); + + oTest.fnWaitTest( + "First column does not have a width assigned to it", + null, + function () { return $('#example thead th:eq(0)').attr('style') == null; } + ); + + /* + oTest.fnWaitTest( + "Check column widths on first page do not match second page", + null, + function () { + var anThs = $('#example thead th'); + var a0 = anThs[0].offsetWidth; + var a1 = anThs[1].offsetWidth; + var a2 = anThs[2].offsetWidth; + var a3 = anThs[3].offsetWidth; + var a4 = anThs[4].offsetWidth; + $('#example_next').click(); + var b0 = anThs[0].offsetWidth; + var b1 = anThs[1].offsetWidth; + var b2 = anThs[2].offsetWidth; + var b3 = anThs[3].offsetWidth; + var b4 = anThs[4].offsetWidth; + if ( a0==b0 && a1==b1 && a2==b2 && a3==b3 ) + return false; + else + return true; + } + ); + */ + + /* Enable makes no difference */ + oTest.fnWaitTest( + "Auto width enabled override", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "bAutoWidth": true + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oFeatures.bAutoWidth; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/bFilter.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/bFilter.js new file mode 100644 index 0000000..5505e70 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/bFilter.js @@ -0,0 +1,47 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "bFilter" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php" + } ); + + oTest.fnWaitTest( + "Filtering div exists by default", + null, + function () { return document.getElementById('example_filter') != null; } + ); + + /* Check can disable */ + oTest.fnWaitTest( + "Fltering can be disabled", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "bFilter": false + } ); + }, + function () { return document.getElementById('example_filter') == null; } + ); + + /* Enable makes no difference */ + oTest.fnWaitTest( + "Filtering enabled override", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "bFilter": true + } ); + }, + function () { return document.getElementById('example_filter') != null; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/bInfiniteScroll.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/bInfiniteScroll.js new file mode 100755 index 0000000..9d88d3b --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/bInfiniteScroll.js @@ -0,0 +1,168 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "bInfiniteScroll" ); + + +$(document).ready( function () { + var oTable = $('#example').dataTable( { + "bScrollInfinite": true, + "sScrollY": "200px", + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php" + } ); + + oTest.fnWaitTest( + "10 rows by default", + null, + function () { return $('#example tbody tr').length == 10; } + ); + + oTest.fnTest( + "Info", + null, + function () { return $('#example_info').html() == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Get nodes", + null, + function () { return $('#example tbody>tr').length == 10; } + ); + + oTest.fnTest( + "Get nodes function", + null, + function () { return $('#example').dataTable().fnGetNodes().length == 10; } + ); + + oTest.fnWaitTest( + "Scroll on 20px adds 10 rows", + function () { $('div.dataTables_scrollBody').scrollTop(20); }, + function () { return $('#example tbody tr').length == 20; } + ); + + oTest.fnTest( + "Info after 20px scroll", + null, + function () { return $('#example_info').html() == "Showing 1 to 20 of 57 entries"; } + ); + + oTest.fnTest( + "Get nodes after 20px scroll", + null, + function () { return $('#example tbody>tr').length == 20; } + ); + + oTest.fnTest( + "Get nodes function after 20px scroll", + null, + function () { return $('#example').dataTable().fnGetNodes().length == 20; } + ); + + oTest.fnWaitTest( + "Scroll on 10px more results in the same number of rows", + function () { $('div.dataTables_scrollBody').scrollTop(30); }, + function () { return $('#example tbody tr').length == 20; } + ); + + oTest.fnTest( + "Info after 10 more px scroll", + null, + function () { return $('#example_info').html() == "Showing 1 to 20 of 57 entries"; } + ); + + oTest.fnWaitTest( + "Scroll to 280px adds another 10 rows", + function () { $('div.dataTables_scrollBody').scrollTop(280); }, + function () { return $('#example tbody tr').length == 30; } + ); + + oTest.fnTest( + "Info after 240px scroll", + null, + function () { return $('#example_info').html() == "Showing 1 to 30 of 57 entries"; } + ); + + oTest.fnTest( + "Get nodes after 240px scroll", + null, + function () { return $('#example tbody>tr').length == 30; } + ); + + oTest.fnTest( + "Get nodes function after 240px scroll", + null, + function () { return $('#example').dataTable().fnGetNodes().length == 30; } + ); + + oTest.fnWaitTest( + "Filtering will drop back to 10 rows", + function () { oTable.fnFilter('gec') }, + function () { return $('#example tbody tr').length == 10; } + ); + + oTest.fnTest( + "Info after filtering", + null, + function () { return $('#example_info').html() == "Showing 1 to 10 of 20 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Get nodes after filtering", + null, + function () { return $('#example tbody>tr').length == 10; } + ); + + oTest.fnTest( + "Get nodes function after filtering", + null, + function () { return $('#example').dataTable().fnGetNodes().length == 10; } + ); + + oTest.fnWaitTest( + "Scroll after filtering adds 10", + function () { $('div.dataTables_scrollBody').scrollTop(20); }, + function () { return $('#example tbody tr').length == 20; } + ); + + oTest.fnWaitTest( + "Get nodes after filtering", + null, + function () { return $('#example tbody>tr').length == 20; } + ); + + oTest.fnWaitTest( + "Get nodes function after filtering", + null, + function () { return $('#example').dataTable().fnGetNodes().length == 20; } + ); + + oTest.fnWaitTest( + "Sorting will drop back to 10 rows", + function () { + $('div.dataTables_scrollBody').scrollTop(0); + oTable.fnSort([[1,'asc']]) + }, + function () { return $('#example tbody tr').length == 10; } + ); + + oTest.fnWaitTest( + "Scroll after sorting adds 10", + function () { $('div.dataTables_scrollBody').scrollTop(20); }, + function () { return $('#example tbody tr').length == 20; } + ); + + oTest.fnTest( + "Get nodes after scrolling", + null, + function () { return $('#example tbody>tr').length == 20; } + ); + + oTest.fnTest( + "Get nodes function after scrolling", + null, + function () { return $('#example').dataTable().fnGetNodes().length == 20; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/bInfo.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/bInfo.js new file mode 100644 index 0000000..56bca57 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/bInfo.js @@ -0,0 +1,47 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "bInfo" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php" + } ); + + oTest.fnWaitTest( + "Info div exists by default", + null, + function () { return document.getElementById('example_info') != null; } + ); + + /* Check can disable */ + oTest.fnWaitTest( + "Info can be disabled", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "bInfo": false + } ); + }, + function () { return document.getElementById('example_info') == null; } + ); + + /* Enable makes no difference */ + oTest.fnWaitTest( + "Info enabled override", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "bInfo": true + } ); + }, + function () { return document.getElementById('example_info') != null; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/bLengthChange.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/bLengthChange.js new file mode 100644 index 0000000..fa56a03 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/bLengthChange.js @@ -0,0 +1,78 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "bLengthChange" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php" + } ); + + oTest.fnWaitTest( + "Length div exists by default", + null, + function () { return document.getElementById('example_length') != null; } + ); + + oTest.fnWaitTest( + "Four default options", + null, + function () { return $("select[name=example_length] option").length == 4; } + ); + + oTest.fnWaitTest( + "Default options", + null, + function () { + var opts = $("select[name='example_length'] option"); + return opts[0].getAttribute('value') == 10 && opts[1].getAttribute('value') == 25 && + opts[2].getAttribute('value') == 50 && opts[3].getAttribute('value') == 100; + } + ); + + oTest.fnWaitTest( + "Info takes length into account", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 57 entries"; } + ); + + /* Check can disable */ + oTest.fnWaitTest( + "Change length can be disabled", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "bLengthChange": false + } ); + }, + function () { return document.getElementById('example_length') == null; } + ); + + oTest.fnWaitTest( + "Information takes length disabled into account", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 57 entries"; } + ); + + /* Enable makes no difference */ + oTest.fnWaitTest( + "Length change enabled override", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "bLengthChange": true + } ); + }, + function () { return document.getElementById('example_length') != null; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/bPaginate.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/bPaginate.js new file mode 100644 index 0000000..9855a90 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/bPaginate.js @@ -0,0 +1,62 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "bPaginate" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php" + } ); + + oTest.fnWaitTest( + "Pagiantion div exists by default", + null, + function () { return document.getElementById('example_paginate') != null; } + ); + + oTest.fnWaitTest( + "Information div takes paging into account", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 57 entries"; } + ); + + /* Check can disable */ + oTest.fnWaitTest( + "Pagiantion can be disabled", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "bPaginate": false + } ); + }, + function () { return document.getElementById('example_paginate') == null; } + ); + + oTest.fnWaitTest( + "Information div takes paging disabled into account", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 57 of 57 entries"; } + ); + + /* Enable makes no difference */ + oTest.fnWaitTest( + "Pagiantion enabled override", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "bPaginate": true + } ); + }, + function () { return document.getElementById('example_paginate') != null; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/bProcessing.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/bProcessing.js new file mode 100644 index 0000000..29141df --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/bProcessing.js @@ -0,0 +1,106 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "bProcessing" ); + +/* It's actually a bit hard to set this one due to the fact that it will only be shown + * when DataTables is doing some kind of processing. The server-side processing is a bit + * better to test this than here - so we just the interal functions to enable it and check + * that it is available + */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Processing is off by default", + null, + function () { return oSettings.oFeatures.bProcessing == false; } + ); + + oTest.fnWaitTest( + "Processing div is not in the DOM", + function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); }, + function () { return document.getElementById('example_processing') == null; } + ); + + oTest.fnWaitTest( + "Processing div cannot be shown", + function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); }, + function () { return document.getElementById('example_processing') == null; } + ); + + oTest.fnWaitTest( + "Processing div cannot be hidden", + function () { oTable.oApi._fnProcessingDisplay( oSettings, false ); }, + function () { return document.getElementById('example_processing') == null; } + ); + + + /* Check can disable */ + oTest.fnWaitTest( + "Processing can be enabled", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "bProcessing": true + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oFeatures.bProcessing == true; } + ); + + oTest.fnWaitTest( + "Processing div is in the DOM", + function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); }, + function () { return document.getElementById('example_processing'); } + ); + + oTest.fnWaitTest( + "Processing div is hidden by default", + function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); }, + function () { return document.getElementById('example_processing').style.visibility = "hidden"; } + ); + + oTest.fnWaitTest( + "Processing div can be shown", + function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); }, + function () { return document.getElementById('example_processing').style.visibility = "visible"; } + ); + + oTest.fnWaitTest( + "Processing div can be hidden", + function () { oTable.oApi._fnProcessingDisplay( oSettings, false ); }, + function () { return document.getElementById('example_processing').style.visibility = "hidden"; } + ); + + /* Enable makes no difference */ + oTest.fnWaitTest( + "Processing disabled override", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "bProcessing": false + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oFeatures.bProcessing == false; } + ); + + oTest.fnWaitTest( + "Processing div is not in the DOM", + function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); }, + function () { return document.getElementById('example_processing') == null; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/bServerSide.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/bServerSide.js new file mode 100644 index 0000000..1b93592 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/bServerSide.js @@ -0,0 +1,21 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "bServerSide" ); + +/* All the other scripts blast the ssp processing */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Server side can be set to on", + null, + function () { return oSettings.oFeatures.bServerSide == true; } + ); + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/bSort.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/bSort.js new file mode 100644 index 0000000..fc94471 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/bSort.js @@ -0,0 +1,102 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "bSort" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php" + } ); + + oTest.fnWaitTest( + "Sorting is on by default", + null, + function () { return $('#example tbody td:eq(1)').html() == "Firefox 1.0"; } + ); + + oTest.fnWaitTest( + "Sorting Asc by default class applied", + null, + function () { return $('#example thead th:eq(0)').hasClass("sorting_asc"); } + ); + + oTest.fnWaitTest( + "Click on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnWaitTest( + "Sorting class removed from first column", + null, + function () { return $('#example thead th:eq(0)').hasClass("sorting_asc") != true; } + ); + + oTest.fnWaitTest( + "Sorting asc class applied to second column", + null, + function () { return $('#example thead th:eq(1)').hasClass("sorting_asc"); } + ); + + oTest.fnWaitTest( + "Reverse on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnWaitTest( + "Sorting acs class removed from second column", + null, + function () { return $('#example thead th:eq(1)').hasClass("sorting_asc") != true; } + ); + + oTest.fnWaitTest( + "Sorting desc class applied to second column", + null, + function () { return $('#example thead th:eq(1)').hasClass("sorting_desc"); } + ); + + /* Check can disable */ + oTest.fnWaitTest( + "Pagiantion can be disabled", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "bSort": false + } ); + }, + function () { return $('#example tbody td:eq(3)').html() == "4"; } + ); + + oTest.fnWaitTest( + "Click on second column has no effect", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "4"; } + ); + + oTest.fnWaitTest( + "Reverse on second column has no effect", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "4"; } + ); + + /* Enable makes no difference */ + oTest.fnWaitTest( + "Sorting enabled override", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "bSort": true + } ); + }, + function () { return $('#example tbody td:eq(1)').html() == "Firefox 1.0"; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/bSortClasses.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/bSortClasses.js new file mode 100644 index 0000000..f2ed23c --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/bSortClasses.js @@ -0,0 +1,135 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "bSortClasses" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php" + } ); + + oTest.fnWaitTest( + "Sorting classes are applied by default", + null, + function () { return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1'); } + ); + + oTest.fnWaitTest( + "Sorting classes are applied to all required cells", + null, + function () { return $('#example tbody tr:eq(7) td:eq(0)').hasClass('sorting_1'); } + ); + + oTest.fnWaitTest( + "Sorting classes are not applied to non-sorting columns", + null, + function () { return $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_1') == false; } + ); + + oTest.fnWaitTest( + "Sorting multi-column - add column 1", + function () { + oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); }, + function () { + return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') && + $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2'); + } + ); + + oTest.fnWaitTest( + "Sorting multi-column - add column 2", + function () { + oDispacher.click( $('#example thead th:eq(2)')[0], { 'shift': true } ); }, + function () { + return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') && + $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') && + $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3'); + } + ); + + oTest.fnWaitTest( + "Sorting multi-column - add column 3", + function () { + oDispacher.click( $('#example thead th:eq(3)')[0], { 'shift': true } ); + }, + function () { + return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') && + $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') && + $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3') && + $('#example tbody tr:eq(0) td:eq(3)').hasClass('sorting_3'); + } + ); + + oTest.fnWaitTest( + "Remove sorting classes on single column sort", + function () { + $('#example thead th:eq(4)').click(); + }, + function () { + return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false && + $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') == false && + $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3') == false && + $('#example tbody tr:eq(0) td:eq(3)').hasClass('sorting_3') == false; + } + ); + + oTest.fnWaitTest( + "Sorting class 1 was added", + null, + function () { return $('#example tbody tr:eq(1) td:eq(4)').hasClass('sorting_1'); } + ); + + + /* Check can disable */ + oTest.fnWaitTest( + "Sorting classes can be disabled", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "bSortClasses": false + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false; } + ); + + oTest.fnWaitTest( + "Sorting classes disabled - add column 1 - no effect", + function () { + oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); }, + function () { + return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false && + $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') == false; + } + ); + + oTest.fnWaitTest( + "Sorting classes disabled - add column 2 - no effect", + function () { + oDispacher.click( $('#example thead th:eq(2)')[0], { 'shift': true } ); }, + function () { + return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false && + $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') == false && + $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3') == false; + } + ); + + + /* Enable makes no difference */ + oTest.fnWaitTest( + "Sorting classes enabled override", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "bSortClasses": true + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1'); } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/fnCreatedCell.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/fnCreatedCell.js new file mode 100755 index 0000000..de76ace --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/fnCreatedCell.js @@ -0,0 +1,190 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "fnCreatedCell tests" ); + +$(document).ready( function () { + var tmp = 0; + var complete = false; + + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "aoColumnDefs": [ { + fnCreatedCell: function () { + tmp++; + }, + "aTargets": ["_all"] + } ] + } ); + + oTest.fnWaitTest( + "Cell created is called once for each cell on init", + null, + function () { return tmp===50; } + ); + + oTest.fnWaitTest( + "Created is called back on other draws", + function () { $('#example th:eq(1)').click(); }, + function () { return tmp===100; } + ); + + oTest.fnWaitTest( + "Four arguments for the function", + function () { + oSession.fnRestore(); + tmp = true; + complete = false; + + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "aoColumnDefs": [ { + fnCreatedRow: function () { + if ( arguments.length !== 4 ) { + tmp = false; + } + }, + "aTargets": ["_all"] + } ], + fnInitComplete: function () { + complete = true; + } + } ); + }, + function () { return (tmp && complete); } + ); + + oTest.fnWaitTest( + "First argument is a TD element", + function () { + oSession.fnRestore(); + tmp = true; + complete = false; + + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "aoColumnDefs": [ { + fnCreatedRow: function () { + if ( arguments[0].nodeName !== "TD" ) { + tmp = false; + } + }, + "aTargets": ["_all"] + } ], + fnInitComplete: function () { + complete = true; + } + } ); + }, + function () { return (tmp && complete); } + ); + + oTest.fnWaitTest( + "Second argument is the HTML value", + function () { + oSession.fnRestore(); + tmp = true; + complete = false; + + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "aoColumnDefs": [ { + fnCreatedRow: function () { + if ( arguments[1] != $('td').html() ) { + tmp = false; + } + }, + "aTargets": ["_all"] + } ], + fnInitComplete: function () { + complete = true; + } + } ); + }, + function () { return (tmp && complete); } + ); + + oTest.fnWaitTest( + "Third argument is the data array", + function () { + oSession.fnRestore(); + tmp = true; + complete = false; + + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "aoColumnDefs": [ { + fnCreatedRow: function () { + if ( arguments[2].length !== 5 ) { + tmp = false; + } + }, + "aTargets": ["_all"] + } ], + fnInitComplete: function () { + complete = true; + } + } ); + }, + function () { return (tmp && complete); } + ); + + oTest.fnWaitTest( + "Fourth argument is the data source for the row", + function () { + oSession.fnRestore(); + tmp = true; + complete = false; + + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "aoColumnDefs": [ { + fnCreatedRow: function () { + if ( arguments[2] !== this.fnSettings().aoData[ arguments[2] ]._aData ) { + tmp = false; + } + }, + "aTargets": ["_all"] + } ], + fnInitComplete: function () { + complete = true; + } + } ); + }, + function () { return (tmp && complete); } + ); + + oTest.fnWaitTest( + "Fifth argument is the the col index", + function () { + oSession.fnRestore(); + tmp = true; + complete = false; + + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "aoColumnDefs": [ { + fnCreatedRow: function () { + if ( arguments[1] != $('td:eq('+arguments[4]+')', arguments[0].parentNode).html() ) { + tmp = false; + } + }, + "aTargets": ["_all"] + } ], + fnInitComplete: function () { + complete = true; + } + } ); + }, + function () { return (tmp && complete); } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/fnCreatedRow.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/fnCreatedRow.js new file mode 100755 index 0000000..b81eba3 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/fnCreatedRow.js @@ -0,0 +1,148 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "fnCreatedRow tests" ); + +$(document).ready( function () { + var tmp = 0; + var complete = false; + + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + fnCreatedRow: function () { + tmp++; + } + } ); + + oTest.fnWaitTest( + "Row created is called once for each row on init", + null, + function () { return tmp===10; } + ); + + oTest.fnWaitTest( + "Created is called back on other draws", + function () { $('#example th:eq(1)').click(); }, + function () { return tmp===20; } + ); + + oTest.fnWaitTest( + "Three arguments for the function", + function () { + oSession.fnRestore(); + tmp = true; + complete = false; + + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + fnCreatedRow: function () { + if ( arguments.length !== 3 ) { + tmp = false; + } + }, + fnInitComplete: function () { + complete = true; + } + } ); + }, + function () { return (tmp && complete); } + ); + + oTest.fnWaitTest( + "First argument is a TR element", + function () { + oSession.fnRestore(); + tmp = true; + complete = false; + + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + fnCreatedRow: function () { + if ( arguments[0].nodeName !== "TR" ) { + tmp = false; + } + }, + fnInitComplete: function () { + complete = true; + } + } ); + }, + function () { return (tmp && complete); } + ); + + oTest.fnWaitTest( + "Second argument is an array with 5 elements", + function () { + oSession.fnRestore(); + tmp = true; + complete = false; + + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + fnCreatedRow: function () { + if ( arguments[1].length !== 5 ) { + tmp = false; + } + }, + fnInitComplete: function () { + complete = true; + } + } ); + }, + function () { return (tmp && complete); } + ); + + oTest.fnWaitTest( + "Third argument is the data source for the row", + function () { + oSession.fnRestore(); + tmp = true; + complete = false; + + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + fnCreatedRow: function () { + if ( arguments[1] !== this.fnSettings().aoData[ arguments[2] ]._aData ) { + tmp = false; + } + }, + fnInitComplete: function () { + complete = true; + } + } ); + }, + function () { return (tmp && complete); } + ); + + oTest.fnWaitTest( + "TR element is tied to the correct data", + function () { + oSession.fnRestore(); + tmp = false; + complete = false; + + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + fnCreatedRow: function (tr, data, index) { + if ( data[1] === "Firefox 1.0" ) { + if ( $('td:eq(3)', tr).html() == "1.7" ) { + tmp = true; + } + } + }, + fnInitComplete: function () { + complete = true; + } + } ); + }, + function () { return (tmp && complete); } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/fnDrawCallback.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/fnDrawCallback.js new file mode 100644 index 0000000..20239c2 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/fnDrawCallback.js @@ -0,0 +1,89 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "fnDrawCallback" ); + +/* Fairly boring function compared to the others! */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php" + } ); + var oSettings = oTable.fnSettings(); + var mPass; + + oTest.fnWaitTest( + "Default should be null", + null, + function () { return oSettings.fnDrawCallback == null; } + ); + + + oTest.fnWaitTest( + "One argument passed", + function () { + oSession.fnRestore(); + + mPass = -1; + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "fnDrawCallback": function ( ) { + mPass = arguments.length; + } + } ); + }, + function () { return mPass == 1; } + ); + + + oTest.fnWaitTest( + "That one argument is the settings object", + function () { + oSession.fnRestore(); + + oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "fnDrawCallback": function ( oSettings ) { + mPass = oSettings; + } + } ); + }, + function () { return oTable.fnSettings() == mPass; } + ); + + + oTest.fnWaitTest( + "fnRowCallback called once on first draw", + function () { + oSession.fnRestore(); + + mPass = 0; + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "fnDrawCallback": function ( ) { + mPass++; + } + } ); + }, + function () { return mPass == 1; } + ); + + oTest.fnWaitTest( + "fnRowCallback called once on each draw there after as well", + function () { + $('#example_next').click(); + $('#example_next').click(); + $('#example_next').click(); + }, + function () { return mPass > 1; } + ); + + + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/fnHeaderCallback.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/fnHeaderCallback.js new file mode 100644 index 0000000..b9a1167 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/fnHeaderCallback.js @@ -0,0 +1,191 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "fnHeaderCallback" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php" + } ); + var oSettings = oTable.fnSettings(); + var mPass; + + oTest.fnWaitTest( + "Default should be null", + null, + function () { return oSettings.fnHeaderCallback == null; } + ); + + + oTest.fnWaitTest( + "Five arguments passed", + function () { + oSession.fnRestore(); + + mPass = -1; + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "fnHeaderCallback": function ( ) { + mPass = arguments.length; + } + } ); + }, + function () { return mPass == 5; } + ); + + + oTest.fnWaitTest( + "fnRowCallback called once per draw", + function () { + oSession.fnRestore(); + + mPass = 0; + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + mPass++; + } + } ); + }, + function () { return mPass == 1; } + ); + + oTest.fnWaitTest( + "fnRowCallback called on paging (i.e. another draw)", + function () { $('#example_next').click(); }, + function () { return mPass == 2; } + ); + + + oTest.fnWaitTest( + "fnRowCallback allows us to alter row information", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + nHead.getElementsByTagName('th')[0].innerHTML = "Displaying "+(iEnd-iStart)+" records"; + } + } ); + }, + function () { return $('#example thead th:eq(0)').html() == "Displaying 10 records"; } + ); + + + oTest.fnWaitTest( + "iStart correct on first page", + function () { + oSession.fnRestore(); + + mPass = true; + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + if ( iStart != 0 ) + { + mPass = false; + } + } + } ); + }, + function () { return mPass; } + ); + + + oTest.fnWaitTest( + "iStart correct on second page", + function () { + oSession.fnRestore(); + + mPass = false; + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + if ( iStart == 0 ) + { + mPass = true; + } + }, + "fnInitComplete": function () { + $('#example_next').click(); + } + } ); + }, + function () { return mPass; } + ); + + + oTest.fnWaitTest( + "iEnd correct on second page", + function () { + oSession.fnRestore(); + + mPass = false; + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + if ( iEnd == 10 ) + { + mPass = true; + } + }, + "fnInitComplete": function () { + $('#example_next').click(); + } + } ); + }, + function () { return mPass; } + ); + + + oTest.fnWaitTest( + "aiDisplay length is full data when not filtered", + function () { + oSession.fnRestore(); + + mPass = false; + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + if ( aiDisplay.length == 10 ) + { + mPass = true; + } + } + } ); + }, + function () { return mPass; } + ); + + oTest.fnWaitTest( + "aiDisplay length is 9 when filtering on 'Mozilla'", + function () { + oSession.fnRestore(); + + mPass = false; + oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + if ( aiDisplay.length == 9 ) + { + mPass = true; + } + } + } ); + oTable.fnFilter( "Mozilla" ); + }, + function () { return mPass; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/fnInitComplete.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/fnInitComplete.js new file mode 100644 index 0000000..8da655f --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/fnInitComplete.js @@ -0,0 +1,105 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "fnInitComplete" ); + +/* Fairly boring function compared to the others! */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php" + } ); + var oSettings = oTable.fnSettings(); + var mPass; + + oTest.fnWaitTest( + "Default should be null", + null, + function () { return oSettings.fnInitComplete == null; } + ); + + + oTest.fnWaitTest( + "Two arguments passed", + function () { + oSession.fnRestore(); + + mPass = -1; + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "fnInitComplete": function ( ) { + mPass = arguments.length===2 && arguments[1]===undefined; + } + } ); + }, + function () { return mPass; } + ); + + + oTest.fnWaitTest( + "That one argument is the settings object", + function () { + oSession.fnRestore(); + + oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "fnInitComplete": function ( oSettings ) { + mPass = oSettings; + } + } ); + }, + function () { return oTable.fnSettings() == mPass; } + ); + + + oTest.fnWaitTest( + "fnInitComplete called once on first draw", + function () { + oSession.fnRestore(); + + mPass = 0; + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "fnInitComplete": function ( ) { + mPass++; + } + } ); + }, + function () { return mPass == 1; } + ); + + oTest.fnWaitTest( + "fnInitComplete never called there after", + function () { + $('#example_next').click(); + $('#example_next').click(); + $('#example_next').click(); + }, + function () { return mPass == 1; } + ); + + + oTest.fnWaitTest( + "10 rows in the table on complete", + function () { + oSession.fnRestore(); + + mPass = 0; + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "fnInitComplete": function ( ) { + mPass = $('#example tbody tr').length; + } + } ); + }, + function () { return mPass == 10; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/fnRowCallback.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/fnRowCallback.js new file mode 100644 index 0000000..8022705 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/fnRowCallback.js @@ -0,0 +1,118 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "fnRowCallback" ); + +/* Note - fnRowCallback MUST return the first arguments (modified or not) */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php" + } ); + var oSettings = oTable.fnSettings(); + var mPass; + + oTest.fnWaitTest( + "Default should be null", + null, + function () { return oSettings.fnRowCallback == null; } + ); + + + oTest.fnWaitTest( + "Four arguments passed", + function () { + oSession.fnRestore(); + + mPass = -1; + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "fnRowCallback": function ( nTr ) { + mPass = arguments.length; + return nTr; + } + } ); + }, + function () { return mPass == 4; } + ); + + + oTest.fnWaitTest( + "fnRowCallback called once for each drawn row", + function () { + oSession.fnRestore(); + + mPass = 0; + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) { + mPass++; + return nTr; + } + } ); + }, + function () { return mPass == 10; } + ); + + oTest.fnWaitTest( + "fnRowCallback allows us to alter row information", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) { + $(nTr).addClass('unit_test'); + return nTr; + } + } ); + }, + function () { return $('#example tbody tr:eq(1)').hasClass('unit_test'); } + ); + + oTest.fnWaitTest( + "Data array has length matching columns", + function () { + oSession.fnRestore(); + + mPass = true; + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) { + if ( asData.length != 5 ) + mPass = false; + return nTr; + } + } ); + }, + function () { return mPass; } + ); + + oTest.fnWaitTest( + "Data array has length matching columns", + function () { + oSession.fnRestore(); + + mPass = true; + var iCount = 0; + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) { + if ( iCount != iDrawIndex ) + mPass = false; + iCount++; + return nTr; + } + } ); + }, + function () { return mPass; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/iDeferLoading.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/iDeferLoading.js new file mode 100644 index 0000000..d6adcb7 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/iDeferLoading.js @@ -0,0 +1,95 @@ +// DATA_TEMPLATE: deferred_table +/* + */ +oTest.fnStart( "Defer loading tests" ); + +$(document).ready( function () { + var gotServerData = false; + + $('#example').dataTable( { + "iDeferLoading": 57, + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "fnServerData": function (url, data, fn) { + $.ajax( { + "url": url, + "data": data, + "success": function(json) { + gotServerData = true; + fn( json ); + }, + "dataType": "json", + "cache": false + } ); + } + } ); + + oTest.fnWaitTest( + "10 rows shown on the first page", + null, + function () { return $('#example tbody tr').length == 10; } + ); + + oTest.fnWaitTest( + "No request to the server yet", + null, + function () { return !gotServerData; } + ); + + oTest.fnTest( + "Information on zero config", + null, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnWaitTest( + "Initial data order retained", + null, + function () { return $('#example tbody td:eq(0)').html() == "Gecko"; } + ); + + oTest.fnWaitTest( + "Initial data order retained 2", + null, + function () { return $('#example tbody td:eq(1)').html() == "Firefox 1.0"; } + ); + + oTest.fnWaitTest( + "Still no request to the server yet", + null, + function () { return !gotServerData; } + ); + + oTest.fnWaitTest( + "Sorting (first click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnWaitTest( + "Now we've had a request", + null, + function () { return gotServerData; } + ); + + oTest.fnTest( + "Information after sort", + null, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnWaitTest( + "Sorting (second click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnWaitTest( + "Sorting (third click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/iDisplayLength.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/iDisplayLength.js new file mode 100644 index 0000000..e5e1e57 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/iDisplayLength.js @@ -0,0 +1,85 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "iDisplayLength" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php" + } ); + + oTest.fnWaitTest( + "Default length is ten", + null, + function () { return $('#example tbody tr').length == 10; } + ); + + oTest.fnWaitTest( + "Select menu shows 10", + null, + function () { return $('#example_length select').val() == 10; } + ); + + + oTest.fnWaitTest( + "Set initial length to 25", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "iDisplayLength": 25 + } ); + }, + function () { return $('#example tbody tr').length == 25; } + ); + + oTest.fnWaitTest( + "Select menu shows 25", + null, + function () { return $('#example_length select').val() == 25; } + ); + + + oTest.fnWaitTest( + "Set initial length to 100", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "iDisplayLength": 100 + } ); + }, + function () { return $('#example tbody tr').length == 57; } + ); + + oTest.fnWaitTest( + "Select menu shows 25", + null, + function () { return $('#example_length select').val() == 100; } + ); + + + oTest.fnWaitTest( + "Set initial length to 23 (unknown select menu length)", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "iDisplayLength": 23 + } ); + }, + function () { return $('#example tbody tr').length == 23; } + ); + + oTest.fnWaitTest( + "Select menu shows 10 (since 23 is unknow)", + null, + function () { return $('#example_length select').val() == 10; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/oLanguage.oPaginate.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/oLanguage.oPaginate.js new file mode 100644 index 0000000..48298c4 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/oLanguage.oPaginate.js @@ -0,0 +1,86 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oLanguage.oPaginate" ); + +/* Note that the paging language information only has relevence in full numbers */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "sPaginationType": "full_numbers" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "oLanguage.oPaginate defaults", + null, + function () { + var bReturn = + oSettings.oLanguage.oPaginate.sFirst == "First" && + oSettings.oLanguage.oPaginate.sPrevious == "Previous" && + oSettings.oLanguage.oPaginate.sNext == "Next" && + oSettings.oLanguage.oPaginate.sLast == "Last"; + return bReturn; + } + ); + + oTest.fnTest( + "oLanguage.oPaginate defaults are in the DOM", + null, + function () { + var bReturn = + $('#example_paginate .first').html() == "First" && + $('#example_paginate .previous').html() == "Previous" && + $('#example_paginate .next').html() == "Next" && + $('#example_paginate .last').html() == "Last"; + return bReturn; + } + ); + + + oTest.fnWaitTest( + "oLanguage.oPaginate can be defined", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "sPaginationType": "full_numbers", + "oLanguage": { + "oPaginate": { + "sFirst": "unit1", + "sPrevious": "test2", + "sNext": "unit3", + "sLast": "test4" + } + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { + var bReturn = + oSettings.oLanguage.oPaginate.sFirst == "unit1" && + oSettings.oLanguage.oPaginate.sPrevious == "test2" && + oSettings.oLanguage.oPaginate.sNext == "unit3" && + oSettings.oLanguage.oPaginate.sLast == "test4"; + return bReturn; + } + ); + + oTest.fnTest( + "oLanguage.oPaginate definitions are in the DOM", + null, + function () { + var bReturn = + $('#example_paginate .first').html() == "unit1" && + $('#example_paginate .previous').html() == "test2" && + $('#example_paginate .next').html() == "unit3" && + $('#example_paginate .last').html() == "test4"; + return bReturn; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/oLanguage.sInfo.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/oLanguage.sInfo.js new file mode 100644 index 0000000..1b64973 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/oLanguage.sInfo.js @@ -0,0 +1,124 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oLanguage.sInfo" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Info language is 'Showing _START_ to _END_ of _TOTAL_ entries' by default", + null, + function () { return oSettings.oLanguage.sInfo == "Showing _START_ to _END_ of _TOTAL_ entries"; } + ); + + oTest.fnTest( + "Info language default is in the DOM", + null, + function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries"; } + ); + + + oTest.fnWaitTest( + "Info language can be defined - without any macros", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "oLanguage": { + "sInfo": "unit test" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oLanguage.sInfo == "unit test"; } + ); + + oTest.fnTest( + "Info language definition is in the DOM", + null, + function () { return document.getElementById('example_info').innerHTML = "unit test"; } + ); + + oTest.fnWaitTest( + "Info language can be defined - with macro _START_ only", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "oLanguage": { + "sInfo": "unit _START_ test" + } + } ); + }, + function () { return document.getElementById('example_info').innerHTML = "unit 1 test"; } + ); + + oTest.fnWaitTest( + "Info language can be defined - with macro _END_ only", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "oLanguage": { + "sInfo": "unit _END_ test" + } + } ); + }, + function () { return document.getElementById('example_info').innerHTML = "unit 10 test"; } + ); + + oTest.fnWaitTest( + "Info language can be defined - with macro _TOTAL_ only", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "oLanguage": { + "sInfo": "unit _END_ test" + } + } ); + }, + function () { return document.getElementById('example_info').innerHTML = "unit 57 test"; } + ); + + oTest.fnWaitTest( + "Info language can be defined - with macros _START_ and _END_", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "oLanguage": { + "sInfo": "unit _START_ _END_ test" + } + } ); + }, + function () { return document.getElementById('example_info').innerHTML = "unit 1 10 test"; } + ); + + oTest.fnWaitTest( + "Info language can be defined - with macros _START_, _END_ and _TOTAL_", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "oLanguage": { + "sInfo": "unit _START_ _END_ _TOTAL_ test" + } + } ); + }, + function () { return document.getElementById('example_info').innerHTML = "unit 1 10 57 test"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/oLanguage.sInfoEmpty.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/oLanguage.sInfoEmpty.js new file mode 100644 index 0000000..96061b3 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/oLanguage.sInfoEmpty.js @@ -0,0 +1,82 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oLanguage.sInfoEmpty" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Info empty language is 'Showing 0 to 0 of 0 entries' by default", + function () { oTable.fnFilter("nothinghere"); }, + function () { return oSettings.oLanguage.sInfoEmpty == "Showing 0 to 0 of 0 entries"; } + ); + + oTest.fnWaitTest( + "Info empty language default is in the DOM", + null, + function () { + var bReturn = document.getElementById('example_info').innerHTML.replace( + ' '+oSettings.oLanguage.sInfoFiltered.replace( '_MAX_', '57' ), "" ) == + "Showing 0 to 0 of 0 entries"; + return bReturn; + } + ); + + + oTest.fnWaitTest( + "Info empty language can be defined", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "oLanguage": { + "sInfoEmpty": "unit test" + } + } ); + oSettings = oTable.fnSettings(); + oTable.fnFilter("nothinghere"); + }, + function () { return oSettings.oLanguage.sInfoEmpty == "unit test"; } + ); + + oTest.fnWaitTest( + "Info empty language default is in the DOM", + null, + function () { + var bReturn = document.getElementById('example_info').innerHTML.replace( + ' '+oSettings.oLanguage.sInfoFiltered.replace( '_MAX_', '57' ), "" ) == + "unit test"; + return bReturn; + } + ); + + + oTest.fnWaitTest( + "Macro's not replaced", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "oLanguage": { + "sInfoEmpty": "unit _START_ _END_ _TOTAL_ test" + } + } ); + oTable.fnFilter("nothinghere"); + }, + function () { + var bReturn = document.getElementById('example_info').innerHTML.replace( + ' '+oSettings.oLanguage.sInfoFiltered.replace( '_MAX_', '57' ), "" ) == + "unit _START_ _END_ _TOTAL_ test"; + return bReturn; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/oLanguage.sInfoPostFix.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/oLanguage.sInfoPostFix.js new file mode 100644 index 0000000..adea1e9 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/oLanguage.sInfoPostFix.js @@ -0,0 +1,82 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oLanguage.sInfoPostFix" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Info post fix language is '' (blank) by default", + null, + function () { return oSettings.oLanguage.sInfoPostFix == ""; } + ); + + oTest.fnTest( + "Width no post fix, the basic info shows", + null, + function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries"; } + ); + + + oTest.fnWaitTest( + "Info post fix language can be defined", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "oLanguage": { + "sInfoPostFix": "unit test" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oLanguage.sInfoPostFix == "unit test"; } + ); + + oTest.fnTest( + "Info empty language default is in the DOM", + null, + function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries unit test"; } + ); + + + oTest.fnWaitTest( + "Macros have no effect in the post fix", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "oLanguage": { + "sInfoPostFix": "unit _START_ _END_ _TOTAL_ test" + } + } ); + }, + function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries unit _START_ _END_ _TOTAL_ test"; } + ); + + + oTest.fnWaitTest( + "Post fix is applied after fintering info", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "oLanguage": { + "sInfoPostFix": "unit test" + } + } ); + oTable.fnFilter("nothinghere"); + }, + function () { return document.getElementById('example_info').innerHTML = "Showing 0 to 0 of 0 entries unit (filtered from 57 total entries) test"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/oLanguage.sLengthMenu.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/oLanguage.sLengthMenu.js new file mode 100644 index 0000000..4e82a3a --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/oLanguage.sLengthMenu.js @@ -0,0 +1,115 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oLanguage.sLengthMenu" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Menu language is 'Show _MENU_ entries' by default", + null, + function () { return oSettings.oLanguage.sLengthMenu == "Show _MENU_ entries"; } + ); + + oTest.fnTest( + "_MENU_ macro is replaced by select menu in DOM", + null, + function () { return $('select', oSettings.aanFeatures.l[0]).length == 1 } + ); + + oTest.fnTest( + "A label input is used", + null, + function () { return $('label', oSettings.aanFeatures.l[0]).length == 1 } + ); + + oTest.fnTest( + "Default is put into DOM", + null, + function () { + var anChildren = $('label',oSettings.aanFeatures.l[0])[0].childNodes; + var bReturn = + anChildren[0].nodeValue == "Show " && + anChildren[2].nodeValue == " entries"; + return bReturn; + } + ); + + + oTest.fnWaitTest( + "Menu length language can be defined - no _MENU_ macro", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "oLanguage": { + "sLengthMenu": "unit test" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oLanguage.sLengthMenu == "unit test"; } + ); + + oTest.fnTest( + "Menu length language definition is in the DOM", + null, + function () { + return $('label', oSettings.aanFeatures.l[0]).text() == "unit test"; + } + ); + + + oTest.fnWaitTest( + "Menu length language can be defined - with _MENU_ macro", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "oLanguage": { + "sLengthMenu": "unit _MENU_ test" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { + var anChildren = $('label',oSettings.aanFeatures.l[0])[0].childNodes; + var bReturn = + anChildren[0].nodeValue == "unit " && + anChildren[2].nodeValue == " test"; + return bReturn; + } + ); + + + oTest.fnWaitTest( + "Only the _MENU_ macro", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "oLanguage": { + "sLengthMenu": "_MENU_" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { + var anChildren = oSettings.aanFeatures.l[0].childNodes; + var bReturn = + anChildren.length == 1 && + $('select', oSettings.aanFeatures.l[0]).length == 1; + return bReturn; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/oLanguage.sProcessing.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/oLanguage.sProcessing.js new file mode 100644 index 0000000..328046e --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/oLanguage.sProcessing.js @@ -0,0 +1,51 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oLanguage.sProcessing" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "bProcessing": true + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Processing language is 'Processing...' by default", + null, + function () { return oSettings.oLanguage.sProcessing == "Processing..."; } + ); + + oTest.fnTest( + "Processing language default is in the DOM", + null, + function () { return document.getElementById('example_processing').innerHTML = "Processing..."; } + ); + + + oTest.fnWaitTest( + "Processing language can be defined", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "bProcessing": true, + "oLanguage": { + "sProcessing": "unit test" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oLanguage.sProcessing == "unit test"; } + ); + + oTest.fnTest( + "Processing language definition is in the DOM", + null, + function () { return document.getElementById('example_processing').innerHTML = "unit test"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/oLanguage.sSearch.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/oLanguage.sSearch.js new file mode 100644 index 0000000..1d6e3af --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/oLanguage.sSearch.js @@ -0,0 +1,73 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oLanguage.sSearch" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Search language is 'Search:' by default", + null, + function () { return oSettings.oLanguage.sSearch == "Search:"; } + ); + + oTest.fnTest( + "A label input is used", + null, + function () { return $('label', oSettings.aanFeatures.f[0]).length == 1 } + ); + + oTest.fnTest( + "Search language default is in the DOM", + null, + function () { return $('label', oSettings.aanFeatures.f[0]).text() + == "Search: "; } + ); + + + oTest.fnWaitTest( + "Search language can be defined", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "oLanguage": { + "sSearch": "unit test" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oLanguage.sSearch == "unit test"; } + ); + + oTest.fnTest( + "Info language definition is in the DOM", + null, + function () { return $('label', oSettings.aanFeatures.f[0]).text().indexOf('unit test') !== -1; } + ); + + + oTest.fnWaitTest( + "Blank search has no space (separator) inserted", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "oLanguage": { + "sSearch": "" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { return document.getElementById('example_filter').childNodes.length == 1; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/oLanguage.sUrl.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/oLanguage.sUrl.js new file mode 100644 index 0000000..c9b8681 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/oLanguage.sUrl.js @@ -0,0 +1,64 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oLanguage.sUrl" ); + +/* Note that we only test the internal storage of language information pulled form a file here + * as the other language tests will check it goes into the DOM correctly + */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "sUrl is blank by default", + null, + function () { return oSettings.oLanguage.sUrl == ""; } + ); + + + oTest.fnWaitTest( + "Loading of German file loads language information", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "oLanguage": { + "sUrl": "../../../examples/examples_support/de_DE.txt" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { + var bReturn = + oSettings.oLanguage.sProcessing == "Bitte warten..." && + oSettings.oLanguage.sLengthMenu == "_MENU_ Einträge anzeigen" && + oSettings.oLanguage.sZeroRecords == "Keine Einträge vorhanden." && + oSettings.oLanguage.sInfo == "_START_ bis _END_ von _TOTAL_ Einträgen" && + oSettings.oLanguage.sInfoEmpty == "0 bis 0 von 0 Einträgen" && + oSettings.oLanguage.sInfoFiltered == "(gefiltert von _MAX_ Einträgen)" && + oSettings.oLanguage.sInfoPostFix == "" && + oSettings.oLanguage.sSearch == "Suchen" && + oSettings.oLanguage.oPaginate.sFirst == "Erster" && + oSettings.oLanguage.oPaginate.sPrevious == "Zurück" && + oSettings.oLanguage.oPaginate.sNext == "Nächster" && + oSettings.oLanguage.oPaginate.sLast == "Letzter"; + + return bReturn; + } + ); + + /* One DOM check just to ensure that they go into the DOM */ + oTest.fnTest( + "Loaded language goes into the DOM", + null, + function () { return document.getElementById('example_info').innerHTML = "1 bis 10 von 57 Einträgen"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/oLanguage.sZeroRecords.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/oLanguage.sZeroRecords.js new file mode 100644 index 0000000..308eb69 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/oLanguage.sZeroRecords.js @@ -0,0 +1,58 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oLanguage.sZeroRecords" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Zero records language is 'No matching records found' by default", + null, + function () { return oSettings.oLanguage.sZeroRecords == "No matching records found"; } + ); + + oTest.fnWaitTest( + "Text is shown when empty table (after filtering)", + function () { oTable.fnFilter('nothinghere'); }, + function () { + if ( $('#example tbody tr td').length == 0 ) + return false; + return $('#example tbody tr td')[0].innerHTML == "No matching records found"; + } + ); + + + + oTest.fnWaitTest( + "Zero records language can be defined", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "oLanguage": { + "sZeroRecords": "unit test" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oLanguage.sZeroRecords == "unit test"; } + ); + + oTest.fnWaitTest( + "Text is shown when empty table (after filtering)", + function () { oTable.fnFilter('nothinghere2'); }, + function () { + if ( $('#example tbody tr td').length == 0 ) + return false; + return $('#example tbody tr td')[0].innerHTML == "unit test" + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/oSearch.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/oSearch.js new file mode 100644 index 0000000..dab33ab --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/oSearch.js @@ -0,0 +1,100 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oSearch" ); + +/* Note with my server-side scripts the regex option has no effect - this just runs that down */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Default values should be blank", + null, + function () { + var bReturn = oSettings.oPreviousSearch.sSearch == "" && + !oSettings.oPreviousSearch.bRegex; + return bReturn; + } + ); + + /* This test might be considered iffy since the full object isn't given, but it's reasonable to + * expect DataTables to cope with this. It should just assumine regex false + */ + oTest.fnWaitTest( + "Search term only in object", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "oSearch": { + "sSearch": "Mozilla" + } + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "1"; } + ); + + oTest.fnWaitTest( + "New search will kill old one", + function () { + oTable.fnFilter("Opera"); + }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Opera 7.0"; } + ); + + oTest.fnWaitTest( + "Search plain text term and escape regex true", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "oSearch": { + "sSearch": "DS", + "bRegex": false + } + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Nintendo DS browser"; } + ); + + oTest.fnWaitTest( + "Search plain text term and escape regex false", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "oSearch": { + "sSearch": "Opera", + "bRegex": true + } + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Opera 7.0"; } + ); + + oTest.fnWaitTest( + "Search regex text term and escape regex true", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "oSearch": { + "sSearch": "1.*", + "bRegex": false + } + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/sAjaxDataProp.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/sAjaxDataProp.js new file mode 100644 index 0000000..c831c38 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/sAjaxDataProp.js @@ -0,0 +1,146 @@ +// DATA_TEMPLATE: empty_table +/* + * NOTE: There are some differences in this zero config script for server-side + * processing compared to the other data sources. The main reason for this is the + * difference in how the server-side processing does it's filtering. Also the + * sorting state is always reset on each draw. + */ +oTest.fnStart( "Custom data property in returned Ajax" ); + +$(document).ready( function () { + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/custom_data_property.php", + "sAjaxDataProp": "test" + } ); + + oTest.fnWaitTest( + "10 rows shown on the first page", + null, + function () { return $('#example tbody tr').length == 10; } + ); + + oTest.fnWaitTest( + "Initial sort occured", + null, + function () { return $('#example tbody td:eq(0)').html() == "Gecko"; } + ); + + /* Need to use the WaitTest for sorting due to the setTimeout datatables uses */ + oTest.fnWaitTest( + "Sorting (first click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnWaitTest( + "Sorting (second click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnWaitTest( + "Sorting (third click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnWaitTest( + "Sorting (first click) on numeric column", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "-"; } + ); + + oTest.fnWaitTest( + "Sorting (second click) on numeric column", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "522.1"; } + ); + + oTest.fnWaitTest( + "Sorting multi-column (first click)", + function () { + $('#example thead th:eq(0)').click(); + oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); }, + function () { var b = + $('#example tbody td:eq(0)').html() == "Gecko" && + $('#example tbody td:eq(1)').html() == "Camino 1.0"; return b; } + ); + + oTest.fnWaitTest( + "Sorting multi-column - sorting first column only", + function () { + $('#example thead th:eq(0)').click(); }, + function () { var b = + $('#example tbody td:eq(0)').html() == "Gecko" && + $('#example tbody td:eq(1)').html() == "Firefox 1.0"; return b; } + ); + + /* Basic paging */ + oTest.fnWaitTest( + "Paging to second page", + function () { $('#example_next').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "Mozilla 1.1"; } + ); + + oTest.fnWaitTest( + "Paging to first page", + function () { $('#example_previous').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "Firefox 1.0"; } + ); + + oTest.fnWaitTest( + "Attempting to page back beyond the first page", + function () { $('#example_previous').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "Firefox 1.0"; } + ); + + /* Changing length */ + oTest.fnWaitTest( + "Changing table length to 25 records", + function () { $("select[name=example_length]").val('25').change(); }, + function () { return $('#example tbody tr').length == 25; } + ); + + oTest.fnWaitTest( + "Changing table length to 50 records", + function () { $("select[name=example_length]").val('50').change(); }, + function () { return $('#example tbody tr').length == 50; } + ); + + oTest.fnWaitTest( + "Changing table length to 100 records", + function () { $("select[name=example_length]").val('100').change(); }, + function () { return $('#example tbody tr').length == 57; } + ); + + oTest.fnWaitTest( + "Changing table length to 10 records", + function () { $("select[name=example_length]").val('10').change(); }, + function () { return $('#example tbody tr').length == 10; } + ); + + /* + * Information element + */ + oTest.fnWaitTest( + "Information on zero config", + null, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnWaitTest( + "Information on second page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 11 to 20 of 57 entries"; } + ); + + oTest.fnWaitTest( + "Information on third page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 21 to 30 of 57 entries"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/sAjaxSource.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/sAjaxSource.js new file mode 100644 index 0000000..da92ae7 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/sAjaxSource.js @@ -0,0 +1,23 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "sAjaxSource" ); + +/* Sanitfy check really - all the other tests blast this */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Server side is off by default", + null, + function () { + return oSettings.sAjaxSource == "../../../examples/server_side/scripts/server_processing.php"; + } + ); + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/sDom.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/sDom.js new file mode 100644 index 0000000..159e202 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/sDom.js @@ -0,0 +1,269 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "sDom" ); + +/* This is going to be brutal on the browser! There is a lot that can be tested here... */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Default DOM varaible", + null, + function () { return oSettings.sDom == "lfrtip"; } + ); + + oTest.fnWaitTest( + "Default DOM in document", + null, + function () { + var nNodes = $('#demo div, #demo table'); + var nWrapper = document.getElementById('example_wrapper'); + var nLength = document.getElementById('example_length'); + var nFilter = document.getElementById('example_filter'); + var nInfo = document.getElementById('example_info'); + var nPaging = document.getElementById('example_paginate'); + var nTable = document.getElementById('example'); + + var bReturn = + nNodes[0] == nWrapper && + nNodes[1] == nLength && + nNodes[2] == nFilter && + nNodes[3] == nTable && + nNodes[4] == nInfo && + nNodes[5] == nPaging; + return bReturn; + } + ); + + oTest.fnWaitTest( + "Check example 1 in code propagates", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "sDom": '<"wrapper"flipt>' + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.sDom == '<"wrapper"flipt>'; } + ); + + oTest.fnWaitTest( + "Check example 1 in DOM", + null, + function () { + var jqNodes = $('#demo div, #demo table'); + var nNodes = []; + + /* Strip the paging nodes */ + for ( var i=0, iLen=jqNodes.length ; i<iLen ; i++ ) + { + if ( jqNodes[i].getAttribute('id') != "example_previous" && + jqNodes[i].getAttribute('id') != "example_next" ) + { + nNodes.push( jqNodes[i] ); + } + } + + var nWrapper = document.getElementById('example_wrapper'); + var nLength = document.getElementById('example_length'); + var nFilter = document.getElementById('example_filter'); + var nInfo = document.getElementById('example_info'); + var nPaging = document.getElementById('example_paginate'); + var nTable = document.getElementById('example'); + var nCustomWrapper = $('div.wrapper')[0]; + + var bReturn = + nNodes[0] == nWrapper && + nNodes[1] == nCustomWrapper && + nNodes[2] == nFilter && + nNodes[3] == nLength && + nNodes[4] == nInfo && + nNodes[5] == nPaging && + nNodes[6] == nTable; + return bReturn; + } + ); + + oTest.fnWaitTest( + "Check example 2 in DOM", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "sDom": '<lf<t>ip>' + } ); + }, + function () { + var jqNodes = $('#demo div, #demo table'); + var nNodes = []; + var nCustomWrappers = [] + + /* Strip the paging nodes */ + for ( var i=0, iLen=jqNodes.length ; i<iLen ; i++ ) + { + if ( jqNodes[i].getAttribute('id') != "example_previous" && + jqNodes[i].getAttribute('id') != "example_next" ) + { + nNodes.push( jqNodes[i] ); + } + + /* Only the two custom divs don't have class names */ + if ( jqNodes[i].className == "" ) + { + nCustomWrappers.push( jqNodes[i] ); + } + } + + var nWrapper = document.getElementById('example_wrapper'); + var nLength = document.getElementById('example_length'); + var nFilter = document.getElementById('example_filter'); + var nInfo = document.getElementById('example_info'); + var nPaging = document.getElementById('example_paginate'); + var nTable = document.getElementById('example'); + + var bReturn = + nNodes[0] == nWrapper && + nNodes[1] == nCustomWrappers[0] && + nNodes[2] == nLength && + nNodes[3] == nFilter && + nNodes[4] == nCustomWrappers[1] && + nNodes[5] == nTable && + nNodes[6] == nInfo && + nNodes[7] == nPaging; + return bReturn; + } + ); + + oTest.fnWaitTest( + "Check no length element", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "sDom": 'frtip' + } ); + }, + function () { + var nNodes = $('#demo div, #demo table'); + var nWrapper = document.getElementById('example_wrapper'); + var nLength = document.getElementById('example_length'); + var nFilter = document.getElementById('example_filter'); + var nInfo = document.getElementById('example_info'); + var nPaging = document.getElementById('example_paginate'); + var nTable = document.getElementById('example'); + + var bReturn = + nNodes[0] == nWrapper && + null == nLength && + nNodes[1] == nFilter && + nNodes[2] == nTable && + nNodes[3] == nInfo && + nNodes[4] == nPaging; + return bReturn; + } + ); + + oTest.fnWaitTest( + "Check no filter element", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "sDom": 'lrtip' + } ); + }, + function () { + var nNodes = $('#demo div, #demo table'); + var nWrapper = document.getElementById('example_wrapper'); + var nLength = document.getElementById('example_length'); + var nFilter = document.getElementById('example_filter'); + var nInfo = document.getElementById('example_info'); + var nPaging = document.getElementById('example_paginate'); + var nTable = document.getElementById('example'); + + var bReturn = + nNodes[0] == nWrapper && + nNodes[1] == nLength && + null == nFilter && + nNodes[2] == nTable && + nNodes[3] == nInfo && + nNodes[4] == nPaging; + return bReturn; + } + ); + + /* Note we don't test for no table as this is not supported (and it would be fairly daft! */ + + oTest.fnWaitTest( + "Check no info element", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "sDom": 'lfrtp' + } ); + }, + function () { + var nNodes = $('#demo div, #demo table'); + var nWrapper = document.getElementById('example_wrapper'); + var nLength = document.getElementById('example_length'); + var nFilter = document.getElementById('example_filter'); + var nInfo = document.getElementById('example_info'); + var nPaging = document.getElementById('example_paginate'); + var nTable = document.getElementById('example'); + + var bReturn = + nNodes[0] == nWrapper && + nNodes[1] == nLength && + nNodes[2] == nFilter && + nNodes[3] == nTable && + null == nInfo && + nNodes[4] == nPaging; + return bReturn; + } + ); + + oTest.fnWaitTest( + "Check no paging element", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "sDom": 'lfrti' + } ); + }, + function () { + var nNodes = $('#demo div, #demo table'); + var nWrapper = document.getElementById('example_wrapper'); + var nLength = document.getElementById('example_length'); + var nFilter = document.getElementById('example_filter'); + var nInfo = document.getElementById('example_info'); + var nPaging = document.getElementById('example_paginate'); + var nTable = document.getElementById('example'); + + var bReturn = + nNodes[0] == nWrapper && + nNodes[1] == nLength && + nNodes[2] == nFilter && + nNodes[3] == nTable && + nNodes[4] == nInfo && + null == nPaging; + return bReturn; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/sPaginationType.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/sPaginationType.js new file mode 100644 index 0000000..5895f7e --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/4_server-side/sPaginationType.js @@ -0,0 +1,138 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "sPaginationType" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Check two button paging is the default", + null, + function () { return oSettings.sPaginationType == "two_button"; } + ); + + oTest.fnWaitTest( + "Check class is applied", + null, + function () { return $('#example_paginate').hasClass('paging_two_button'); } + ); + + oTest.fnWaitTest( + "Two A elements are in the wrapper", + null, + function () { return $('#example_paginate a').length == 2; } + ); + + oTest.fnWaitTest( + "We have the previous button", + null, + function () { return document.getElementById('example_previous'); } + ); + + oTest.fnWaitTest( + "We have the next button", + null, + function () { return document.getElementById('example_next'); } + ); + + oTest.fnWaitTest( + "Previous button is disabled", + null, + function () { return $('#example_previous').hasClass('paginate_disabled_previous'); } + ); + + oTest.fnWaitTest( + "Next button is enabled", + null, + function () { return $('#example_next').hasClass('paginate_enabled_next'); } + ); + + /* Don't test paging - that's done by the zero config test script. */ + + + /* Two buttons paging */ + var bComplete = false; + oTest.fnWaitTest( + "Can enabled full numbers paging", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "bServerSide": true, + "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", + "sPaginationType": "full_numbers", + "fnInitComplete": function () { + setTimeout( function () { + bComplete = true; + }, 500 ); + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { + if ( bComplete ) + return oSettings.sPaginationType == "full_numbers"; + else + return false; + } + ); + + oTest.fnWaitTest( + "Check full numbers class is applied", + null, + function () { return $('#example_paginate').hasClass('paging_full_numbers'); } + ); + + + var nFirst, nPrevious, nNext, nLast; + oTest.fnWaitTest( + "Jump to last page", + function () { + nFirst = $('div.dataTables_paginate a.first'); + nPrevious = $('div.dataTables_paginate a.previous'); + nNext = $('div.dataTables_paginate a.next'); + nLast = $('div.dataTables_paginate a.last'); + nLast.click(); + }, + function () { + return document.getElementById('example_info').innerHTML == "Showing 51 to 57 of 57 entries"; + } + ); + + oTest.fnWaitTest( + "Go to two pages previous", + function () { + nPrevious.click(); + nPrevious.click(); + }, + function () { + return document.getElementById('example_info').innerHTML == "Showing 31 to 40 of 57 entries"; + } + ); + + oTest.fnWaitTest( + "Next (second last) page", + function () { + nNext.click(); + }, + function () { + return document.getElementById('example_info').innerHTML == "Showing 41 to 50 of 57 entries"; + } + ); + + oTest.fnWaitTest( + "Jump to first page", + function () { + nFirst.click(); + }, + function () { + return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/_zero_config.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/_zero_config.js new file mode 100644 index 0000000..af7fcae --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/_zero_config.js @@ -0,0 +1,847 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "Sanity checks for DataTables with data from JS - Object data source" ); + +oTest.fnTest( + "jQuery.dataTable function", + null, + function () { return typeof jQuery().dataTable == "function"; } +); + +oTest.fnTest( + "jQuery.dataTableSettings storage array", + null, + function () { return typeof jQuery().dataTableSettings == "object"; } +); + +oTest.fnTest( + "jQuery.dataTableExt plugin object", + null, + function () { return typeof jQuery().dataTableExt == "object"; } +); + +$(document).ready( function () { + var oInit = { + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ], + "aaData": [ + { + "engine": "Trident", + "browser": "Internet Explorer 4.0", + "platform": "Win 95+", + "version": "4", + "grade": "X" + }, + { + "engine": "Trident", + "browser": "Internet Explorer 5.0", + "platform": "Win 95+", + "version": "5", + "grade": "C" + }, + { + "engine": "Trident", + "browser": "Internet Explorer 5.5", + "platform": "Win 95+", + "version": "5.5", + "grade": "A" + }, + { + "engine": "Trident", + "browser": "Internet Explorer 6", + "platform": "Win 98+", + "version": "6", + "grade": "A" + }, + { + "engine": "Trident", + "browser": "Internet Explorer 7", + "platform": "Win XP SP2+", + "version": "7", + "grade": "A" + }, + { + "engine": "Trident", + "browser": "AOL browser (AOL desktop)", + "platform": "Win XP", + "version": "6", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Firefox 1.0", + "platform": "Win 98+ / OSX.2+", + "version": "1.7", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Firefox 1.5", + "platform": "Win 98+ / OSX.2+", + "version": "1.8", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Firefox 2.0", + "platform": "Win 98+ / OSX.2+", + "version": "1.8", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Firefox 3.0", + "platform": "Win 2k+ / OSX.3+", + "version": "1.9", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Camino 1.0", + "platform": "OSX.2+", + "version": "1.8", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Camino 1.5", + "platform": "OSX.3+", + "version": "1.8", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Netscape 7.2", + "platform": "Win 95+ / Mac OS 8.6-9.2", + "version": "1.7", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Netscape Browser 8", + "platform": "Win 98SE+", + "version": "1.7", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Netscape Navigator 9", + "platform": "Win 98+ / OSX.2+", + "version": "1.8", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.0", + "platform": "Win 95+ / OSX.1+", + "version": "1", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.1", + "platform": "Win 95+ / OSX.1+", + "version": "1.1", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.2", + "platform": "Win 95+ / OSX.1+", + "version": "1.2", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.3", + "platform": "Win 95+ / OSX.1+", + "version": "1.3", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.4", + "platform": "Win 95+ / OSX.1+", + "version": "1.4", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.5", + "platform": "Win 95+ / OSX.1+", + "version": "1.5", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.6", + "platform": "Win 95+ / OSX.1+", + "version": "1.6", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.7", + "platform": "Win 98+ / OSX.1+", + "version": "1.7", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.8", + "platform": "Win 98+ / OSX.1+", + "version": "1.8", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Seamonkey 1.1", + "platform": "Win 98+ / OSX.2+", + "version": "1.8", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Epiphany 2.20", + "platform": "Gnome", + "version": "1.8", + "grade": "A" + }, + { + "engine": "Webkit", + "browser": "Safari 1.2", + "platform": "OSX.3", + "version": "125.5", + "grade": "A" + }, + { + "engine": "Webkit", + "browser": "Safari 1.3", + "platform": "OSX.3", + "version": "312.8", + "grade": "A" + }, + { + "engine": "Webkit", + "browser": "Safari 2.0", + "platform": "OSX.4+", + "version": "419.3", + "grade": "A" + }, + { + "engine": "Webkit", + "browser": "Safari 3.0", + "platform": "OSX.4+", + "version": "522.1", + "grade": "A" + }, + { + "engine": "Webkit", + "browser": "OmniWeb 5.5", + "platform": "OSX.4+", + "version": "420", + "grade": "A" + }, + { + "engine": "Webkit", + "browser": "iPod Touch / iPhone", + "platform": "iPod", + "version": "420.1", + "grade": "A" + }, + { + "engine": "Webkit", + "browser": "S60", + "platform": "S60", + "version": "413", + "grade": "A" + }, + { + "engine": "Presto", + "browser": "Opera 7.0", + "platform": "Win 95+ / OSX.1+", + "version": "-", + "grade": "A" + }, + { + "engine": "Presto", + "browser": "Opera 7.5", + "platform": "Win 95+ / OSX.2+", + "version": "-", + "grade": "A" + }, + { + "engine": "Presto", + "browser": "Opera 8.0", + "platform": "Win 95+ / OSX.2+", + "version": "-", + "grade": "A" + }, + { + "engine": "Presto", + "browser": "Opera 8.5", + "platform": "Win 95+ / OSX.2+", + "version": "-", + "grade": "A" + }, + { + "engine": "Presto", + "browser": "Opera 9.0", + "platform": "Win 95+ / OSX.3+", + "version": "-", + "grade": "A" + }, + { + "engine": "Presto", + "browser": "Opera 9.2", + "platform": "Win 88+ / OSX.3+", + "version": "-", + "grade": "A" + }, + { + "engine": "Presto", + "browser": "Opera 9.5", + "platform": "Win 88+ / OSX.3+", + "version": "-", + "grade": "A" + }, + { + "engine": "Presto", + "browser": "Opera for Wii", + "platform": "Wii", + "version": "-", + "grade": "A" + }, + { + "engine": "Presto", + "browser": "Nokia N800", + "platform": "N800", + "version": "-", + "grade": "A" + }, + { + "engine": "Presto", + "browser": "Nintendo DS browser", + "platform": "Nintendo DS", + "version": "8.5", + "grade": "C/A<sup>1</sup>" + }, + { + "engine": "KHTML", + "browser": "Konqureror 3.1", + "platform": "KDE 3.1", + "version": "3.1", + "grade": "C" + }, + { + "engine": "KHTML", + "browser": "Konqureror 3.3", + "platform": "KDE 3.3", + "version": "3.3", + "grade": "A" + }, + { + "engine": "KHTML", + "browser": "Konqureror 3.5", + "platform": "KDE 3.5", + "version": "3.5", + "grade": "A" + }, + { + "engine": "Tasman", + "browser": "Internet Explorer 4.5", + "platform": "Mac OS 8-9", + "version": "-", + "grade": "X" + }, + { + "engine": "Tasman", + "browser": "Internet Explorer 5.1", + "platform": "Mac OS 7.6-9", + "version": "1", + "grade": "C" + }, + { + "engine": "Tasman", + "browser": "Internet Explorer 5.2", + "platform": "Mac OS 8-X", + "version": "1", + "grade": "C" + }, + { + "engine": "Misc", + "browser": "NetFront 3.1", + "platform": "Embedded devices", + "version": "-", + "grade": "C" + }, + { + "engine": "Misc", + "browser": "NetFront 3.4", + "platform": "Embedded devices", + "version": "-", + "grade": "A" + }, + { + "engine": "Misc", + "browser": "Dillo 0.8", + "platform": "Embedded devices", + "version": "-", + "grade": "X" + }, + { + "engine": "Misc", + "browser": "Links", + "platform": "Text only", + "version": "-", + "grade": "X" + }, + { + "engine": "Misc", + "browser": "Lynx", + "platform": "Text only", + "version": "-", + "grade": "X" + }, + { + "engine": "Misc", + "browser": "IE Mobile", + "platform": "Windows Mobile 6", + "version": "-", + "grade": "C" + }, + { + "engine": "Misc", + "browser": "PSP browser", + "platform": "PSP", + "version": "-", + "grade": "C" + }, + { + "engine": "Other browsers", + "browser": "All others", + "platform": "-", + "version": "-", + "grade": "U" + } +] + }; + $('#example').dataTable( oInit ); + + /* Basic checks */ + oTest.fnWaitTest( + "Length changing div exists", + null, + function () { return document.getElementById('example_length') != null; } + ); + + oTest.fnTest( + "Filtering div exists", + null, + function () { return document.getElementById('example_filter') != null; } + ); + + oTest.fnTest( + "Information div exists", + null, + function () { return document.getElementById('example_info') != null; } + ); + + oTest.fnTest( + "Pagination div exists", + null, + function () { return document.getElementById('example_paginate') != null; } + ); + + oTest.fnTest( + "Processing div is off by default", + null, + function () { return document.getElementById('example_processing') == null; } + ); + + oTest.fnWaitTest( + "10 rows shown on the first page", + null, + function () { return $('#example tbody tr').length == 10; } + ); + + oTest.fnTest( + "Initial sort occured", + null, + function () { return $('#example tbody td:eq(0)').html() == "Gecko"; } + ); + + /* Need to use the WaitTest for sorting due to the setTimeout datatables uses */ + oTest.fnTest( + "Sorting (first click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Sorting (second click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnTest( + "Sorting (third click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Sorting (first click) on numeric column", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "-"; } + ); + + oTest.fnTest( + "Sorting (second click) on numeric column", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "522.1"; } + ); + + oTest.fnTest( + "Sorting multi-column (first click)", + function () { + $('#example thead th:eq(0)').click(); + oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); }, + function () { var b = + $('#example tbody td:eq(0)').html() == "Gecko" && + $('#example tbody td:eq(1)').html() == "Camino 1.0"; return b; } + ); + + oTest.fnTest( + "Sorting multi-column - sorting second column only", + function () { + $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + /* Basic paging */ + oTest.fnTest( + "Paging to second page", + function () { $('#example_next').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "IE Mobile"; } + ); + + oTest.fnTest( + "Paging to first page", + function () { $('#example_previous').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Attempting to page back beyond the first page", + function () { $('#example_previous').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + /* Changing length */ + oTest.fnTest( + "Changing table length to 25 records", + function () { $("select[name=example_length]").val('25').change(); }, + function () { return $('#example tbody tr').length == 25; } + ); + + oTest.fnTest( + "Changing table length to 50 records", + function () { $("select[name=example_length]").val('50').change(); }, + function () { return $('#example tbody tr').length == 50; } + ); + + oTest.fnTest( + "Changing table length to 100 records", + function () { $("select[name=example_length]").val('100').change(); }, + function () { return $('#example tbody tr').length == 57; } + ); + + oTest.fnTest( + "Changing table length to 10 records", + function () { $("select[name=example_length]").val('10').change(); }, + function () { return $('#example tbody tr').length == 10; } + ); + + /* + * Information element + */ + oTest.fnTest( + "Information on zero config", + null, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Information on second page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 11 to 20 of 57 entries"; } + ); + + oTest.fnTest( + "Information on third page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 21 to 30 of 57 entries"; } + ); + + oTest.fnTest( + "Information on last page", + function () { + $('#example_next').click(); + $('#example_next').click(); + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 51 to 57 of 57 entries"; } + ); + + oTest.fnTest( + "Information back on first page", + function () { + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Information with 25 records", + function () { $("select[name=example_length]").val('25').change(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 25 of 57 entries"; } + ); + + oTest.fnTest( + "Information with 25 records - second page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 26 to 50 of 57 entries"; } + ); + + oTest.fnTest( + "Information with 100 records - first page", + function () { + $('#example_previous').click(); + $("select[name=example_length]").val('100').change(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 57 of 57 entries"; } + ); + + oTest.fnTest( + "Information back to 10 records", + function () { + $('#example_previous').click(); + $("select[name=example_length]").val('10').change(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Information with filter 'Win'", + function () { $('#example_filter input').val("Win").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' second page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' last page", + function () { + $('#example_next').click(); + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 31 to 31 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' back to first page", + function () { + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' second page - second time", + function () { + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter increased to 'Win 98'", + function () { $('#example_filter input').val("Win 98").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 9 of 9 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter decreased to 'Win'", + function () { $('#example_filter input').val("Win").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' second page - third time", + function () { + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter removed", + function () { $('#example_filter input').val("").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 57 entries"; } + ); + + + /* + * Filtering + */ + oTest.fnWaitTest( + "Filter 'W' - rows", + function () { + /* Reset the table such that the old sorting doesn't mess things up */ + oSession.fnRestore(); + $('#example').dataTable( oInit ); + $('#example_filter input').val("W").keyup(); }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Gecko"; } + ); + + oTest.fnTest( + "Filter 'W' - info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 42 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Wi'", + function () { $('#example_filter input').val("Wi").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 32 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Win'", + function () { $('#example_filter input').val("Win").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting column 1", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "AOL browser (AOL desktop)"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting column 1 info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting column 1 reverse", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnTest( + "Filter 'Win XP' - maintaing reverse sorting col 1", + function () { $('#example_filter input').val("Win XP").keyup(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Internet Explorer 7"; } + ); + + oTest.fnTest( + "Filter 'Win XP' - sorting col 3", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "4"; } + ); + + oTest.fnTest( + "Filter 'Win XP' - sorting col 3 - reversed", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "7"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting col 3 - reversed info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 6 of 6 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'nothinghere'", + function () { $('#example_filter input').val("nothinghere").keyup(); }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == + "No matching records found"; } + ); + + oTest.fnTest( + "Filter 'nothinghere' - info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter back to blank and 1st column sorting", + function () { + $('#example_filter input').val("").keyup(); + $('#example thead th:eq(0)').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Prefixing a filter entry", + function () { + $('#example_filter input').val("Win").keyup(); + $('#example_filter input').val("GeckoWin").keyup(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Prefixing a filter entry with space", + function () { + $('#example_filter input').val("Gecko Win").keyup(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 17 entries (filtered from 57 total entries)"; } + ); + + + + + + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/_zero_config_arrays_subobjects.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/_zero_config_arrays_subobjects.js new file mode 100644 index 0000000..22c127e --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/_zero_config_arrays_subobjects.js @@ -0,0 +1,961 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "Sanity checks for DataTables with data from JS - Array / sub-object data source" ); + +oTest.fnTest( + "jQuery.dataTable function", + null, + function () { return typeof jQuery().dataTable == "function"; } +); + +oTest.fnTest( + "jQuery.dataTableSettings storage array", + null, + function () { return typeof jQuery().dataTableSettings == "object"; } +); + +oTest.fnTest( + "jQuery.dataTableExt plugin object", + null, + function () { return typeof jQuery().dataTableExt == "object"; } +); + +$(document).ready( function () { + var oInit = { + "aoColumns": [ + null, + null, + { "mDataProp": 2 }, + { "mDataProp": "3.version" }, + { "mDataProp": "3.grade" } + ], + "aaData": [ + [ + "Trident", + "Internet Explorer 4.0", + "Win 95+", + { + "version": "4", + "grade": "X" + } + ], + [ + "Trident", + "Internet Explorer 5.0", + "Win 95+", + { + "version": "5", + "grade": "C" + } + ], + [ + "Trident", + "Internet Explorer 5.5", + "Win 95+", + { + "version": "5.5", + "grade": "A" + } + ], + [ + "Trident", + "Internet Explorer 6", + "Win 98+", + { + "version": "6", + "grade": "A" + } + ], + [ + "Trident", + "Internet Explorer 7", + "Win XP SP2+", + { + "version": "7", + "grade": "A" + } + ], + [ + "Trident", + "AOL browser (AOL desktop)", + "Win XP", + { + "version": "6", + "grade": "A" + } + ], + [ + "Gecko", + "Firefox 1.0", + "Win 98+ / OSX.2+", + { + "version": "1.7", + "grade": "A" + } + ], + [ + "Gecko", + "Firefox 1.5", + "Win 98+ / OSX.2+", + { + "version": "1.8", + "grade": "A" + } + ], + [ + "Gecko", + "Firefox 2.0", + "Win 98+ / OSX.2+", + { + "version": "1.8", + "grade": "A" + } + ], + [ + "Gecko", + "Firefox 3.0", + "Win 2k+ / OSX.3+", + { + "version": "1.9", + "grade": "A" + } + ], + [ + "Gecko", + "Camino 1.0", + "OSX.2+", + { + "version": "1.8", + "grade": "A" + } + ], + [ + "Gecko", + "Camino 1.5", + "OSX.3+", + { + "version": "1.8", + "grade": "A" + } + ], + [ + "Gecko", + "Netscape 7.2", + "Win 95+ / Mac OS 8.6-9.2", + { + "version": "1.7", + "grade": "A" + } + ], + [ + "Gecko", + "Netscape Browser 8", + "Win 98SE+", + { + "version": "1.7", + "grade": "A" + } + ], + [ + "Gecko", + "Netscape Navigator 9", + "Win 98+ / OSX.2+", + { + "version": "1.8", + "grade": "A" + } + ], + [ + "Gecko", + "Mozilla 1.0", + "Win 95+ / OSX.1+", + { + "version": "1", + "grade": "A" + } + ], + [ + "Gecko", + "Mozilla 1.1", + "Win 95+ / OSX.1+", + { + "version": "1.1", + "grade": "A" + } + ], + [ + "Gecko", + "Mozilla 1.2", + "Win 95+ / OSX.1+", + { + "version": "1.2", + "grade": "A" + } + ], + [ + "Gecko", + "Mozilla 1.3", + "Win 95+ / OSX.1+", + { + "version": "1.3", + "grade": "A" + } + ], + [ + "Gecko", + "Mozilla 1.4", + "Win 95+ / OSX.1+", + { + "version": "1.4", + "grade": "A" + } + ], + [ + "Gecko", + "Mozilla 1.5", + "Win 95+ / OSX.1+", + { + "version": "1.5", + "grade": "A" + } + ], + [ + "Gecko", + "Mozilla 1.6", + "Win 95+ / OSX.1+", + { + "version": "1.6", + "grade": "A" + } + ], + [ + "Gecko", + "Mozilla 1.7", + "Win 98+ / OSX.1+", + { + "version": "1.7", + "grade": "A" + } + ], + [ + "Gecko", + "Mozilla 1.8", + "Win 98+ / OSX.1+", + { + "version": "1.8", + "grade": "A" + } + ], + [ + "Gecko", + "Seamonkey 1.1", + "Win 98+ / OSX.2+", + { + "version": "1.8", + "grade": "A" + } + ], + [ + "Gecko", + "Epiphany 2.20", + "Gnome", + { + "version": "1.8", + "grade": "A" + } + ], + [ + "Webkit", + "Safari 1.2", + "OSX.3", + { + "version": "125.5", + "grade": "A" + } + ], + [ + "Webkit", + "Safari 1.3", + "OSX.3", + { + "version": "312.8", + "grade": "A" + } + ], + [ + "Webkit", + "Safari 2.0", + "OSX.4+", + { + "version": "419.3", + "grade": "A" + } + ], + [ + "Webkit", + "Safari 3.0", + "OSX.4+", + { + "version": "522.1", + "grade": "A" + } + ], + [ + "Webkit", + "OmniWeb 5.5", + "OSX.4+", + { + "version": "420", + "grade": "A" + } + ], + [ + "Webkit", + "iPod Touch / iPhone", + "iPod", + { + "version": "420.1", + "grade": "A" + } + ], + [ + "Webkit", + "S60", + "S60", + { + "version": "413", + "grade": "A" + } + ], + [ + "Presto", + "Opera 7.0", + "Win 95+ / OSX.1+", + { + "version": "-", + "grade": "A" + } + ], + [ + "Presto", + "Opera 7.5", + "Win 95+ / OSX.2+", + { + "version": "-", + "grade": "A" + } + ], + [ + "Presto", + "Opera 8.0", + "Win 95+ / OSX.2+", + { + "version": "-", + "grade": "A" + } + ], + [ + "Presto", + "Opera 8.5", + "Win 95+ / OSX.2+", + { + "version": "-", + "grade": "A" + } + ], + [ + "Presto", + "Opera 9.0", + "Win 95+ / OSX.3+", + { + "version": "-", + "grade": "A" + } + ], + [ + "Presto", + "Opera 9.2", + "Win 88+ / OSX.3+", + { + "version": "-", + "grade": "A" + } + ], + [ + "Presto", + "Opera 9.5", + "Win 88+ / OSX.3+", + { + "version": "-", + "grade": "A" + } + ], + [ + "Presto", + "Opera for Wii", + "Wii", + { + "version": "-", + "grade": "A" + } + ], + [ + "Presto", + "Nokia N800", + "N800", + { + "version": "-", + "grade": "A" + } + ], + [ + "Presto", + "Nintendo DS browser", + "Nintendo DS", + { + "version": "8.5", + "grade": "C/A<sup>1</sup>" + } + ], + [ + "KHTML", + "Konqureror 3.1", + "KDE 3.1", + { + "version": "3.1", + "grade": "C" + } + ], + [ + "KHTML", + "Konqureror 3.3", + "KDE 3.3", + { + "version": "3.3", + "grade": "A" + } + ], + [ + "KHTML", + "Konqureror 3.5", + "KDE 3.5", + { + "version": "3.5", + "grade": "A" + } + ], + [ + "Tasman", + "Internet Explorer 4.5", + "Mac OS 8-9", + { + "version": "-", + "grade": "X" + } + ], + [ + "Tasman", + "Internet Explorer 5.1", + "Mac OS 7.6-9", + { + "version": "1", + "grade": "C" + } + ], + [ + "Tasman", + "Internet Explorer 5.2", + "Mac OS 8-X", + { + "version": "1", + "grade": "C" + } + ], + [ + "Misc", + "NetFront 3.1", + "Embedded devices", + { + "version": "-", + "grade": "C" + } + ], + [ + "Misc", + "NetFront 3.4", + "Embedded devices", + { + "version": "-", + "grade": "A" + } + ], + [ + "Misc", + "Dillo 0.8", + "Embedded devices", + { + "version": "-", + "grade": "X" + } + ], + [ + "Misc", + "Links", + "Text only", + { + "version": "-", + "grade": "X" + } + ], + [ + "Misc", + "Lynx", + "Text only", + { + "version": "-", + "grade": "X" + } + ], + [ + "Misc", + "IE Mobile", + "Windows Mobile 6", + { + "version": "-", + "grade": "C" + } + ], + [ + "Misc", + "PSP browser", + "PSP", + { + "version": "-", + "grade": "C" + } + ], + [ + "Other browsers", + "All others", + "-", + { + "version": "-", + "grade": "U" + } + ] +] + }; + $('#example').dataTable( oInit ); + + /* Basic checks */ + oTest.fnWaitTest( + "Length changing div exists", + null, + function () { return document.getElementById('example_length') != null; } + ); + + oTest.fnTest( + "Filtering div exists", + null, + function () { return document.getElementById('example_filter') != null; } + ); + + oTest.fnTest( + "Information div exists", + null, + function () { return document.getElementById('example_info') != null; } + ); + + oTest.fnTest( + "Pagination div exists", + null, + function () { return document.getElementById('example_paginate') != null; } + ); + + oTest.fnTest( + "Processing div is off by default", + null, + function () { return document.getElementById('example_processing') == null; } + ); + + oTest.fnWaitTest( + "10 rows shown on the first page", + null, + function () { return $('#example tbody tr').length == 10; } + ); + + oTest.fnTest( + "Initial sort occured", + null, + function () { return $('#example tbody td:eq(0)').html() == "Gecko"; } + ); + + /* Need to use the WaitTest for sorting due to the setTimeout datatables uses */ + oTest.fnTest( + "Sorting (first click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Sorting (second click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnTest( + "Sorting (third click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Sorting (first click) on numeric column", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "-"; } + ); + + oTest.fnTest( + "Sorting (second click) on numeric column", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "522.1"; } + ); + + oTest.fnTest( + "Sorting multi-column (first click)", + function () { + $('#example thead th:eq(0)').click(); + oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); }, + function () { var b = + $('#example tbody td:eq(0)').html() == "Gecko" && + $('#example tbody td:eq(1)').html() == "Camino 1.0"; return b; } + ); + + oTest.fnTest( + "Sorting multi-column - sorting second column only", + function () { + $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + /* Basic paging */ + oTest.fnTest( + "Paging to second page", + function () { $('#example_next').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "IE Mobile"; } + ); + + oTest.fnTest( + "Paging to first page", + function () { $('#example_previous').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Attempting to page back beyond the first page", + function () { $('#example_previous').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + /* Changing length */ + oTest.fnTest( + "Changing table length to 25 records", + function () { $("select[name=example_length]").val('25').change(); }, + function () { return $('#example tbody tr').length == 25; } + ); + + oTest.fnTest( + "Changing table length to 50 records", + function () { $("select[name=example_length]").val('50').change(); }, + function () { return $('#example tbody tr').length == 50; } + ); + + oTest.fnTest( + "Changing table length to 100 records", + function () { $("select[name=example_length]").val('100').change(); }, + function () { return $('#example tbody tr').length == 57; } + ); + + oTest.fnTest( + "Changing table length to 10 records", + function () { $("select[name=example_length]").val('10').change(); }, + function () { return $('#example tbody tr').length == 10; } + ); + + /* + * Information element + */ + oTest.fnTest( + "Information on zero config", + null, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Information on second page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 11 to 20 of 57 entries"; } + ); + + oTest.fnTest( + "Information on third page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 21 to 30 of 57 entries"; } + ); + + oTest.fnTest( + "Information on last page", + function () { + $('#example_next').click(); + $('#example_next').click(); + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 51 to 57 of 57 entries"; } + ); + + oTest.fnTest( + "Information back on first page", + function () { + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Information with 25 records", + function () { $("select[name=example_length]").val('25').change(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 25 of 57 entries"; } + ); + + oTest.fnTest( + "Information with 25 records - second page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 26 to 50 of 57 entries"; } + ); + + oTest.fnTest( + "Information with 100 records - first page", + function () { + $('#example_previous').click(); + $("select[name=example_length]").val('100').change(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 57 of 57 entries"; } + ); + + oTest.fnTest( + "Information back to 10 records", + function () { + $('#example_previous').click(); + $("select[name=example_length]").val('10').change(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Information with filter 'Win'", + function () { $('#example_filter input').val("Win").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' second page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' last page", + function () { + $('#example_next').click(); + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 31 to 31 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' back to first page", + function () { + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' second page - second time", + function () { + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter increased to 'Win 98'", + function () { $('#example_filter input').val("Win 98").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 9 of 9 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter decreased to 'Win'", + function () { $('#example_filter input').val("Win").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' second page - third time", + function () { + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter removed", + function () { $('#example_filter input').val("").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 57 entries"; } + ); + + + /* + * Filtering + */ + oTest.fnWaitTest( + "Filter 'W' - rows", + function () { + /* Reset the table such that the old sorting doesn't mess things up */ + oSession.fnRestore(); + $('#example').dataTable( oInit ); + $('#example_filter input').val("W").keyup(); }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Gecko"; } + ); + + oTest.fnTest( + "Filter 'W' - info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 42 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Wi'", + function () { $('#example_filter input').val("Wi").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 32 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Win'", + function () { $('#example_filter input').val("Win").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting column 1", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "AOL browser (AOL desktop)"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting column 1 info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting column 1 reverse", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnTest( + "Filter 'Win XP' - maintaing reverse sorting col 1", + function () { $('#example_filter input').val("Win XP").keyup(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Internet Explorer 7"; } + ); + + oTest.fnTest( + "Filter 'Win XP' - sorting col 3", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "4"; } + ); + + oTest.fnTest( + "Filter 'Win XP' - sorting col 3 - reversed", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "7"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting col 3 - reversed info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 6 of 6 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'nothinghere'", + function () { $('#example_filter input').val("nothinghere").keyup(); }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == + "No matching records found"; } + ); + + oTest.fnTest( + "Filter 'nothinghere' - info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter back to blank and 1st column sorting", + function () { + $('#example_filter input').val("").keyup(); + $('#example thead th:eq(0)').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Prefixing a filter entry", + function () { + $('#example_filter input').val("Win").keyup(); + $('#example_filter input').val("GeckoWin").keyup(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Prefixing a filter entry with space", + function () { + $('#example_filter input').val("Gecko Win").keyup(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 17 entries (filtered from 57 total entries)"; } + ); + + + + + + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/_zero_config_deep.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/_zero_config_deep.js new file mode 100644 index 0000000..206f8b1 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/_zero_config_deep.js @@ -0,0 +1,1075 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "Sanity checks for DataTables with data from JS - Deep data source" ); + +oTest.fnTest( + "jQuery.dataTable function", + null, + function () { return typeof jQuery().dataTable == "function"; } +); + +oTest.fnTest( + "jQuery.dataTableSettings storage array", + null, + function () { return typeof jQuery().dataTableSettings == "object"; } +); + +oTest.fnTest( + "jQuery.dataTableExt plugin object", + null, + function () { return typeof jQuery().dataTableExt == "object"; } +); + +$(document).ready( function () { + var oInit = { + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform.inner" }, + { "mDataProp": "platform.details.0" }, + { "mDataProp": "platform.details.1" } + ], + "aaData": [ + { + "engine": "Trident", + "browser": "Internet Explorer 4.0", + "platform": { + "inner": "Win 95+", + "details": [ + "4", + "X" + ] + } + }, + { + "engine": "Trident", + "browser": "Internet Explorer 5.0", + "platform": { + "inner": "Win 95+", + "details": [ + "5", + "C" + ] + } + }, + { + "engine": "Trident", + "browser": "Internet Explorer 5.5", + "platform": { + "inner": "Win 95+", + "details": [ + "5.5", + "A" + ] + } + }, + { + "engine": "Trident", + "browser": "Internet Explorer 6", + "platform": { + "inner": "Win 98+", + "details": [ + "6", + "A" + ] + } + }, + { + "engine": "Trident", + "browser": "Internet Explorer 7", + "platform": { + "inner": "Win XP SP2+", + "details": [ + "7", + "A" + ] + } + }, + { + "engine": "Trident", + "browser": "AOL browser (AOL desktop)", + "platform": { + "inner": "Win XP", + "details": [ + "6", + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Firefox 1.0", + "platform": { + "inner": "Win 98+ / OSX.2+", + "details": [ + "1.7", + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Firefox 1.5", + "platform": { + "inner": "Win 98+ / OSX.2+", + "details": [ + "1.8", + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Firefox 2.0", + "platform": { + "inner": "Win 98+ / OSX.2+", + "details": [ + "1.8", + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Firefox 3.0", + "platform": { + "inner": "Win 2k+ / OSX.3+", + "details": [ + "1.9", + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Camino 1.0", + "platform": { + "inner": "OSX.2+", + "details": [ + "1.8", + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Camino 1.5", + "platform": { + "inner": "OSX.3+", + "details": [ + "1.8", + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Netscape 7.2", + "platform": { + "inner": "Win 95+ / Mac OS 8.6-9.2", + "details": [ + "1.7", + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Netscape Browser 8", + "platform": { + "inner": "Win 98SE+", + "details": [ + "1.7", + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Netscape Navigator 9", + "platform": { + "inner": "Win 98+ / OSX.2+", + "details": [ + "1.8", + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.0", + "platform": { + "inner": "Win 95+ / OSX.1+", + "details": [ + 1, + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.1", + "platform": { + "inner": "Win 95+ / OSX.1+", + "details": [ + 1.1, + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.2", + "platform": { + "inner": "Win 95+ / OSX.1+", + "details": [ + 1.2, + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.3", + "platform": { + "inner": "Win 95+ / OSX.1+", + "details": [ + 1.3, + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.4", + "platform": { + "inner": "Win 95+ / OSX.1+", + "details": [ + 1.4, + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.5", + "platform": { + "inner": "Win 95+ / OSX.1+", + "details": [ + 1.5, + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.6", + "platform": { + "inner": "Win 95+ / OSX.1+", + "details": [ + 1.6, + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.7", + "platform": { + "inner": "Win 98+ / OSX.1+", + "details": [ + 1.7, + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.8", + "platform": { + "inner": "Win 98+ / OSX.1+", + "details": [ + 1.8, + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Seamonkey 1.1", + "platform": { + "inner": "Win 98+ / OSX.2+", + "details": [ + "1.8", + "A" + ] + } + }, + { + "engine": "Gecko", + "browser": "Epiphany 2.20", + "platform": { + "inner": "Gnome", + "details": [ + "1.8", + "A" + ] + } + }, + { + "engine": "Webkit", + "browser": "Safari 1.2", + "platform": { + "inner": "OSX.3", + "details": [ + "125.5", + "A" + ] + } + }, + { + "engine": "Webkit", + "browser": "Safari 1.3", + "platform": { + "inner": "OSX.3", + "details": [ + "312.8", + "A" + ] + } + }, + { + "engine": "Webkit", + "browser": "Safari 2.0", + "platform": { + "inner": "OSX.4+", + "details": [ + "419.3", + "A" + ] + } + }, + { + "engine": "Webkit", + "browser": "Safari 3.0", + "platform": { + "inner": "OSX.4+", + "details": [ + "522.1", + "A" + ] + } + }, + { + "engine": "Webkit", + "browser": "OmniWeb 5.5", + "platform": { + "inner": "OSX.4+", + "details": [ + "420", + "A" + ] + } + }, + { + "engine": "Webkit", + "browser": "iPod Touch / iPhone", + "platform": { + "inner": "iPod", + "details": [ + "420.1", + "A" + ] + } + }, + { + "engine": "Webkit", + "browser": "S60", + "platform": { + "inner": "S60", + "details": [ + "413", + "A" + ] + } + }, + { + "engine": "Presto", + "browser": "Opera 7.0", + "platform": { + "inner": "Win 95+ / OSX.1+", + "details": [ + "-", + "A" + ] + } + }, + { + "engine": "Presto", + "browser": "Opera 7.5", + "platform": { + "inner": "Win 95+ / OSX.2+", + "details": [ + "-", + "A" + ] + } + }, + { + "engine": "Presto", + "browser": "Opera 8.0", + "platform": { + "inner": "Win 95+ / OSX.2+", + "details": [ + "-", + "A" + ] + } + }, + { + "engine": "Presto", + "browser": "Opera 8.5", + "platform": { + "inner": "Win 95+ / OSX.2+", + "details": [ + "-", + "A" + ] + } + }, + { + "engine": "Presto", + "browser": "Opera 9.0", + "platform": { + "inner": "Win 95+ / OSX.3+", + "details": [ + "-", + "A" + ] + } + }, + { + "engine": "Presto", + "browser": "Opera 9.2", + "platform": { + "inner": "Win 88+ / OSX.3+", + "details": [ + "-", + "A" + ] + } + }, + { + "engine": "Presto", + "browser": "Opera 9.5", + "platform": { + "inner": "Win 88+ / OSX.3+", + "details": [ + "-", + "A" + ] + } + }, + { + "engine": "Presto", + "browser": "Opera for Wii", + "platform": { + "inner": "Wii", + "details": [ + "-", + "A" + ] + } + }, + { + "engine": "Presto", + "browser": "Nokia N800", + "platform": { + "inner": "N800", + "details": [ + "-", + "A" + ] + } + }, + { + "engine": "Presto", + "browser": "Nintendo DS browser", + "platform": { + "inner": "Nintendo DS", + "details": [ + "8.5", + "C/A<sup>1</sup>" + ] + } + }, + { + "engine": "KHTML", + "browser": "Konqureror 3.1", + "platform": { + "inner": "KDE 3.1", + "details": [ + "3.1", + "C" + ] + } + }, + { + "engine": "KHTML", + "browser": "Konqureror 3.3", + "platform": { + "inner": "KDE 3.3", + "details": [ + "3.3", + "A" + ] + } + }, + { + "engine": "KHTML", + "browser": "Konqureror 3.5", + "platform": { + "inner": "KDE 3.5", + "details": [ + "3.5", + "A" + ] + } + }, + { + "engine": "Tasman", + "browser": "Internet Explorer 4.5", + "platform": { + "inner": "Mac OS 8-9", + "details": [ + "-", + "X" + ] + } + }, + { + "engine": "Tasman", + "browser": "Internet Explorer 5.1", + "platform": { + "inner": "Mac OS 7.6-9", + "details": [ + "1", + "C" + ] + } + }, + { + "engine": "Tasman", + "browser": "Internet Explorer 5.2", + "platform": { + "inner": "Mac OS 8-X", + "details": [ + "1", + "C" + ] + } + }, + { + "engine": "Misc", + "browser": "NetFront 3.1", + "platform": { + "inner": "Embedded devices", + "details": [ + "-", + "C" + ] + } + }, + { + "engine": "Misc", + "browser": "NetFront 3.4", + "platform": { + "inner": "Embedded devices", + "details": [ + "-", + "A" + ] + } + }, + { + "engine": "Misc", + "browser": "Dillo 0.8", + "platform": { + "inner": "Embedded devices", + "details": [ + "-", + "X" + ] + } + }, + { + "engine": "Misc", + "browser": "Links", + "platform": { + "inner": "Text only", + "details": [ + "-", + "X" + ] + } + }, + { + "engine": "Misc", + "browser": "Lynx", + "platform": { + "inner": "Text only", + "details": [ + "-", + "X" + ] + } + }, + { + "engine": "Misc", + "browser": "IE Mobile", + "platform": { + "inner": "Windows Mobile 6", + "details": [ + "-", + "C" + ] + } + }, + { + "engine": "Misc", + "browser": "PSP browser", + "platform": { + "inner": "PSP", + "details": [ + "-", + "C" + ] + } + }, + { + "engine": "Other browsers", + "browser": "All others", + "platform": { + "inner": "-", + "details": [ + "-", + "U" + ] + } + } +] + }; + $('#example').dataTable( oInit ); + + /* Basic checks */ + oTest.fnWaitTest( + "Length changing div exists", + null, + function () { return document.getElementById('example_length') != null; } + ); + + oTest.fnTest( + "Filtering div exists", + null, + function () { return document.getElementById('example_filter') != null; } + ); + + oTest.fnTest( + "Information div exists", + null, + function () { return document.getElementById('example_info') != null; } + ); + + oTest.fnTest( + "Pagination div exists", + null, + function () { return document.getElementById('example_paginate') != null; } + ); + + oTest.fnTest( + "Processing div is off by default", + null, + function () { return document.getElementById('example_processing') == null; } + ); + + oTest.fnWaitTest( + "10 rows shown on the first page", + null, + function () { return $('#example tbody tr').length == 10; } + ); + + oTest.fnTest( + "Initial sort occured", + null, + function () { return $('#example tbody td:eq(0)').html() == "Gecko"; } + ); + + /* Need to use the WaitTest for sorting due to the setTimeout datatables uses */ + oTest.fnTest( + "Sorting (first click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Sorting (second click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnTest( + "Sorting (third click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Sorting (first click) on numeric column", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "-"; } + ); + + oTest.fnTest( + "Sorting (second click) on numeric column", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "522.1"; } + ); + + oTest.fnTest( + "Sorting multi-column (first click)", + function () { + $('#example thead th:eq(0)').click(); + oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); }, + function () { var b = + $('#example tbody td:eq(0)').html() == "Gecko" && + $('#example tbody td:eq(1)').html() == "Camino 1.0"; return b; } + ); + + oTest.fnTest( + "Sorting multi-column - sorting second column only", + function () { + $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + /* Basic paging */ + oTest.fnTest( + "Paging to second page", + function () { $('#example_next').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "IE Mobile"; } + ); + + oTest.fnTest( + "Paging to first page", + function () { $('#example_previous').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Attempting to page back beyond the first page", + function () { $('#example_previous').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + /* Changing length */ + oTest.fnTest( + "Changing table length to 25 records", + function () { $("select[name=example_length]").val('25').change(); }, + function () { return $('#example tbody tr').length == 25; } + ); + + oTest.fnTest( + "Changing table length to 50 records", + function () { $("select[name=example_length]").val('50').change(); }, + function () { return $('#example tbody tr').length == 50; } + ); + + oTest.fnTest( + "Changing table length to 100 records", + function () { $("select[name=example_length]").val('100').change(); }, + function () { return $('#example tbody tr').length == 57; } + ); + + oTest.fnTest( + "Changing table length to 10 records", + function () { $("select[name=example_length]").val('10').change(); }, + function () { return $('#example tbody tr').length == 10; } + ); + + /* + * Information element + */ + oTest.fnTest( + "Information on zero config", + null, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Information on second page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 11 to 20 of 57 entries"; } + ); + + oTest.fnTest( + "Information on third page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 21 to 30 of 57 entries"; } + ); + + oTest.fnTest( + "Information on last page", + function () { + $('#example_next').click(); + $('#example_next').click(); + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 51 to 57 of 57 entries"; } + ); + + oTest.fnTest( + "Information back on first page", + function () { + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Information with 25 records", + function () { $("select[name=example_length]").val('25').change(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 25 of 57 entries"; } + ); + + oTest.fnTest( + "Information with 25 records - second page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 26 to 50 of 57 entries"; } + ); + + oTest.fnTest( + "Information with 100 records - first page", + function () { + $('#example_previous').click(); + $("select[name=example_length]").val('100').change(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 57 of 57 entries"; } + ); + + oTest.fnTest( + "Information back to 10 records", + function () { + $('#example_previous').click(); + $("select[name=example_length]").val('10').change(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Information with filter 'Win'", + function () { $('#example_filter input').val("Win").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' second page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' last page", + function () { + $('#example_next').click(); + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 31 to 31 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' back to first page", + function () { + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' second page - second time", + function () { + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter increased to 'Win 98'", + function () { $('#example_filter input').val("Win 98").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 9 of 9 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter decreased to 'Win'", + function () { $('#example_filter input').val("Win").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' second page - third time", + function () { + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter removed", + function () { $('#example_filter input').val("").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 57 entries"; } + ); + + + /* + * Filtering + */ + oTest.fnWaitTest( + "Filter 'W' - rows", + function () { + /* Reset the table such that the old sorting doesn't mess things up */ + oSession.fnRestore(); + $('#example').dataTable( oInit ); + $('#example_filter input').val("W").keyup(); }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Gecko"; } + ); + + oTest.fnTest( + "Filter 'W' - info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 42 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Wi'", + function () { $('#example_filter input').val("Wi").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 32 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Win'", + function () { $('#example_filter input').val("Win").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting column 1", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "AOL browser (AOL desktop)"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting column 1 info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting column 1 reverse", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnTest( + "Filter 'Win XP' - maintaing reverse sorting col 1", + function () { $('#example_filter input').val("Win XP").keyup(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Internet Explorer 7"; } + ); + + oTest.fnTest( + "Filter 'Win XP' - sorting col 3", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "4"; } + ); + + oTest.fnTest( + "Filter 'Win XP' - sorting col 3 - reversed", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "7"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting col 3 - reversed info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 6 of 6 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'nothinghere'", + function () { $('#example_filter input').val("nothinghere").keyup(); }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == + "No matching records found"; } + ); + + oTest.fnTest( + "Filter 'nothinghere' - info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter back to blank and 1st column sorting", + function () { + $('#example_filter input').val("").keyup(); + $('#example thead th:eq(0)').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Prefixing a filter entry", + function () { + $('#example_filter input').val("Win").keyup(); + $('#example_filter input').val("GeckoWin").keyup(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Prefixing a filter entry with space", + function () { + $('#example_filter input').val("Gecko Win").keyup(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 17 entries (filtered from 57 total entries)"; } + ); + + + + + + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/_zero_config_null_source.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/_zero_config_null_source.js new file mode 100644 index 0000000..586ff10 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/_zero_config_null_source.js @@ -0,0 +1,458 @@ +// DATA_TEMPLATE: js_data +oTest.fnStart( "Sanity checks for DataTables with data from JS - Null data source for last column" ); + +oTest.fnTest( + "jQuery.dataTable function", + null, + function () { return typeof jQuery().dataTable == "function"; } +); + +oTest.fnTest( + "jQuery.dataTableSettings storage array", + null, + function () { return typeof jQuery().dataTableSettings == "object"; } +); + +oTest.fnTest( + "jQuery.dataTableExt plugin object", + null, + function () { return typeof jQuery().dataTableExt == "object"; } +); + +$(document).ready( function () { + var oInit = { + "aoColumns": [ + null, + null, + null, + null, + { "mDataProp": null } + ], + "aaData": gaaData + }; + $('#example').dataTable( oInit ); + + /* Basic checks */ + oTest.fnWaitTest( + "Length changing div exists", + null, + function () { return document.getElementById('example_length') != null; } + ); + + oTest.fnTest( + "Filtering div exists", + null, + function () { return document.getElementById('example_filter') != null; } + ); + + oTest.fnTest( + "Information div exists", + null, + function () { return document.getElementById('example_info') != null; } + ); + + oTest.fnTest( + "Pagination div exists", + null, + function () { return document.getElementById('example_paginate') != null; } + ); + + oTest.fnTest( + "Processing div is off by default", + null, + function () { return document.getElementById('example_processing') == null; } + ); + + oTest.fnWaitTest( + "10 rows shown on the first page", + null, + function () { return $('#example tbody tr').length == 10; } + ); + + oTest.fnTest( + "Initial sort occured", + null, + function () { return $('#example tbody td:eq(0)').html() == "Gecko"; } + ); + + /* Need to use the WaitTest for sorting due to the setTimeout datatables uses */ + oTest.fnTest( + "Data in last column is empty", + null, + function () { return $('#example tbody td:eq(4)').html() == ""; } + ); + + oTest.fnTest( + "Sorting (first click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + oTest.fnTest( + "Data in last column is still empty", + null, + function () { return $('#example tbody td:eq(4)').html() == ""; } + ); + + oTest.fnTest( + "Sorting (second click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnTest( + "Sorting (third click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Sorting (first click) on numeric column", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "-"; } + ); + + oTest.fnTest( + "Sorting (second click) on numeric column", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "522.1"; } + ); + + oTest.fnTest( + "Sorting multi-column (first click)", + function () { + $('#example thead th:eq(0)').click(); + oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); }, + function () { var b = + $('#example tbody td:eq(0)').html() == "Gecko" && + $('#example tbody td:eq(1)').html() == "Camino 1.0"; return b; } + ); + + oTest.fnTest( + "Sorting multi-column - sorting second column only", + function () { + $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + /* Basic paging */ + oTest.fnTest( + "Paging to second page", + function () { $('#example_next').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "IE Mobile"; } + ); + + oTest.fnTest( + "Paging to first page", + function () { $('#example_previous').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Attempting to page back beyond the first page", + function () { $('#example_previous').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + /* Changing length */ + oTest.fnTest( + "Changing table length to 25 records", + function () { $("select[name=example_length]").val('25').change(); }, + function () { return $('#example tbody tr').length == 25; } + ); + + oTest.fnTest( + "Changing table length to 50 records", + function () { $("select[name=example_length]").val('50').change(); }, + function () { return $('#example tbody tr').length == 50; } + ); + + oTest.fnTest( + "Changing table length to 100 records", + function () { $("select[name=example_length]").val('100').change(); }, + function () { return $('#example tbody tr').length == 57; } + ); + + oTest.fnTest( + "Changing table length to 10 records", + function () { $("select[name=example_length]").val('10').change(); }, + function () { return $('#example tbody tr').length == 10; } + ); + + /* + * Information element + */ + oTest.fnTest( + "Information on zero config", + null, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Information on second page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 11 to 20 of 57 entries"; } + ); + + oTest.fnTest( + "Information on third page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 21 to 30 of 57 entries"; } + ); + + oTest.fnTest( + "Information on last page", + function () { + $('#example_next').click(); + $('#example_next').click(); + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 51 to 57 of 57 entries"; } + ); + + oTest.fnTest( + "Information back on first page", + function () { + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Information with 25 records", + function () { $("select[name=example_length]").val('25').change(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 25 of 57 entries"; } + ); + + oTest.fnTest( + "Information with 25 records - second page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 26 to 50 of 57 entries"; } + ); + + oTest.fnTest( + "Information with 100 records - first page", + function () { + $('#example_previous').click(); + $("select[name=example_length]").val('100').change(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 57 of 57 entries"; } + ); + + oTest.fnTest( + "Information back to 10 records", + function () { + $('#example_previous').click(); + $("select[name=example_length]").val('10').change(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Information with filter 'Win'", + function () { $('#example_filter input').val("Win").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' second page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' last page", + function () { + $('#example_next').click(); + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 31 to 31 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' back to first page", + function () { + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' second page - second time", + function () { + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter increased to 'Win 98'", + function () { $('#example_filter input').val("Win 98").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 9 of 9 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter decreased to 'Win'", + function () { $('#example_filter input').val("Win").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' second page - third time", + function () { + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter removed", + function () { $('#example_filter input').val("").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 57 entries"; } + ); + + + /* + * Filtering + */ + oTest.fnWaitTest( + "Filter 'W' - rows", + function () { + /* Reset the table such that the old sorting doesn't mess things up */ + oSession.fnRestore(); + $('#example').dataTable( oInit ); + $('#example_filter input').val("W").keyup(); }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Gecko"; } + ); + + oTest.fnTest( + "Filter 'W' - info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 42 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Wi'", + function () { $('#example_filter input').val("Wi").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 32 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Win'", + function () { $('#example_filter input').val("Win").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting column 1", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "AOL browser (AOL desktop)"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting column 1 info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting column 1 reverse", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnTest( + "Filter 'Win XP' - maintaing reverse sorting col 1", + function () { $('#example_filter input').val("Win XP").keyup(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Internet Explorer 7"; } + ); + + oTest.fnTest( + "Filter 'Win XP' - sorting col 3", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "4"; } + ); + + oTest.fnTest( + "Filter 'Win XP' - sorting col 3 - reversed", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "7"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting col 3 - reversed info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 6 of 6 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'nothinghere'", + function () { $('#example_filter input').val("nothinghere").keyup(); }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == + "No matching records found"; } + ); + + oTest.fnTest( + "Filter 'nothinghere' - info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter back to blank and 1st column sorting", + function () { + $('#example_filter input').val("").keyup(); + $('#example thead th:eq(0)').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Prefixing a filter entry", + function () { + $('#example_filter input').val("Win").keyup(); + $('#example_filter input').val("GeckoWin").keyup(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Prefixing a filter entry with space", + function () { + $('#example_filter input').val("Gecko Win").keyup(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 17 entries (filtered from 57 total entries)"; } + ); + + + + + + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/_zero_config_objects.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/_zero_config_objects.js new file mode 100644 index 0000000..af7fcae --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/_zero_config_objects.js @@ -0,0 +1,847 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "Sanity checks for DataTables with data from JS - Object data source" ); + +oTest.fnTest( + "jQuery.dataTable function", + null, + function () { return typeof jQuery().dataTable == "function"; } +); + +oTest.fnTest( + "jQuery.dataTableSettings storage array", + null, + function () { return typeof jQuery().dataTableSettings == "object"; } +); + +oTest.fnTest( + "jQuery.dataTableExt plugin object", + null, + function () { return typeof jQuery().dataTableExt == "object"; } +); + +$(document).ready( function () { + var oInit = { + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ], + "aaData": [ + { + "engine": "Trident", + "browser": "Internet Explorer 4.0", + "platform": "Win 95+", + "version": "4", + "grade": "X" + }, + { + "engine": "Trident", + "browser": "Internet Explorer 5.0", + "platform": "Win 95+", + "version": "5", + "grade": "C" + }, + { + "engine": "Trident", + "browser": "Internet Explorer 5.5", + "platform": "Win 95+", + "version": "5.5", + "grade": "A" + }, + { + "engine": "Trident", + "browser": "Internet Explorer 6", + "platform": "Win 98+", + "version": "6", + "grade": "A" + }, + { + "engine": "Trident", + "browser": "Internet Explorer 7", + "platform": "Win XP SP2+", + "version": "7", + "grade": "A" + }, + { + "engine": "Trident", + "browser": "AOL browser (AOL desktop)", + "platform": "Win XP", + "version": "6", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Firefox 1.0", + "platform": "Win 98+ / OSX.2+", + "version": "1.7", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Firefox 1.5", + "platform": "Win 98+ / OSX.2+", + "version": "1.8", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Firefox 2.0", + "platform": "Win 98+ / OSX.2+", + "version": "1.8", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Firefox 3.0", + "platform": "Win 2k+ / OSX.3+", + "version": "1.9", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Camino 1.0", + "platform": "OSX.2+", + "version": "1.8", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Camino 1.5", + "platform": "OSX.3+", + "version": "1.8", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Netscape 7.2", + "platform": "Win 95+ / Mac OS 8.6-9.2", + "version": "1.7", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Netscape Browser 8", + "platform": "Win 98SE+", + "version": "1.7", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Netscape Navigator 9", + "platform": "Win 98+ / OSX.2+", + "version": "1.8", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.0", + "platform": "Win 95+ / OSX.1+", + "version": "1", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.1", + "platform": "Win 95+ / OSX.1+", + "version": "1.1", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.2", + "platform": "Win 95+ / OSX.1+", + "version": "1.2", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.3", + "platform": "Win 95+ / OSX.1+", + "version": "1.3", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.4", + "platform": "Win 95+ / OSX.1+", + "version": "1.4", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.5", + "platform": "Win 95+ / OSX.1+", + "version": "1.5", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.6", + "platform": "Win 95+ / OSX.1+", + "version": "1.6", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.7", + "platform": "Win 98+ / OSX.1+", + "version": "1.7", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.8", + "platform": "Win 98+ / OSX.1+", + "version": "1.8", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Seamonkey 1.1", + "platform": "Win 98+ / OSX.2+", + "version": "1.8", + "grade": "A" + }, + { + "engine": "Gecko", + "browser": "Epiphany 2.20", + "platform": "Gnome", + "version": "1.8", + "grade": "A" + }, + { + "engine": "Webkit", + "browser": "Safari 1.2", + "platform": "OSX.3", + "version": "125.5", + "grade": "A" + }, + { + "engine": "Webkit", + "browser": "Safari 1.3", + "platform": "OSX.3", + "version": "312.8", + "grade": "A" + }, + { + "engine": "Webkit", + "browser": "Safari 2.0", + "platform": "OSX.4+", + "version": "419.3", + "grade": "A" + }, + { + "engine": "Webkit", + "browser": "Safari 3.0", + "platform": "OSX.4+", + "version": "522.1", + "grade": "A" + }, + { + "engine": "Webkit", + "browser": "OmniWeb 5.5", + "platform": "OSX.4+", + "version": "420", + "grade": "A" + }, + { + "engine": "Webkit", + "browser": "iPod Touch / iPhone", + "platform": "iPod", + "version": "420.1", + "grade": "A" + }, + { + "engine": "Webkit", + "browser": "S60", + "platform": "S60", + "version": "413", + "grade": "A" + }, + { + "engine": "Presto", + "browser": "Opera 7.0", + "platform": "Win 95+ / OSX.1+", + "version": "-", + "grade": "A" + }, + { + "engine": "Presto", + "browser": "Opera 7.5", + "platform": "Win 95+ / OSX.2+", + "version": "-", + "grade": "A" + }, + { + "engine": "Presto", + "browser": "Opera 8.0", + "platform": "Win 95+ / OSX.2+", + "version": "-", + "grade": "A" + }, + { + "engine": "Presto", + "browser": "Opera 8.5", + "platform": "Win 95+ / OSX.2+", + "version": "-", + "grade": "A" + }, + { + "engine": "Presto", + "browser": "Opera 9.0", + "platform": "Win 95+ / OSX.3+", + "version": "-", + "grade": "A" + }, + { + "engine": "Presto", + "browser": "Opera 9.2", + "platform": "Win 88+ / OSX.3+", + "version": "-", + "grade": "A" + }, + { + "engine": "Presto", + "browser": "Opera 9.5", + "platform": "Win 88+ / OSX.3+", + "version": "-", + "grade": "A" + }, + { + "engine": "Presto", + "browser": "Opera for Wii", + "platform": "Wii", + "version": "-", + "grade": "A" + }, + { + "engine": "Presto", + "browser": "Nokia N800", + "platform": "N800", + "version": "-", + "grade": "A" + }, + { + "engine": "Presto", + "browser": "Nintendo DS browser", + "platform": "Nintendo DS", + "version": "8.5", + "grade": "C/A<sup>1</sup>" + }, + { + "engine": "KHTML", + "browser": "Konqureror 3.1", + "platform": "KDE 3.1", + "version": "3.1", + "grade": "C" + }, + { + "engine": "KHTML", + "browser": "Konqureror 3.3", + "platform": "KDE 3.3", + "version": "3.3", + "grade": "A" + }, + { + "engine": "KHTML", + "browser": "Konqureror 3.5", + "platform": "KDE 3.5", + "version": "3.5", + "grade": "A" + }, + { + "engine": "Tasman", + "browser": "Internet Explorer 4.5", + "platform": "Mac OS 8-9", + "version": "-", + "grade": "X" + }, + { + "engine": "Tasman", + "browser": "Internet Explorer 5.1", + "platform": "Mac OS 7.6-9", + "version": "1", + "grade": "C" + }, + { + "engine": "Tasman", + "browser": "Internet Explorer 5.2", + "platform": "Mac OS 8-X", + "version": "1", + "grade": "C" + }, + { + "engine": "Misc", + "browser": "NetFront 3.1", + "platform": "Embedded devices", + "version": "-", + "grade": "C" + }, + { + "engine": "Misc", + "browser": "NetFront 3.4", + "platform": "Embedded devices", + "version": "-", + "grade": "A" + }, + { + "engine": "Misc", + "browser": "Dillo 0.8", + "platform": "Embedded devices", + "version": "-", + "grade": "X" + }, + { + "engine": "Misc", + "browser": "Links", + "platform": "Text only", + "version": "-", + "grade": "X" + }, + { + "engine": "Misc", + "browser": "Lynx", + "platform": "Text only", + "version": "-", + "grade": "X" + }, + { + "engine": "Misc", + "browser": "IE Mobile", + "platform": "Windows Mobile 6", + "version": "-", + "grade": "C" + }, + { + "engine": "Misc", + "browser": "PSP browser", + "platform": "PSP", + "version": "-", + "grade": "C" + }, + { + "engine": "Other browsers", + "browser": "All others", + "platform": "-", + "version": "-", + "grade": "U" + } +] + }; + $('#example').dataTable( oInit ); + + /* Basic checks */ + oTest.fnWaitTest( + "Length changing div exists", + null, + function () { return document.getElementById('example_length') != null; } + ); + + oTest.fnTest( + "Filtering div exists", + null, + function () { return document.getElementById('example_filter') != null; } + ); + + oTest.fnTest( + "Information div exists", + null, + function () { return document.getElementById('example_info') != null; } + ); + + oTest.fnTest( + "Pagination div exists", + null, + function () { return document.getElementById('example_paginate') != null; } + ); + + oTest.fnTest( + "Processing div is off by default", + null, + function () { return document.getElementById('example_processing') == null; } + ); + + oTest.fnWaitTest( + "10 rows shown on the first page", + null, + function () { return $('#example tbody tr').length == 10; } + ); + + oTest.fnTest( + "Initial sort occured", + null, + function () { return $('#example tbody td:eq(0)').html() == "Gecko"; } + ); + + /* Need to use the WaitTest for sorting due to the setTimeout datatables uses */ + oTest.fnTest( + "Sorting (first click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Sorting (second click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnTest( + "Sorting (third click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Sorting (first click) on numeric column", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "-"; } + ); + + oTest.fnTest( + "Sorting (second click) on numeric column", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "522.1"; } + ); + + oTest.fnTest( + "Sorting multi-column (first click)", + function () { + $('#example thead th:eq(0)').click(); + oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); }, + function () { var b = + $('#example tbody td:eq(0)').html() == "Gecko" && + $('#example tbody td:eq(1)').html() == "Camino 1.0"; return b; } + ); + + oTest.fnTest( + "Sorting multi-column - sorting second column only", + function () { + $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + /* Basic paging */ + oTest.fnTest( + "Paging to second page", + function () { $('#example_next').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "IE Mobile"; } + ); + + oTest.fnTest( + "Paging to first page", + function () { $('#example_previous').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Attempting to page back beyond the first page", + function () { $('#example_previous').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + /* Changing length */ + oTest.fnTest( + "Changing table length to 25 records", + function () { $("select[name=example_length]").val('25').change(); }, + function () { return $('#example tbody tr').length == 25; } + ); + + oTest.fnTest( + "Changing table length to 50 records", + function () { $("select[name=example_length]").val('50').change(); }, + function () { return $('#example tbody tr').length == 50; } + ); + + oTest.fnTest( + "Changing table length to 100 records", + function () { $("select[name=example_length]").val('100').change(); }, + function () { return $('#example tbody tr').length == 57; } + ); + + oTest.fnTest( + "Changing table length to 10 records", + function () { $("select[name=example_length]").val('10').change(); }, + function () { return $('#example tbody tr').length == 10; } + ); + + /* + * Information element + */ + oTest.fnTest( + "Information on zero config", + null, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Information on second page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 11 to 20 of 57 entries"; } + ); + + oTest.fnTest( + "Information on third page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 21 to 30 of 57 entries"; } + ); + + oTest.fnTest( + "Information on last page", + function () { + $('#example_next').click(); + $('#example_next').click(); + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 51 to 57 of 57 entries"; } + ); + + oTest.fnTest( + "Information back on first page", + function () { + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Information with 25 records", + function () { $("select[name=example_length]").val('25').change(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 25 of 57 entries"; } + ); + + oTest.fnTest( + "Information with 25 records - second page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 26 to 50 of 57 entries"; } + ); + + oTest.fnTest( + "Information with 100 records - first page", + function () { + $('#example_previous').click(); + $("select[name=example_length]").val('100').change(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 57 of 57 entries"; } + ); + + oTest.fnTest( + "Information back to 10 records", + function () { + $('#example_previous').click(); + $("select[name=example_length]").val('10').change(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Information with filter 'Win'", + function () { $('#example_filter input').val("Win").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' second page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' last page", + function () { + $('#example_next').click(); + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 31 to 31 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' back to first page", + function () { + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' second page - second time", + function () { + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter increased to 'Win 98'", + function () { $('#example_filter input').val("Win 98").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 9 of 9 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter decreased to 'Win'", + function () { $('#example_filter input').val("Win").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' second page - third time", + function () { + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter removed", + function () { $('#example_filter input').val("").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 57 entries"; } + ); + + + /* + * Filtering + */ + oTest.fnWaitTest( + "Filter 'W' - rows", + function () { + /* Reset the table such that the old sorting doesn't mess things up */ + oSession.fnRestore(); + $('#example').dataTable( oInit ); + $('#example_filter input').val("W").keyup(); }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Gecko"; } + ); + + oTest.fnTest( + "Filter 'W' - info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 42 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Wi'", + function () { $('#example_filter input').val("Wi").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 32 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Win'", + function () { $('#example_filter input').val("Win").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting column 1", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "AOL browser (AOL desktop)"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting column 1 info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting column 1 reverse", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnTest( + "Filter 'Win XP' - maintaing reverse sorting col 1", + function () { $('#example_filter input').val("Win XP").keyup(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Internet Explorer 7"; } + ); + + oTest.fnTest( + "Filter 'Win XP' - sorting col 3", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "4"; } + ); + + oTest.fnTest( + "Filter 'Win XP' - sorting col 3 - reversed", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "7"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting col 3 - reversed info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 6 of 6 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'nothinghere'", + function () { $('#example_filter input').val("nothinghere").keyup(); }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == + "No matching records found"; } + ); + + oTest.fnTest( + "Filter 'nothinghere' - info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter back to blank and 1st column sorting", + function () { + $('#example_filter input').val("").keyup(); + $('#example thead th:eq(0)').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Prefixing a filter entry", + function () { + $('#example_filter input').val("Win").keyup(); + $('#example_filter input').val("GeckoWin").keyup(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Prefixing a filter entry with space", + function () { + $('#example_filter input').val("Gecko Win").keyup(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 17 entries (filtered from 57 total entries)"; } + ); + + + + + + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/_zero_config_objects_subarrays.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/_zero_config_objects_subarrays.js new file mode 100644 index 0000000..06c40bc --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/_zero_config_objects_subarrays.js @@ -0,0 +1,961 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "Sanity checks for DataTables with data from JS - Object / sub-array data source" ); + +oTest.fnTest( + "jQuery.dataTable function", + null, + function () { return typeof jQuery().dataTable == "function"; } +); + +oTest.fnTest( + "jQuery.dataTableSettings storage array", + null, + function () { return typeof jQuery().dataTableSettings == "object"; } +); + +oTest.fnTest( + "jQuery.dataTableExt plugin object", + null, + function () { return typeof jQuery().dataTableExt == "object"; } +); + +$(document).ready( function () { + var oInit = { + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "details.0" }, + { "mDataProp": "details.1" } + ], + "aaData": [ + { + "engine": "Trident", + "browser": "Internet Explorer 4.0", + "platform": "Win 95+", + "details": [ + "4", + "X" + ] + }, + { + "engine": "Trident", + "browser": "Internet Explorer 5.0", + "platform": "Win 95+", + "details": [ + "5", + "C" + ] + }, + { + "engine": "Trident", + "browser": "Internet Explorer 5.5", + "platform": "Win 95+", + "details": [ + "5.5", + "A" + ] + }, + { + "engine": "Trident", + "browser": "Internet Explorer 6", + "platform": "Win 98+", + "details": [ + "6", + "A" + ] + }, + { + "engine": "Trident", + "browser": "Internet Explorer 7", + "platform": "Win XP SP2+", + "details": [ + "7", + "A" + ] + }, + { + "engine": "Trident", + "browser": "AOL browser (AOL desktop)", + "platform": "Win XP", + "details": [ + "6", + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Firefox 1.0", + "platform": "Win 98+ / OSX.2+", + "details": [ + "1.7", + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Firefox 1.5", + "platform": "Win 98+ / OSX.2+", + "details": [ + "1.8", + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Firefox 2.0", + "platform": "Win 98+ / OSX.2+", + "details": [ + "1.8", + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Firefox 3.0", + "platform": "Win 2k+ / OSX.3+", + "details": [ + "1.9", + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Camino 1.0", + "platform": "OSX.2+", + "details": [ + "1.8", + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Camino 1.5", + "platform": "OSX.3+", + "details": [ + "1.8", + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Netscape 7.2", + "platform": "Win 95+ / Mac OS 8.6-9.2", + "details": [ + "1.7", + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Netscape Browser 8", + "platform": "Win 98SE+", + "details": [ + "1.7", + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Netscape Navigator 9", + "platform": "Win 98+ / OSX.2+", + "details": [ + "1.8", + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.0", + "platform": "Win 95+ / OSX.1+", + "details": [ + 1, + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.1", + "platform": "Win 95+ / OSX.1+", + "details": [ + 1.1, + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.2", + "platform": "Win 95+ / OSX.1+", + "details": [ + 1.2, + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.3", + "platform": "Win 95+ / OSX.1+", + "details": [ + 1.3, + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.4", + "platform": "Win 95+ / OSX.1+", + "details": [ + 1.4, + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.5", + "platform": "Win 95+ / OSX.1+", + "details": [ + 1.5, + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.6", + "platform": "Win 95+ / OSX.1+", + "details": [ + 1.6, + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.7", + "platform": "Win 98+ / OSX.1+", + "details": [ + 1.7, + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Mozilla 1.8", + "platform": "Win 98+ / OSX.1+", + "details": [ + 1.8, + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Seamonkey 1.1", + "platform": "Win 98+ / OSX.2+", + "details": [ + "1.8", + "A" + ] + }, + { + "engine": "Gecko", + "browser": "Epiphany 2.20", + "platform": "Gnome", + "details": [ + "1.8", + "A" + ] + }, + { + "engine": "Webkit", + "browser": "Safari 1.2", + "platform": "OSX.3", + "details": [ + "125.5", + "A" + ] + }, + { + "engine": "Webkit", + "browser": "Safari 1.3", + "platform": "OSX.3", + "details": [ + "312.8", + "A" + ] + }, + { + "engine": "Webkit", + "browser": "Safari 2.0", + "platform": "OSX.4+", + "details": [ + "419.3", + "A" + ] + }, + { + "engine": "Webkit", + "browser": "Safari 3.0", + "platform": "OSX.4+", + "details": [ + "522.1", + "A" + ] + }, + { + "engine": "Webkit", + "browser": "OmniWeb 5.5", + "platform": "OSX.4+", + "details": [ + "420", + "A" + ] + }, + { + "engine": "Webkit", + "browser": "iPod Touch / iPhone", + "platform": "iPod", + "details": [ + "420.1", + "A" + ] + }, + { + "engine": "Webkit", + "browser": "S60", + "platform": "S60", + "details": [ + "413", + "A" + ] + }, + { + "engine": "Presto", + "browser": "Opera 7.0", + "platform": "Win 95+ / OSX.1+", + "details": [ + "-", + "A" + ] + }, + { + "engine": "Presto", + "browser": "Opera 7.5", + "platform": "Win 95+ / OSX.2+", + "details": [ + "-", + "A" + ] + }, + { + "engine": "Presto", + "browser": "Opera 8.0", + "platform": "Win 95+ / OSX.2+", + "details": [ + "-", + "A" + ] + }, + { + "engine": "Presto", + "browser": "Opera 8.5", + "platform": "Win 95+ / OSX.2+", + "details": [ + "-", + "A" + ] + }, + { + "engine": "Presto", + "browser": "Opera 9.0", + "platform": "Win 95+ / OSX.3+", + "details": [ + "-", + "A" + ] + }, + { + "engine": "Presto", + "browser": "Opera 9.2", + "platform": "Win 88+ / OSX.3+", + "details": [ + "-", + "A" + ] + }, + { + "engine": "Presto", + "browser": "Opera 9.5", + "platform": "Win 88+ / OSX.3+", + "details": [ + "-", + "A" + ] + }, + { + "engine": "Presto", + "browser": "Opera for Wii", + "platform": "Wii", + "details": [ + "-", + "A" + ] + }, + { + "engine": "Presto", + "browser": "Nokia N800", + "platform": "N800", + "details": [ + "-", + "A" + ] + }, + { + "engine": "Presto", + "browser": "Nintendo DS browser", + "platform": "Nintendo DS", + "details": [ + "8.5", + "C/A<sup>1</sup>" + ] + }, + { + "engine": "KHTML", + "browser": "Konqureror 3.1", + "platform": "KDE 3.1", + "details": [ + "3.1", + "C" + ] + }, + { + "engine": "KHTML", + "browser": "Konqureror 3.3", + "platform": "KDE 3.3", + "details": [ + "3.3", + "A" + ] + }, + { + "engine": "KHTML", + "browser": "Konqureror 3.5", + "platform": "KDE 3.5", + "details": [ + "3.5", + "A" + ] + }, + { + "engine": "Tasman", + "browser": "Internet Explorer 4.5", + "platform": "Mac OS 8-9", + "details": [ + "-", + "X" + ] + }, + { + "engine": "Tasman", + "browser": "Internet Explorer 5.1", + "platform": "Mac OS 7.6-9", + "details": [ + "1", + "C" + ] + }, + { + "engine": "Tasman", + "browser": "Internet Explorer 5.2", + "platform": "Mac OS 8-X", + "details": [ + "1", + "C" + ] + }, + { + "engine": "Misc", + "browser": "NetFront 3.1", + "platform": "Embedded devices", + "details": [ + "-", + "C" + ] + }, + { + "engine": "Misc", + "browser": "NetFront 3.4", + "platform": "Embedded devices", + "details": [ + "-", + "A" + ] + }, + { + "engine": "Misc", + "browser": "Dillo 0.8", + "platform": "Embedded devices", + "details": [ + "-", + "X" + ] + }, + { + "engine": "Misc", + "browser": "Links", + "platform": "Text only", + "details": [ + "-", + "X" + ] + }, + { + "engine": "Misc", + "browser": "Lynx", + "platform": "Text only", + "details": [ + "-", + "X" + ] + }, + { + "engine": "Misc", + "browser": "IE Mobile", + "platform": "Windows Mobile 6", + "details": [ + "-", + "C" + ] + }, + { + "engine": "Misc", + "browser": "PSP browser", + "platform": "PSP", + "details": [ + "-", + "C" + ] + }, + { + "engine": "Other browsers", + "browser": "All others", + "platform": "-", + "details": [ + "-", + "U" + ] + } +] + }; + $('#example').dataTable( oInit ); + + /* Basic checks */ + oTest.fnWaitTest( + "Length changing div exists", + null, + function () { return document.getElementById('example_length') != null; } + ); + + oTest.fnTest( + "Filtering div exists", + null, + function () { return document.getElementById('example_filter') != null; } + ); + + oTest.fnTest( + "Information div exists", + null, + function () { return document.getElementById('example_info') != null; } + ); + + oTest.fnTest( + "Pagination div exists", + null, + function () { return document.getElementById('example_paginate') != null; } + ); + + oTest.fnTest( + "Processing div is off by default", + null, + function () { return document.getElementById('example_processing') == null; } + ); + + oTest.fnWaitTest( + "10 rows shown on the first page", + null, + function () { return $('#example tbody tr').length == 10; } + ); + + oTest.fnTest( + "Initial sort occured", + null, + function () { return $('#example tbody td:eq(0)').html() == "Gecko"; } + ); + + /* Need to use the WaitTest for sorting due to the setTimeout datatables uses */ + oTest.fnTest( + "Sorting (first click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Sorting (second click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnTest( + "Sorting (third click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Sorting (first click) on numeric column", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "-"; } + ); + + oTest.fnTest( + "Sorting (second click) on numeric column", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "522.1"; } + ); + + oTest.fnTest( + "Sorting multi-column (first click)", + function () { + $('#example thead th:eq(0)').click(); + oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); }, + function () { var b = + $('#example tbody td:eq(0)').html() == "Gecko" && + $('#example tbody td:eq(1)').html() == "Camino 1.0"; return b; } + ); + + oTest.fnTest( + "Sorting multi-column - sorting second column only", + function () { + $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + /* Basic paging */ + oTest.fnTest( + "Paging to second page", + function () { $('#example_next').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "IE Mobile"; } + ); + + oTest.fnTest( + "Paging to first page", + function () { $('#example_previous').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Attempting to page back beyond the first page", + function () { $('#example_previous').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + /* Changing length */ + oTest.fnTest( + "Changing table length to 25 records", + function () { $("select[name=example_length]").val('25').change(); }, + function () { return $('#example tbody tr').length == 25; } + ); + + oTest.fnTest( + "Changing table length to 50 records", + function () { $("select[name=example_length]").val('50').change(); }, + function () { return $('#example tbody tr').length == 50; } + ); + + oTest.fnTest( + "Changing table length to 100 records", + function () { $("select[name=example_length]").val('100').change(); }, + function () { return $('#example tbody tr').length == 57; } + ); + + oTest.fnTest( + "Changing table length to 10 records", + function () { $("select[name=example_length]").val('10').change(); }, + function () { return $('#example tbody tr').length == 10; } + ); + + /* + * Information element + */ + oTest.fnTest( + "Information on zero config", + null, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Information on second page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 11 to 20 of 57 entries"; } + ); + + oTest.fnTest( + "Information on third page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 21 to 30 of 57 entries"; } + ); + + oTest.fnTest( + "Information on last page", + function () { + $('#example_next').click(); + $('#example_next').click(); + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 51 to 57 of 57 entries"; } + ); + + oTest.fnTest( + "Information back on first page", + function () { + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Information with 25 records", + function () { $("select[name=example_length]").val('25').change(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 25 of 57 entries"; } + ); + + oTest.fnTest( + "Information with 25 records - second page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 26 to 50 of 57 entries"; } + ); + + oTest.fnTest( + "Information with 100 records - first page", + function () { + $('#example_previous').click(); + $("select[name=example_length]").val('100').change(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 57 of 57 entries"; } + ); + + oTest.fnTest( + "Information back to 10 records", + function () { + $('#example_previous').click(); + $("select[name=example_length]").val('10').change(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Information with filter 'Win'", + function () { $('#example_filter input').val("Win").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' second page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' last page", + function () { + $('#example_next').click(); + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 31 to 31 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' back to first page", + function () { + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' second page - second time", + function () { + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter increased to 'Win 98'", + function () { $('#example_filter input').val("Win 98").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 9 of 9 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter decreased to 'Win'", + function () { $('#example_filter input').val("Win").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' second page - third time", + function () { + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter removed", + function () { $('#example_filter input').val("").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 57 entries"; } + ); + + + /* + * Filtering + */ + oTest.fnWaitTest( + "Filter 'W' - rows", + function () { + /* Reset the table such that the old sorting doesn't mess things up */ + oSession.fnRestore(); + $('#example').dataTable( oInit ); + $('#example_filter input').val("W").keyup(); }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Gecko"; } + ); + + oTest.fnTest( + "Filter 'W' - info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 42 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Wi'", + function () { $('#example_filter input').val("Wi").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 32 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Win'", + function () { $('#example_filter input').val("Win").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting column 1", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "AOL browser (AOL desktop)"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting column 1 info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting column 1 reverse", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnTest( + "Filter 'Win XP' - maintaing reverse sorting col 1", + function () { $('#example_filter input').val("Win XP").keyup(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Internet Explorer 7"; } + ); + + oTest.fnTest( + "Filter 'Win XP' - sorting col 3", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "4"; } + ); + + oTest.fnTest( + "Filter 'Win XP' - sorting col 3 - reversed", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "7"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting col 3 - reversed info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 6 of 6 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'nothinghere'", + function () { $('#example_filter input').val("nothinghere").keyup(); }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == + "No matching records found"; } + ); + + oTest.fnTest( + "Filter 'nothinghere' - info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter back to blank and 1st column sorting", + function () { + $('#example_filter input').val("").keyup(); + $('#example thead th:eq(0)').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Prefixing a filter entry", + function () { + $('#example_filter input').val("Win").keyup(); + $('#example_filter input').val("GeckoWin").keyup(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Prefixing a filter entry with space", + function () { + $('#example_filter input').val("Gecko Win").keyup(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 17 entries (filtered from 57 total entries)"; } + ); + + + + + + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aaSorting.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aaSorting.js new file mode 100644 index 0000000..e4600f9 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aaSorting.js @@ -0,0 +1,296 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aaSorting" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Default sorting is single column", + null, + function () { + return oSettings.aaSorting.length == 1 && typeof oSettings.aaSorting[0] == 'object'; + } + ); + + oTest.fnWaitTest( + "Default sorting is first column asc", + null, + function () { + return oSettings.aaSorting[0].length == 3 && oSettings.aaSorting[0][0] == 0 && + oSettings.aaSorting[0][1] == 'asc'; + } + ); + + oTest.fnWaitTest( + "Sorting is applied", + null, + function () { return $('#example tbody td:eq(0)').html() == "Gecko"; } + ); + + + oTest.fnWaitTest( + "Custom sorting on single string column asc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ], + "aaSorting": [['1','asc']] + } ); + }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + + oTest.fnWaitTest( + "Custom sorting on single string column desc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ], + "aaSorting": [['1','desc']] + } ); + }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + + oTest.fnWaitTest( + "Custom sorting on single int column asc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ], + "aaSorting": [['1','asc']] + } ); + }, + function () { return $('#example tbody td:eq(3)').html() == "-"; } + ); + + + oTest.fnWaitTest( + "Custom sorting on single int column desc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ], + "aaSorting": [['1','desc']] + } ); + }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + + oTest.fnWaitTest( + "Multi-column sorting (2 column) - string asc / string asc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ], + "aaSorting": [['0','asc'], ['1','asc']] + } ); + }, + function () { return $('#example tbody td:eq(1)').html() == "Camino 1.0"; } + ); + + oTest.fnWaitTest( + "Multi-column sorting (2 column) - string asc / string desc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ], + "aaSorting": [['0','asc'], ['1','desc']] + } ); + }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnWaitTest( + "Multi-column sorting (2 column) - string desc / string asc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ], + "aaSorting": [['0','desc'], ['1','asc']] + } ); + }, + function () { return $('#example tbody td:eq(1)').html() == "iPod Touch / iPhone"; } + ); + + oTest.fnWaitTest( + "Multi-column sorting (2 column) - string desc / string desc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ], + "aaSorting": [['0','desc'], ['1','desc']] + } ); + }, + function () { return $('#example tbody td:eq(1)').html() == "Safari 3.0"; } + ); + + + oTest.fnWaitTest( + "Multi-column sorting (2 column) - string asc / int asc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ], + "aaSorting": [['0','asc'], ['3','asc']] + } ); + }, + function () { return $('#example tbody td:eq(3)').html() == "1"; } + ); + + oTest.fnWaitTest( + "Multi-column sorting (2 column) - string asc / int desc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ], + "aaSorting": [['0','asc'], ['3','desc']] + } ); + }, + function () { return $('#example tbody td:eq(3)').html() == "1.9"; } + ); + + oTest.fnWaitTest( + "Multi-column sorting (2 column) - string desc / int asc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ], + "aaSorting": [['0','desc'], ['3','asc']] + } ); + }, + function () { return $('#example tbody td:eq(3)').html() == "125.5"; } + ); + + oTest.fnWaitTest( + "Multi-column sorting (2 column) - string desc / int desc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ], + "aaSorting": [['0','desc'], ['3','desc']] + } ); + }, + function () { return $('#example tbody td:eq(3)').html() == "522.1"; } + ); + + oTest.fnWaitTest( + "Multi-column sorting (3 column) - string asc / int asc / string asc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ], + "aaSorting": [['0','asc'], ['3','asc'], ['1','asc']] + } ); + }, + function () { return $('#example tbody tr:eq(7) td:eq(1)').html() == "Firefox 1.0"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aaSortingFixed.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aaSortingFixed.js new file mode 100644 index 0000000..a020d73 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aaSortingFixed.js @@ -0,0 +1,88 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aaSortingFixed" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "No fixed sorting by default", + null, + function () { + return oSettings.aaSortingFixed == null; + } + ); + + + oTest.fnWaitTest( + "Fixed sorting on first column (string/asc) with user sorting on second column (string/asc)", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ], + "aaSortingFixed": [['0','asc']], + "fnInitComplete": function () { + $('#example thead th:eq(1)').click(); + } + } ); + // + }, + function () { return $('#example tbody td:eq(1)').html() == "Camino 1.0"; } + ); + + oTest.fnWaitTest( + "Fixed sorting on first column (string/asc) with user sorting on second column (string/desc)", + function () { + $('#example thead th:eq(1)').click(); + }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnWaitTest( + "Fixed sorting on fourth column (int/asc) with user sorting on second column (string/asc)", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ], + "aaSortingFixed": [['3','asc']] + } ); + $('#example thead th:eq(1)').click(); + }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnWaitTest( + "Fixed sorting on fourth column (int/asc) with user sorting on second column (string/desc)", + function () { + $('#example thead th:eq(1)').click(); + }, + function () { return $('#example tbody td:eq(1)').html() == "PSP browser"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aoColumns.bSearchable.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aoColumns.bSearchable.js new file mode 100755 index 0000000..6979926 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aoColumns.bSearchable.js @@ -0,0 +1,83 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aoColumns.bSeachable" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Columns are searchable by default", + function () { oTable.fnFilter("Camino"); }, + function () { + if ( $('#example tbody tr:eq(0) td:eq(1)')[0] ) + return $('#example tbody tr:eq(0) td:eq(1)').html().match(/Camino/); + else + return null; + } + ); + + oTest.fnWaitTest( + "Disabling sorting on a column removes it from the global filter", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser", "bSearchable": false }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + oSettings = oTable.fnSettings(); + oTable.fnFilter("Camino"); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; } + ); + + oTest.fnWaitTest( + "Disabled on one column has no effect on other columns", + function () { oTable.fnFilter("Webkit"); }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Webkit"; } + ); + + oTest.fnWaitTest( + "Disable filtering on multiple columns", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine", "bSearchable": false }, + { "mDataProp": "browser", "bSearchable": false }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + oSettings = oTable.fnSettings(); + oTable.fnFilter("Webkit"); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; } + ); + + oTest.fnWaitTest( + "Filter on second disabled column", + function () { oTable.fnFilter("Camino"); }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aoColumns.bSortable.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aoColumns.bSortable.js new file mode 100755 index 0000000..8b16145 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aoColumns.bSortable.js @@ -0,0 +1,116 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aoColumns.bSortable" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "All columns are sortable by default", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "All others"; } + ); + + oTest.fnWaitTest( + "Can disable sorting from one column", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser", "bSortable": false }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + $('#example thead th:eq(1)').click(); + }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() != "All others"; } + ); + + oTest.fnWaitTest( + "Disabled column has no sorting class", + null, + function () { return $('#example thead th:eq(1)').hasClass("sorting_asc") == false; } + ); + + oTest.fnWaitTest( + "Other columns can still sort", + function () { + $('#example thead th:eq(4)').click(); + $('#example thead th:eq(4)').click(); + }, + function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == "X"; } + ); + + oTest.fnWaitTest( + "Disable sorting on multiple columns - no sorting classes", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser", "bSortable": false }, + { "mDataProp": "platform" }, + { "mDataProp": "version", "bSortable": false }, + { "mDataProp": "grade" } + ] + } ); + }, + function () { + var bReturn = + $('#example thead th:eq(1)').hasClass("sorting") || + $('#example thead th:eq(3)').hasClass("sorting") + return bReturn == false; + } + ); + + oTest.fnWaitTest( + "Sorting on disabled column 1 has no effect", + function () { + $('#example thead th:eq(1)').click(); + }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() != "All others"; } + ); + + oTest.fnWaitTest( + "Sorting on disabled column 2 has no effect", + function () { + $('#example thead th:eq(3)').click(); + }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() != "-"; } + ); + + oTest.fnWaitTest( + "Second sort on disabled column 2 has no effect", + function () { + $('#example thead th:eq(3)').click(); + }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() != "-"; } + ); + + oTest.fnWaitTest( + "Even with multiple disabled sorting columns other columns can still sort", + function () { + $('#example thead th:eq(4)').click(); + $('#example thead th:eq(4)').click(); + }, + function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == "X"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aoColumns.bUseRendered.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aoColumns.bUseRendered.js new file mode 100755 index 0000000..421acd2 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aoColumns.bUseRendered.js @@ -0,0 +1,155 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aoColumns.bUseRendered" ); + +/* bUseRendered is used to alter sorting data, if false then the original data is used for + * sorting rather than the rendered data + */ + +$(document).ready( function () { + /* Check the default */ + var mTmp = 0; + + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { + "mDataProp": "browser", + "fnRender": function (a) { + if ( mTmp == 0 ) { + mTmp++; + return "aaa"; + } else + return a.aData['browser']; + } + }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Default for bUseRendered is true - rendered data is used for sorting", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'aaa'; } + ); + + oTest.fnWaitTest( + "When bUseRendered is false, original data is used for sorting", + function () { + mTmp = 0; + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { + "mDataProp": "browser", + "bUseRendered": false, + "fnRender": function (a) { + if ( mTmp == 0 ) { + mTmp++; + return "aaa"; + } else { + return a.aData['browser']; + } + } + }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + $('#example thead th:eq(1)').click(); + }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'All others'; } + ); + + + oTest.fnWaitTest( + "bUseRendered set to false on one columns and true (default) on two others", + function () { + mTmp = 0; + var mTmp2 = 0; + var mTmp3 = 0; + + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { + "mDataProp": "engine", + "fnRender": function (a) { + if ( mTmp == 0 ) { + mTmp++; + return "aaa1"; + } else { + return a.aData['engine']; + } + } + }, + { + "mDataProp": "browser", + "bUseRendered": false, + "fnRender": function (a) { + if ( mTmp2 == 0 ) { + mTmp2++; + return "aaa2"; + } else { + return a.aData['browser']; + } + } + }, + { + "mDataProp": "platform", + "fnRender": function (a) { + if ( mTmp3 == 0 ) { + mTmp3++; + return "zzz3"; + } else { + return a.aData['platform']; + } + } + }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == 'aaa1'; } + ); + + oTest.fnWaitTest( + "Multi-column rendering - 2nd column sorting", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'All others'; } + ); + + oTest.fnWaitTest( + "Multi-column rendering - 3rd column sorting", + function () { + $('#example thead th:eq(2)').click(); + $('#example thead th:eq(2)').click(); + }, + function () { return $('#example tbody tr:eq(0) td:eq(2)').html() == 'zzz3'; } + ); + + oTest.fnWaitTest( + "Multi-column rendering - 4th column sorting", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == '-'; } + ); + + oTest.fnWaitTest( + "Multi-column rendering - 5th column sorting", + function () { $('#example thead th:eq(4)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'A'; } + ); + + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aoColumns.bVisible.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aoColumns.bVisible.js new file mode 100755 index 0000000..3ad7c0a --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aoColumns.bVisible.js @@ -0,0 +1,131 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aoColumns.bVisible" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "All columns are visible by default", + null, + function () { return $('#example tbody tr:eq(0) td').length == 5; } + ); + + oTest.fnWaitTest( + "Can hide one column and it removes td column from DOM", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser", "bVisible": false }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td').length == 4; } + ); + + oTest.fnWaitTest( + "Can hide one column and it removes thead th column from DOM", + null, + function () { return $('#example thead tr:eq(0) th').length == 4; } + ); + + oTest.fnWaitTest( + "The correct thead column has been hidden", + null, + function () { + var jqNodes = $('#example thead tr:eq(0) th'); + var bReturn = + jqNodes[0].innerHTML == "Rendering engine" && + jqNodes[1].innerHTML == "Platform(s)" && + jqNodes[2].innerHTML == "Engine version" && + jqNodes[3].innerHTML == "CSS grade"; + return bReturn; + } + ); + + oTest.fnWaitTest( + "The correct tbody column has been hidden", + function () { + oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); + }, + function () { + var jqNodes = $('#example tbody tr:eq(0) td'); + var bReturn = + jqNodes[0].innerHTML == "Gecko" && + jqNodes[1].innerHTML == "Gnome" && + jqNodes[2].innerHTML == "1.8" && + jqNodes[3].innerHTML == "A"; + return bReturn; + } + ); + + + oTest.fnWaitTest( + "Can hide multiple columns and it removes td column from DOM", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser", "bVisible": false }, + { "mDataProp": "platform", "bVisible": false }, + { "mDataProp": "version" }, + { "mDataProp": "grade", "bVisible": false } + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td').length == 2; } + ); + + oTest.fnWaitTest( + "Multiple hide - removes thead th column from DOM", + null, + function () { return $('#example thead tr:eq(0) th').length == 2; } + ); + + oTest.fnWaitTest( + "Multiple hide - the correct thead columns have been hidden", + null, + function () { + var jqNodes = $('#example thead tr:eq(0) th'); + var bReturn = + jqNodes[0].innerHTML == "Rendering engine" && + jqNodes[1].innerHTML == "Engine version" + return bReturn; + } + ); + + oTest.fnWaitTest( + "Multiple hide - the correct tbody columns have been hidden", + function () { + oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); + }, + function () { + var jqNodes = $('#example tbody tr:eq(0) td'); + var bReturn = + jqNodes[0].innerHTML == "Gecko" && + jqNodes[1].innerHTML == "1" + return bReturn; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aoColumns.fnRender.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aoColumns.fnRender.js new file mode 100755 index 0000000..9d06e8e --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aoColumns.fnRender.js @@ -0,0 +1,177 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aoColumns.fnRender" ); + +$(document).ready( function () { + /* Check the default */ + var mTmp = 0; + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { + "mDataProp": "browser", + "fnRender": function (a) { + mTmp++; + return a.aData['browser']; + } + }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Single column - fnRender is called twice for each row", + null, + function () { return mTmp == 57; } + ); + + oTest.fnWaitTest( + "Confirm that fnRender passes two arguments with four parameters", + function () { + mTmp = true; + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { + "fnRender": function (a) { + if ( arguments.length != 2 || typeof a.iDataRow=='undefined' || + typeof a.iDataColumn=='undefined' || typeof a.aData=='undefined' || + typeof a.mDataProp=='undefined' ) + { + mTmp = false; + } + return a.aData['browser']; + }, + "mDataProp": "browser" + }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + }, + function () { return mTmp; } + ); + + oTest.fnWaitTest( + "fnRender iDataColumn is the column", + function () { + mTmp = true; + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { + "mDataProp": "browser", + "fnRender": function (a) { + if ( a.iDataColumn != 1 ) + { + mTmp = false; + } + return a.aData['browser']; + } + }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + }, + function () { return mTmp; } + ); + + oTest.fnWaitTest( + "fnRender aData is data array of correct size", + function () { + mTmp = true; + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { + "mDataProp": "browser", + "fnRender": function (a) { + if ( a.aData.length != 5 ) + { + mTmp = false; + } + return a.aData['browser']; + } + }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + }, + function () { return mTmp; } + ); + + oTest.fnWaitTest( + "Passed back data is put into the DOM", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { + "mDataProp": "browser", + "fnRender": function (a) { + return 'unittest'; + } + }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'unittest'; } + ); + + oTest.fnWaitTest( + "Passed back data is put into the DOM", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { + "mDataProp": "platform", + "fnRender": function (a) { + return 'unittest1'; + } + }, + { + "mDataProp": "version", + "fnRender": function (a) { + return 'unittest2'; + } + }, + { "mDataProp": "grade" } + ] + } ); + }, + function () { + var bReturn = + $('#example tbody tr:eq(0) td:eq(2)').html() == 'unittest1' && + $('#example tbody tr:eq(0) td:eq(3)').html() == 'unittest2'; + return bReturn; } + ); + + + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aoColumns.iDataSort.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aoColumns.iDataSort.js new file mode 100755 index 0000000..7b60e6b --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aoColumns.iDataSort.js @@ -0,0 +1,90 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aoColumns.iDataSort" ); + +$(document).ready( function () { + /* Should know that sorting already works by default from other tests, so we can jump + * right in here + */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser", "iDataSort": 4 }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Sorting on first column is uneffected", + null, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == 'Gecko'; } + ); + + oTest.fnWaitTest( + "Sorting on second column is the order of the fifth", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'A'; } + ); + + oTest.fnWaitTest( + "Reserve sorting on second column uses fifth column as well", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'X'; } + ); + + oTest.fnWaitTest( + "Sorting on 5th column retains it's own sorting", + function () { $('#example thead th:eq(4)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'A'; } + ); + + + oTest.fnWaitTest( + "Use 2nd col for sorting 5th col and via-versa - no effect on first col sorting", + function () { + mTmp = 0; + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser", "iDataSort": 4 }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade", "iDataSort": 1 } + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == 'Gecko'; } + ); + + oTest.fnWaitTest( + "2nd col sorting uses fifth col", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'A'; } + ); + + oTest.fnWaitTest( + "2nd col sorting uses fifth col - reversed", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'X'; } + ); + + oTest.fnWaitTest( + "5th col sorting uses 2nd col", + function () { $('#example thead th:eq(4)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'All others'; } + ); + + oTest.fnWaitTest( + "5th col sorting uses 2nd col - reversed", + function () { $('#example thead th:eq(4)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'Seamonkey 1.1'; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aoColumns.sClass.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aoColumns.sClass.js new file mode 100755 index 0000000..68602ca --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aoColumns.sClass.js @@ -0,0 +1,122 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aoColumns.sClass" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "By default the test class hasn't been applied to the column (sanity!)", + null, + function () { return $('#example tbody tr:eq(0) td:eq(2)').hasClass('unittest') == false; } + ); + + oTest.fnWaitTest( + "Add a class to a single column - first row", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform", "sClass": 'unittest' }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + }, + function () { return $('#example tbody tr:eq(1) td:eq(2)').hasClass('unittest'); } + ); + + oTest.fnWaitTest( + "Add a class to a single column - third row", + null, + function () { return $('#example tbody tr:eq(3) td:eq(2)').hasClass('unittest'); } + ); + + oTest.fnWaitTest( + "Add a class to a single column - last row", + null, + function () { return $('#example tbody tr:eq(9) td:eq(2)').hasClass('unittest'); } + ); + + oTest.fnWaitTest( + "Add a class to a single column - has not applied to other columns - 1st", + null, + function () { return $('#example tbody tr:eq(3) td:eq(0)').hasClass('unittest') == false; } + ); + + oTest.fnWaitTest( + "Add a class to a single column - has not applied to other columns - 5th", + null, + function () { return $('#example tbody tr:eq(3) td:eq(4)').hasClass('unittest') == false; } + ); + + oTest.fnWaitTest( + "Add a class to a single column - seventh row - second page", + function () { $('#example_next').click(); }, + function () { return $('#example tbody tr:eq(6) td:eq(2)').hasClass('unittest'); } + ); + + oTest.fnWaitTest( + "Add a class to a single column - has not applied to header", + null, + function () { return $('#example thead tr:eq(3) th:eq(4)').hasClass('unittest') == false; } + ); + + oTest.fnWaitTest( + "Add a class to a single column - has not applied to footer", + null, + function () { return $('#example thead tr:eq(3) th:eq(4)').hasClass('unittest') == false; } + ); + + + oTest.fnWaitTest( + "Class defined for multiple columns - first row", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine", "sClass": 'unittest2' }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version", "sClass": 'unittest1' }, + { "mDataProp": "grade" } + ] + } ); + }, + function () { + var bReturn = + $('#example tbody tr:eq(3) td:eq(0)').hasClass('unittest2') && + $('#example tbody tr:eq(8) td:eq(3)').hasClass('unittest1'); + return bReturn; + } + ); + + oTest.fnWaitTest( + "Class defined for multiple columns - has not applied to other columns - 5th 1", + null, + function () { return $('#example tbody tr:eq(0) td:eq(4)').hasClass('unittest1') == false; } + ); + + oTest.fnWaitTest( + "Class defined for multiple columns - has not applied to other columns - 5th 2", + null, + function () { return $('#example tbody tr:eq(6) td:eq(4)').hasClass('unittest2') == false; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aoColumns.sName.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aoColumns.sName.js new file mode 100755 index 0000000..00cbd51 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aoColumns.sName.js @@ -0,0 +1,28 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aoColumns.sName" ); + +/* This has no effect at all in DOM methods - so we just check that it has applied the name */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version", "sName": 'unit test' }, + { "mDataProp": "grade" } + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Names are stored in the columns object", + null, + function () { return oSettings.aoColumns[3].sName =="unit test"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aoColumns.sTitle.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aoColumns.sTitle.js new file mode 100755 index 0000000..ce18dbb --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aoColumns.sTitle.js @@ -0,0 +1,89 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aoColumns.sTitle" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "If not given, then the columns titles are empty", + null, + function () { + var jqNodes = $('#example thead tr:eq(0) th'); + var bReturn = + jqNodes[0].innerHTML == "Rendering engine" && + jqNodes[1].innerHTML == "Browser" && + jqNodes[2].innerHTML == "Platform(s)" && + jqNodes[3].innerHTML == "Engine version" && + jqNodes[4].innerHTML == "CSS grade"; + return bReturn; + } + ); + + oTest.fnWaitTest( + "Can set a single column title - and others are read from DOM", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser", "sTitle": 'unit test' }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + }, + function () { + var jqNodes = $('#example thead tr:eq(0) th'); + var bReturn = + jqNodes[0].innerHTML == "Rendering engine" && + jqNodes[1].innerHTML == "unit test" && + jqNodes[2].innerHTML == "Platform(s)" && + jqNodes[3].innerHTML == "Engine version" && + jqNodes[4].innerHTML == "CSS grade"; + return bReturn; + } + ); + + oTest.fnWaitTest( + "Can set multiple column titles", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser", "sTitle": 'unit test 1' }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade", "sTitle": 'unit test 2' } + ] + } ); + }, + function () { + var jqNodes = $('#example thead tr:eq(0) th'); + var bReturn = + jqNodes[0].innerHTML == "Rendering engine" && + jqNodes[1].innerHTML == "unit test 1" && + jqNodes[2].innerHTML == "Platform(s)" && + jqNodes[3].innerHTML == "Engine version" && + jqNodes[4].innerHTML == "unit test 2"; + return bReturn; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aoColumns.sWidth.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aoColumns.sWidth.js new file mode 100755 index 0000000..1ade76f --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aoColumns.sWidth.js @@ -0,0 +1,87 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aoColumns.sWidth" ); + +/* NOTE - we need to disable the auto width for the majority of these test in order to preform + * these tests as the auto width will convert the width to a px value. We can do 'non-exact' tests + * with auto width enabled however to ensure it scales columns as required + */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "bAutoWidth": false, + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser", "sWidth": '40%' }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "With auto width disabled the width for one column is appled", + null, + function () { return $('#example thead th:eq(1)')[0].style.width == "40%"; } + ); + + oTest.fnWaitTest( + "With auto width disabled the width for one column is appled", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "bAutoWidth": false, + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform", "sWidth": '20%' }, + { "mDataProp": "version", "sWidth": '30%' }, + { "mDataProp": "grade" } + ] + } ); + }, + function () { + var bReturn = + $('#example thead th:eq(2)')[0].style.width == "20%" && + $('#example thead th:eq(3)')[0].style.width == "30%"; + return bReturn; + } + ); + + + oTest.fnWaitTest( + "With auto width, it will make the smallest column the largest with percentage width given", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version", "sWidth": '40%' }, + { "mDataProp": "grade" } + ] + } ); + }, + function () { + var anThs = $('#example thead th'); + var a0 = anThs[0].offsetWidth; + var a1 = anThs[1].offsetWidth; + var a2 = anThs[2].offsetWidth; + var a3 = anThs[3].offsetWidth; + var a4 = anThs[4].offsetWidth; + + if ( a3>a0 && a3>a1 && a3>a2 && a3>a4 ) + return true; + else + return false; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aoSearchCols.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aoSearchCols.js new file mode 100644 index 0000000..be39917 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aoSearchCols.js @@ -0,0 +1,161 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aoSearchCols" ); + +/* We could be here forever testing this one, so we test a limited subset on a couple of colums */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Default should be to have a empty colums array", + null, + function () { + var bReturn = + oSettings.aoPreSearchCols[0].sSearch == 0 && !oSettings.aoPreSearchCols[0].bRegex && + oSettings.aoPreSearchCols[1].sSearch == 0 && !oSettings.aoPreSearchCols[1].bRegex && + oSettings.aoPreSearchCols[2].sSearch == 0 && !oSettings.aoPreSearchCols[2].bRegex && + oSettings.aoPreSearchCols[3].sSearch == 0 && !oSettings.aoPreSearchCols[3].bRegex && + oSettings.aoPreSearchCols[4].sSearch == 0 && !oSettings.aoPreSearchCols[4].bRegex; + return bReturn; + } + ); + + + oTest.fnWaitTest( + "Search on a single column - no regex statement given", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "aoSearchCols": [ + null, + { "sSearch": "Mozilla" }, + null, + { "sSearch": "1" }, + null + ] + } ); + }, + function () { return $('#example_info').html() == "Showing 1 to 9 of 9 entries (filtered from 57 total entries)"; } + ); + + oTest.fnWaitTest( + "Search on two columns - no regex statement given", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "aoSearchCols": [ + null, + { "sSearch": "Mozilla" }, + null, + { "sSearch": "1.5" }, + null + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "1.5"; } + ); + + oTest.fnWaitTest( + "Search on single column - escape regex false", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "aoSearchCols": [ + { "sSearch": ".*ML", "bEscapeRegex": false }, + null, + null, + null, + null + ] + } ); + }, + function () { return $('#example_info').html() == "Showing 1 to 3 of 3 entries (filtered from 57 total entries)"; } + ); + + oTest.fnWaitTest( + "Search on two columns - escape regex false on first, true on second", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "aoSearchCols": [ + { "sSearch": ".*ML", "bEscapeRegex": false }, + { "sSearch": "3.3", "bEscapeRegex": true }, + null, + null, + null + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Konqureror 3.3"; } + ); + + oTest.fnWaitTest( + "Search on two columns (no records) - escape regex false on first, true on second", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "aoSearchCols": [ + { "sSearch": ".*ML", "bEscapeRegex": false }, + { "sSearch": "Allan", "bEscapeRegex": true }, + null, + null, + null + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; } + ); + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/asStripClasses.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/asStripClasses.js new file mode 100644 index 0000000..82f2bc8 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/asStripClasses.js @@ -0,0 +1,133 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "asStripeClasses" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + + oTest.fnWaitTest( + "Default row striping is applied", + null, + function () { + return $('#example tbody tr:eq(0)').hasClass('odd') && + $('#example tbody tr:eq(1)').hasClass('even') && + $('#example tbody tr:eq(2)').hasClass('odd') && + $('#example tbody tr:eq(3)').hasClass('even'); + } + ); + + oTest.fnWaitTest( + "Row striping on the second page", + function () { $('#example_next').click(); }, + function () { + return $('#example tbody tr:eq(0)').hasClass('odd') && + $('#example tbody tr:eq(1)').hasClass('even') && + $('#example tbody tr:eq(2)').hasClass('odd') && + $('#example tbody tr:eq(3)').hasClass('even'); + } + ); + + /* No striping */ + oTest.fnWaitTest( + "No row striping", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "asStripeClasses": [] + } ); + }, + function () { + if ( typeof $('#example tbody tr:eq(1)')[0] == 'undefined' ) + { + /* Use the 'wait for' to allow this to become true */ + return false; + } + return $('#example tbody tr:eq(0)')[0].className == "" && + $('#example tbody tr:eq(1)')[0].className == "" && + $('#example tbody tr:eq(2)')[0].className == "" && + $('#example tbody tr:eq(3)')[0].className == ""; + } + ); + + /* Custom striping */ + oTest.fnWaitTest( + "Custom striping [2]", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "asStripeClasses": [ 'test1', 'test2' ] + } ); + }, + function () { + return $('#example tbody tr:eq(0)').hasClass('test1') && + $('#example tbody tr:eq(1)').hasClass('test2') && + $('#example tbody tr:eq(2)').hasClass('test1') && + $('#example tbody tr:eq(3)').hasClass('test2'); + } + ); + + + /* long array of striping */ + oTest.fnWaitTest( + "Custom striping [4]", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "asStripeClasses": [ 'test1', 'test2', 'test3', 'test4' ] + } ); + }, + function () { + return $('#example tbody tr:eq(0)').hasClass('test1') && + $('#example tbody tr:eq(1)').hasClass('test2') && + $('#example tbody tr:eq(2)').hasClass('test3') && + $('#example tbody tr:eq(3)').hasClass('test4'); + } + ); + + oTest.fnWaitTest( + "Custom striping is restarted on second page [2]", + function () { $('#example_next').click(); }, + function () { + return $('#example tbody tr:eq(0)').hasClass('test1') && + $('#example tbody tr:eq(1)').hasClass('test2') && + $('#example tbody tr:eq(2)').hasClass('test3') && + $('#example tbody tr:eq(3)').hasClass('test4'); + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/bAutoWidth.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/bAutoWidth.js new file mode 100644 index 0000000..55efdaa --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/bAutoWidth.js @@ -0,0 +1,163 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "bAutoWidth" ); + +/* It's actually a little tricky to test this. We can't test absolute numbers because + * different browsers and different platforms will render the width of the columns slightly + * differently. However, we certainly can test the principle of what should happen (column + * width doesn't change over pages) + */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Auto width is enabled by default", + null, + function () { return oSettings.oFeatures.bAutoWidth; } + ); + + oTest.fnWaitTest( + "First column has a width assigned to it", + null, + function () { return $('#example thead th:eq(0)').attr('style').match(/width/i); } + ); + + /* + This would seem like a better test - but there appear to be difficulties with tables + which are bigger (calculated) than there is actually room for. I suspect this is actually + a bug in datatables + oTest.fnWaitTest( + "Check column widths on first page match second page", + null, + function () { + var anThs = $('#example thead th'); + var a0 = anThs[0].offsetWidth; + var a1 = anThs[1].offsetWidth; + var a2 = anThs[2].offsetWidth; + var a3 = anThs[3].offsetWidth; + var a4 = anThs[4].offsetWidth; + $('#example_next').click(); + var b0 = anThs[0].offsetWidth; + var b1 = anThs[1].offsetWidth; + var b2 = anThs[2].offsetWidth; + var b3 = anThs[3].offsetWidth; + var b4 = anThs[4].offsetWidth; + console.log( a0, b0, a1, b1, a2, b2, a3, b3 ); + if ( a0==b0 && a1==b1 && a2==b2 && a3==b3 ) + return true; + else + return false; + } + ); + + oTest.fnWaitTest( + "Check column widths on second page match thid page", + null, + function () { + var anThs = $('#example thead th'); + var a0 = anThs[0].offsetWidth; + var a1 = anThs[1].offsetWidth; + var a2 = anThs[2].offsetWidth; + var a3 = anThs[3].offsetWidth; + var a4 = anThs[4].offsetWidth; + $('#example_next').click(); + var b0 = anThs[0].offsetWidth; + var b1 = anThs[1].offsetWidth; + var b2 = anThs[2].offsetWidth; + var b3 = anThs[3].offsetWidth; + var b4 = anThs[4].offsetWidth; + if ( a0==b0 && a1==b1 && a2==b2 && a3==b3 ) + return true; + else + return false; + } + ); + */ + + /* Check can disable */ + oTest.fnWaitTest( + "Auto width can be disabled", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "bAutoWidth": false + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oFeatures.bAutoWidth == false; } + ); + + oTest.fnWaitTest( + "First column does not have a width assigned to it", + null, + function () { return $('#example thead th:eq(0)').attr('style') == null; } + ); + + /* + oTest.fnWaitTest( + "Check column widths on first page do not match second page", + null, + function () { + var anThs = $('#example thead th'); + var a0 = anThs[0].offsetWidth; + var a1 = anThs[1].offsetWidth; + var a2 = anThs[2].offsetWidth; + var a3 = anThs[3].offsetWidth; + var a4 = anThs[4].offsetWidth; + $('#example_next').click(); + var b0 = anThs[0].offsetWidth; + var b1 = anThs[1].offsetWidth; + var b2 = anThs[2].offsetWidth; + var b3 = anThs[3].offsetWidth; + var b4 = anThs[4].offsetWidth; + if ( a0==b0 && a1==b1 && a2==b2 && a3==b3 ) + return false; + else + return true; + } + ); + */ + + /* Enable makes no difference */ + oTest.fnWaitTest( + "Auto width enabled override", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "bAutoWidth": true + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oFeatures.bAutoWidth; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/bFilter.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/bFilter.js new file mode 100644 index 0000000..0ee7573 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/bFilter.js @@ -0,0 +1,65 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "bFilter" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + + oTest.fnWaitTest( + "Filtering div exists by default", + null, + function () { return document.getElementById('example_filter') != null; } + ); + + /* Check can disable */ + oTest.fnWaitTest( + "Fltering can be disabled", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "bFilter": false + } ); + }, + function () { return document.getElementById('example_filter') == null; } + ); + + /* Enable makes no difference */ + oTest.fnWaitTest( + "Filtering enabled override", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "bFilter": true + } ); + }, + function () { return document.getElementById('example_filter') != null; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/bInfo.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/bInfo.js new file mode 100644 index 0000000..33d85c3 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/bInfo.js @@ -0,0 +1,65 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "bInfo" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + + oTest.fnWaitTest( + "Info div exists by default", + null, + function () { return document.getElementById('example_info') != null; } + ); + + /* Check can disable */ + oTest.fnWaitTest( + "Info can be disabled", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "bInfo": false + } ); + }, + function () { return document.getElementById('example_info') == null; } + ); + + /* Enable makes no difference */ + oTest.fnWaitTest( + "Info enabled override", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "bInfo": true + } ); + }, + function () { return document.getElementById('example_info') != null; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/bLengthChange.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/bLengthChange.js new file mode 100644 index 0000000..69fc1b7 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/bLengthChange.js @@ -0,0 +1,96 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "bLengthChange" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + + oTest.fnWaitTest( + "Length div exists by default", + null, + function () { return document.getElementById('example_length') != null; } + ); + + oTest.fnWaitTest( + "Four default options", + null, + function () { return $("select[name=example_length] option").length == 4; } + ); + + oTest.fnWaitTest( + "Default options", + null, + function () { + var opts = $("select[name='example_length'] option"); + return opts[0].getAttribute('value') == 10 && opts[1].getAttribute('value') == 25 && + opts[2].getAttribute('value') == 50 && opts[3].getAttribute('value') == 100; + } + ); + + oTest.fnWaitTest( + "Info takes length into account", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 57 entries"; } + ); + + /* Check can disable */ + oTest.fnWaitTest( + "Change length can be disabled", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "bLengthChange": false + } ); + }, + function () { return document.getElementById('example_length') == null; } + ); + + oTest.fnWaitTest( + "Information takes length disabled into account", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 57 entries"; } + ); + + /* Enable makes no difference */ + oTest.fnWaitTest( + "Length change enabled override", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "bLengthChange": true + } ); + }, + function () { return document.getElementById('example_length') != null; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/bPaginate.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/bPaginate.js new file mode 100644 index 0000000..f522564 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/bPaginate.js @@ -0,0 +1,80 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "bPaginate" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + + oTest.fnWaitTest( + "Pagiantion div exists by default", + null, + function () { return document.getElementById('example_paginate') != null; } + ); + + oTest.fnWaitTest( + "Information div takes paging into account", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 57 entries"; } + ); + + /* Check can disable */ + oTest.fnWaitTest( + "Pagiantion can be disabled", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "bPaginate": false + } ); + }, + function () { return document.getElementById('example_paginate') == null; } + ); + + oTest.fnWaitTest( + "Information div takes paging disabled into account", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 57 of 57 entries"; } + ); + + /* Enable makes no difference */ + oTest.fnWaitTest( + "Pagiantion enabled override", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "bPaginate": true + } ); + }, + function () { return document.getElementById('example_paginate') != null; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/bProcessing.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/bProcessing.js new file mode 100644 index 0000000..7755616 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/bProcessing.js @@ -0,0 +1,124 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "bProcessing" ); + +/* It's actually a bit hard to set this one due to the fact that it will only be shown + * when DataTables is doing some kind of processing. The server-side processing is a bit + * better to test this than here - so we just the interal functions to enable it and check + * that it is available + */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Processing is off by default", + null, + function () { return oSettings.oFeatures.bProcessing == false; } + ); + + oTest.fnWaitTest( + "Processing div is not in the DOM", + function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); }, + function () { return document.getElementById('example_processing') == null; } + ); + + oTest.fnWaitTest( + "Processing div cannot be shown", + function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); }, + function () { return document.getElementById('example_processing') == null; } + ); + + oTest.fnWaitTest( + "Processing div cannot be hidden", + function () { oTable.oApi._fnProcessingDisplay( oSettings, false ); }, + function () { return document.getElementById('example_processing') == null; } + ); + + + /* Check can disable */ + oTest.fnWaitTest( + "Processing can be enabled", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "bProcessing": true + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oFeatures.bProcessing == true; } + ); + + oTest.fnWaitTest( + "Processing div is in the DOM", + function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); }, + function () { return document.getElementById('example_processing'); } + ); + + oTest.fnWaitTest( + "Processing div is hidden by default", + function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); }, + function () { return document.getElementById('example_processing').style.visibility = "hidden"; } + ); + + oTest.fnWaitTest( + "Processing div can be shown", + function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); }, + function () { return document.getElementById('example_processing').style.visibility = "visible"; } + ); + + oTest.fnWaitTest( + "Processing div can be hidden", + function () { oTable.oApi._fnProcessingDisplay( oSettings, false ); }, + function () { return document.getElementById('example_processing').style.visibility = "hidden"; } + ); + + /* Enable makes no difference */ + oTest.fnWaitTest( + "Processing disabled override", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "bProcessing": false + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oFeatures.bProcessing == false; } + ); + + oTest.fnWaitTest( + "Processing div is not in the DOM", + function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); }, + function () { return document.getElementById('example_processing') == null; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/bServerSide.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/bServerSide.js new file mode 100644 index 0000000..c69f7d4 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/bServerSide.js @@ -0,0 +1,27 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "bServerSide" ); + +/* Not interested in server-side processing here other than to check that it is off */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Server side is off by default", + null, + function () { return oSettings.oFeatures.bServerSide == false; } + ); + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/bSort.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/bSort.js new file mode 100644 index 0000000..5a82731 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/bSort.js @@ -0,0 +1,120 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "bSort" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + + oTest.fnWaitTest( + "Sorting is on by default", + null, + function () { return $('#example tbody td:eq(0)').html() == "Gecko"; } + ); + + oTest.fnWaitTest( + "Sorting Asc by default class applied", + null, + function () { return $('#example thead th:eq(0)').hasClass("sorting_asc"); } + ); + + oTest.fnWaitTest( + "Click on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnWaitTest( + "Sorting class removed from first column", + null, + function () { return $('#example thead th:eq(0)').hasClass("sorting_asc") != true; } + ); + + oTest.fnWaitTest( + "Sorting asc class applied to second column", + null, + function () { return $('#example thead th:eq(1)').hasClass("sorting_asc"); } + ); + + oTest.fnWaitTest( + "Reverse on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnWaitTest( + "Sorting acs class removed from second column", + null, + function () { return $('#example thead th:eq(1)').hasClass("sorting_asc") != true; } + ); + + oTest.fnWaitTest( + "Sorting desc class applied to second column", + null, + function () { return $('#example thead th:eq(1)').hasClass("sorting_desc"); } + ); + + /* Check can disable */ + oTest.fnWaitTest( + "Pagiantion can be disabled", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "bSort": false + } ); + }, + function () { return $('#example tbody td:eq(3)').html() == "4"; } + ); + + oTest.fnWaitTest( + "Click on second column has no effect", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "4"; } + ); + + oTest.fnWaitTest( + "Reverse on second column has no effect", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "4"; } + ); + + /* Enable makes no difference */ + oTest.fnWaitTest( + "Sorting enabled override", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "bSort": true + } ); + }, + function () { return $('#example tbody td:eq(0)').html() == "Gecko"; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/bSortClasses.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/bSortClasses.js new file mode 100644 index 0000000..8c00c73 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/bSortClasses.js @@ -0,0 +1,153 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "bSortClasses" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + + oTest.fnWaitTest( + "Sorting classes are applied by default", + null, + function () { return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1'); } + ); + + oTest.fnWaitTest( + "Sorting classes are applied to all required cells", + null, + function () { return $('#example tbody tr:eq(7) td:eq(0)').hasClass('sorting_1'); } + ); + + oTest.fnWaitTest( + "Sorting classes are not applied to non-sorting columns", + null, + function () { return $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_1') == false; } + ); + + oTest.fnWaitTest( + "Sorting multi-column - add column 1", + function () { + oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); }, + function () { + return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') && + $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2'); + } + ); + + oTest.fnWaitTest( + "Sorting multi-column - add column 2", + function () { + oDispacher.click( $('#example thead th:eq(2)')[0], { 'shift': true } ); }, + function () { + return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') && + $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') && + $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3'); + } + ); + + oTest.fnWaitTest( + "Sorting multi-column - add column 3", + function () { + oDispacher.click( $('#example thead th:eq(3)')[0], { 'shift': true } ); + }, + function () { + return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') && + $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') && + $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3') && + $('#example tbody tr:eq(0) td:eq(3)').hasClass('sorting_3'); + } + ); + + oTest.fnWaitTest( + "Remove sorting classes on single column sort", + function () { + $('#example thead th:eq(4)').click(); + }, + function () { + return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false && + $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') == false && + $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3') == false && + $('#example tbody tr:eq(0) td:eq(3)').hasClass('sorting_3') == false; + } + ); + + oTest.fnWaitTest( + "Sorting class 1 was added", + null, + function () { return $('#example tbody tr:eq(1) td:eq(4)').hasClass('sorting_1'); } + ); + + + /* Check can disable */ + oTest.fnWaitTest( + "Sorting classes can be disabled", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "bSortClasses": false + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false; } + ); + + oTest.fnWaitTest( + "Sorting classes disabled - add column 1 - no effect", + function () { + oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); }, + function () { + return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false && + $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') == false; + } + ); + + oTest.fnWaitTest( + "Sorting classes disabled - add column 2 - no effect", + function () { + oDispacher.click( $('#example thead th:eq(2)')[0], { 'shift': true } ); }, + function () { + return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false && + $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') == false && + $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3') == false; + } + ); + + + /* Enable makes no difference */ + oTest.fnWaitTest( + "Sorting classes enabled override", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "bSortClasses": true + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1'); } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/fnDrawCallback.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/fnDrawCallback.js new file mode 100644 index 0000000..a6b1725 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/fnDrawCallback.js @@ -0,0 +1,126 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "fnDrawCallback" ); + +/* Fairly boring function compared to the others! */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + var oSettings = oTable.fnSettings(); + var mPass, bInit; + + oTest.fnWaitTest( + "Default should be null", + null, + function () { return oSettings.fnDrawCallback == null; } + ); + + + oTest.fnWaitTest( + "One argument passed", + function () { + oSession.fnRestore(); + + mPass = -1; + bInit = false; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "fnDrawCallback": function ( ) { + mPass = arguments.length; + }, + "fnInitComplete": function () { + bInit = true; + } + } ); + }, + function () { return mPass == 1 && bInit; } + ); + + + oTest.fnWaitTest( + "That one argument is the settings object", + function () { + oSession.fnRestore(); + + bInit = false; + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "fnDrawCallback": function ( oSettings ) { + mPass = oSettings; + }, + "fnInitComplete": function () { + bInit = true; + } + } ); + }, + function () { return oTable.fnSettings() == mPass && bInit; } + ); + + + /* The draw callback is called once for the init and then when the data is added */ + oTest.fnWaitTest( + "fnRowCallback called once on first draw", + function () { + oSession.fnRestore(); + + mPass = 0; + bInit = false; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "fnDrawCallback": function ( ) { + mPass++; + }, + "fnInitComplete": function () { + bInit = true; + } + } ); + }, + function () { return mPass == 2 && bInit; } + ); + + oTest.fnWaitTest( + "fnRowCallback called once on each draw there after as well", + function () { + $('#example_next').click(); + $('#example_next').click(); + $('#example_next').click(); + }, + function () { return mPass == 5; } + ); + + + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/fnHeaderCallback.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/fnHeaderCallback.js new file mode 100644 index 0000000..0574d5f --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/fnHeaderCallback.js @@ -0,0 +1,254 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "fnHeaderCallback" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + var oSettings = oTable.fnSettings(); + var mPass, bInit; + + oTest.fnWaitTest( + "Default should be null", + null, + function () { return oSettings.fnHeaderCallback == null; } + ); + + + oTest.fnWaitTest( + "Five arguments passed", + function () { + oSession.fnRestore(); + + mPass = -1; + bInit = false; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "fnHeaderCallback": function ( ) { + mPass = arguments.length; + }, + "fnInitComplete": function () { + bInit = true; + } + } ); + }, + function () { return mPass == 5 && bInit; } + ); + + + /* The header callback is called once for the init and then when the data is added */ + oTest.fnWaitTest( + "fnHeaderCallback called once per draw", + function () { + oSession.fnRestore(); + + mPass = 0; + bInit = false; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + mPass++; + }, + "fnInitComplete": function () { + bInit = true; + } + } ); + }, + function () { return mPass == 2 && bInit; } + ); + + oTest.fnWaitTest( + "fnRowCallback called on paging (i.e. another draw)", + function () { $('#example_next').click(); }, + function () { return mPass == 3; } + ); + + + oTest.fnWaitTest( + "fnRowCallback allows us to alter row information", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + nHead.getElementsByTagName('th')[0].innerHTML = "Displaying "+(iEnd-iStart)+" records"; + } + } ); + }, + function () { return $('#example thead th:eq(0)').html() == "Displaying 10 records"; } + ); + + + oTest.fnWaitTest( + "iStart correct on first page", + function () { + oSession.fnRestore(); + + mPass = true; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + if ( iStart != 0 ) + { + mPass = false; + } + } + } ); + }, + function () { return mPass; } + ); + + + oTest.fnWaitTest( + "iStart correct on second page", + function () { + oSession.fnRestore(); + + mPass = false; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + if ( iStart == 10 ) + { + mPass = true; + } + }, + "fnInitComplete": function () { + $('#example_next').click(); + } + } ); + }, + function () { return mPass; } + ); + + + oTest.fnWaitTest( + "iEnd correct on second page", + function () { + oSession.fnRestore(); + + mPass = false; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + if ( iEnd == 20 ) + { + mPass = true; + } + }, + "fnInitComplete": function () { + $('#example_next').click(); + } + } ); + }, + function () { return mPass; } + ); + + + oTest.fnWaitTest( + "aiDisplay length is full data when not filtered", + function () { + oSession.fnRestore(); + + mPass = false; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + if ( aiDisplay.length == 57 ) + { + mPass = true; + } + } + } ); + }, + function () { return mPass; } + ); + + oTest.fnWaitTest( + "aiDisplay length is 9 when filtering on 'Mozilla'", + function () { + oSession.fnRestore(); + + mPass = false; + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + if ( aiDisplay.length == 9 ) + { + mPass = true; + } + } + } ); + oTable.fnFilter( "Mozilla" ); + }, + function () { return mPass; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/fnInitComplete.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/fnInitComplete.js new file mode 100644 index 0000000..fdaddd0 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/fnInitComplete.js @@ -0,0 +1,135 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "fnInitComplete" ); + +/* Fairly boring function compared to the others! */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + var oSettings = oTable.fnSettings(); + var mPass; + + oTest.fnWaitTest( + "Default should be null", + null, + function () { return oSettings.fnInitComplete == null; } + ); + + + oTest.fnWaitTest( + "Two arguments passed (for Ajax!)", + function () { + oSession.fnRestore(); + + mPass = -1; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "fnInitComplete": function ( ) { + mPass = arguments.length; + } + } ); + }, + function () { return mPass == 2; } + ); + + + oTest.fnWaitTest( + "That one argument is the settings object", + function () { + oSession.fnRestore(); + + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "fnInitComplete": function ( oSettings ) { + mPass = oSettings; + } + } ); + }, + function () { return oTable.fnSettings() == mPass; } + ); + + + oTest.fnWaitTest( + "fnInitComplete called once on first draw", + function () { + oSession.fnRestore(); + + mPass = 0; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "fnInitComplete": function ( ) { + mPass++; + } + } ); + }, + function () { return mPass == 1; } + ); + + oTest.fnWaitTest( + "fnInitComplete never called there after", + function () { + $('#example_next').click(); + $('#example_next').click(); + $('#example_next').click(); + }, + function () { return mPass == 1; } + ); + + + oTest.fnWaitTest( + "10 rows in the table on complete", + function () { + oSession.fnRestore(); + + mPass = 0; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "fnInitComplete": function ( ) { + mPass = $('#example tbody tr').length; + } + } ); + }, + function () { return mPass == 10; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/fnRowCallback.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/fnRowCallback.js new file mode 100644 index 0000000..6c5a2f6 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/fnRowCallback.js @@ -0,0 +1,154 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "fnRowCallback" ); + +/* Note - fnRowCallback MUST return the first arguments (modified or not) */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + var oSettings = oTable.fnSettings(); + var mPass; + + oTest.fnWaitTest( + "Default should be null", + null, + function () { return oSettings.fnRowCallback == null; } + ); + + + oTest.fnWaitTest( + "Four arguments passed", + function () { + oSession.fnRestore(); + + mPass = -1; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "fnRowCallback": function ( nTr ) { + mPass = arguments.length; + return nTr; + } + } ); + }, + function () { return mPass == 4; } + ); + + + oTest.fnWaitTest( + "fnRowCallback called once for each drawn row", + function () { + oSession.fnRestore(); + + mPass = 0; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) { + mPass++; + return nTr; + } + } ); + }, + function () { return mPass == 10; } + ); + + oTest.fnWaitTest( + "fnRowCallback allows us to alter row information", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) { + $(nTr).addClass('unit_test'); + return nTr; + } + } ); + }, + function () { return $('#example tbody tr:eq(1)').hasClass('unit_test'); } + ); + + oTest.fnWaitTest( + "Data array has length matching columns", + function () { + oSession.fnRestore(); + + mPass = true; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) { + if ( asData.length != 5 ) + mPass = false; + return nTr; + } + } ); + }, + function () { return mPass; } + ); + + oTest.fnWaitTest( + "Data array has length matching columns", + function () { + oSession.fnRestore(); + + mPass = true; + var iCount = 0; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) { + if ( iCount != iDrawIndex ) + mPass = false; + iCount++; + return nTr; + } + } ); + }, + function () { return mPass; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/fnServerData.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/fnServerData.js new file mode 100644 index 0000000..8ab5e74 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/fnServerData.js @@ -0,0 +1,92 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "fnServerData for Ajax sourced data" ); + +$(document).ready( function () { + var mPass; + + oTest.fnTest( + "Argument length", + function () { + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "fnServerData": function () { + mPass = arguments.length; + } + } ); + }, + function () { return mPass == 4; } + ); + + oTest.fnTest( + "Url", + function () { + $('#example').dataTable( { + "bDestroy": true, + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "fnServerData": function (sUrl, aoData, fnCallback, oSettings) { + mPass = sUrl == "../../../examples/ajax/sources/objects.txt"; + } + } ); + }, + function () { return mPass; } + ); + + oTest.fnTest( + "Data array", + function () { + $('#example').dataTable( { + "bDestroy": true, + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "fnServerData": function (sUrl, aoData, fnCallback, oSettings) { + mPass = aoData.length==0; + } + } ); + }, + function () { return mPass; } + ); + + oTest.fnTest( + "Callback function", + function () { + $('#example').dataTable( { + "bDestroy": true, + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "fnServerData": function (sUrl, aoData, fnCallback, oSettings) { + mPass = typeof fnCallback == 'function'; + } + } ); + }, + function () { return mPass; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/iDisplayLength.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/iDisplayLength.js new file mode 100644 index 0000000..01facc9 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/iDisplayLength.js @@ -0,0 +1,109 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "iDisplayLength" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + + oTest.fnWaitTest( + "Default length is ten", + null, + function () { return $('#example tbody tr').length == 10; } + ); + + oTest.fnWaitTest( + "Select menu shows 10", + null, + function () { return $('#example_length select').val() == 10; } + ); + + + oTest.fnWaitTest( + "Set initial length to 25", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "iDisplayLength": 25 + } ); + }, + function () { return $('#example tbody tr').length == 25; } + ); + + oTest.fnWaitTest( + "Select menu shows 25", + null, + function () { return $('#example_length select').val() == 25; } + ); + + + oTest.fnWaitTest( + "Set initial length to 100", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "iDisplayLength": 100 + } ); + }, + function () { return $('#example tbody tr').length == 57; } + ); + + oTest.fnWaitTest( + "Select menu shows 25", + null, + function () { return $('#example_length select').val() == 100; } + ); + + + oTest.fnWaitTest( + "Set initial length to 23 (unknown select menu length)", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "iDisplayLength": 23 + } ); + }, + function () { return $('#example tbody tr').length == 23; } + ); + + oTest.fnWaitTest( + "Select menu shows 10 (since 23 is unknow)", + null, + function () { return $('#example_length select').val() == 10; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/oLanguage.oPaginate.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/oLanguage.oPaginate.js new file mode 100644 index 0000000..47abb71 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/oLanguage.oPaginate.js @@ -0,0 +1,98 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oLanguage.oPaginate" ); + +/* Note that the paging language information only has relevence in full numbers */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ], + "sPaginationType": "full_numbers" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "oLanguage.oPaginate defaults", + null, + function () { + var bReturn = + oSettings.oLanguage.oPaginate.sFirst == "First" && + oSettings.oLanguage.oPaginate.sPrevious == "Previous" && + oSettings.oLanguage.oPaginate.sNext == "Next" && + oSettings.oLanguage.oPaginate.sLast == "Last"; + return bReturn; + } + ); + + oTest.fnTest( + "oLanguage.oPaginate defaults are in the DOM", + null, + function () { + var bReturn = + $('#example_paginate .first').html() == "First" && + $('#example_paginate .previous').html() == "Previous" && + $('#example_paginate .next').html() == "Next" && + $('#example_paginate .last').html() == "Last"; + return bReturn; + } + ); + + + oTest.fnWaitTest( + "oLanguage.oPaginate can be defined", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "sPaginationType": "full_numbers", + "oLanguage": { + "oPaginate": { + "sFirst": "unit1", + "sPrevious": "test2", + "sNext": "unit3", + "sLast": "test4" + } + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { + var bReturn = + oSettings.oLanguage.oPaginate.sFirst == "unit1" && + oSettings.oLanguage.oPaginate.sPrevious == "test2" && + oSettings.oLanguage.oPaginate.sNext == "unit3" && + oSettings.oLanguage.oPaginate.sLast == "test4"; + return bReturn; + } + ); + + oTest.fnTest( + "oLanguage.oPaginate definitions are in the DOM", + null, + function () { + var bReturn = + $('#example_paginate .first').html() == "unit1" && + $('#example_paginate .previous').html() == "test2" && + $('#example_paginate .next').html() == "unit3" && + $('#example_paginate .last').html() == "test4"; + return bReturn; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sInfo.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sInfo.js new file mode 100644 index 0000000..60b234e --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sInfo.js @@ -0,0 +1,166 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oLanguage.sInfo" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Info language is 'Showing _START_ to _END_ of _TOTAL_ entries' by default", + null, + function () { return oSettings.oLanguage.sInfo == "Showing _START_ to _END_ of _TOTAL_ entries"; } + ); + + oTest.fnTest( + "Info language default is in the DOM", + null, + function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries"; } + ); + + + oTest.fnWaitTest( + "Info language can be defined - without any macros", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "oLanguage": { + "sInfo": "unit test" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oLanguage.sInfo == "unit test"; } + ); + + oTest.fnTest( + "Info language definition is in the DOM", + null, + function () { return document.getElementById('example_info').innerHTML = "unit test"; } + ); + + oTest.fnWaitTest( + "Info language can be defined - with macro _START_ only", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "oLanguage": { + "sInfo": "unit _START_ test" + } + } ); + }, + function () { return document.getElementById('example_info').innerHTML = "unit 1 test"; } + ); + + oTest.fnWaitTest( + "Info language can be defined - with macro _END_ only", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "oLanguage": { + "sInfo": "unit _END_ test" + } + } ); + }, + function () { return document.getElementById('example_info').innerHTML = "unit 10 test"; } + ); + + oTest.fnWaitTest( + "Info language can be defined - with macro _TOTAL_ only", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "oLanguage": { + "sInfo": "unit _END_ test" + } + } ); + }, + function () { return document.getElementById('example_info').innerHTML = "unit 57 test"; } + ); + + oTest.fnWaitTest( + "Info language can be defined - with macros _START_ and _END_", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "oLanguage": { + "sInfo": "unit _START_ _END_ test" + } + } ); + }, + function () { return document.getElementById('example_info').innerHTML = "unit 1 10 test"; } + ); + + oTest.fnWaitTest( + "Info language can be defined - with macros _START_, _END_ and _TOTAL_", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "oLanguage": { + "sInfo": "unit _START_ _END_ _TOTAL_ test" + } + } ); + }, + function () { return document.getElementById('example_info').innerHTML = "unit 1 10 57 test"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sInfoEmpty.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sInfoEmpty.js new file mode 100644 index 0000000..a98cf5b --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sInfoEmpty.js @@ -0,0 +1,100 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oLanguage.sInfoEmpty" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Info empty language is 'Showing 0 to 0 of 0 entries' by default", + function () { oTable.fnFilter("nothinghere"); }, + function () { return oSettings.oLanguage.sInfoEmpty == "Showing 0 to 0 of 0 entries"; } + ); + + oTest.fnTest( + "Info empty language default is in the DOM", + null, + function () { + var bReturn = document.getElementById('example_info').innerHTML.replace( + ' '+oSettings.oLanguage.sInfoFiltered.replace( '_MAX_', '57' ), "" ) == + "Showing 0 to 0 of 0 entries"; + return bReturn; + } + ); + + + oTest.fnWaitTest( + "Info empty language can be defined", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "oLanguage": { + "sInfoEmpty": "unit test" + } + } ); + oSettings = oTable.fnSettings(); + oTable.fnFilter("nothinghere"); + }, + function () { return oSettings.oLanguage.sInfoEmpty == "unit test"; } + ); + + oTest.fnTest( + "Info empty language default is in the DOM", + null, + function () { + var bReturn = document.getElementById('example_info').innerHTML.replace( + ' '+oSettings.oLanguage.sInfoFiltered.replace( '_MAX_', '57' ), "" ) == + "unit test"; + return bReturn; + } + ); + + + oTest.fnWaitTest( + "Macro's not replaced", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "oLanguage": { + "sInfoEmpty": "unit _START_ _END_ _TOTAL_ test" + } + } ); + oTable.fnFilter("nothinghere"); + }, + function () { + var bReturn = document.getElementById('example_info').innerHTML.replace( + ' '+oSettings.oLanguage.sInfoFiltered.replace( '_MAX_', '57' ), "" ) == + "unit _START_ _END_ _TOTAL_ test"; + return bReturn; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sInfoPostFix.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sInfoPostFix.js new file mode 100644 index 0000000..4c1c7fa --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sInfoPostFix.js @@ -0,0 +1,106 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oLanguage.sInfoPostFix" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Info post fix language is '' (blank) by default", + null, + function () { return oSettings.oLanguage.sInfoPostFix == ""; } + ); + + oTest.fnTest( + "Width no post fix, the basic info shows", + null, + function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries"; } + ); + + + oTest.fnWaitTest( + "Info post fix language can be defined", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "oLanguage": { + "sInfoPostFix": "unit test" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oLanguage.sInfoPostFix == "unit test"; } + ); + + oTest.fnTest( + "Info empty language default is in the DOM", + null, + function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries unit test"; } + ); + + + oTest.fnWaitTest( + "Macros have no effect in the post fix", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "oLanguage": { + "sInfoPostFix": "unit _START_ _END_ _TOTAL_ test" + } + } ); + }, + function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries unit _START_ _END_ _TOTAL_ test"; } + ); + + + oTest.fnWaitTest( + "Post fix is applied after fintering info", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "oLanguage": { + "sInfoPostFix": "unit test" + } + } ); + oTable.fnFilter("nothinghere"); + }, + function () { return document.getElementById('example_info').innerHTML = "Showing 0 to 0 of 0 entries unit (filtered from 57 total entries) test"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sLengthMenu.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sLengthMenu.js new file mode 100644 index 0000000..38ee98d --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sLengthMenu.js @@ -0,0 +1,139 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oLanguage.sLengthMenu" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Menu language is 'Show _MENU_ entries' by default", + null, + function () { return oSettings.oLanguage.sLengthMenu == "Show _MENU_ entries"; } + ); + + oTest.fnTest( + "_MENU_ macro is replaced by select menu in DOM", + null, + function () { return $('select', oSettings.aanFeatures.l[0]).length == 1 } + ); + + oTest.fnTest( + "A label input is used", + null, + function () { return $('label', oSettings.aanFeatures.l[0]).length == 1 } + ); + + oTest.fnTest( + "Default is put into DOM", + null, + function () { + var anChildren = $('label',oSettings.aanFeatures.l[0])[0].childNodes; + var bReturn = + anChildren[0].nodeValue == "Show " && + anChildren[2].nodeValue == " entries"; + return bReturn; + } + ); + + + oTest.fnWaitTest( + "Menu length language can be defined - no _MENU_ macro", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "oLanguage": { + "sLengthMenu": "unit test" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oLanguage.sLengthMenu == "unit test"; } + ); + + oTest.fnTest( + "Menu length language definition is in the DOM", + null, + function () { + return $('label', oSettings.aanFeatures.l[0]).text() == "unit test"; + } + ); + + + oTest.fnWaitTest( + "Menu length language can be defined - with _MENU_ macro", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "oLanguage": { + "sLengthMenu": "unit _MENU_ test" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { + var anChildren = $('label',oSettings.aanFeatures.l[0])[0].childNodes; + var bReturn = + anChildren[0].nodeValue == "unit " && + anChildren[2].nodeValue == " test"; + return bReturn; + } + ); + + + oTest.fnWaitTest( + "Only the _MENU_ macro", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "oLanguage": { + "sLengthMenu": "_MENU_" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { + var anChildren = oSettings.aanFeatures.l[0].childNodes; + var bReturn = + anChildren.length == 1 && + $('select', oSettings.aanFeatures.l[0]).length == 1; + return bReturn; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sProcessing.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sProcessing.js new file mode 100644 index 0000000..71e6362 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sProcessing.js @@ -0,0 +1,63 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oLanguage.sProcessing" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ], + "bProcessing": true + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Processing language is 'Processing...' by default", + null, + function () { return oSettings.oLanguage.sProcessing == "Processing..."; } + ); + + oTest.fnTest( + "Processing language default is in the DOM", + null, + function () { return document.getElementById('example_processing').innerHTML = "Processing..."; } + ); + + + oTest.fnWaitTest( + "Processing language can be defined", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "bProcessing": true, + "oLanguage": { + "sProcessing": "unit test" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oLanguage.sProcessing == "unit test"; } + ); + + oTest.fnTest( + "Processing language definition is in the DOM", + null, + function () { return document.getElementById('example_processing').innerHTML = "unit test"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sSearch.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sSearch.js new file mode 100644 index 0000000..af741c9 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sSearch.js @@ -0,0 +1,91 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oLanguage.sSearch" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Search language is 'Search:' by default", + null, + function () { return oSettings.oLanguage.sSearch == "Search:"; } + ); + + oTest.fnTest( + "A label input is used", + null, + function () { return $('label', oSettings.aanFeatures.f[0]).length == 1 } + ); + + oTest.fnTest( + "Search language default is in the DOM", + null, + function () { return $('label', oSettings.aanFeatures.f[0]).text() + == "Search: "; } + ); + + + oTest.fnWaitTest( + "Search language can be defined", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "oLanguage": { + "sSearch": "unit test" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oLanguage.sSearch == "unit test"; } + ); + + oTest.fnTest( + "Info language definition is in the DOM", + null, + function () { return $('label', oSettings.aanFeatures.f[0]).text().indexOf('unit test') !== -1; } + ); + + + oTest.fnWaitTest( + "Blank search has a no space (separator) inserted", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "oLanguage": { + "sSearch": "" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { return document.getElementById('example_filter').childNodes.length == 1; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sUrl.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sUrl.js new file mode 100644 index 0000000..69bbab6 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sUrl.js @@ -0,0 +1,76 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oLanguage.sUrl" ); + +/* Note that we only test the internal storage of language information pulled form a file here + * as the other language tests will check it goes into the DOM correctly + */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "sUrl is blank by default", + null, + function () { return oSettings.oLanguage.sUrl == ""; } + ); + + + oTest.fnWaitTest( + "Loading of German file loads language information", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "oLanguage": { + "sUrl": "../../../examples/examples_support/de_DE.txt" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { + var bReturn = + oSettings.oLanguage.sProcessing == "Bitte warten..." && + oSettings.oLanguage.sLengthMenu == "_MENU_ Einträge anzeigen" && + oSettings.oLanguage.sZeroRecords == "Keine Einträge vorhanden." && + oSettings.oLanguage.sInfo == "_START_ bis _END_ von _TOTAL_ Einträgen" && + oSettings.oLanguage.sInfoEmpty == "0 bis 0 von 0 Einträgen" && + oSettings.oLanguage.sInfoFiltered == "(gefiltert von _MAX_ Einträgen)" && + oSettings.oLanguage.sInfoPostFix == "" && + oSettings.oLanguage.sSearch == "Suchen" && + oSettings.oLanguage.oPaginate.sFirst == "Erster" && + oSettings.oLanguage.oPaginate.sPrevious == "Zurück" && + oSettings.oLanguage.oPaginate.sNext == "Nächster" && + oSettings.oLanguage.oPaginate.sLast == "Letzter"; + + return bReturn; + } + ); + + /* One DOM check just to ensure that they go into the DOM */ + oTest.fnTest( + "Loaded language goes into the DOM", + null, + function () { return document.getElementById('example_info').innerHTML = "1 bis 10 von 57 Einträgen"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sZeroRecords.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sZeroRecords.js new file mode 100644 index 0000000..9c63ca1 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/oLanguage.sZeroRecords.js @@ -0,0 +1,62 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oLanguage.sZeroRecords" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Zero records language is 'No matching records found' by default", + null, + function () { return oSettings.oLanguage.sZeroRecords == "No matching records found"; } + ); + + oTest.fnWaitTest( + "Text is shown when empty table (after filtering)", + function () { oTable.fnFilter('nothinghere'); }, + function () { return $('#example tbody tr td')[0].innerHTML == "No matching records found" } + ); + + + + oTest.fnWaitTest( + "Zero records language can be defined", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "oLanguage": { + "sZeroRecords": "unit test" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oLanguage.sZeroRecords == "unit test"; } + ); + + oTest.fnWaitTest( + "Text is shown when empty table (after filtering)", + function () { oTable.fnFilter('nothinghere2'); }, + function () { return $('#example tbody tr td')[0].innerHTML == "unit test" } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/oSearch.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/oSearch.js new file mode 100644 index 0000000..5d098f6 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/oSearch.js @@ -0,0 +1,150 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oSearch" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Default values should be blank", + null, + function () { + var bReturn = oSettings.oPreviousSearch.sSearch == "" && + !oSettings.oPreviousSearch.bRegex; + return bReturn; + } + ); + + /* This test might be considered iffy since the full object isn't given, but it's reasonable to + * expect DataTables to cope with this. It should just assumine regex false + */ + oTest.fnWaitTest( + "Search term only in object", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "oSearch": { + "sSearch": "Mozilla" + } + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Gecko"; } + ); + + oTest.fnWaitTest( + "New search will kill old one", + function () { + oTable.fnFilter("Opera"); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Presto"; } + ); + + oTest.fnWaitTest( + "Search plain text term and escape regex true", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "oSearch": { + "sSearch": "DS", + "bRegex": false + } + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Nintendo DS browser"; } + ); + + oTest.fnWaitTest( + "Search plain text term and escape regex false", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "oSearch": { + "sSearch": "Opera", + "bRegex": true + } + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Presto"; } + ); + + oTest.fnWaitTest( + "Search regex text term and escape regex true", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "oSearch": { + "sSearch": "1.*", + "bRegex": false + } + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; } + ); + + oTest.fnWaitTest( + "Search regex text term and escape regex false", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "oSearch": { + "sSearch": "1.*", + "bRegex": true + } + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Gecko"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/sAjaxSource.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/sAjaxSource.js new file mode 100644 index 0000000..c7c4545 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/sAjaxSource.js @@ -0,0 +1,29 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "sAjaxSource" ); + +/* Sanitfy check really - all the other tests blast this */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Server side is off by default", + null, + function () { + return oSettings.sAjaxSource == "../../../examples/ajax/sources/objects.txt"; + } + ); + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/sDom.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/sDom.js new file mode 100644 index 0000000..cef29bb --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/sDom.js @@ -0,0 +1,311 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "sDom" ); + +/* This is going to be brutal on the browser! There is a lot that can be tested here... */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Default DOM varaible", + null, + function () { return oSettings.sDom == "lfrtip"; } + ); + + oTest.fnWaitTest( + "Default DOM in document", + null, + function () { + var nNodes = $('#demo div, #demo table'); + var nWrapper = document.getElementById('example_wrapper'); + var nLength = document.getElementById('example_length'); + var nFilter = document.getElementById('example_filter'); + var nInfo = document.getElementById('example_info'); + var nPaging = document.getElementById('example_paginate'); + var nTable = document.getElementById('example'); + + var bReturn = + nNodes[0] == nWrapper && + nNodes[1] == nLength && + nNodes[2] == nFilter && + nNodes[3] == nTable && + nNodes[4] == nInfo && + nNodes[5] == nPaging; + return bReturn; + } + ); + + oTest.fnWaitTest( + "Check example 1 in code propagates", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "sDom": '<"wrapper"flipt>' + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.sDom == '<"wrapper"flipt>'; } + ); + + oTest.fnWaitTest( + "Check example 1 in DOM", + null, + function () { + var jqNodes = $('#demo div, #demo table'); + var nNodes = []; + + /* Strip the paging nodes */ + for ( var i=0, iLen=jqNodes.length ; i<iLen ; i++ ) + { + if ( jqNodes[i].getAttribute('id') != "example_previous" && + jqNodes[i].getAttribute('id') != "example_next" ) + { + nNodes.push( jqNodes[i] ); + } + } + + var nWrapper = document.getElementById('example_wrapper'); + var nLength = document.getElementById('example_length'); + var nFilter = document.getElementById('example_filter'); + var nInfo = document.getElementById('example_info'); + var nPaging = document.getElementById('example_paginate'); + var nTable = document.getElementById('example'); + var nCustomWrapper = $('div.wrapper')[0]; + + var bReturn = + nNodes[0] == nWrapper && + nNodes[1] == nCustomWrapper && + nNodes[2] == nFilter && + nNodes[3] == nLength && + nNodes[4] == nInfo && + nNodes[5] == nPaging && + nNodes[6] == nTable; + return bReturn; + } + ); + + oTest.fnWaitTest( + "Check example 2 in DOM", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "sDom": '<lf<t>ip>' + } ); + }, + function () { + var jqNodes = $('#demo div, #demo table'); + var nNodes = []; + var nCustomWrappers = [] + + /* Strip the paging nodes */ + for ( var i=0, iLen=jqNodes.length ; i<iLen ; i++ ) + { + if ( jqNodes[i].getAttribute('id') != "example_previous" && + jqNodes[i].getAttribute('id') != "example_next" ) + { + nNodes.push( jqNodes[i] ); + } + + /* Only the two custom divs don't have class names */ + if ( jqNodes[i].className == "" ) + { + nCustomWrappers.push( jqNodes[i] ); + } + } + + var nWrapper = document.getElementById('example_wrapper'); + var nLength = document.getElementById('example_length'); + var nFilter = document.getElementById('example_filter'); + var nInfo = document.getElementById('example_info'); + var nPaging = document.getElementById('example_paginate'); + var nTable = document.getElementById('example'); + + var bReturn = + nNodes[0] == nWrapper && + nNodes[1] == nCustomWrappers[0] && + nNodes[2] == nLength && + nNodes[3] == nFilter && + nNodes[4] == nCustomWrappers[1] && + nNodes[5] == nTable && + nNodes[6] == nInfo && + nNodes[7] == nPaging; + return bReturn; + } + ); + + oTest.fnWaitTest( + "Check no length element", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "sDom": 'frtip' + } ); + }, + function () { + var nNodes = $('#demo div, #demo table'); + var nWrapper = document.getElementById('example_wrapper'); + var nLength = document.getElementById('example_length'); + var nFilter = document.getElementById('example_filter'); + var nInfo = document.getElementById('example_info'); + var nPaging = document.getElementById('example_paginate'); + var nTable = document.getElementById('example'); + + var bReturn = + nNodes[0] == nWrapper && + null == nLength && + nNodes[1] == nFilter && + nNodes[2] == nTable && + nNodes[3] == nInfo && + nNodes[4] == nPaging; + return bReturn; + } + ); + + oTest.fnWaitTest( + "Check no filter element", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "sDom": 'lrtip' + } ); + }, + function () { + var nNodes = $('#demo div, #demo table'); + var nWrapper = document.getElementById('example_wrapper'); + var nLength = document.getElementById('example_length'); + var nFilter = document.getElementById('example_filter'); + var nInfo = document.getElementById('example_info'); + var nPaging = document.getElementById('example_paginate'); + var nTable = document.getElementById('example'); + + var bReturn = + nNodes[0] == nWrapper && + nNodes[1] == nLength && + null == nFilter && + nNodes[2] == nTable && + nNodes[3] == nInfo && + nNodes[4] == nPaging; + return bReturn; + } + ); + + /* Note we don't test for no table as this is not supported (and it would be fairly daft! */ + + oTest.fnWaitTest( + "Check no info element", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "sDom": 'lfrtp' + } ); + }, + function () { + var nNodes = $('#demo div, #demo table'); + var nWrapper = document.getElementById('example_wrapper'); + var nLength = document.getElementById('example_length'); + var nFilter = document.getElementById('example_filter'); + var nInfo = document.getElementById('example_info'); + var nPaging = document.getElementById('example_paginate'); + var nTable = document.getElementById('example'); + + var bReturn = + nNodes[0] == nWrapper && + nNodes[1] == nLength && + nNodes[2] == nFilter && + nNodes[3] == nTable && + null == nInfo && + nNodes[4] == nPaging; + return bReturn; + } + ); + + oTest.fnWaitTest( + "Check no paging element", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "sDom": 'lfrti' + } ); + }, + function () { + var nNodes = $('#demo div, #demo table'); + var nWrapper = document.getElementById('example_wrapper'); + var nLength = document.getElementById('example_length'); + var nFilter = document.getElementById('example_filter'); + var nInfo = document.getElementById('example_info'); + var nPaging = document.getElementById('example_paginate'); + var nTable = document.getElementById('example'); + + var bReturn = + nNodes[0] == nWrapper && + nNodes[1] == nLength && + nNodes[2] == nFilter && + nNodes[3] == nTable && + nNodes[4] == nInfo && + null == nPaging; + return bReturn; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/sPaginationType.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/sPaginationType.js new file mode 100644 index 0000000..684fb83 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/5_ajax_objects/sPaginationType.js @@ -0,0 +1,148 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "sPaginationType" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumns": [ + { "mDataProp": "engine" }, + { "mDataProp": "browser" }, + { "mDataProp": "platform" }, + { "mDataProp": "version" }, + { "mDataProp": "grade" } + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Check two button paging is the default", + null, + function () { return oSettings.sPaginationType == "two_button"; } + ); + + oTest.fnWaitTest( + "Check class is applied", + null, + function () { return $('#example_paginate').hasClass('paging_two_button'); } + ); + + oTest.fnWaitTest( + "Two A elements are in the wrapper", + null, + function () { return $('#example_paginate a').length == 2; } + ); + + oTest.fnWaitTest( + "We have the previous button", + null, + function () { return document.getElementById('example_previous'); } + ); + + oTest.fnWaitTest( + "We have the next button", + null, + function () { return document.getElementById('example_next'); } + ); + + oTest.fnWaitTest( + "Previous button is disabled", + null, + function () { return $('#example_previous').hasClass('paginate_disabled_previous'); } + ); + + oTest.fnWaitTest( + "Next button is enabled", + null, + function () { return $('#example_next').hasClass('paginate_enabled_next'); } + ); + + /* Don't test paging - that's done by the zero config test script. */ + + + /* Two buttons paging */ + var bComplete = false; + oTest.fnWaitTest( + "Can enabled full numbers paging", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/objects.txt", + "aoColumnDefs": [ + { "mDataProp": "engine", "aTargets": [0] }, + { "mDataProp": "browser", "aTargets": [1] }, + { "mDataProp": "platform", "aTargets": [2] }, + { "mDataProp": "version", "aTargets": [3] }, + { "mDataProp": "grade", "aTargets": [4] } + ], + "sPaginationType": "full_numbers", + "fnInitComplete": function () { + bComplete = true; + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { + if ( bComplete ) + return oSettings.sPaginationType == "full_numbers"; + else + return false; + } + ); + + oTest.fnWaitTest( + "Check full numbers class is applied", + null, + function () { return $('#example_paginate').hasClass('paging_full_numbers'); } + ); + + + var nFirst, nPrevious, nNext, nLast; + oTest.fnWaitTest( + "Jump to last page", + function () { + nFirst = $('div.dataTables_paginate a.first'); + nPrevious = $('div.dataTables_paginate a.previous'); + nNext = $('div.dataTables_paginate a.next'); + nLast = $('div.dataTables_paginate a.last'); + nLast.click(); + }, + function () { + return document.getElementById('example_info').innerHTML == "Showing 51 to 57 of 57 entries"; + } + ); + + oTest.fnWaitTest( + "Go to two pages previous", + function () { + nPrevious.click(); + nPrevious.click(); + }, + function () { + return document.getElementById('example_info').innerHTML == "Showing 31 to 40 of 57 entries"; + } + ); + + oTest.fnWaitTest( + "Next (second last) page", + function () { + nNext.click(); + }, + function () { + return document.getElementById('example_info').innerHTML == "Showing 41 to 50 of 57 entries"; + } + ); + + oTest.fnWaitTest( + "Jump to first page", + function () { + nFirst.click(); + }, + function () { + return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/_zero_config.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/_zero_config.js new file mode 100644 index 0000000..aa257f9 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/_zero_config.js @@ -0,0 +1,403 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "Sanity checks for DataTables with delayed DOM creation" ); + +$(document).ready( function () { + var oInit = { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + }; + $('#example').dataTable( oInit ); + + oTest.fnWaitTest( + "10 rows shown on the first page", + null, + function () { return $('#example tbody tr').length == 10; } + ); + + oTest.fnWaitTest( + "10 TR elements available from fnGetNodes", + null, + function () { return $('#example').dataTable().fnGetNodes().length == 10; } + ); + + oTest.fnTest( + "Initial sort occured", + null, + function () { return $('#example tbody td:eq(0)').html() == "Gecko"; } + ); + + oTest.fnTest( + "Sorting (first click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnWaitTest( + "14 TR elements available from fnGetNodes after sort", + null, + function () { return $('#example').dataTable().fnGetNodes().length == 14; } + ); + + oTest.fnTest( + "Sorting (second click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnTest( + "Sorting (third click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Sorting (first click) on numeric column", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "-"; } + ); + + oTest.fnTest( + "Sorting (second click) on numeric column", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "522.1"; } + ); + + oTest.fnTest( + "Sorting multi-column (first click)", + function () { + $('#example thead th:eq(0)').click(); + oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); }, + function () { var b = + $('#example tbody td:eq(0)').html() == "Gecko" && + $('#example tbody td:eq(1)').html() == "Camino 1.0"; return b; } + ); + + oTest.fnTest( + "Sorting multi-column - sorting second column only", + function () { + $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + /* Basic paging */ + oTest.fnTest( + "Paging to second page", + function () { $('#example_next').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "IE Mobile"; } + ); + + oTest.fnTest( + "Paging to first page", + function () { $('#example_previous').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Attempting to page back beyond the first page", + function () { $('#example_previous').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + /* Changing length */ + oTest.fnTest( + "Changing table length to 25 records", + function () { $("select[name=example_length]").val('25').change(); }, + function () { return $('#example tbody tr').length == 25; } + ); + + oTest.fnTest( + "Changing table length to 50 records", + function () { $("select[name=example_length]").val('50').change(); }, + function () { return $('#example tbody tr').length == 50; } + ); + + oTest.fnTest( + "Changing table length to 100 records", + function () { $("select[name=example_length]").val('100').change(); }, + function () { return $('#example tbody tr').length == 57; } + ); + + oTest.fnTest( + "Changing table length to 10 records", + function () { $("select[name=example_length]").val('10').change(); }, + function () { return $('#example tbody tr').length == 10; } + ); + + /* + * Information element + */ + oTest.fnTest( + "Information on zero config", + null, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Information on second page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 11 to 20 of 57 entries"; } + ); + + oTest.fnTest( + "Information on third page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 21 to 30 of 57 entries"; } + ); + + oTest.fnTest( + "Information on last page", + function () { + $('#example_next').click(); + $('#example_next').click(); + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 51 to 57 of 57 entries"; } + ); + + oTest.fnTest( + "Information back on first page", + function () { + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Information with 25 records", + function () { $("select[name=example_length]").val('25').change(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 25 of 57 entries"; } + ); + + oTest.fnTest( + "Information with 25 records - second page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 26 to 50 of 57 entries"; } + ); + + oTest.fnTest( + "Information with 100 records - first page", + function () { + $('#example_previous').click(); + $("select[name=example_length]").val('100').change(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 57 of 57 entries"; } + ); + + oTest.fnTest( + "Information back to 10 records", + function () { + $('#example_previous').click(); + $("select[name=example_length]").val('10').change(); + }, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Information with filter 'Win'", + function () { $('#example_filter input').val("Win").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' second page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' last page", + function () { + $('#example_next').click(); + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 31 to 31 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' back to first page", + function () { + $('#example_previous').click(); + $('#example_previous').click(); + $('#example_previous').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' second page - second time", + function () { + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter increased to 'Win 98'", + function () { $('#example_filter input').val("Win 98").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 9 of 9 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter decreased to 'Win'", + function () { $('#example_filter input').val("Win").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter 'Win' second page - third time", + function () { + $('#example_next').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 11 to 20 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Information with filter removed", + function () { $('#example_filter input').val("").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 57 entries"; } + ); + + + /* + * Filtering + */ + oTest.fnWaitTest( + "Filter 'W' - rows", + function () { + /* Reset the table such that the old sorting doesn't mess things up */ + oSession.fnRestore(); + $('#example').dataTable( oInit ); + $('#example_filter input').val("W").keyup(); }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Gecko"; } + ); + + oTest.fnTest( + "Filter 'W' - info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 42 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Wi'", + function () { $('#example_filter input').val("Wi").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 32 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Win'", + function () { $('#example_filter input').val("Win").keyup(); }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting column 1", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "AOL browser (AOL desktop)"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting column 1 info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 31 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting column 1 reverse", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnTest( + "Filter 'Win XP' - maintaing reverse sorting col 1", + function () { $('#example_filter input').val("Win XP").keyup(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Internet Explorer 7"; } + ); + + oTest.fnTest( + "Filter 'Win XP' - sorting col 3", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "4"; } + ); + + oTest.fnTest( + "Filter 'Win XP' - sorting col 3 - reversed", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "7"; } + ); + + oTest.fnTest( + "Filter 'Win' - sorting col 3 - reversed info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 6 of 6 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter 'nothinghere'", + function () { $('#example_filter input').val("nothinghere").keyup(); }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == + "No matching records found"; } + ); + + oTest.fnTest( + "Filter 'nothinghere' - info", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Filter back to blank and 1st column sorting", + function () { + $('#example_filter input').val("").keyup(); + $('#example thead th:eq(0)').click(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Prefixing a filter entry", + function () { + $('#example_filter input').val("Win").keyup(); + $('#example_filter input').val("GeckoWin").keyup(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 0 to 0 of 0 entries (filtered from 57 total entries)"; } + ); + + oTest.fnTest( + "Prefixing a filter entry with space", + function () { + $('#example_filter input').val("Gecko Win").keyup(); + }, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 17 entries (filtered from 57 total entries)"; } + ); + + + + + + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aaSorting.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aaSorting.js new file mode 100644 index 0000000..a46004b --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aaSorting.js @@ -0,0 +1,212 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aaSorting" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Default sorting is single column", + null, + function () { + return oSettings.aaSorting.length == 1 && typeof oSettings.aaSorting[0] == 'object'; + } + ); + + oTest.fnWaitTest( + "Default sorting is first column asc", + null, + function () { + return oSettings.aaSorting[0].length == 3 && oSettings.aaSorting[0][0] == 0 && + oSettings.aaSorting[0][1] == 'asc'; + } + ); + + oTest.fnWaitTest( + "Sorting is applied", + null, + function () { return $('#example tbody td:eq(0)').html() == "Gecko"; } + ); + + + oTest.fnWaitTest( + "Custom sorting on single string column asc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "aaSorting": [['1','asc']] + } ); + }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + + oTest.fnWaitTest( + "Custom sorting on single string column desc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "aaSorting": [['1','desc']] + } ); + }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + + oTest.fnWaitTest( + "Custom sorting on single int column asc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "aaSorting": [['1','asc']] + } ); + }, + function () { return $('#example tbody td:eq(3)').html() == "-"; } + ); + + + oTest.fnWaitTest( + "Custom sorting on single int column desc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "aaSorting": [['1','desc']] + } ); + }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + + oTest.fnWaitTest( + "Multi-column sorting (2 column) - string asc / string asc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "aaSorting": [['0','asc'], ['1','asc']] + } ); + }, + function () { return $('#example tbody td:eq(1)').html() == "Camino 1.0"; } + ); + + oTest.fnWaitTest( + "Multi-column sorting (2 column) - string asc / string desc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "aaSorting": [['0','asc'], ['1','desc']] + } ); + }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnWaitTest( + "Multi-column sorting (2 column) - string desc / string asc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "aaSorting": [['0','desc'], ['1','asc']] + } ); + }, + function () { return $('#example tbody td:eq(1)').html() == "iPod Touch / iPhone"; } + ); + + oTest.fnWaitTest( + "Multi-column sorting (2 column) - string desc / string desc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "aaSorting": [['0','desc'], ['1','desc']] + } ); + }, + function () { return $('#example tbody td:eq(1)').html() == "Safari 3.0"; } + ); + + + oTest.fnWaitTest( + "Multi-column sorting (2 column) - string asc / int asc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "aaSorting": [['0','asc'], ['3','asc']] + } ); + }, + function () { return $('#example tbody td:eq(3)').html() == "1"; } + ); + + oTest.fnWaitTest( + "Multi-column sorting (2 column) - string asc / int desc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "aaSorting": [['0','asc'], ['3','desc']] + } ); + }, + function () { return $('#example tbody td:eq(3)').html() == "1.9"; } + ); + + oTest.fnWaitTest( + "Multi-column sorting (2 column) - string desc / int asc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "aaSorting": [['0','desc'], ['3','asc']] + } ); + }, + function () { return $('#example tbody td:eq(3)').html() == "125.5"; } + ); + + oTest.fnWaitTest( + "Multi-column sorting (2 column) - string desc / int desc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "aaSorting": [['0','desc'], ['3','desc']] + } ); + }, + function () { return $('#example tbody td:eq(3)').html() == "522.1"; } + ); + + oTest.fnWaitTest( + "Multi-column sorting (3 column) - string asc / int asc / string asc", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "aaSorting": [['0','asc'], ['3','asc'], ['1','asc']] + } ); + }, + function () { return $('#example tbody tr:eq(7) td:eq(1)').html() == "Firefox 1.0"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aaSortingFixed.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aaSortingFixed.js new file mode 100644 index 0000000..7105522 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aaSortingFixed.js @@ -0,0 +1,70 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aaSortingFixed" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "No fixed sorting by default", + null, + function () { + return oSettings.aaSortingFixed == null; + } + ); + + + oTest.fnWaitTest( + "Fixed sorting on first column (string/asc) with user sorting on second column (string/asc)", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "aaSortingFixed": [['0','asc']], + "fnInitComplete": function () { + $('#example thead th:eq(1)').click(); + } + } ); + // + }, + function () { return $('#example tbody td:eq(1)').html() == "Camino 1.0"; } + ); + + oTest.fnWaitTest( + "Fixed sorting on first column (string/asc) with user sorting on second column (string/desc)", + function () { + $('#example thead th:eq(1)').click(); + }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnWaitTest( + "Fixed sorting on fourth column (int/asc) with user sorting on second column (string/asc)", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "aaSortingFixed": [['3','asc']] + } ); + $('#example thead th:eq(1)').click(); + }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnWaitTest( + "Fixed sorting on fourth column (int/asc) with user sorting on second column (string/desc)", + function () { + $('#example thead th:eq(1)').click(); + }, + function () { return $('#example tbody td:eq(1)').html() == "PSP browser"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.bSearchable.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.bSearchable.js new file mode 100755 index 0000000..54c946a --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.bSearchable.js @@ -0,0 +1,79 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aoColumns.bSeachable" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Columns are searchable by default", + function () { oTable.fnFilter("Camino"); }, + function () { + if ( $('#example tbody tr:eq(0) td:eq(1)')[0] ) + return $('#example tbody tr:eq(0) td:eq(1)').html().match(/Camino/); + else + return null; + } + ); + + oTest.fnWaitTest( + "Disabling sorting on a column removes it from the global filter", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "aoColumns": [ + null, + { "bSearchable": false }, + null, + null, + null + ] + } ); + oSettings = oTable.fnSettings(); + oTable.fnFilter("Camino"); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; } + ); + + oTest.fnWaitTest( + "Disabled on one column has no effect on other columns", + function () { oTable.fnFilter("Webkit"); }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Webkit"; } + ); + + oTest.fnWaitTest( + "Disable filtering on multiple columns", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "aoColumns": [ + { "bSearchable": false }, + { "bSearchable": false }, + null, + null, + null + ] + } ); + oSettings = oTable.fnSettings(); + oTable.fnFilter("Webkit"); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; } + ); + + oTest.fnWaitTest( + "Filter on second disabled column", + function () { oTable.fnFilter("Camino"); }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.bSortable.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.bSortable.js new file mode 100755 index 0000000..6f7b202 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.bSortable.js @@ -0,0 +1,112 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aoColumns.bSortable" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "All columns are sortable by default", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "All others"; } + ); + + oTest.fnWaitTest( + "Can disable sorting from one column", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "aoColumns": [ + null, + { "bSortable": false }, + null, + null, + null + ] + } ); + $('#example thead th:eq(1)').click(); + }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() != "All others"; } + ); + + oTest.fnWaitTest( + "Disabled column has no sorting class", + null, + function () { return $('#example thead th:eq(1)').hasClass("sorting_asc") == false; } + ); + + oTest.fnWaitTest( + "Other columns can still sort", + function () { + $('#example thead th:eq(4)').click(); + $('#example thead th:eq(4)').click(); + }, + function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == "X"; } + ); + + oTest.fnWaitTest( + "Disable sorting on multiple columns - no sorting classes", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "aoColumns": [ + null, + { "bSortable": false }, + null, + { "bSortable": false }, + null + ] + } ); + }, + function () { + var bReturn = + $('#example thead th:eq(1)').hasClass("sorting") || + $('#example thead th:eq(3)').hasClass("sorting") + return bReturn == false; + } + ); + + oTest.fnWaitTest( + "Sorting on disabled column 1 has no effect", + function () { + $('#example thead th:eq(1)').click(); + }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() != "All others"; } + ); + + oTest.fnWaitTest( + "Sorting on disabled column 2 has no effect", + function () { + $('#example thead th:eq(3)').click(); + }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() != "-"; } + ); + + oTest.fnWaitTest( + "Second sort on disabled column 2 has no effect", + function () { + $('#example thead th:eq(3)').click(); + }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() != "-"; } + ); + + oTest.fnWaitTest( + "Even with multiple disabled sorting columns other columns can still sort", + function () { + $('#example thead th:eq(4)').click(); + $('#example thead th:eq(4)').click(); + }, + function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == "X"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.bUseRendered.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.bUseRendered.js new file mode 100755 index 0000000..d64f70d --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.bUseRendered.js @@ -0,0 +1,151 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aoColumns.bUseRendered" ); + +/* bUseRendered is used to alter sorting data, if false then the original data is used for + * sorting rather than the rendered data + */ + +$(document).ready( function () { + /* Check the default */ + var mTmp = 0; + + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "aoColumns": [ + null, + { "fnRender": function (a) { + if ( a.iDataRow == 0 ) { + mTmp++; + return "aaa"; + } else + return a.aData[a.iDataColumn]; + } }, + null, + null, + null + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Default for bUseRendered is true - rendered data is used for sorting", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'aaa'; } + ); + + oTest.fnWaitTest( + "When bUseRendered is false, original data is used for sorting", + function () { + mTmp = 0; + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "aoColumns": [ + null, + { + "bUseRendered": false, + "fnRender": function (a) { + if ( a.iDataRow == 0 ) { + mTmp++; + return "aaa"; + } else { + return a.aData[a.iDataColumn]; + } + } + }, + null, + null, + null + ] + } ); + $('#example thead th:eq(1)').click(); + }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'All others'; } + ); + + + oTest.fnWaitTest( + "bUseRendered set to false on one columns and true (default) on two others", + function () { + mTmp = 0; + var mTmp2 = 0; + var mTmp3 = 0; + + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "aoColumns": [ + { + "fnRender": function (a) { + if ( a.iDataRow == 0 ) { + mTmp++; + return "aaa1"; + } else { + return a.aData[a.iDataColumn]; + } + } + }, + { + "bUseRendered": false, + "fnRender": function (a) { + if ( a.iDataRow == 0 ) { + mTmp2++; + return "aaa2"; + } else { + return a.aData[a.iDataColumn]; + } + } + }, + { + "fnRender": function (a) { + if ( a.iDataRow == 0 ) { + mTmp3++; + return "zzz3"; + } else { + return a.aData[a.iDataColumn]; + } + } + }, + null, + null + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == 'aaa1'; } + ); + + oTest.fnWaitTest( + "Multi-column rendering - 2nd column sorting", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'All others'; } + ); + + oTest.fnWaitTest( + "Multi-column rendering - 3rd column sorting", + function () { + $('#example thead th:eq(2)').click(); + $('#example thead th:eq(2)').click(); + }, + function () { return $('#example tbody tr:eq(0) td:eq(2)').html() == 'zzz3'; } + ); + + oTest.fnWaitTest( + "Multi-column rendering - 4th column sorting", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == '-'; } + ); + + oTest.fnWaitTest( + "Multi-column rendering - 5th column sorting", + function () { $('#example thead th:eq(4)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'A'; } + ); + + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.bVisible.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.bVisible.js new file mode 100755 index 0000000..ccc84d7 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.bVisible.js @@ -0,0 +1,127 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aoColumns.bVisible" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "All columns are visible by default", + null, + function () { return $('#example tbody tr:eq(0) td').length == 5; } + ); + + oTest.fnWaitTest( + "Can hide one column and it removes td column from DOM", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "aoColumns": [ + null, + { "bVisible": false }, + null, + null, + null + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td').length == 4; } + ); + + oTest.fnWaitTest( + "Can hide one column and it removes thead th column from DOM", + null, + function () { return $('#example thead tr:eq(0) th').length == 4; } + ); + + oTest.fnWaitTest( + "The correct thead column has been hidden", + null, + function () { + var jqNodes = $('#example thead tr:eq(0) th'); + var bReturn = + jqNodes[0].innerHTML == "Rendering engine" && + jqNodes[1].innerHTML == "Platform(s)" && + jqNodes[2].innerHTML == "Engine version" && + jqNodes[3].innerHTML == "CSS grade"; + return bReturn; + } + ); + + oTest.fnWaitTest( + "The correct tbody column has been hidden", + function () { + oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); + }, + function () { + var jqNodes = $('#example tbody tr:eq(0) td'); + var bReturn = + jqNodes[0].innerHTML == "Gecko" && + jqNodes[1].innerHTML == "Gnome" && + jqNodes[2].innerHTML == "1.8" && + jqNodes[3].innerHTML == "A"; + return bReturn; + } + ); + + + oTest.fnWaitTest( + "Can hide multiple columns and it removes td column from DOM", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "aoColumns": [ + null, + { "bVisible": false }, + { "bVisible": false }, + null, + { "bVisible": false } + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td').length == 2; } + ); + + oTest.fnWaitTest( + "Multiple hide - removes thead th column from DOM", + null, + function () { return $('#example thead tr:eq(0) th').length == 2; } + ); + + oTest.fnWaitTest( + "Multiple hide - the correct thead columns have been hidden", + null, + function () { + var jqNodes = $('#example thead tr:eq(0) th'); + var bReturn = + jqNodes[0].innerHTML == "Rendering engine" && + jqNodes[1].innerHTML == "Engine version" + return bReturn; + } + ); + + oTest.fnWaitTest( + "Multiple hide - the correct tbody columns have been hidden", + function () { + oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); + }, + function () { + var jqNodes = $('#example tbody tr:eq(0) td'); + var bReturn = + jqNodes[0].innerHTML == "Gecko" && + jqNodes[1].innerHTML == "1" + return bReturn; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.fnRender.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.fnRender.js new file mode 100755 index 0000000..eefe2ad --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.fnRender.js @@ -0,0 +1,190 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aoColumns.fnRender" ); + +$(document).ready( function () { + /* Check the default */ + var mTmp = 0; + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "aoColumns": [ + null, + { "fnRender": function (a) { + mTmp++; + return a.aData[a.iDataColumn]; + } }, + null, + null, + null + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Single column - fnRender is called once for each row", + null, + function () { return mTmp == 57; } + ); + + oTest.fnWaitTest( + "Confirm that fnRender passes two arguments with four parameters", + function () { + mTmp = true; + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "aoColumns": [ + null, + { "fnRender": function (a) { + if ( arguments.length != 2 || typeof a.iDataRow=='undefined' || + typeof a.iDataColumn=='undefined' || typeof a.aData=='undefined' || + typeof a.mDataProp=='undefined' ) + { + mTmp = false; + } + return a.aData[a.iDataColumn]; + } }, + null, + null, + null + ] + } ); + }, + function () { return mTmp; } + ); + + oTest.fnWaitTest( + "fnRender iDataColumn is row number", + function () { + var iCount = 0; + mTmp = true; + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "aoColumns": [ + null, + { "fnRender": function (a) { + if ( iCount != a.iDataRow ) + { + mTmp = false; + } + iCount++; + return a.aData[a.iDataColumn]; + } }, + null, + null, + null + ] + } ); + }, + function () { return mTmp; } + ); + + oTest.fnWaitTest( + "fnRender iDataColumn is the column", + function () { + mTmp = true; + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "aoColumns": [ + null, + { "fnRender": function (a) { + if ( a.iDataColumn != 1 ) + { + mTmp = false; + } + return a.aData[a.iDataColumn]; + } }, + null, + null, + null + ] + } ); + }, + function () { return mTmp; } + ); + + oTest.fnWaitTest( + "fnRender aData is data array of correct size", + function () { + mTmp = true; + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "aoColumns": [ + null, + { "fnRender": function (a) { + if ( a.aData.length != 5 ) + { + mTmp = false; + } + return a.aData[a.iDataColumn]; + } }, + null, + null, + null + ] + } ); + }, + function () { return mTmp; } + ); + + oTest.fnWaitTest( + "Passed back data is put into the DOM", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "aoColumns": [ + null, + { "fnRender": function (a) { + return 'unittest'; + } }, + null, + null, + null + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'unittest'; } + ); + + oTest.fnWaitTest( + "Passed back data is put into the DOM", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "aoColumns": [ + null, + null, + { "fnRender": function (a) { + return 'unittest1'; + } }, + { "fnRender": function (a) { + return 'unittest2'; + } }, + null + ] + } ); + }, + function () { + var bReturn = + $('#example tbody tr:eq(0) td:eq(2)').html() == 'unittest1' && + $('#example tbody tr:eq(0) td:eq(3)').html() == 'unittest2'; + return bReturn; } + ); + + + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.iDataSort.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.iDataSort.js new file mode 100755 index 0000000..5c5080a --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.iDataSort.js @@ -0,0 +1,92 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aoColumns.iDataSort" ); + +$(document).ready( function () { + /* Should know that sorting already works by default from other tests, so we can jump + * right in here + */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "aoColumns": [ + null, + { "iDataSort": 4 }, + null, + null, + null + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Sorting on first column is uneffected", + null, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == 'Gecko'; } + ); + + oTest.fnWaitTest( + "Sorting on second column is the order of the fifth", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'A'; } + ); + + oTest.fnWaitTest( + "Reserve sorting on second column uses fifth column as well", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'X'; } + ); + + oTest.fnWaitTest( + "Sorting on 5th column retains it's own sorting", + function () { $('#example thead th:eq(4)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'A'; } + ); + + + oTest.fnWaitTest( + "Use 2nd col for sorting 5th col and via-versa - no effect on first col sorting", + function () { + mTmp = 0; + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "aoColumns": [ + null, + { "iDataSort": 4 }, + null, + null, + { "iDataSort": 1 } + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == 'Gecko'; } + ); + + oTest.fnWaitTest( + "2nd col sorting uses fifth col", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'A'; } + ); + + oTest.fnWaitTest( + "2nd col sorting uses fifth col - reversed", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(4)').html() == 'X'; } + ); + + oTest.fnWaitTest( + "5th col sorting uses 2nd col", + function () { $('#example thead th:eq(4)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'All others'; } + ); + + oTest.fnWaitTest( + "5th col sorting uses 2nd col - reversed", + function () { $('#example thead th:eq(4)').click(); }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'Seamonkey 1.1'; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.sClass.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.sClass.js new file mode 100755 index 0000000..5c2ffd9 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.sClass.js @@ -0,0 +1,118 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aoColumns.sClass" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "By default the test class hasn't been applied to the column (sanity!)", + null, + function () { return $('#example tbody tr:eq(0) td:eq(2)').hasClass('unittest') == false; } + ); + + oTest.fnWaitTest( + "Add a class to a single column - first row", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "aoColumns": [ + null, + null, + { "sClass": 'unittest' }, + null, + null + ] + } ); + }, + function () { return $('#example tbody tr:eq(1) td:eq(2)').hasClass('unittest'); } + ); + + oTest.fnWaitTest( + "Add a class to a single column - third row", + null, + function () { return $('#example tbody tr:eq(3) td:eq(2)').hasClass('unittest'); } + ); + + oTest.fnWaitTest( + "Add a class to a single column - last row", + null, + function () { return $('#example tbody tr:eq(9) td:eq(2)').hasClass('unittest'); } + ); + + oTest.fnWaitTest( + "Add a class to a single column - has not applied to other columns - 1st", + null, + function () { return $('#example tbody tr:eq(3) td:eq(0)').hasClass('unittest') == false; } + ); + + oTest.fnWaitTest( + "Add a class to a single column - has not applied to other columns - 5th", + null, + function () { return $('#example tbody tr:eq(3) td:eq(4)').hasClass('unittest') == false; } + ); + + oTest.fnWaitTest( + "Add a class to a single column - seventh row - second page", + function () { $('#example_next').click(); }, + function () { return $('#example tbody tr:eq(6) td:eq(2)').hasClass('unittest'); } + ); + + oTest.fnWaitTest( + "Add a class to a single column - has not applied to header", + null, + function () { return $('#example thead tr:eq(3) th:eq(4)').hasClass('unittest') == false; } + ); + + oTest.fnWaitTest( + "Add a class to a single column - has not applied to footer", + null, + function () { return $('#example thead tr:eq(3) th:eq(4)').hasClass('unittest') == false; } + ); + + + oTest.fnWaitTest( + "Class defined for multiple columns - first row", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "aoColumns": [ + { "sClass": 'unittest2' }, + null, + null, + { "sClass": 'unittest1' }, + null + ] + } ); + }, + function () { + var bReturn = + $('#example tbody tr:eq(3) td:eq(0)').hasClass('unittest2') && + $('#example tbody tr:eq(8) td:eq(3)').hasClass('unittest1'); + return bReturn; + } + ); + + oTest.fnWaitTest( + "Class defined for multiple columns - has not applied to other columns - 5th 1", + null, + function () { return $('#example tbody tr:eq(0) td:eq(4)').hasClass('unittest1') == false; } + ); + + oTest.fnWaitTest( + "Class defined for multiple columns - has not applied to other columns - 5th 2", + null, + function () { return $('#example tbody tr:eq(6) td:eq(4)').hasClass('unittest2') == false; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.sName.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.sName.js new file mode 100755 index 0000000..a197bc3 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.sName.js @@ -0,0 +1,29 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aoColumns.sName" ); + +/* This has no effect at all in DOM methods - so we just check that it has applied the name */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "aoColumns": [ + null, + null, + null, + { "sName": 'unit test' }, + null + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Names are stored in the columns object", + null, + function () { return oSettings.aoColumns[3].sName =="unit test"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.sTitle.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.sTitle.js new file mode 100755 index 0000000..e0e0281 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.sTitle.js @@ -0,0 +1,85 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aoColumns.sTitle" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "If not given, then the columns titles are empty", + null, + function () { + var jqNodes = $('#example thead tr:eq(0) th'); + var bReturn = + jqNodes[0].innerHTML == "Rendering engine" && + jqNodes[1].innerHTML == "Browser" && + jqNodes[2].innerHTML == "Platform(s)" && + jqNodes[3].innerHTML == "Engine version" && + jqNodes[4].innerHTML == "CSS grade"; + return bReturn; + } + ); + + oTest.fnWaitTest( + "Can set a single column title - and others are read from DOM", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "aoColumns": [ + null, + { "sTitle": 'unit test' }, + null, + null, + null + ] + } ); + }, + function () { + var jqNodes = $('#example thead tr:eq(0) th'); + var bReturn = + jqNodes[0].innerHTML == "Rendering engine" && + jqNodes[1].innerHTML == "unit test" && + jqNodes[2].innerHTML == "Platform(s)" && + jqNodes[3].innerHTML == "Engine version" && + jqNodes[4].innerHTML == "CSS grade"; + return bReturn; + } + ); + + oTest.fnWaitTest( + "Can set multiple column titles", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "aoColumns": [ + null, + { "sTitle": 'unit test 1' }, + null, + null, + { "sTitle": 'unit test 2' } + ] + } ); + }, + function () { + var jqNodes = $('#example thead tr:eq(0) th'); + var bReturn = + jqNodes[0].innerHTML == "Rendering engine" && + jqNodes[1].innerHTML == "unit test 1" && + jqNodes[2].innerHTML == "Platform(s)" && + jqNodes[3].innerHTML == "Engine version" && + jqNodes[4].innerHTML == "unit test 2"; + return bReturn; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.sWidth.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.sWidth.js new file mode 100755 index 0000000..251d079 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.sWidth.js @@ -0,0 +1,90 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aoColumns.sWidth" ); + +/* NOTE - we need to disable the auto width for the majority of these test in order to preform + * these tests as the auto width will convert the width to a px value. We can do 'non-exact' tests + * with auto width enabled however to ensure it scales columns as required + */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "bAutoWidth": false, + "aoColumns": [ + null, + { "sWidth": '40%' }, + null, + null, + null + ] + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "With auto width disabled the width for one column is appled", + null, + function () { return $('#example thead th:eq(1)')[0].style.width == "40%"; } + ); + + oTest.fnWaitTest( + "With auto width disabled the width for one column is appled", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "bAutoWidth": false, + "aoColumns": [ + null, + null, + { "sWidth": '20%' }, + { "sWidth": '30%' }, + null + ] + } ); + }, + function () { + var bReturn = + $('#example thead th:eq(2)')[0].style.width == "20%" && + $('#example thead th:eq(3)')[0].style.width == "30%"; + return bReturn; + } + ); + + + oTest.fnWaitTest( + "With auto width, it will make the smallest column the largest with percentage width given", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "aoColumns": [ + null, + null, + null, + { "sWidth": '40%' }, + null + ] + } ); + }, + function () { + var anThs = $('#example thead th'); + var a0 = anThs[0].offsetWidth; + var a1 = anThs[1].offsetWidth; + var a2 = anThs[2].offsetWidth; + var a3 = anThs[3].offsetWidth; + var a4 = anThs[4].offsetWidth; + + if ( a3>a0 && a3>a1 && a3>a2 && a3>a4 ) + return true; + else + return false; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aoSearchCols.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aoSearchCols.js new file mode 100644 index 0000000..aa61f90 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aoSearchCols.js @@ -0,0 +1,125 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "aoSearchCols" ); + +/* We could be here forever testing this one, so we test a limited subset on a couple of colums */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Default should be to have a empty colums array", + null, + function () { + var bReturn = + oSettings.aoPreSearchCols[0].sSearch == 0 && !oSettings.aoPreSearchCols[0].bRegex && + oSettings.aoPreSearchCols[1].sSearch == 0 && !oSettings.aoPreSearchCols[1].bRegex && + oSettings.aoPreSearchCols[2].sSearch == 0 && !oSettings.aoPreSearchCols[2].bRegex && + oSettings.aoPreSearchCols[3].sSearch == 0 && !oSettings.aoPreSearchCols[3].bRegex && + oSettings.aoPreSearchCols[4].sSearch == 0 && !oSettings.aoPreSearchCols[4].bRegex; + return bReturn; + } + ); + + + oTest.fnWaitTest( + "Search on a single column - no regex statement given", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "aoSearchCols": [ + null, + { "sSearch": "Mozilla" }, + null, + { "sSearch": "1" }, + null + ] + } ); + }, + function () { return $('#example_info').html() == "Showing 1 to 9 of 9 entries (filtered from 57 total entries)"; } + ); + + oTest.fnWaitTest( + "Search on two columns - no regex statement given", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "aoSearchCols": [ + null, + { "sSearch": "Mozilla" }, + null, + { "sSearch": "1.5" }, + null + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(3)').html() == "1.5"; } + ); + + oTest.fnWaitTest( + "Search on single column - escape regex false", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "aoSearchCols": [ + { "sSearch": ".*ML", "bEscapeRegex": false }, + null, + null, + null, + null + ] + } ); + }, + function () { return $('#example_info').html() == "Showing 1 to 3 of 3 entries (filtered from 57 total entries)"; } + ); + + oTest.fnWaitTest( + "Search on two columns - escape regex false on first, true on second", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "aoSearchCols": [ + { "sSearch": ".*ML", "bEscapeRegex": false }, + { "sSearch": "3.3", "bEscapeRegex": true }, + null, + null, + null + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Konqureror 3.3"; } + ); + + oTest.fnWaitTest( + "Search on two columns (no records) - escape regex false on first, true on second", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "aoSearchCols": [ + { "sSearch": ".*ML", "bEscapeRegex": false }, + { "sSearch": "Allan", "bEscapeRegex": true }, + null, + null, + null + ] + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; } + ); + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/asStripClasses.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/asStripClasses.js new file mode 100644 index 0000000..038447f --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/asStripClasses.js @@ -0,0 +1,109 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "asStripeClasses" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + + oTest.fnWaitTest( + "Default row striping is applied", + null, + function () { + return $('#example tbody tr:eq(0)').hasClass('odd') && + $('#example tbody tr:eq(1)').hasClass('even') && + $('#example tbody tr:eq(2)').hasClass('odd') && + $('#example tbody tr:eq(3)').hasClass('even'); + } + ); + + oTest.fnWaitTest( + "Row striping on the second page", + function () { $('#example_next').click(); }, + function () { + return $('#example tbody tr:eq(0)').hasClass('odd') && + $('#example tbody tr:eq(1)').hasClass('even') && + $('#example tbody tr:eq(2)').hasClass('odd') && + $('#example tbody tr:eq(3)').hasClass('even'); + } + ); + + /* No striping */ + oTest.fnWaitTest( + "No row striping", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "asStripeClasses": [] + } ); + }, + function () { + if ( typeof $('#example tbody tr:eq(1)')[0] == 'undefined' ) + { + /* Use the 'wait for' to allow this to become true */ + return false; + } + return $('#example tbody tr:eq(0)')[0].className == "" && + $('#example tbody tr:eq(1)')[0].className == "" && + $('#example tbody tr:eq(2)')[0].className == "" && + $('#example tbody tr:eq(3)')[0].className == ""; + } + ); + + /* Custom striping */ + oTest.fnWaitTest( + "Custom striping [2]", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "asStripeClasses": [ 'test1', 'test2' ] + } ); + }, + function () { + return $('#example tbody tr:eq(0)').hasClass('test1') && + $('#example tbody tr:eq(1)').hasClass('test2') && + $('#example tbody tr:eq(2)').hasClass('test1') && + $('#example tbody tr:eq(3)').hasClass('test2'); + } + ); + + + /* long array of striping */ + oTest.fnWaitTest( + "Custom striping [4]", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "asStripeClasses": [ 'test1', 'test2', 'test3', 'test4' ] + } ); + }, + function () { + return $('#example tbody tr:eq(0)').hasClass('test1') && + $('#example tbody tr:eq(1)').hasClass('test2') && + $('#example tbody tr:eq(2)').hasClass('test3') && + $('#example tbody tr:eq(3)').hasClass('test4'); + } + ); + + oTest.fnWaitTest( + "Custom striping is restarted on second page [2]", + function () { $('#example_next').click(); }, + function () { + return $('#example tbody tr:eq(0)').hasClass('test1') && + $('#example tbody tr:eq(1)').hasClass('test2') && + $('#example tbody tr:eq(2)').hasClass('test3') && + $('#example tbody tr:eq(3)').hasClass('test4'); + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/bAutoWidth.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/bAutoWidth.js new file mode 100644 index 0000000..45b5a00 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/bAutoWidth.js @@ -0,0 +1,145 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "bAutoWidth" ); + +/* It's actually a little tricky to test this. We can't test absolute numbers because + * different browsers and different platforms will render the width of the columns slightly + * differently. However, we certainly can test the principle of what should happen (column + * width doesn't change over pages) + */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Auto width is enabled by default", + null, + function () { return oSettings.oFeatures.bAutoWidth; } + ); + + oTest.fnWaitTest( + "First column has a width assigned to it", + null, + function () { return $('#example thead th:eq(0)').attr('style').match(/width/i); } + ); + + /* + This would seem like a better test - but there appear to be difficulties with tables + which are bigger (calculated) than there is actually room for. I suspect this is actually + a bug in datatables + oTest.fnWaitTest( + "Check column widths on first page match second page", + null, + function () { + var anThs = $('#example thead th'); + var a0 = anThs[0].offsetWidth; + var a1 = anThs[1].offsetWidth; + var a2 = anThs[2].offsetWidth; + var a3 = anThs[3].offsetWidth; + var a4 = anThs[4].offsetWidth; + $('#example_next').click(); + var b0 = anThs[0].offsetWidth; + var b1 = anThs[1].offsetWidth; + var b2 = anThs[2].offsetWidth; + var b3 = anThs[3].offsetWidth; + var b4 = anThs[4].offsetWidth; + console.log( a0, b0, a1, b1, a2, b2, a3, b3 ); + if ( a0==b0 && a1==b1 && a2==b2 && a3==b3 ) + return true; + else + return false; + } + ); + + oTest.fnWaitTest( + "Check column widths on second page match thid page", + null, + function () { + var anThs = $('#example thead th'); + var a0 = anThs[0].offsetWidth; + var a1 = anThs[1].offsetWidth; + var a2 = anThs[2].offsetWidth; + var a3 = anThs[3].offsetWidth; + var a4 = anThs[4].offsetWidth; + $('#example_next').click(); + var b0 = anThs[0].offsetWidth; + var b1 = anThs[1].offsetWidth; + var b2 = anThs[2].offsetWidth; + var b3 = anThs[3].offsetWidth; + var b4 = anThs[4].offsetWidth; + if ( a0==b0 && a1==b1 && a2==b2 && a3==b3 ) + return true; + else + return false; + } + ); + */ + + /* Check can disable */ + oTest.fnWaitTest( + "Auto width can be disabled", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "bAutoWidth": false + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oFeatures.bAutoWidth == false; } + ); + + oTest.fnWaitTest( + "First column does not have a width assigned to it", + null, + function () { return $('#example thead th:eq(0)').attr('style') == null; } + ); + + /* + oTest.fnWaitTest( + "Check column widths on first page do not match second page", + null, + function () { + var anThs = $('#example thead th'); + var a0 = anThs[0].offsetWidth; + var a1 = anThs[1].offsetWidth; + var a2 = anThs[2].offsetWidth; + var a3 = anThs[3].offsetWidth; + var a4 = anThs[4].offsetWidth; + $('#example_next').click(); + var b0 = anThs[0].offsetWidth; + var b1 = anThs[1].offsetWidth; + var b2 = anThs[2].offsetWidth; + var b3 = anThs[3].offsetWidth; + var b4 = anThs[4].offsetWidth; + if ( a0==b0 && a1==b1 && a2==b2 && a3==b3 ) + return false; + else + return true; + } + ); + */ + + /* Enable makes no difference */ + oTest.fnWaitTest( + "Auto width enabled override", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "bAutoWidth": true + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oFeatures.bAutoWidth; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/bFilter.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/bFilter.js new file mode 100644 index 0000000..f40d7ae --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/bFilter.js @@ -0,0 +1,47 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "bFilter" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + + oTest.fnWaitTest( + "Filtering div exists by default", + null, + function () { return document.getElementById('example_filter') != null; } + ); + + /* Check can disable */ + oTest.fnWaitTest( + "Fltering can be disabled", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "bFilter": false + } ); + }, + function () { return document.getElementById('example_filter') == null; } + ); + + /* Enable makes no difference */ + oTest.fnWaitTest( + "Filtering enabled override", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "bFilter": true + } ); + }, + function () { return document.getElementById('example_filter') != null; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/bInfo.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/bInfo.js new file mode 100644 index 0000000..4cdd5e1 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/bInfo.js @@ -0,0 +1,47 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "bInfo" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + + oTest.fnWaitTest( + "Info div exists by default", + null, + function () { return document.getElementById('example_info') != null; } + ); + + /* Check can disable */ + oTest.fnWaitTest( + "Info can be disabled", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "bInfo": false + } ); + }, + function () { return document.getElementById('example_info') == null; } + ); + + /* Enable makes no difference */ + oTest.fnWaitTest( + "Info enabled override", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "bInfo": true + } ); + }, + function () { return document.getElementById('example_info') != null; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/bLengthChange.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/bLengthChange.js new file mode 100644 index 0000000..2ca7c0d --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/bLengthChange.js @@ -0,0 +1,78 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "bLengthChange" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + + oTest.fnWaitTest( + "Length div exists by default", + null, + function () { return document.getElementById('example_length') != null; } + ); + + oTest.fnWaitTest( + "Four default options", + null, + function () { return $("select[name=example_length] option").length == 4; } + ); + + oTest.fnWaitTest( + "Default options", + null, + function () { + var opts = $("select[name='example_length'] option"); + return opts[0].getAttribute('value') == 10 && opts[1].getAttribute('value') == 25 && + opts[2].getAttribute('value') == 50 && opts[3].getAttribute('value') == 100; + } + ); + + oTest.fnWaitTest( + "Info takes length into account", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 57 entries"; } + ); + + /* Check can disable */ + oTest.fnWaitTest( + "Change length can be disabled", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "bLengthChange": false + } ); + }, + function () { return document.getElementById('example_length') == null; } + ); + + oTest.fnWaitTest( + "Information takes length disabled into account", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 57 entries"; } + ); + + /* Enable makes no difference */ + oTest.fnWaitTest( + "Length change enabled override", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "bLengthChange": true + } ); + }, + function () { return document.getElementById('example_length') != null; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/bPaginate.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/bPaginate.js new file mode 100644 index 0000000..ed63fa8 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/bPaginate.js @@ -0,0 +1,62 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "bPaginate" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + + oTest.fnWaitTest( + "Pagiantion div exists by default", + null, + function () { return document.getElementById('example_paginate') != null; } + ); + + oTest.fnWaitTest( + "Information div takes paging into account", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 10 of 57 entries"; } + ); + + /* Check can disable */ + oTest.fnWaitTest( + "Pagiantion can be disabled", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "bPaginate": false + } ); + }, + function () { return document.getElementById('example_paginate') == null; } + ); + + oTest.fnWaitTest( + "Information div takes paging disabled into account", + null, + function () { return document.getElementById('example_info').innerHTML == + "Showing 1 to 57 of 57 entries"; } + ); + + /* Enable makes no difference */ + oTest.fnWaitTest( + "Pagiantion enabled override", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "bPaginate": true + } ); + }, + function () { return document.getElementById('example_paginate') != null; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/bProcessing.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/bProcessing.js new file mode 100644 index 0000000..4193c70 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/bProcessing.js @@ -0,0 +1,106 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "bProcessing" ); + +/* It's actually a bit hard to set this one due to the fact that it will only be shown + * when DataTables is doing some kind of processing. The server-side processing is a bit + * better to test this than here - so we just the interal functions to enable it and check + * that it is available + */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Processing is off by default", + null, + function () { return oSettings.oFeatures.bProcessing == false; } + ); + + oTest.fnWaitTest( + "Processing div is not in the DOM", + function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); }, + function () { return document.getElementById('example_processing') == null; } + ); + + oTest.fnWaitTest( + "Processing div cannot be shown", + function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); }, + function () { return document.getElementById('example_processing') == null; } + ); + + oTest.fnWaitTest( + "Processing div cannot be hidden", + function () { oTable.oApi._fnProcessingDisplay( oSettings, false ); }, + function () { return document.getElementById('example_processing') == null; } + ); + + + /* Check can disable */ + oTest.fnWaitTest( + "Processing can be enabled", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "bProcessing": true + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oFeatures.bProcessing == true; } + ); + + oTest.fnWaitTest( + "Processing div is in the DOM", + function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); }, + function () { return document.getElementById('example_processing'); } + ); + + oTest.fnWaitTest( + "Processing div is hidden by default", + function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); }, + function () { return document.getElementById('example_processing').style.visibility = "hidden"; } + ); + + oTest.fnWaitTest( + "Processing div can be shown", + function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); }, + function () { return document.getElementById('example_processing').style.visibility = "visible"; } + ); + + oTest.fnWaitTest( + "Processing div can be hidden", + function () { oTable.oApi._fnProcessingDisplay( oSettings, false ); }, + function () { return document.getElementById('example_processing').style.visibility = "hidden"; } + ); + + /* Enable makes no difference */ + oTest.fnWaitTest( + "Processing disabled override", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "bProcessing": false + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oFeatures.bProcessing == false; } + ); + + oTest.fnWaitTest( + "Processing div is not in the DOM", + function () { oTable.oApi._fnProcessingDisplay( oSettings, true ); }, + function () { return document.getElementById('example_processing') == null; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/bServerSide.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/bServerSide.js new file mode 100644 index 0000000..da58fac --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/bServerSide.js @@ -0,0 +1,21 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "bServerSide" ); + +/* Not interested in server-side processing here other than to check that it is off */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Server side is off by default", + null, + function () { return oSettings.oFeatures.bServerSide == false; } + ); + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/bSort.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/bSort.js new file mode 100644 index 0000000..2a252d9 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/bSort.js @@ -0,0 +1,102 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "bSort" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + + oTest.fnWaitTest( + "Sorting is on by default", + null, + function () { return $('#example tbody td:eq(0)').html() == "Gecko"; } + ); + + oTest.fnWaitTest( + "Sorting Asc by default class applied", + null, + function () { return $('#example thead th:eq(0)').hasClass("sorting_asc"); } + ); + + oTest.fnWaitTest( + "Click on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnWaitTest( + "Sorting class removed from first column", + null, + function () { return $('#example thead th:eq(0)').hasClass("sorting_asc") != true; } + ); + + oTest.fnWaitTest( + "Sorting asc class applied to second column", + null, + function () { return $('#example thead th:eq(1)').hasClass("sorting_asc"); } + ); + + oTest.fnWaitTest( + "Reverse on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnWaitTest( + "Sorting acs class removed from second column", + null, + function () { return $('#example thead th:eq(1)').hasClass("sorting_asc") != true; } + ); + + oTest.fnWaitTest( + "Sorting desc class applied to second column", + null, + function () { return $('#example thead th:eq(1)').hasClass("sorting_desc"); } + ); + + /* Check can disable */ + oTest.fnWaitTest( + "Pagiantion can be disabled", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "bSort": false + } ); + }, + function () { return $('#example tbody td:eq(3)').html() == "4"; } + ); + + oTest.fnWaitTest( + "Click on second column has no effect", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "4"; } + ); + + oTest.fnWaitTest( + "Reverse on second column has no effect", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "4"; } + ); + + /* Enable makes no difference */ + oTest.fnWaitTest( + "Sorting enabled override", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "bSort": true + } ); + }, + function () { return $('#example tbody td:eq(0)').html() == "Gecko"; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/bSortClasses.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/bSortClasses.js new file mode 100644 index 0000000..33cd0a2 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/bSortClasses.js @@ -0,0 +1,135 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "bSortClasses" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + + oTest.fnWaitTest( + "Sorting classes are applied by default", + null, + function () { return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1'); } + ); + + oTest.fnWaitTest( + "Sorting classes are applied to all required cells", + null, + function () { return $('#example tbody tr:eq(7) td:eq(0)').hasClass('sorting_1'); } + ); + + oTest.fnWaitTest( + "Sorting classes are not applied to non-sorting columns", + null, + function () { return $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_1') == false; } + ); + + oTest.fnWaitTest( + "Sorting multi-column - add column 1", + function () { + oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); }, + function () { + return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') && + $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2'); + } + ); + + oTest.fnWaitTest( + "Sorting multi-column - add column 2", + function () { + oDispacher.click( $('#example thead th:eq(2)')[0], { 'shift': true } ); }, + function () { + return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') && + $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') && + $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3'); + } + ); + + oTest.fnWaitTest( + "Sorting multi-column - add column 3", + function () { + oDispacher.click( $('#example thead th:eq(3)')[0], { 'shift': true } ); + }, + function () { + return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') && + $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') && + $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3') && + $('#example tbody tr:eq(0) td:eq(3)').hasClass('sorting_3'); + } + ); + + oTest.fnWaitTest( + "Remove sorting classes on single column sort", + function () { + $('#example thead th:eq(4)').click(); + }, + function () { + return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false && + $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') == false && + $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3') == false && + $('#example tbody tr:eq(0) td:eq(3)').hasClass('sorting_3') == false; + } + ); + + oTest.fnWaitTest( + "Sorting class 1 was added", + null, + function () { return $('#example tbody tr:eq(1) td:eq(4)').hasClass('sorting_1'); } + ); + + + /* Check can disable */ + oTest.fnWaitTest( + "Sorting classes can be disabled", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "bSortClasses": false + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false; } + ); + + oTest.fnWaitTest( + "Sorting classes disabled - add column 1 - no effect", + function () { + oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); }, + function () { + return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false && + $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') == false; + } + ); + + oTest.fnWaitTest( + "Sorting classes disabled - add column 2 - no effect", + function () { + oDispacher.click( $('#example thead th:eq(2)')[0], { 'shift': true } ); }, + function () { + return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1') == false && + $('#example tbody tr:eq(0) td:eq(1)').hasClass('sorting_2') == false && + $('#example tbody tr:eq(0) td:eq(2)').hasClass('sorting_3') == false; + } + ); + + + /* Enable makes no difference */ + oTest.fnWaitTest( + "Sorting classes enabled override", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "bSortClasses": true + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').hasClass('sorting_1'); } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/fnDrawCallback.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/fnDrawCallback.js new file mode 100644 index 0000000..8d06e24 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/fnDrawCallback.js @@ -0,0 +1,102 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "fnDrawCallback" ); + +/* Fairly boring function compared to the others! */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + var oSettings = oTable.fnSettings(); + var mPass, bInit; + + oTest.fnWaitTest( + "Default should be null", + null, + function () { return oSettings.fnDrawCallback == null; } + ); + + + oTest.fnWaitTest( + "One argument passed", + function () { + oSession.fnRestore(); + + mPass = -1; + bInit = false; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "fnDrawCallback": function ( ) { + mPass = arguments.length; + }, + "fnInitComplete": function () { + bInit = true; + } + } ); + }, + function () { return mPass == 1 && bInit; } + ); + + + oTest.fnWaitTest( + "That one argument is the settings object", + function () { + oSession.fnRestore(); + + bInit = false; + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "fnDrawCallback": function ( oSettings ) { + mPass = oSettings; + }, + "fnInitComplete": function () { + bInit = true; + } + } ); + }, + function () { return oTable.fnSettings() == mPass && bInit; } + ); + + + /* The draw callback is called once for the init and then when the data is added */ + oTest.fnWaitTest( + "fnRowCallback called once on first draw", + function () { + oSession.fnRestore(); + + mPass = 0; + bInit = false; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "fnDrawCallback": function ( ) { + mPass++; + }, + "fnInitComplete": function () { + bInit = true; + } + } ); + }, + function () { return mPass == 2 && bInit; } + ); + + oTest.fnWaitTest( + "fnRowCallback called once on each draw there after as well", + function () { + $('#example_next').click(); + $('#example_next').click(); + $('#example_next').click(); + }, + function () { return mPass == 5; } + ); + + + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/fnHeaderCallback.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/fnHeaderCallback.js new file mode 100644 index 0000000..2e2d52f --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/fnHeaderCallback.js @@ -0,0 +1,200 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "fnHeaderCallback" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + var oSettings = oTable.fnSettings(); + var mPass, bInit; + + oTest.fnWaitTest( + "Default should be null", + null, + function () { return oSettings.fnHeaderCallback == null; } + ); + + + oTest.fnWaitTest( + "Five arguments passed", + function () { + oSession.fnRestore(); + + mPass = -1; + bInit = false; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "fnHeaderCallback": function ( ) { + mPass = arguments.length; + }, + "fnInitComplete": function () { + bInit = true; + } + } ); + }, + function () { return mPass == 5 && bInit; } + ); + + + /* The header callback is called once for the init and then when the data is added */ + oTest.fnWaitTest( + "fnHeaderCallback called once per draw", + function () { + oSession.fnRestore(); + + mPass = 0; + bInit = false; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + mPass++; + }, + "fnInitComplete": function () { + bInit = true; + } + } ); + }, + function () { return mPass == 2 && bInit; } + ); + + oTest.fnWaitTest( + "fnRowCallback called on paging (i.e. another draw)", + function () { $('#example_next').click(); }, + function () { return mPass == 3; } + ); + + + oTest.fnWaitTest( + "fnRowCallback allows us to alter row information", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + nHead.getElementsByTagName('th')[0].innerHTML = "Displaying "+(iEnd-iStart)+" records"; + } + } ); + }, + function () { return $('#example thead th:eq(0)').html() == "Displaying 10 records"; } + ); + + + oTest.fnWaitTest( + "iStart correct on first page", + function () { + oSession.fnRestore(); + + mPass = true; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + if ( iStart != 0 ) + { + mPass = false; + } + } + } ); + }, + function () { return mPass; } + ); + + + oTest.fnWaitTest( + "iStart correct on second page", + function () { + oSession.fnRestore(); + + mPass = false; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + if ( iStart == 10 ) + { + mPass = true; + } + }, + "fnInitComplete": function () { + $('#example_next').click(); + } + } ); + }, + function () { return mPass; } + ); + + + oTest.fnWaitTest( + "iEnd correct on second page", + function () { + oSession.fnRestore(); + + mPass = false; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + if ( iEnd == 20 ) + { + mPass = true; + } + }, + "fnInitComplete": function () { + $('#example_next').click(); + } + } ); + }, + function () { return mPass; } + ); + + + oTest.fnWaitTest( + "aiDisplay length is full data when not filtered", + function () { + oSession.fnRestore(); + + mPass = false; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + if ( aiDisplay.length == 57 ) + { + mPass = true; + } + } + } ); + }, + function () { return mPass; } + ); + + oTest.fnWaitTest( + "aiDisplay length is 9 when filtering on 'Mozilla'", + function () { + oSession.fnRestore(); + + mPass = false; + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "fnHeaderCallback": function ( nHead, aasData, iStart, iEnd, aiDisplay ) { + if ( aiDisplay.length == 9 ) + { + mPass = true; + } + } + } ); + oTable.fnFilter( "Mozilla" ); + }, + function () { return mPass; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/fnInitComplete.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/fnInitComplete.js new file mode 100644 index 0000000..f49b721 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/fnInitComplete.js @@ -0,0 +1,105 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "fnInitComplete" ); + +/* Fairly boring function compared to the others! */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + var oSettings = oTable.fnSettings(); + var mPass; + + oTest.fnWaitTest( + "Default should be null", + null, + function () { return oSettings.fnInitComplete == null; } + ); + + + oTest.fnWaitTest( + "Two arguments passed (for Ajax!)", + function () { + oSession.fnRestore(); + + mPass = -1; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "fnInitComplete": function ( ) { + mPass = arguments.length; + } + } ); + }, + function () { return mPass == 2; } + ); + + + oTest.fnWaitTest( + "That one argument is the settings object", + function () { + oSession.fnRestore(); + + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "fnInitComplete": function ( oSettings ) { + mPass = oSettings; + } + } ); + }, + function () { return oTable.fnSettings() == mPass; } + ); + + + oTest.fnWaitTest( + "fnInitComplete called once on first draw", + function () { + oSession.fnRestore(); + + mPass = 0; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "fnInitComplete": function ( ) { + mPass++; + } + } ); + }, + function () { return mPass == 1; } + ); + + oTest.fnWaitTest( + "fnInitComplete never called there after", + function () { + $('#example_next').click(); + $('#example_next').click(); + $('#example_next').click(); + }, + function () { return mPass == 1; } + ); + + + oTest.fnWaitTest( + "10 rows in the table on complete", + function () { + oSession.fnRestore(); + + mPass = 0; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "fnInitComplete": function ( ) { + mPass = $('#example tbody tr').length; + } + } ); + }, + function () { return mPass == 10; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/fnRowCallback.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/fnRowCallback.js new file mode 100644 index 0000000..41c7c9b --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/fnRowCallback.js @@ -0,0 +1,118 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "fnRowCallback" ); + +/* Note - fnRowCallback MUST return the first arguments (modified or not) */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + var oSettings = oTable.fnSettings(); + var mPass; + + oTest.fnWaitTest( + "Default should be null", + null, + function () { return oSettings.fnRowCallback == null; } + ); + + + oTest.fnWaitTest( + "Four arguments passed", + function () { + oSession.fnRestore(); + + mPass = -1; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "fnRowCallback": function ( nTr ) { + mPass = arguments.length; + return nTr; + } + } ); + }, + function () { return mPass == 4; } + ); + + + oTest.fnWaitTest( + "fnRowCallback called once for each drawn row", + function () { + oSession.fnRestore(); + + mPass = 0; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) { + mPass++; + return nTr; + } + } ); + }, + function () { return mPass == 10; } + ); + + oTest.fnWaitTest( + "fnRowCallback allows us to alter row information", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) { + $(nTr).addClass('unit_test'); + return nTr; + } + } ); + }, + function () { return $('#example tbody tr:eq(1)').hasClass('unit_test'); } + ); + + oTest.fnWaitTest( + "Data array has length matching columns", + function () { + oSession.fnRestore(); + + mPass = true; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) { + if ( asData.length != 5 ) + mPass = false; + return nTr; + } + } ); + }, + function () { return mPass; } + ); + + oTest.fnWaitTest( + "Data array has length matching columns", + function () { + oSession.fnRestore(); + + mPass = true; + var iCount = 0; + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "fnRowCallback": function ( nTr, asData, iDrawIndex, iDataIndex ) { + if ( iCount != iDrawIndex ) + mPass = false; + iCount++; + return nTr; + } + } ); + }, + function () { return mPass; } + ); + + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/fnServerData.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/fnServerData.js new file mode 100644 index 0000000..5c4b319 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/fnServerData.js @@ -0,0 +1,68 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "fnServerData for Ajax sourced data" ); + +$(document).ready( function () { + var mPass; + + oTest.fnTest( + "Argument length", + function () { + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "fnServerData": function () { + mPass = arguments.length; + } + } ); + }, + function () { return mPass == 4; } + ); + + oTest.fnTest( + "Url", + function () { + $('#example').dataTable( { + "bDestroy": true, + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "fnServerData": function (sUrl, aoData, fnCallback, oSettings) { + mPass = sUrl == "../../../examples/ajax/sources/arrays.txt"; + } + } ); + }, + function () { return mPass; } + ); + + oTest.fnTest( + "Data array", + function () { + $('#example').dataTable( { + "bDestroy": true, + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "fnServerData": function (sUrl, aoData, fnCallback, oSettings) { + mPass = aoData.length==0; + } + } ); + }, + function () { return mPass; } + ); + + oTest.fnTest( + "Callback function", + function () { + $('#example').dataTable( { + "bDestroy": true, + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "fnServerData": function (sUrl, aoData, fnCallback, oSettings) { + mPass = typeof fnCallback == 'function'; + } + } ); + }, + function () { return mPass; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/iDisplayLength.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/iDisplayLength.js new file mode 100644 index 0000000..5aa7ff3 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/iDisplayLength.js @@ -0,0 +1,85 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "iDisplayLength" ); + +$(document).ready( function () { + /* Check the default */ + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + + oTest.fnWaitTest( + "Default length is ten", + null, + function () { return $('#example tbody tr').length == 10; } + ); + + oTest.fnWaitTest( + "Select menu shows 10", + null, + function () { return $('#example_length select').val() == 10; } + ); + + + oTest.fnWaitTest( + "Set initial length to 25", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "iDisplayLength": 25 + } ); + }, + function () { return $('#example tbody tr').length == 25; } + ); + + oTest.fnWaitTest( + "Select menu shows 25", + null, + function () { return $('#example_length select').val() == 25; } + ); + + + oTest.fnWaitTest( + "Set initial length to 100", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "iDisplayLength": 100 + } ); + }, + function () { return $('#example tbody tr').length == 57; } + ); + + oTest.fnWaitTest( + "Select menu shows 25", + null, + function () { return $('#example_length select').val() == 100; } + ); + + + oTest.fnWaitTest( + "Set initial length to 23 (unknown select menu length)", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "iDisplayLength": 23 + } ); + }, + function () { return $('#example tbody tr').length == 23; } + ); + + oTest.fnWaitTest( + "Select menu shows 10 (since 23 is unknow)", + null, + function () { return $('#example_length select').val() == 10; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.oPaginate.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.oPaginate.js new file mode 100644 index 0000000..908136e --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.oPaginate.js @@ -0,0 +1,86 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oLanguage.oPaginate" ); + +/* Note that the paging language information only has relevence in full numbers */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "sPaginationType": "full_numbers" + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "oLanguage.oPaginate defaults", + null, + function () { + var bReturn = + oSettings.oLanguage.oPaginate.sFirst == "First" && + oSettings.oLanguage.oPaginate.sPrevious == "Previous" && + oSettings.oLanguage.oPaginate.sNext == "Next" && + oSettings.oLanguage.oPaginate.sLast == "Last"; + return bReturn; + } + ); + + oTest.fnTest( + "oLanguage.oPaginate defaults are in the DOM", + null, + function () { + var bReturn = + $('#example_paginate .first').html() == "First" && + $('#example_paginate .previous').html() == "Previous" && + $('#example_paginate .next').html() == "Next" && + $('#example_paginate .last').html() == "Last"; + return bReturn; + } + ); + + + oTest.fnWaitTest( + "oLanguage.oPaginate can be defined", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "sPaginationType": "full_numbers", + "oLanguage": { + "oPaginate": { + "sFirst": "unit1", + "sPrevious": "test2", + "sNext": "unit3", + "sLast": "test4" + } + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { + var bReturn = + oSettings.oLanguage.oPaginate.sFirst == "unit1" && + oSettings.oLanguage.oPaginate.sPrevious == "test2" && + oSettings.oLanguage.oPaginate.sNext == "unit3" && + oSettings.oLanguage.oPaginate.sLast == "test4"; + return bReturn; + } + ); + + oTest.fnTest( + "oLanguage.oPaginate definitions are in the DOM", + null, + function () { + var bReturn = + $('#example_paginate .first').html() == "unit1" && + $('#example_paginate .previous').html() == "test2" && + $('#example_paginate .next').html() == "unit3" && + $('#example_paginate .last').html() == "test4"; + return bReturn; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sInfo.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sInfo.js new file mode 100644 index 0000000..9849dc7 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sInfo.js @@ -0,0 +1,124 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oLanguage.sInfo" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Info language is 'Showing _START_ to _END_ of _TOTAL_ entries' by default", + null, + function () { return oSettings.oLanguage.sInfo == "Showing _START_ to _END_ of _TOTAL_ entries"; } + ); + + oTest.fnTest( + "Info language default is in the DOM", + null, + function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries"; } + ); + + + oTest.fnWaitTest( + "Info language can be defined - without any macros", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "oLanguage": { + "sInfo": "unit test" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oLanguage.sInfo == "unit test"; } + ); + + oTest.fnTest( + "Info language definition is in the DOM", + null, + function () { return document.getElementById('example_info').innerHTML = "unit test"; } + ); + + oTest.fnWaitTest( + "Info language can be defined - with macro _START_ only", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "oLanguage": { + "sInfo": "unit _START_ test" + } + } ); + }, + function () { return document.getElementById('example_info').innerHTML = "unit 1 test"; } + ); + + oTest.fnWaitTest( + "Info language can be defined - with macro _END_ only", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "oLanguage": { + "sInfo": "unit _END_ test" + } + } ); + }, + function () { return document.getElementById('example_info').innerHTML = "unit 10 test"; } + ); + + oTest.fnWaitTest( + "Info language can be defined - with macro _TOTAL_ only", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "oLanguage": { + "sInfo": "unit _END_ test" + } + } ); + }, + function () { return document.getElementById('example_info').innerHTML = "unit 57 test"; } + ); + + oTest.fnWaitTest( + "Info language can be defined - with macros _START_ and _END_", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "oLanguage": { + "sInfo": "unit _START_ _END_ test" + } + } ); + }, + function () { return document.getElementById('example_info').innerHTML = "unit 1 10 test"; } + ); + + oTest.fnWaitTest( + "Info language can be defined - with macros _START_, _END_ and _TOTAL_", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "oLanguage": { + "sInfo": "unit _START_ _END_ _TOTAL_ test" + } + } ); + }, + function () { return document.getElementById('example_info').innerHTML = "unit 1 10 57 test"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sInfoEmpty.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sInfoEmpty.js new file mode 100644 index 0000000..31d7073 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sInfoEmpty.js @@ -0,0 +1,82 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oLanguage.sInfoEmpty" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Info empty language is 'Showing 0 to 0 of 0 entries' by default", + function () { oTable.fnFilter("nothinghere"); }, + function () { return oSettings.oLanguage.sInfoEmpty == "Showing 0 to 0 of 0 entries"; } + ); + + oTest.fnTest( + "Info empty language default is in the DOM", + null, + function () { + var bReturn = document.getElementById('example_info').innerHTML.replace( + ' '+oSettings.oLanguage.sInfoFiltered.replace( '_MAX_', '57' ), "" ) == + "Showing 0 to 0 of 0 entries"; + return bReturn; + } + ); + + + oTest.fnWaitTest( + "Info empty language can be defined", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "oLanguage": { + "sInfoEmpty": "unit test" + } + } ); + oSettings = oTable.fnSettings(); + oTable.fnFilter("nothinghere"); + }, + function () { return oSettings.oLanguage.sInfoEmpty == "unit test"; } + ); + + oTest.fnTest( + "Info empty language default is in the DOM", + null, + function () { + var bReturn = document.getElementById('example_info').innerHTML.replace( + ' '+oSettings.oLanguage.sInfoFiltered.replace( '_MAX_', '57' ), "" ) == + "unit test"; + return bReturn; + } + ); + + + oTest.fnWaitTest( + "Macro's not replaced", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "oLanguage": { + "sInfoEmpty": "unit _START_ _END_ _TOTAL_ test" + } + } ); + oTable.fnFilter("nothinghere"); + }, + function () { + var bReturn = document.getElementById('example_info').innerHTML.replace( + ' '+oSettings.oLanguage.sInfoFiltered.replace( '_MAX_', '57' ), "" ) == + "unit _START_ _END_ _TOTAL_ test"; + return bReturn; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sInfoPostFix.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sInfoPostFix.js new file mode 100644 index 0000000..deced0f --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sInfoPostFix.js @@ -0,0 +1,82 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oLanguage.sInfoPostFix" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Info post fix language is '' (blank) by default", + null, + function () { return oSettings.oLanguage.sInfoPostFix == ""; } + ); + + oTest.fnTest( + "Width no post fix, the basic info shows", + null, + function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries"; } + ); + + + oTest.fnWaitTest( + "Info post fix language can be defined", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "oLanguage": { + "sInfoPostFix": "unit test" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oLanguage.sInfoPostFix == "unit test"; } + ); + + oTest.fnTest( + "Info empty language default is in the DOM", + null, + function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries unit test"; } + ); + + + oTest.fnWaitTest( + "Macros have no effect in the post fix", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "oLanguage": { + "sInfoPostFix": "unit _START_ _END_ _TOTAL_ test" + } + } ); + }, + function () { return document.getElementById('example_info').innerHTML = "Showing 1 to 10 of 57 entries unit _START_ _END_ _TOTAL_ test"; } + ); + + + oTest.fnWaitTest( + "Post fix is applied after fintering info", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "oLanguage": { + "sInfoPostFix": "unit test" + } + } ); + oTable.fnFilter("nothinghere"); + }, + function () { return document.getElementById('example_info').innerHTML = "Showing 0 to 0 of 0 entries unit (filtered from 57 total entries) test"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sLengthMenu.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sLengthMenu.js new file mode 100644 index 0000000..284c588 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sLengthMenu.js @@ -0,0 +1,115 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oLanguage.sLengthMenu" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Menu language is 'Show _MENU_ entries' by default", + null, + function () { return oSettings.oLanguage.sLengthMenu == "Show _MENU_ entries"; } + ); + + oTest.fnTest( + "_MENU_ macro is replaced by select menu in DOM", + null, + function () { return $('select', oSettings.aanFeatures.l[0]).length == 1 } + ); + + oTest.fnTest( + "A label input is used", + null, + function () { return $('label', oSettings.aanFeatures.l[0]).length == 1 } + ); + + oTest.fnTest( + "Default is put into DOM", + null, + function () { + var anChildren = $('label',oSettings.aanFeatures.l[0])[0].childNodes; + var bReturn = + anChildren[0].nodeValue == "Show " && + anChildren[2].nodeValue == " entries"; + return bReturn; + } + ); + + + oTest.fnWaitTest( + "Menu length language can be defined - no _MENU_ macro", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "oLanguage": { + "sLengthMenu": "unit test" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oLanguage.sLengthMenu == "unit test"; } + ); + + oTest.fnTest( + "Menu length language definition is in the DOM", + null, + function () { + return $('label', oSettings.aanFeatures.l[0]).text() == "unit test"; + } + ); + + + oTest.fnWaitTest( + "Menu length language can be defined - with _MENU_ macro", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "oLanguage": { + "sLengthMenu": "unit _MENU_ test" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { + var anChildren = $('label',oSettings.aanFeatures.l[0])[0].childNodes; + var bReturn = + anChildren[0].nodeValue == "unit " && + anChildren[2].nodeValue == " test"; + return bReturn; + } + ); + + + oTest.fnWaitTest( + "Only the _MENU_ macro", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "oLanguage": { + "sLengthMenu": "_MENU_" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { + var anChildren = oSettings.aanFeatures.l[0].childNodes; + var bReturn = + anChildren.length == 1 && + $('select', oSettings.aanFeatures.l[0]).length == 1; + return bReturn; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sProcessing.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sProcessing.js new file mode 100644 index 0000000..65f2e6d --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sProcessing.js @@ -0,0 +1,51 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oLanguage.sProcessing" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "bProcessing": true + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Processing language is 'Processing...' by default", + null, + function () { return oSettings.oLanguage.sProcessing == "Processing..."; } + ); + + oTest.fnTest( + "Processing language default is in the DOM", + null, + function () { return document.getElementById('example_processing').innerHTML = "Processing..."; } + ); + + + oTest.fnWaitTest( + "Processing language can be defined", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "bProcessing": true, + "oLanguage": { + "sProcessing": "unit test" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oLanguage.sProcessing == "unit test"; } + ); + + oTest.fnTest( + "Processing language definition is in the DOM", + null, + function () { return document.getElementById('example_processing').innerHTML = "unit test"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sSearch.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sSearch.js new file mode 100644 index 0000000..d6f6f09 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sSearch.js @@ -0,0 +1,73 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oLanguage.sSearch" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Search language is 'Search:' by default", + null, + function () { return oSettings.oLanguage.sSearch == "Search:"; } + ); + + oTest.fnTest( + "A label input is used", + null, + function () { return $('label', oSettings.aanFeatures.f[0]).length == 1 } + ); + + oTest.fnTest( + "Search language default is in the DOM", + null, + function () { return $('label', oSettings.aanFeatures.f[0]).text() + == "Search: "; } + ); + + + oTest.fnWaitTest( + "Search language can be defined", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "oLanguage": { + "sSearch": "unit test" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oLanguage.sSearch == "unit test"; } + ); + + oTest.fnTest( + "Info language definition is in the DOM", + null, + function () { return $('label', oSettings.aanFeatures.f[0]).text().indexOf('unit test') !== -1; } + ); + + + oTest.fnWaitTest( + "Blank search has a no space (separator) inserted", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "oLanguage": { + "sSearch": "" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { return document.getElementById('example_filter').childNodes.length == 1; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sUrl.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sUrl.js new file mode 100644 index 0000000..0300185 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sUrl.js @@ -0,0 +1,64 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oLanguage.sUrl" ); + +/* Note that we only test the internal storage of language information pulled form a file here + * as the other language tests will check it goes into the DOM correctly + */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnTest( + "sUrl is blank by default", + null, + function () { return oSettings.oLanguage.sUrl == ""; } + ); + + + oTest.fnWaitTest( + "Loading of German file loads language information", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "oLanguage": { + "sUrl": "../../../examples/examples_support/de_DE.txt" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { + var bReturn = + oSettings.oLanguage.sProcessing == "Bitte warten..." && + oSettings.oLanguage.sLengthMenu == "_MENU_ Einträge anzeigen" && + oSettings.oLanguage.sZeroRecords == "Keine Einträge vorhanden." && + oSettings.oLanguage.sInfo == "_START_ bis _END_ von _TOTAL_ Einträgen" && + oSettings.oLanguage.sInfoEmpty == "0 bis 0 von 0 Einträgen" && + oSettings.oLanguage.sInfoFiltered == "(gefiltert von _MAX_ Einträgen)" && + oSettings.oLanguage.sInfoPostFix == "" && + oSettings.oLanguage.sSearch == "Suchen" && + oSettings.oLanguage.oPaginate.sFirst == "Erster" && + oSettings.oLanguage.oPaginate.sPrevious == "Zurück" && + oSettings.oLanguage.oPaginate.sNext == "Nächster" && + oSettings.oLanguage.oPaginate.sLast == "Letzter"; + + return bReturn; + } + ); + + /* One DOM check just to ensure that they go into the DOM */ + oTest.fnTest( + "Loaded language goes into the DOM", + null, + function () { return document.getElementById('example_info').innerHTML = "1 bis 10 von 57 Einträgen"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sZeroRecords.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sZeroRecords.js new file mode 100644 index 0000000..b1a17a2 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sZeroRecords.js @@ -0,0 +1,50 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oLanguage.sZeroRecords" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Zero records language is 'No matching records found' by default", + null, + function () { return oSettings.oLanguage.sZeroRecords == "No matching records found"; } + ); + + oTest.fnWaitTest( + "Text is shown when empty table (after filtering)", + function () { oTable.fnFilter('nothinghere'); }, + function () { return $('#example tbody tr td')[0].innerHTML == "No matching records found" } + ); + + + + oTest.fnWaitTest( + "Zero records language can be defined", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "oLanguage": { + "sZeroRecords": "unit test" + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.oLanguage.sZeroRecords == "unit test"; } + ); + + oTest.fnWaitTest( + "Text is shown when empty table (after filtering)", + function () { oTable.fnFilter('nothinghere2'); }, + function () { return $('#example tbody tr td')[0].innerHTML == "unit test" } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/oSearch.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/oSearch.js new file mode 100644 index 0000000..1bc693a --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/oSearch.js @@ -0,0 +1,114 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "oSearch" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Default values should be blank", + null, + function () { + var bReturn = oSettings.oPreviousSearch.sSearch == "" && + !oSettings.oPreviousSearch.bRegex; + return bReturn; + } + ); + + /* This test might be considered iffy since the full object isn't given, but it's reasonable to + * expect DataTables to cope with this. It should just assumine regex false + */ + oTest.fnWaitTest( + "Search term only in object", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "oSearch": { + "sSearch": "Mozilla" + } + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Gecko"; } + ); + + oTest.fnWaitTest( + "New search will kill old one", + function () { + oTable.fnFilter("Opera"); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Presto"; } + ); + + oTest.fnWaitTest( + "Search plain text term and escape regex true", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "oSearch": { + "sSearch": "DS", + "bRegex": false + } + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Nintendo DS browser"; } + ); + + oTest.fnWaitTest( + "Search plain text term and escape regex false", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "oSearch": { + "sSearch": "Opera", + "bRegex": true + } + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Presto"; } + ); + + oTest.fnWaitTest( + "Search regex text term and escape regex true", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "oSearch": { + "sSearch": "1.*", + "bRegex": false + } + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "No matching records found"; } + ); + + oTest.fnWaitTest( + "Search regex text term and escape regex false", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "oSearch": { + "sSearch": "1.*", + "bRegex": true + } + } ); + }, + function () { return $('#example tbody tr:eq(0) td:eq(0)').html() == "Gecko"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/sAjaxDataProp.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/sAjaxDataProp.js new file mode 100644 index 0000000..e4b875c --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/sAjaxDataProp.js @@ -0,0 +1,140 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "Custom data source property - property given" ); + + +$(document).ready( function () { + var oInit = { + "sAjaxSource": "../../../examples/ajax/sources/custom_prop.txt", + "bDeferRender": true, + "sAjaxDataProp": "demo" + }; + $('#example').dataTable( oInit ); + + oTest.fnWaitTest( + "10 rows shown on the first page", + null, + function () { return $('#example tbody tr').length == 10; } + ); + + oTest.fnTest( + "Initial sort occured", + null, + function () { return $('#example tbody td:eq(0)').html() == "Gecko"; } + ); + + /* Need to use the WaitTest for sorting due to the setTimeout datatables uses */ + oTest.fnTest( + "Sorting (first click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Sorting (second click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnTest( + "Sorting (third click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Sorting (first click) on numeric column", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "-"; } + ); + + oTest.fnTest( + "Sorting (second click) on numeric column", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "522.1"; } + ); + + oTest.fnTest( + "Sorting multi-column (first click)", + function () { + $('#example thead th:eq(0)').click(); + oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); }, + function () { var b = + $('#example tbody td:eq(0)').html() == "Gecko" && + $('#example tbody td:eq(1)').html() == "Camino 1.0"; return b; } + ); + + oTest.fnTest( + "Sorting multi-column - sorting second column only", + function () { + $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + /* Basic paging */ + oTest.fnTest( + "Paging to second page", + function () { $('#example_next').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "IE Mobile"; } + ); + + oTest.fnTest( + "Paging to first page", + function () { $('#example_previous').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Attempting to page back beyond the first page", + function () { $('#example_previous').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + /* Changing length */ + oTest.fnTest( + "Changing table length to 25 records", + function () { $("select[name=example_length]").val('25').change(); }, + function () { return $('#example tbody tr').length == 25; } + ); + + oTest.fnTest( + "Changing table length to 50 records", + function () { $("select[name=example_length]").val('50').change(); }, + function () { return $('#example tbody tr').length == 50; } + ); + + oTest.fnTest( + "Changing table length to 100 records", + function () { $("select[name=example_length]").val('100').change(); }, + function () { return $('#example tbody tr').length == 57; } + ); + + oTest.fnTest( + "Changing table length to 10 records", + function () { $("select[name=example_length]").val('10').change(); }, + function () { return $('#example tbody tr').length == 10; } + ); + + /* + * Information element + */ + oTest.fnTest( + "Information on zero config", + null, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Information on second page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 11 to 20 of 57 entries"; } + ); + + oTest.fnTest( + "Information on third page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 21 to 30 of 57 entries"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/sAjaxDataProp2.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/sAjaxDataProp2.js new file mode 100644 index 0000000..bd0c346 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/sAjaxDataProp2.js @@ -0,0 +1,140 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "Custom data source property - array only" ); + + +$(document).ready( function () { + var oInit = { + "sAjaxSource": "../../../examples/ajax/sources/array_only.txt", + "bDeferRender": true, + "sAjaxDataProp": "" + }; + $('#example').dataTable( oInit ); + + oTest.fnWaitTest( + "10 rows shown on the first page", + null, + function () { return $('#example tbody tr').length == 10; } + ); + + oTest.fnTest( + "Initial sort occured", + null, + function () { return $('#example tbody td:eq(0)').html() == "Gecko"; } + ); + + /* Need to use the WaitTest for sorting due to the setTimeout datatables uses */ + oTest.fnTest( + "Sorting (first click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Sorting (second click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } + ); + + oTest.fnTest( + "Sorting (third click) on second column", + function () { $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Sorting (first click) on numeric column", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "-"; } + ); + + oTest.fnTest( + "Sorting (second click) on numeric column", + function () { $('#example thead th:eq(3)').click(); }, + function () { return $('#example tbody td:eq(3)').html() == "522.1"; } + ); + + oTest.fnTest( + "Sorting multi-column (first click)", + function () { + $('#example thead th:eq(0)').click(); + oDispacher.click( $('#example thead th:eq(1)')[0], { 'shift': true } ); }, + function () { var b = + $('#example tbody td:eq(0)').html() == "Gecko" && + $('#example tbody td:eq(1)').html() == "Camino 1.0"; return b; } + ); + + oTest.fnTest( + "Sorting multi-column - sorting second column only", + function () { + $('#example thead th:eq(1)').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + /* Basic paging */ + oTest.fnTest( + "Paging to second page", + function () { $('#example_next').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "IE Mobile"; } + ); + + oTest.fnTest( + "Paging to first page", + function () { $('#example_previous').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + oTest.fnTest( + "Attempting to page back beyond the first page", + function () { $('#example_previous').click(); }, + function () { return $('#example tbody td:eq(1)').html() == "All others"; } + ); + + /* Changing length */ + oTest.fnTest( + "Changing table length to 25 records", + function () { $("select[name=example_length]").val('25').change(); }, + function () { return $('#example tbody tr').length == 25; } + ); + + oTest.fnTest( + "Changing table length to 50 records", + function () { $("select[name=example_length]").val('50').change(); }, + function () { return $('#example tbody tr').length == 50; } + ); + + oTest.fnTest( + "Changing table length to 100 records", + function () { $("select[name=example_length]").val('100').change(); }, + function () { return $('#example tbody tr').length == 57; } + ); + + oTest.fnTest( + "Changing table length to 10 records", + function () { $("select[name=example_length]").val('10').change(); }, + function () { return $('#example tbody tr').length == 10; } + ); + + /* + * Information element + */ + oTest.fnTest( + "Information on zero config", + null, + function () { return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; } + ); + + oTest.fnTest( + "Information on second page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 11 to 20 of 57 entries"; } + ); + + oTest.fnTest( + "Information on third page", + function () { $('#example_next').click(); }, + function () { return document.getElementById('example_info').innerHTML == "Showing 21 to 30 of 57 entries"; } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/sAjaxSource.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/sAjaxSource.js new file mode 100644 index 0000000..0672ed7 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/sAjaxSource.js @@ -0,0 +1,23 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "sAjaxSource" ); + +/* Sanitfy check really - all the other tests blast this */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Server side is off by default", + null, + function () { + return oSettings.sAjaxSource == "../../../examples/ajax/sources/arrays.txt"; + } + ); + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/sDom.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/sDom.js new file mode 100644 index 0000000..4227ff0 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/sDom.js @@ -0,0 +1,269 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "sDom" ); + +/* This is going to be brutal on the browser! There is a lot that can be tested here... */ + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Default DOM varaible", + null, + function () { return oSettings.sDom == "lfrtip"; } + ); + + oTest.fnWaitTest( + "Default DOM in document", + null, + function () { + var nNodes = $('#demo div, #demo table'); + var nWrapper = document.getElementById('example_wrapper'); + var nLength = document.getElementById('example_length'); + var nFilter = document.getElementById('example_filter'); + var nInfo = document.getElementById('example_info'); + var nPaging = document.getElementById('example_paginate'); + var nTable = document.getElementById('example'); + + var bReturn = + nNodes[0] == nWrapper && + nNodes[1] == nLength && + nNodes[2] == nFilter && + nNodes[3] == nTable && + nNodes[4] == nInfo && + nNodes[5] == nPaging; + return bReturn; + } + ); + + oTest.fnWaitTest( + "Check example 1 in code propagates", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "sDom": '<"wrapper"flipt>' + } ); + oSettings = oTable.fnSettings(); + }, + function () { return oSettings.sDom == '<"wrapper"flipt>'; } + ); + + oTest.fnWaitTest( + "Check example 1 in DOM", + null, + function () { + var jqNodes = $('#demo div, #demo table'); + var nNodes = []; + + /* Strip the paging nodes */ + for ( var i=0, iLen=jqNodes.length ; i<iLen ; i++ ) + { + if ( jqNodes[i].getAttribute('id') != "example_previous" && + jqNodes[i].getAttribute('id') != "example_next" ) + { + nNodes.push( jqNodes[i] ); + } + } + + var nWrapper = document.getElementById('example_wrapper'); + var nLength = document.getElementById('example_length'); + var nFilter = document.getElementById('example_filter'); + var nInfo = document.getElementById('example_info'); + var nPaging = document.getElementById('example_paginate'); + var nTable = document.getElementById('example'); + var nCustomWrapper = $('div.wrapper')[0]; + + var bReturn = + nNodes[0] == nWrapper && + nNodes[1] == nCustomWrapper && + nNodes[2] == nFilter && + nNodes[3] == nLength && + nNodes[4] == nInfo && + nNodes[5] == nPaging && + nNodes[6] == nTable; + return bReturn; + } + ); + + oTest.fnWaitTest( + "Check example 2 in DOM", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "sDom": '<lf<t>ip>' + } ); + }, + function () { + var jqNodes = $('#demo div, #demo table'); + var nNodes = []; + var nCustomWrappers = [] + + /* Strip the paging nodes */ + for ( var i=0, iLen=jqNodes.length ; i<iLen ; i++ ) + { + if ( jqNodes[i].getAttribute('id') != "example_previous" && + jqNodes[i].getAttribute('id') != "example_next" ) + { + nNodes.push( jqNodes[i] ); + } + + /* Only the two custom divs don't have class names */ + if ( jqNodes[i].className == "" ) + { + nCustomWrappers.push( jqNodes[i] ); + } + } + + var nWrapper = document.getElementById('example_wrapper'); + var nLength = document.getElementById('example_length'); + var nFilter = document.getElementById('example_filter'); + var nInfo = document.getElementById('example_info'); + var nPaging = document.getElementById('example_paginate'); + var nTable = document.getElementById('example'); + + var bReturn = + nNodes[0] == nWrapper && + nNodes[1] == nCustomWrappers[0] && + nNodes[2] == nLength && + nNodes[3] == nFilter && + nNodes[4] == nCustomWrappers[1] && + nNodes[5] == nTable && + nNodes[6] == nInfo && + nNodes[7] == nPaging; + return bReturn; + } + ); + + oTest.fnWaitTest( + "Check no length element", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "sDom": 'frtip' + } ); + }, + function () { + var nNodes = $('#demo div, #demo table'); + var nWrapper = document.getElementById('example_wrapper'); + var nLength = document.getElementById('example_length'); + var nFilter = document.getElementById('example_filter'); + var nInfo = document.getElementById('example_info'); + var nPaging = document.getElementById('example_paginate'); + var nTable = document.getElementById('example'); + + var bReturn = + nNodes[0] == nWrapper && + null == nLength && + nNodes[1] == nFilter && + nNodes[2] == nTable && + nNodes[3] == nInfo && + nNodes[4] == nPaging; + return bReturn; + } + ); + + oTest.fnWaitTest( + "Check no filter element", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "sDom": 'lrtip' + } ); + }, + function () { + var nNodes = $('#demo div, #demo table'); + var nWrapper = document.getElementById('example_wrapper'); + var nLength = document.getElementById('example_length'); + var nFilter = document.getElementById('example_filter'); + var nInfo = document.getElementById('example_info'); + var nPaging = document.getElementById('example_paginate'); + var nTable = document.getElementById('example'); + + var bReturn = + nNodes[0] == nWrapper && + nNodes[1] == nLength && + null == nFilter && + nNodes[2] == nTable && + nNodes[3] == nInfo && + nNodes[4] == nPaging; + return bReturn; + } + ); + + /* Note we don't test for no table as this is not supported (and it would be fairly daft! */ + + oTest.fnWaitTest( + "Check no info element", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "sDom": 'lfrtp' + } ); + }, + function () { + var nNodes = $('#demo div, #demo table'); + var nWrapper = document.getElementById('example_wrapper'); + var nLength = document.getElementById('example_length'); + var nFilter = document.getElementById('example_filter'); + var nInfo = document.getElementById('example_info'); + var nPaging = document.getElementById('example_paginate'); + var nTable = document.getElementById('example'); + + var bReturn = + nNodes[0] == nWrapper && + nNodes[1] == nLength && + nNodes[2] == nFilter && + nNodes[3] == nTable && + null == nInfo && + nNodes[4] == nPaging; + return bReturn; + } + ); + + oTest.fnWaitTest( + "Check no paging element", + function () { + oSession.fnRestore(); + $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "sDom": 'lfrti' + } ); + }, + function () { + var nNodes = $('#demo div, #demo table'); + var nWrapper = document.getElementById('example_wrapper'); + var nLength = document.getElementById('example_length'); + var nFilter = document.getElementById('example_filter'); + var nInfo = document.getElementById('example_info'); + var nPaging = document.getElementById('example_paginate'); + var nTable = document.getElementById('example'); + + var bReturn = + nNodes[0] == nWrapper && + nNodes[1] == nLength && + nNodes[2] == nFilter && + nNodes[3] == nTable && + nNodes[4] == nInfo && + null == nPaging; + return bReturn; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/sPaginationType.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/sPaginationType.js new file mode 100644 index 0000000..8364f90 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/sPaginationType.js @@ -0,0 +1,136 @@ +// DATA_TEMPLATE: empty_table +oTest.fnStart( "sPaginationType" ); + +$(document).ready( function () { + /* Check the default */ + var oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true + } ); + var oSettings = oTable.fnSettings(); + + oTest.fnWaitTest( + "Check two button paging is the default", + null, + function () { return oSettings.sPaginationType == "two_button"; } + ); + + oTest.fnWaitTest( + "Check class is applied", + null, + function () { return $('#example_paginate').hasClass('paging_two_button'); } + ); + + oTest.fnWaitTest( + "Two A elements are in the wrapper", + null, + function () { return $('#example_paginate a').length == 2; } + ); + + oTest.fnWaitTest( + "We have the previous button", + null, + function () { return document.getElementById('example_previous'); } + ); + + oTest.fnWaitTest( + "We have the next button", + null, + function () { return document.getElementById('example_next'); } + ); + + oTest.fnWaitTest( + "Previous button is disabled", + null, + function () { return $('#example_previous').hasClass('paginate_disabled_previous'); } + ); + + oTest.fnWaitTest( + "Next button is enabled", + null, + function () { return $('#example_next').hasClass('paginate_enabled_next'); } + ); + + /* Don't test paging - that's done by the zero config test script. */ + + + /* Two buttons paging */ + var bComplete = false; + oTest.fnWaitTest( + "Can enabled full numbers paging", + function () { + oSession.fnRestore(); + oTable = $('#example').dataTable( { + "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", + "bDeferRender": true, + "sPaginationType": "full_numbers", + "fnInitComplete": function () { + bComplete = true; + } + } ); + oSettings = oTable.fnSettings(); + }, + function () { + if ( bComplete ) + return oSettings.sPaginationType == "full_numbers"; + else + return false; + } + ); + + oTest.fnWaitTest( + "Check full numbers class is applied", + null, + function () { return $('#example_paginate').hasClass('paging_full_numbers'); } + ); + + + var nFirst, nPrevious, nNext, nLast; + oTest.fnWaitTest( + "Jump to last page", + function () { + nFirst = $('div.dataTables_paginate a.first'); + nPrevious = $('div.dataTables_paginate a.previous'); + nNext = $('div.dataTables_paginate a.next'); + nLast = $('div.dataTables_paginate a.last'); + nLast.click(); + }, + function () { + return document.getElementById('example_info').innerHTML == "Showing 51 to 57 of 57 entries"; + } + ); + + oTest.fnWaitTest( + "Go to two pages previous", + function () { + nPrevious.click(); + nPrevious.click(); + }, + function () { + return document.getElementById('example_info').innerHTML == "Showing 31 to 40 of 57 entries"; + } + ); + + oTest.fnWaitTest( + "Next (second last) page", + function () { + nNext.click(); + }, + function () { + return document.getElementById('example_info').innerHTML == "Showing 41 to 50 of 57 entries"; + } + ); + + oTest.fnWaitTest( + "Jump to first page", + function () { + nFirst.click(); + }, + function () { + return document.getElementById('example_info').innerHTML == "Showing 1 to 10 of 57 entries"; + } + ); + + + oTest.fnComplete(); +} ); \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/unit_test.js b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/unit_test.js new file mode 100644 index 0000000..9c11230 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/media/unit_testing/unit_test.js @@ -0,0 +1,409 @@ +/* + * File: unit_test.js + * Version: 0.0.1 + * CVS: $Id$ + * Description: Unit test framework + * Author: Allan Jardine (www.sprymedia.co.uk) + * Created: Sun Mar 8 22:02:49 GMT 2009 + * Modified: $Date$ by $Author$ + * Language: Javascript + * License: GPL v2 or BSD 3 point style + * Project: DataTables + * Contact: allan.jardine@sprymedia.co.uk + * + * Copyright 2009 Allan Jardine, all rights reserved. + * + * Description: + * This is a javascript library suitable for use as a unit testing framework. Employing a queuing + * mechanisim to take account of async events in javascript, this library will communicates with + * a controller frame (to report individual test status). + * + */ + + +var oTest = { + /* Block further tests from occuring - might be end of tests or due to async wait */ + bBlock: false, + + /* Number of times to try retesting for a blocking test */ + iReTestLimit: 20, + + /* Amount of time to wait between trying for an async test */ + iReTestDelay: 150, + + /* End tests - external control */ + bEnd: false, + + /* Internal variables */ + _aoQueue: [], + _iReTest: 0, + _bFinished: false, + + + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Recommened public functions + */ + + /* + * Function: fnTest + * Purpose: Add a test to the queue + * Returns: - + * Inputs: string:sMessage - name of the test + * function:fnTest - function which will be evaludated to get the test result + */ + "fnTest": function ( sMessage, fnSetup, fnTest ) + { + this._aoQueue.push( { + "sMessage": sMessage, + "fnSetup": fnSetup, + "fnTest": fnTest, + "bPoll": false + } ); + this._fnNext(); + }, + + /* + * Function: fnWaitTest + * Purpose: Add a test to the queue which has a re-test cycle + * Returns: - + * Inputs: string:sMessage - name of the test + * function:fnTest - function which will be evaludated to get the test result + */ + "fnWaitTest": function ( sMessage, fnSetup, fnTest ) + { + this._aoQueue.push( { + "sMessage": sMessage, + "fnSetup": fnSetup, + "fnTest": fnTest, + "bPoll": true + } ); + this._fnNext(); + }, + + /* + * Function: fnStart + * Purpose: Indicate that this is a new unit and what it is testing (message to end user) + * Returns: - + * Inputs: string:sMessage - message to give to the user about this unit + */ + "fnStart": function ( sMessage ) + { + window.parent.controller.fnStartMessage( sMessage ); + }, + + /* + * Function: fnComplete + * Purpose: Tell the controller that we are all done here + * Returns: - + * Inputs: - + */ + "fnComplete": function () + { + this._bFinished = true; + this._fnNext(); + }, + + /* + * Function: fnCookieDestroy + * Purpose: Destroy a cookie of a given name + * Returns: - + * Inputs: - + */ + "fnCookieDestroy": function ( oTable ) + { + var sName = oTable.fnSettings().sCookiePrefix+oTable.fnSettings().sInstance; + var aParts = window.location.pathname.split('/'); + var sNameFile = sName + '_' + aParts.pop().replace(/[\/:]/g,"").toLowerCase(); + document.cookie = sNameFile+"=; expires=Thu, 01-Jan-1970 00:00:01 GMT; path="+ + aParts.join('/') + "/"; + }, + + + + /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Internal functions + */ + + + "_fnReTest": function ( oTestInfo ) + { + var bResult = oTestInfo.fnTest( ); + if ( bResult ) + { + /* Test passed on retry */ + this._fnResult( true ); + this._fnNext(); + } + else + { + if ( this._iReTest < this.iReTestLimit ) + { + this._iReTest++; + setTimeout( function() { + oTest._fnReTest( oTestInfo ); + }, this.iReTestDelay ); + } + else + { + this._fnResult( false ); + } + } + }, + + "_fnNext": function () + { + if ( this.bEnd ) + { + return; + } + + if ( !this.bBlock && this._aoQueue.length > 0 ) + { + var oNextTest = this._aoQueue.shift(); + window.parent.controller.fnTestStart( oNextTest.sMessage ); + this.bBlock = true; + + if ( typeof oNextTest.fnSetup == 'function' ) + { + oNextTest.fnSetup( ); + } + var bResult = oNextTest.fnTest( ); + //bResult = false; + + if ( oNextTest.bPoll ) + { + if ( bResult ) + { + this._fnResult( true ); + this._fnNext(); + } + else + { + _iReTest = 0; + setTimeout( function() { + oTest._fnReTest( oNextTest ); + }, this.iReTestDelay ); + } + } + else + { + this._fnResult( bResult ); + this._fnNext(); + } + } + else if ( !this.bBlock && this._aoQueue.length == 0 && this._bFinished ) + { + window.parent.controller.fnUnitComplete( ); + } + }, + + "_fnResult": function ( b ) + { + window.parent.controller.fnTestResult( b ); + this.bBlock = false; + if ( !b ) + { + this.bEnd = true; + } + } +}; + + +var oDispacher = { + "click": function ( nNode, oSpecial ) + { + var evt = this.fnCreateEvent( 'click', nNode, oSpecial ); + if ( nNode.dispatchEvent ) + nNode.dispatchEvent(evt); + else + nNode.fireEvent('onclick', evt); + }, + + "change": function ( nNode ) + { + var evt = this.fnCreateEvent( 'change', nNode ); + if ( nNode.dispatchEvent ) + nNode.dispatchEvent(evt); + else + nNode.fireEvent('onchange', evt); + }, + + + /* + * Function: fnCreateEvent + * Purpose: Create an event oject based on the type to trigger an event - x-platform + * Returns: event:evt + * Inputs: string:sType - type of event + * node:nTarget - target node of the event + */ + fnCreateEvent: function( sType, nTarget, oSpecial ) + { + var evt = null; + var oTargetPos = this._fnGetPos( nTarget ); + var sTypeGroup = this._fnEventTypeGroup( sType ); + if ( typeof oSpecial == 'undefined' ) + { + oSpecial = {}; + } + + var ctrlKey = false; + var altKey = false; + var shiftKey = (typeof oSpecial.shift != 'undefined') ? oSpecial.shift : false; + var metaKey = false; + var button = false; + + if ( document.createEvent ) + { + switch ( sTypeGroup ) + { + case 'mouse': + evt = document.createEvent( "MouseEvents" ); + evt.initMouseEvent( sType, true, true, window, 0, oTargetPos[0], oTargetPos[1], + oTargetPos[0], oTargetPos[1], ctrlKey, altKey, shiftKey, + metaKey, button, null ); + break; + + case 'html': + evt = document.createEvent( "HTMLEvents" ); + evt.initEvent( sType, true, true ); + break; + + case 'ui': + evt = document.createEvent( "UIEvents" ); + evt.initUIEvent( sType, true, true, window, 0 ); + break; + + default: + break; + } + } + else if ( document.createEventObject ) + { + switch ( sTypeGroup ) + { + case 'mouse': + evt = document.createEventObject(); + evt.screenX = oTargetPos[0]; + evt.screenX = oTargetPos[1]; + evt.clientX = oTargetPos[0]; + evt.clientY = oTargetPos[1]; + evt.ctrlKey = ctrlKey; + evt.altKey = altKey; + evt.shiftKey = shiftKey; + evt.metaKey = metaKey; + evt.button = button; + evt.relatedTarget = null; + break; + + case 'html': + /* fall through to basic event object */ + + case 'ui': + evt = document.createEventObject(); + break; + + default: + break; + } + } + + return evt; + }, + + /* + * Function: DesignCore.fnGetPos + * Purpose: Get the position of an element on the page + * Returns: array[ 0-int:left, 1-int:top ] + * Inputs: node:obj - node to analyse + */ + _fnGetPos: function ( obj ) + { + var curleft = 0; + var curtop = 0; + + if (obj.offsetParent) + { + curleft = obj.offsetLeft; + curtop = obj.offsetTop; + while (obj = obj.offsetParent ) + { + curleft += obj.offsetLeft; + curtop += obj.offsetTop; + } + } + return [curleft,curtop]; + }, + + + /* + * Function: _fnEventTypeGroup + * Purpose: Group the event types as per w3c groupings + * Returns: - + * Inputs: string:sType + */ + _fnEventTypeGroup: function ( sType ) + { + switch ( sType ) + { + case 'click': + case 'dblclick': + case 'mousedown': + case 'mousemove': + case 'mouseout': + case 'mouseover': + case 'mouseup': + return 'mouse'; + + case 'change': + case 'focus': + case 'blur': + case 'select': + case 'submit': + return 'html'; + + case 'keydown': + case 'keypress': + case 'keyup': + case 'load': + case 'unload': + return 'ui'; + + default: + return 'custom'; + } + } +} + + +var oSession = { + nTable: null, + + fnCache: function () + { + this.nTable = document.getElementById('demo').cloneNode(true); + }, + + fnRestore: function () + { + while( $.fn.dataTableSettings.length > 0 ) + { + try { + $.fn.dataTableSettings[0].oInstance.fnDestroy(); + } catch (e) { + $.fn.dataTableSettings.splice( 0, 1 ); + } + } + //$.fn.dataTableSettings.splice( 0, $.fn.dataTableSettings.length ); + var nDemo = document.getElementById('demo'); + nDemo.innerHTML = ""; + for ( var i=0, iLen=this.nTable.childNodes.length ; i<iLen ; i++ ) + { + nDemo.appendChild( this.nTable.childNodes[0] ); + } + this.fnCache(); + } +} + +$(document).ready( function () { + oSession.fnCache(); +} ); diff --git a/src/warden-server/contrib/wardenweb/datatables/package.json b/src/warden-server/contrib/wardenweb/datatables/package.json new file mode 100644 index 0000000..27b58b8 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/package.json @@ -0,0 +1,34 @@ +{ + "name": "DataTables", + "version": "1.9.0", + "title": "DataTables", + "author": { + "name": "Allan Jardine", + "url": "http://sprymedia.co.uk" + }, + "licenses": [ + { + "type": "BSD", + "url": "http://datatables.net/license_bsd" + }, + { + "type": "GPLv2", + "url": "http://datatables.net/license_gpl2" + } + ], + "dependencies": { + "jquery": "1.3 - 1.7" + }, + "description": "DataTables enhances HTML tables with the ability to sort, filter and page the data in the table very easily. It provides a comprehensive API and set of configuration options, allowing you to consume data from virtually any data source.", + "keywords": [ + "DataTables", + "DataTable", + "table", + "grid", + "filter", + "sort", + "page", + "internationalisable" + ], + "homepage": "http://datatables.net" +} \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/datatables/scripts/jshint.config b/src/warden-server/contrib/wardenweb/datatables/scripts/jshint.config new file mode 100644 index 0000000..533d4d3 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/scripts/jshint.config @@ -0,0 +1,72 @@ +{ + // Settings + "passfail" : false, // Stop on first error. + "maxerr" : 100, // Maximum error before stopping. + + + // Predefined globals whom JSHint will ignore. + "browser" : true, // Standard browser globals e.g. `window`, `document`. + + "node" : false, + "rhino" : false, + "couch" : false, + "wsh" : true, // Windows Scripting Host. + + "jquery" : true, + "prototypejs" : false, + "mootools" : false, + "dojo" : false, + + "predef" : [ // Custom globals. + //"exampleVar", + //"anotherCoolGlobal", + //"iLoveDouglas" + ], + + + // Development. + "debug" : false, // Allow debugger statements e.g. browser breakpoints. + "devel" : true, // Allow developments statements e.g. `console.log();`. + + + // ECMAScript 5. + "es5" : true, // Allow ECMAScript 5 syntax. + "strict" : false, // Require `use strict` pragma in every file. + "globalstrict" : false, // Allow global "use strict" (also enables 'strict'). + + + // The Good Parts. + "asi" : false, // Tolerate Automatic Semicolon Insertion (no semicolons). + "laxbreak" : true, // Tolerate unsafe line breaks e.g. `return [\n] x` without semicolons. + "bitwise" : true, // Prohibit bitwise operators (&, |, ^, etc.). + "boss" : false, // Tolerate assignments inside if, for & while. Usually conditions & loops are for comparison, not assignments. + "curly" : true, // Require {} for every new block or scope. + "eqeqeq" : false, // Require triple equals i.e. `===`. + "eqnull" : false, // Tolerate use of `== null`. + "evil" : false, // Tolerate use of `eval`. + "expr" : false, // Tolerate `ExpressionStatement` as Programs. + "forin" : false, // Tolerate `for in` loops without `hasOwnPrototype`. + "immed" : true, // Require immediate invocations to be wrapped in parens e.g. `( function(){}() );` + "latedef" : true, // Prohipit variable use before definition. + "loopfunc" : false, // Allow functions to be defined within loops. + "noarg" : true, // Prohibit use of `arguments.caller` and `arguments.callee`. + "regexp" : false, // Prohibit `.` and `[^...]` in regular expressions. + "regexdash" : false, // Tolerate unescaped last dash i.e. `[-...]`. + "scripturl" : true, // Tolerate script-targeted URLs. + "shadow" : false, // Allows re-define variables later in code e.g. `var x=1; x=2;`. + "supernew" : false, // Tolerate `new function () { ... };` and `new Object;`. + "undef" : true, // Require all non-global variables be declared before they are used. + + + // Personal styling preferences. + "newcap" : true, // Require capitalization of all constructor functions e.g. `new F()`. + "noempty" : true, // Prohibit use of empty blocks. + "nonew" : true, // Prohibit use of constructors for side-effects. + "nomen" : false, // Prohibit use of initial or trailing underbars in names. + "onevar" : false, // Allow only one `var` statement per function. + "plusplus" : false, // Prohibit use of `++` & `--`. + "sub" : false, // Tolerate all forms of subscript notation besides dot notation e.g. `dict['key']` instead of `dict.key`. + "trailing" : true, // Prohibit trailing whitespaces. + "white" : false, // Check against strict whitespace and indentation rules. + "indent" : 4 // Specify indentation spacing +} diff --git a/src/warden-server/contrib/wardenweb/datatables/scripts/make.sh b/src/warden-server/contrib/wardenweb/datatables/scripts/make.sh new file mode 100755 index 0000000..fa44899 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/scripts/make.sh @@ -0,0 +1,104 @@ +#!/bin/sh + +cd ../media/src + +# DEFAULTS +CLOSURE="/usr/local/closure_compiler/compiler.jar" +JSDOC="/usr/local/jsdoc/jsdoc" +CMD=$1 + +MAIN_FILE="../js/jquery.dataTables.js" +MIN_FILE="../js/jquery.dataTables.min.js" +VERSION=$(grep " * @version " DataTables.js | awk -F" " '{ print $3 }') + +echo "" +echo " DataTables build ($VERSION)" +echo "" + + +IFS='%' + +cp DataTables.js DataTables.js.build + +echo " Building main script" +grep "require(" DataTables.js.build > /dev/null +while [ $? -eq 0 ]; do + REQUIRE=$(grep "require(" DataTables.js.build | head -n 1) + + SPACER=$(echo ${REQUIRE} | cut -d r -f 1) + FILE=$(echo ${REQUIRE} | sed -e "s#^.*require('##g" -e "s#');##") + DIR=$(echo ${FILE} | cut -d \. -f 1) + + sed "s#^#${SPACER}#" < ${DIR}/${FILE} > ${DIR}/${FILE}.build + + sed -e "/${REQUIRE}/r ${DIR}/${FILE}.build" -e "/${REQUIRE}/d" < DataTables.js.build > DataTables.js.out + mv DataTables.js.out DataTables.js.build + + rm ${DIR}/${FILE}.build + + grep "require(" DataTables.js.build > /dev/null +done + +mv DataTables.js.build $MAIN_FILE + + +if [ "$CMD" != "debug" ]; then + if [ "$CMD" = "jshint" -o "$CMD" = "" -o "$CMD" = "cdn" ]; then + echo " JSHint" + jshint $MAIN_FILE --config ../../scripts/jshint.config + if [ $? -ne 0 ]; then + echo " Errors occured - exiting" + exit 1 + else + echo " Pass" + fi + fi + + if [ "$CMD" = "compress" -o "$CMD" = "" -o "$CMD" = "cdn" ]; then + echo " Minification" + echo "/* + * File: jquery.dataTables.min.js + * Version: $VERSION + * Author: Allan Jardine (www.sprymedia.co.uk) + * Info: www.datatables.net + * + * Copyright 2008-2012 Allan Jardine, all rights reserved. + * + * This source file is free software, under either the GPL v2 license or a + * BSD style license, available at: + * http://datatables.net/license_gpl2 + * http://datatables.net/license_bsd + * + * This source file is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details. + */" > $MIN_FILE + + java -jar $CLOSURE --js $MAIN_FILE >> $MIN_FILE + echo " Min JS file size: $(ls -l $MIN_FILE | awk -F" " '{ print $5 }')" + fi + + if [ "$CMD" = "docs" -o "$CMD" = "" ]; then + echo " Documentation" + $JSDOC -d ../../docs -t JSDoc-DataTables $MAIN_FILE + fi + + if [ "$CMD" = "cdn" ]; then + echo " CDN" + if [ -d ../../cdn ]; then + rm -Rf ../../cdn + fi + mkdir ../../cdn + mkdir ../../cdn/css + cp $MAIN_FILE ../../cdn + cp $MIN_FILE ../../cdn + cp ../css/jquery.dataTables.css ../../cdn/css + cp ../css/jquery.dataTables_themeroller.css ../../cdn/css + cp -r ../images ../../cdn/ + rm ../../cdn/images/Sorting\ icons.psd + fi +fi + +echo " Done\n" + + diff --git a/src/warden-server/contrib/wardenweb/datatables/scripts/unit_tests.sh b/src/warden-server/contrib/wardenweb/datatables/scripts/unit_tests.sh new file mode 100755 index 0000000..0e73d92 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/datatables/scripts/unit_tests.sh @@ -0,0 +1,109 @@ +#!/bin/sh + +ENABLE=$1 + +echo "" +echo " DataTables unit tests" +echo "" + +if [ ! "$ENABLE" = "Enable" -a ! "$ENABLE" = "Disable" -o "ENABLE" = "-h" ]; then + echo " Enable or Disable must be given as the first argument." + echo " Optionally the second argument can be given as an integer to enable/disable a certain " + echo " set of tests or the string 'sanity' to run the sanity check for all data types." + echo "" + exit 1 +fi + +cd ../media/unit_testing + +if [ "$ENABLE" = "Enable" ]; then + if [ ! -d tests ]; then + echo " Building test directory" + mkdir tests + mkdir tests/1_dom + mkdir tests/2_js + mkdir tests/3_ajax + mkdir tests/4_server-side + mkdir tests/5_ajax_objects + mkdir tests/6_delayed_rendering + fi + + echo " Enabling:" + if [ ! -z $2 ]; then + if [ "$2" = "sanity" ]; then + echo " Sanity checks" + mv tests_onhold/1_dom/_zero_config.js tests/1_dom/ + mv tests_onhold/2_js/_zero_config.js tests/2_js/ + mv tests_onhold/3_ajax/_zero_config.js tests/3_ajax/ + mv tests_onhold/4_server-side/_zero_config.js tests/4_server-side/ + mv tests_onhold/5_ajax_objects/_zero_config.js tests/5_ajax_objects/ + mv tests_onhold/6_delayed_rendering/_zero_config.js tests/6_delayed_rendering/ + elif [ $2 -eq 1 ]; then + echo " DOM" + mv tests_onhold/1_dom/* tests/1_dom/ + elif [ $2 -eq 2 ]; then + echo " JS" + mv tests_onhold/2_js/* tests/2_js/ + elif [ $2 -eq 3 ]; then + echo " Ajax" + mv tests_onhold/3_ajax/* tests/3_ajax/ + elif [ $2 -eq 4 ]; then + echo " SErver-side" + mv tests_onhold/4_server-side/* tests/4_server-side/ + elif [ $2 -eq 5 ]; then + echo " Ajax objects" + mv tests_onhold/5_ajax_objects/* tests/5_ajax_objects/ + elif [ $2 -eq 6 ]; then + echo " Delayed rendering" + mv tests_onhold/6_delayed_rendering/* tests/6_delayed_rendering/ + fi + else + echo " All tests" + mv tests_onhold/1_dom/* tests/1_dom/ + mv tests_onhold/2_js/* tests/2_js/ + mv tests_onhold/3_ajax/* tests/3_ajax/ + mv tests_onhold/4_server-side/* tests/4_server-side/ + mv tests_onhold/5_ajax_objects/* tests/5_ajax_objects/ + mv tests_onhold/6_delayed_rendering/* tests/6_delayed_rendering/ + fi + +else + echo " Disabling:" + if [ ! -z $2 ]; then + if [ "$2" = "sanity" ]; then + echo " Sanity checks" + mv tests/1_dom/* tests_onhold/1_dom/ + mv tests/2_js/* tests_onhold/2_js/ + mv tests/3_ajax/* tests_onhold/3_ajax/ + mv tests/4_server-side/* tests_onhold/4_server-side/ + mv tests/5_ajax_objects/* tests_onhold/5_ajax_objects/ + mv tests/6_delayed_rendering/* tests_onhold/6_delayed_rendering/ + elif [ $2 -eq 1 ]; then + echo " DOM" + mv tests/1_dom/* tests_onhold/1_dom/ + elif [ $2 -eq 2 ]; then + echo " JS" + mv tests/2_js/* tests_onhold/2_js/ + elif [ $2 -eq 3 ]; then + echo " Ajax" + mv tests/3_ajax/* tests_onhold/3_ajax/ + elif [ $2 -eq 4 ]; then + echo " Server-side" + mv tests/4_server-side/* tests_onhold/4_server-side/ + elif [ $2 -eq 5 ]; then + echo " Ajax objects" + mv tests/5_ajax_objects/* tests_onhold/5_ajax_objects/ + elif [ $2 -eq 6 ]; then + echo " Delayed rendering" + mv tests/6_delayed_rendering/* tests_onhold/6_delayed_rendering/ + fi + else + echo " All tests" + mv tests/1_dom/* tests_onhold/1_dom/ + mv tests/2_js/* tests_onhold/2_js/ + mv tests/3_ajax/* tests_onhold/3_ajax/ + mv tests/4_server-side/* tests_onhold/4_server-side/ + mv tests/5_ajax_objects/* tests_onhold/5_ajax_objects/ + mv tests/6_delayed_rendering/* tests_onhold/6_delayed_rendering/ + fi +fi diff --git a/src/warden-server/contrib/wardenweb/db.php.public b/src/warden-server/contrib/wardenweb/db.php.public new file mode 100644 index 0000000..c35b7ba --- /dev/null +++ b/src/warden-server/contrib/wardenweb/db.php.public @@ -0,0 +1,49 @@ +<? +$host = "localhost"; +$dbname = "warden"; +$user = ""; +$pass = ""; + +$db = mysql_pconnect($host, $user, $pass); +if (!$db) { die('Could not connect: ' . mysql_error()); } +mysql_select_db($dbname); + +function ownnetwhere2() { + #nacist seznam ownnet + $filename = "ownnet.rangesint"; + $ownnet = file_get_contents($filename); + $ownnet = split("[ \n]", trim($ownnet)); + #var_dump($ownnet); + # where pro sql + $where = ''; + for($i=0; $i<count($ownnet); $i=$i+2) { + $where .= "(ipsrc BETWEEN ".$ownnet[$i]." AND ".$ownnet[$i+1].") OR "; + } + #posledni \n + $where=preg_replace("/\ OR\ $/", "", $where); + #var_dump($where); + + return $where; +} + +function ownnetwhere() { + #nacist seznam ownnet + $filename = "ownnet.mask"; + $ownnet = file_get_contents($filename); + $ownnet = split("[/\n]", trim($ownnet)); + ##print("<pre>");var_dump($ownnet);print("</pre>"); + # where pro sql + $where = ''; + for($i=0; $i<count($ownnet); $i=$i+2) { + $demask=-1*pow(2,(32-$ownnet[$i+1])); + $where .= "(ipsrc & ".$demask."= inet_aton('".$ownnet[$i]."')) OR "; + } + #posledni \n + $where=preg_replace("/\ OR\ $/", "", $where); + #var_dump($where); + + return $where; +} + + +?> diff --git a/src/warden-server/contrib/wardenweb/formrender.php b/src/warden-server/contrib/wardenweb/formrender.php new file mode 100644 index 0000000..3a1a6fd --- /dev/null +++ b/src/warden-server/contrib/wardenweb/formrender.php @@ -0,0 +1,86 @@ +<? + +/* + DefaultFormRenderer + Author: B. Dailey + Website: www.dailytechnology.net + Free to be used, modified, & distributed so long as this text remains. +*/ +require_once "HTML/QuickForm/Renderer/Default.php"; + +class DefaultFormRenderer { + // HTML Quick Form + var $Form; + var $FormRenderer; + var $FormTemplate; + var $ElementTemplate; + var $HeaderTemplate; + var $RequiredNoteTemplate; + + /** + * Form constructor. + */ + function __construct(& $Form) { + $this->Form = & $Form; + + $this->setDefaultFormTemplate(); + $this->setDefaultElementTemplate(); + $this->setDefaultHeaderTemplate(); + $this->setDefaultRequiredNoteTemplate(); + + $this->FormRenderer = & new HTML_QuickForm_Renderer_Default; + $this->FormRenderer->setFormTemplate($this->FormTemplate); + $this->FormRenderer->setElementTemplate($this->ElementTemplate); + $this->FormRenderer->setHeaderTemplate($this->HeaderTemplate); + $this->FormRenderer->setRequiredNoteTemplate($this->RequiredNoteTemplate); + } + + function setDefaultFormTemplate() { + $this->FormTemplate= <<<HTML + <div class="long_form"> + <ul> + <form{attributes}> + {content} + </form> + </ul> + </div> +HTML; + } + + function setDefaultElementTemplate() { + $this->ElementTemplate = <<<HTML + + <li class="formli"> + <div> + <label> + {label} + <!-- BEGIN required --><span class="required">*</span><!-- END required --> + </label> + {element} + <!-- BEGIN error --> + <span class="error">{error}</span> + <!-- END error --> + </div> + </li> +HTML; + } + + function setDefaultHeaderTemplate() { + $this->HeaderTemplate = <<<HTML + <h2>{header}</h2> +HTML; + } + + function setDefaultRequiredNoteTemplate() { + $this->RequiredNoteTemplate = <<<HTML + <li><div id="requirednote clear"><span class="required">*</span> Denotes required field.</div></li> +HTML; + } + + function display() { + $this->Form->accept($this->FormRenderer); + echo $this->FormRenderer->toHTML(); + } + +} + diff --git a/src/warden-server/contrib/wardenweb/graph_HostnameServiceTypeActivity.php b/src/warden-server/contrib/wardenweb/graph_HostnameServiceTypeActivity.php new file mode 100644 index 0000000..d9686f5 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/graph_HostnameServiceTypeActivity.php @@ -0,0 +1,70 @@ +<? +include("db.php"); + + +if(!isset($_GET['per'])){$_GET['per']="hour";} +switch( $_GET['per']) { + case "hour": + $agg = 1; + break; + case "day": + $agg = 24; + break; + case "month": + $agg = 24*30; // -30.5 ? + break; +} + +#sqli todo +#selector +if(!IsSet($_GET['where'])) { + $where="detected>from_unixtime(0)"; +} else { + $where = base64_decode($_GET['where']); +} + +$query_cols = "hostname,service,type"; + + + + + +#seznam sloupcu ve vysledku, todo dyn +$cols=array(); +$q = "SELECT concat_ws('-',$query_cols) as col FROM events WHERE $where GROUP BY $query_cols"; +#var_dump($q); +$res = mysql_query($q, $db); +for($i=0; $i<mysql_num_rows($res); $i++) { + $tmp = mysql_fetch_assoc($res); +# var_dump($tmp); + $cols[ $tmp["col"] ]=$i; +} +#var_dump($cols); +#print array_keys($cols); +$count_cols=count($cols); + + + + + +#select data +$data=array(); +#casova posloupnost +# premapuju podle staticky alokovanych sloupcu, posilam to rovnou do grafu +$q = "SELECT unix_timestamp(detected)-(unix_timestamp(detected)%(3600*$agg)) as t, concat_ws('-',$query_cols) as col, count(*) as count FROM events WHERE $where GROUP BY $query_cols, t;"; +#var_dump($q); +$res = mysql_query($q, $db); +while ($tmp = mysql_fetch_assoc($res)) { + #var_dump($tmp); + $d=array_fill(0, $count_cols, 0); + $d[ $cols[ $tmp["col"] ] ] = (int)$tmp["count"]; + array_unshift($d, (int)$tmp["t"]); + array_push($data, $d); +} + + +#print json_encode($d); +print json_encode(array("cols"=>array_keys($cols), "data"=>$data)); + +?> + diff --git a/src/warden-server/contrib/wardenweb/graph_HostnameServiceTypeActivity_html.php b/src/warden-server/contrib/wardenweb/graph_HostnameServiceTypeActivity_html.php new file mode 100644 index 0000000..a16d0e2 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/graph_HostnameServiceTypeActivity_html.php @@ -0,0 +1,57 @@ +<? if(!isset($_GET['per'])){$_GET['per']="day";} ?> +<html> + <head> + <script type="text/javascript" language="javascript" src="datatables/media/js/jquery.js"></script> + <script type="text/javascript" src="https://www.google.com/jsapi"></script> + <script type="text/javascript"> + google.load("visualization", "1", {packages:["corechart"]}); + google.setOnLoadCallback(fetchData); + + function fetchData() { + <? #TODO: fuj + if(!isSet($_GET['where'])) { ?> + $.getJSON('graph_HostnameServiceTypeActivity.php?per=<? print $_GET['per'];?>', drawChart); + <? } else { ?> + $.getJSON('graph_HostnameServiceTypeActivity.php?per=<? print $_GET['per'];?>&where=<?print $_GET['where'];?>', drawChart); + <? } ?> + } + + function drawChart(sdata) { + //console.log(sdata); + var data = new google.visualization.DataTable(); + data.addColumn('datetime', 'Date'); + //console.log(sdata.cols); + for (var i = 0; i < sdata.cols.length; i++) { + data.addColumn('number', sdata.cols[i]); + } + + sdatalen=sdata.data.length; + if(sdatalen > 1000) { + alert("Too many rows:"+sdatalen); + sdatalen=1000; + } + + for (var i = 0; i < sdatalen; i++) { + //for (var i = 0; i < 10; i++) { + sdata.data[i][0] = new Date(sdata.data[i][0]*1000); + //console.log(sdata.data[i]); + data.addRow(sdata.data[i]); + } + var options = { + vAxis: { logScale: true }, + interpolateNulls: true, + ___colors:['#008000','#ff0000','#FFA500','#FA8072','#AFEEEE','#00A5C6','#DEBDDE','#000000'], + chartArea: {'width': '80%', 'height': '90%'}, + pointSize: 5 + }; + + var chart = new google.visualization.LineChart(document.getElementById('chart_div')); + chart.draw(data, options); + } + </script> + </head> + <body> + <div id="chart_div" style="width: 100%; height: 95%;"></div> + </body> +</html> + diff --git a/src/warden-server/contrib/wardenweb/graph_SourceActivity.php b/src/warden-server/contrib/wardenweb/graph_SourceActivity.php new file mode 100644 index 0000000..0ee668c --- /dev/null +++ b/src/warden-server/contrib/wardenweb/graph_SourceActivity.php @@ -0,0 +1,71 @@ +<? +include("db.php"); + + +if(!isset($_GET['per'])){$_GET['per']="hour";} +switch( $_GET['per']) { + case "hour": + $agg = 1; + break; + case "day": + $agg = 24; + break; + case "month": + $agg = 24*30; // -30.5 ? + break; +} + +#sqli todo +#selector +$query_cols = "source"; +if(IsSet($_GET['source'])){ + $where = "source='".$_GET['source']."'"; +} else { + die("pars"); +} + + + +#seznam sloupcu ve vysledku, todo dyn, coz je ovsem seznam sledovanych velicin +$cols=array(); +$i=0; +$cols["events"]=$i++; +$cols["uniqueTargerports"]=$i++; +$cols["uniqueSensors"]=$i++; +$cols["totalScale"]=$i++; +$count_cols=count($cols); + + +#select data +$data=array(); +#casova posloupnost +# premapuju podle staticky alokovanych sloupcu, posilam to rovnou do grafu +$q = " +SELECT +unix_timestamp(detected)-(unix_timestamp(detected)%(3600*$agg)) as t, +count(*) as events, +count(distinct target_port) as uniqueTargerports, +count(distinct concat_ws('-',hostname,service,type)) as uniqueSensors, +sum(attack_scale) as totalScale +FROM events WHERE $where GROUP BY $query_cols, t;"; +#ty kvery cols sem dotekli z jine vychytavky + +#var_dump($q); +$res = mysql_query($q, $db); +while ($tmp = mysql_fetch_assoc($res)) { + #var_dump($tmp); + $d=array_fill(0, $count_cols, 0); + $d[ $cols[ "events" ] ] = (int)$tmp["events"]; + $d[ $cols[ "uniqueTargerports" ] ] = (int)$tmp["uniqueTargerports"]; + $d[ $cols[ "uniqueSensors" ] ] = (int)$tmp["uniqueSensors"]; + $d[ $cols[ "totalScale" ] ] = (int)$tmp["totalScale"]; + array_unshift($d, (int)$tmp["t"]); + array_push($data, $d); +} + + +#print json_encode($d); +print json_encode(array("cols"=>array_keys($cols), "data"=>$data)); + +?> + diff --git a/src/warden-server/contrib/wardenweb/graph_SourceActivity_html.php b/src/warden-server/contrib/wardenweb/graph_SourceActivity_html.php new file mode 100644 index 0000000..1711e0f --- /dev/null +++ b/src/warden-server/contrib/wardenweb/graph_SourceActivity_html.php @@ -0,0 +1,55 @@ +<? #todo: xss, jsi ?> +<? if(!isset($_GET['per'])){$_GET['per']="day";} ?> +<? if(!isset($_GET['source'])){die("pars");} ?> +<html> + <head> + <script type="text/javascript" language="javascript" src="datatables/media/js/jquery.js"></script> + <script type="text/javascript" src="https://www.google.com/jsapi"></script> + <script type="text/javascript"> + google.load("visualization", "1", {packages:["corechart"]}); + google.setOnLoadCallback(fetchData); + + function fetchData() { + $.getJSON('graph_SourceActivity.php?per=<? print $_GET['per'];?>&source=<? print $_GET['source'];?>', drawChart); + } + + function drawChart(sdata) { + //console.log(sdata); + var data = new google.visualization.DataTable(); + data.addColumn('datetime', 'Date'); + //console.log(sdata.cols); + for (var i = 0; i < sdata.cols.length; i++) { + data.addColumn('number', sdata.cols[i]); + } + + sdatalen=sdata.data.length; + if(sdatalen > 1000) { + alert("Too many rows:"+sdatalen); + sdatalen=1000; + } + + for (var i = 0; i < sdatalen; i++) { + //for (var i = 0; i < 10; i++) { + sdata.data[i][0] = new Date(sdata.data[i][0]*1000); + //console.log(sdata.data[i]); + data.addRow(sdata.data[i]); + } + var options = { + vAxis: { logScale: true }, + interpolateNulls: true, + ___colors:['#008000','#ff0000','#FFA500','#FA8072','#AFEEEE','#00A5C6','#DEBDDE','#000000'], + chartArea: {'width': '90%', 'height': '85%'}, + legend: {'position': 'top'}, + pointSize: 5 + }; + + var chart = new google.visualization.LineChart(document.getElementById('chart_div')); + chart.draw(data, options); + } + </script> + </head> + <body> + <div id="chart_div" style="width: 100%; height: 100%;"></div> + </body> +</html> + diff --git a/src/warden-server/contrib/wardenweb/graph_TargetportActivity.php b/src/warden-server/contrib/wardenweb/graph_TargetportActivity.php new file mode 100644 index 0000000..f8f2b0f --- /dev/null +++ b/src/warden-server/contrib/wardenweb/graph_TargetportActivity.php @@ -0,0 +1,71 @@ +<? +include("db.php"); + + +if(!isset($_GET['per'])){$_GET['per']="hour";} +switch( $_GET['per']) { + case "hour": + $agg = 1; + break; + case "day": + $agg = 24; + break; + case "month": + $agg = 24*30; // -30.5 ? + break; +} + +#sqli todo +#selector + +$query_cols = "target_port"; +if(IsSet($_GET['port']) && is_numeric($_GET['port'])){ + $where = "target_port=".$_GET['port']; +} else { + die("pars"); +} + + + +#seznam sloupcu ve vysledku, todo dyn, coz je ovsem seznam sledovanych velicin +$cols=array(); +$i=0; +$cols["events"]=$i++; +$cols["uniqueSources"]=$i++; +$cols["uniqueSensors"]=$i++; +$cols["totalScale"]=$i++; +$count_cols=count($cols); + + +#select data +$data=array(); +#casova posloupnost +# premapuju podle staticky alokovanych sloupcu, posilam to rovnou do grafu +$q = " +SELECT +unix_timestamp(detected)-(unix_timestamp(detected)%(3600*$agg)) as t, +count(*) as events, +count(distinct source) as uniqueSources, +count(distinct concat_ws('-',hostname,service,type)) as uniqueSensors, +sum(attack_scale) as totalScale +FROM events WHERE $where GROUP BY $query_cols, t;"; + +#var_dump($q); +$res = mysql_query($q, $db); +while ($tmp = mysql_fetch_assoc($res)) { + #var_dump($tmp); + $d=array_fill(0, $count_cols, 0); + $d[ $cols[ "events" ] ] = (int)$tmp["events"]; + $d[ $cols[ "uniqueSources" ] ] = (int)$tmp["uniqueSources"]; + $d[ $cols[ "uniqueSensors" ] ] = (int)$tmp["uniqueSensors"]; + $d[ $cols[ "totalScale" ] ] = (int)$tmp["totalScale"]; + array_unshift($d, (int)$tmp["t"]); + array_push($data, $d); +} + + +#print json_encode($d); +print json_encode(array("cols"=>array_keys($cols), "data"=>$data)); + +?> + diff --git a/src/warden-server/contrib/wardenweb/graph_TargetportActivity_html.php b/src/warden-server/contrib/wardenweb/graph_TargetportActivity_html.php new file mode 100644 index 0000000..58741cb --- /dev/null +++ b/src/warden-server/contrib/wardenweb/graph_TargetportActivity_html.php @@ -0,0 +1,55 @@ +<? #todo: xss, jsi ?> +<? if(!isset($_GET['per'])){$_GET['per']="day";} ?> +<? if(!isset($_GET['port']) || !is_numeric($_GET['port'])){die("pars");} ?> +<html> + <head> + <script type="text/javascript" language="javascript" src="datatables/media/js/jquery.js"></script> + <script type="text/javascript" src="https://www.google.com/jsapi"></script> + <script type="text/javascript"> + google.load("visualization", "1", {packages:["corechart"]}); + google.setOnLoadCallback(fetchData); + + function fetchData() { + $.getJSON('graph_TargetportActivity.php?per=<? print $_GET['per'];?>&port=<? print $_GET['port'];?>', drawChart); + } + + function drawChart(sdata) { + //console.log(sdata); + var data = new google.visualization.DataTable(); + data.addColumn('datetime', 'Date'); + //console.log(sdata.cols); + for (var i = 0; i < sdata.cols.length; i++) { + data.addColumn('number', sdata.cols[i]); + } + + sdatalen=sdata.data.length; + if(sdatalen > 1000) { + alert("Too many rows:"+sdatalen); + sdatalen=1000; + } + + for (var i = 0; i < sdatalen; i++) { + //for (var i = 0; i < 10; i++) { + sdata.data[i][0] = new Date(sdata.data[i][0]*1000); + //console.log(sdata.data[i]); + data.addRow(sdata.data[i]); + } + var options = { + vAxis: { logScale: true }, + interpolateNulls: true, + ___colors:['#008000','#ff0000','#FFA500','#FA8072','#AFEEEE','#00A5C6','#DEBDDE','#000000'], + chartArea: {'width': '90%', 'height': '90%'}, + legend: {'position': 'top'}, + pointSize: 5 + }; + + var chart = new google.visualization.LineChart(document.getElementById('chart_div')); + chart.draw(data, options); + } + </script> + </head> + <body> + <div id="chart_div" style="width: 100%; height: 100%;"></div> + </body> +</html> + diff --git a/src/warden-server/contrib/wardenweb/graph_TopTargetports.php b/src/warden-server/contrib/wardenweb/graph_TopTargetports.php new file mode 100644 index 0000000..9833ba8 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/graph_TopTargetports.php @@ -0,0 +1,32 @@ +<? +include("db.php"); + +#sqli todo +#selector + + +#seznam sloupcu ve vysledku, todo dyn, coz je ovsem seznam sledovanych velicin +$cols=array(); +$i=0; +$cols["target_port"]=$i++; +$cols["count"]=$i++; +$count_cols=count($cols); + + +#select data +$data=array(); +$q = "select target_port, count(*) as count from events where detected > from_unixtime(unix_timestamp(now())-3600*24*30) group by target_port order by count desc limit 300;"; + +#var_dump($q); +$res = mysql_query($q, $db); +while ($tmp = mysql_fetch_assoc($res)) { + #var_dump($tmp); + array_push($data, array((int)$tmp['target_port'],(int)$tmp['count'])); +} + + +#print json_encode($d); +print json_encode(array("cols"=>array_keys($cols), "data"=>$data)); + +?> + diff --git a/src/warden-server/contrib/wardenweb/graph_TopTargetportsNum.html b/src/warden-server/contrib/wardenweb/graph_TopTargetportsNum.html new file mode 100644 index 0000000..3151ed4 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/graph_TopTargetportsNum.html @@ -0,0 +1,65 @@ +<? #todo: xss, jsi ?> +<html> + <head> + <script type="text/javascript" language="javascript" src="datatables/media/js/jquery.js"></script> + <script type="text/javascript" src="https://www.google.com/jsapi"></script> + <script type="text/javascript"> + google.load("visualization", "1", {packages:["corechart"]}); + google.setOnLoadCallback(fetchData); + + function fetchData() { + $.getJSON('graph_TopTargetports.php', drawChart); + } + + function drawChart(sdata) { + //console.log(sdata); + var data = new google.visualization.DataTable(); + + //sort, port vs count + var a = sdata.data.sort(function(a,b){return a[0]-b[0]}); + sdata.data = a; + + //console.log(sdata.cols); + + //haxis string vs number - rozdil v zobrazeni + //data.addColumn('string', sdata.cols[0]); + data.addColumn('number', sdata.cols[0]); + + data.addColumn('number', sdata.cols[1]); +// for (var i = 0; i < sdata.cols.length; i++) { +// data.addColumn('number', sdata.cols[i]); +// } + + + sdatalen=sdata.data.length; + if(sdatalen > 1000) { + alert("Too many rows:"+sdatalen); + sdatalen=1000; + } + + for (var i = 0; i < sdatalen; i++) { + //console.log(sdata.data[i]); + + //haxis string vs number - rozdil v zobrazeni + //sdata.data[i][0] = sdata.data[i][0].toString(); + + data.addRow(sdata.data[i]); + } + var options = { + vAxis: { logScale: true }, + hAxis: { logScale: true }, + chartArea: {'width': '90%', 'height': '70%'}, + legend: {'position': 'in'}, + }; + + //var chart = new google.visualization.LineChart(document.getElementById('chart_div')); + var chart = new google.visualization.ColumnChart(document.getElementById('chart_div')); + chart.draw(data, options); + } + </script> + </head> + <body> + <div id="chart_div" style="width: 100%; height: 100%;"></div> + </body> +</html> + diff --git a/src/warden-server/contrib/wardenweb/graph_TopTargetportsStr.html b/src/warden-server/contrib/wardenweb/graph_TopTargetportsStr.html new file mode 100644 index 0000000..3d5ed2c --- /dev/null +++ b/src/warden-server/contrib/wardenweb/graph_TopTargetportsStr.html @@ -0,0 +1,65 @@ +<? #todo: xss, jsi ?> +<html> + <head> + <script type="text/javascript" language="javascript" src="datatables/media/js/jquery.js"></script> + <script type="text/javascript" src="https://www.google.com/jsapi"></script> + <script type="text/javascript"> + google.load("visualization", "1", {packages:["corechart"]}); + google.setOnLoadCallback(fetchData); + + function fetchData() { + $.getJSON('graph_TopTargetports.php', drawChart); + } + + function drawChart(sdata) { + //console.log(sdata); + var data = new google.visualization.DataTable(); + + //sort, port vs count + var a = sdata.data.sort(function(a,b){return a[0]-b[0]}); + sdata.data = a; + + //console.log(sdata.cols); + + //haxis string vs number - rozdil v zobrazeni + data.addColumn('string', sdata.cols[0]); + //data.addColumn('number', sdata.cols[0]); + + data.addColumn('number', sdata.cols[1]); +// for (var i = 0; i < sdata.cols.length; i++) { +// data.addColumn('number', sdata.cols[i]); +// } + + + sdatalen=sdata.data.length; + if(sdatalen > 1000) { + alert("Too many rows:"+sdatalen); + sdatalen=1000; + } + + for (var i = 0; i < sdatalen; i++) { + //console.log(sdata.data[i]); + + //haxis string vs number - rozdil v zobrazeni + sdata.data[i][0] = sdata.data[i][0].toString(); + + data.addRow(sdata.data[i]); + } + var options = { + vAxis: { logScale: true }, + hAxis: { logScale: false }, + chartArea: {'width': '90%', 'height': '70%'}, + legend: {'position': 'in'}, + }; + + //var chart = new google.visualization.LineChart(document.getElementById('chart_div')); + var chart = new google.visualization.ColumnChart(document.getElementById('chart_div')); + chart.draw(data, options); + } + </script> + </head> + <body> + <div id="chart_div" style="width: 100%; height: 100%;"></div> + </body> +</html> + diff --git a/src/warden-server/contrib/wardenweb/graph_TypeActivity.php b/src/warden-server/contrib/wardenweb/graph_TypeActivity.php new file mode 100644 index 0000000..5008777 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/graph_TypeActivity.php @@ -0,0 +1,65 @@ +<? +include("db.php"); + + +if(!isset($_GET['per'])){$_GET['per']="hour";} +switch( $_GET['per']) { + case "hour": + $agg = 1; + break; + case "day": + $agg = 24; + break; + case "month": + $agg = 24*30; // -30.5 ? + break; +} + +#sqli todo +#selector +$where="detected>from_unixtime(0)"; +$query_cols = "type"; + + + + + +#seznam sloupcu ve vysledku, todo dyn +$cols=array(); +$q = "SELECT concat_ws('-',$query_cols) as col FROM events WHERE $where GROUP BY $query_cols"; +#var_dump($q); +$res = mysql_query($q, $db); +for($i=0; $i<mysql_num_rows($res); $i++) { + $tmp = mysql_fetch_assoc($res); +# var_dump($tmp); + $cols[ $tmp["col"] ]=$i; +} +#var_dump($cols); +#print array_keys($cols); +$count_cols=count($cols); + + + + + +#select data +$data=array(); +#casova posloupnost +# premapuju podle staticky alokovanych sloupcu, posilam to rovnou do grafu +$q = "SELECT unix_timestamp(detected)-(unix_timestamp(detected)%(3600*$agg)) as t, concat_ws('-',$query_cols) as col, count(*) as count FROM events WHERE $where GROUP BY $query_cols, t;"; +#var_dump($q); +$res = mysql_query($q, $db); +while ($tmp = mysql_fetch_assoc($res)) { + #var_dump($tmp); + $d=array_fill(0, $count_cols, 0); + $d[ $cols[ $tmp["col"] ] ] = (int)$tmp["count"]; + array_unshift($d, (int)$tmp["t"]); + array_push($data, $d); +} + + +#print json_encode($d); +print json_encode(array("cols"=>array_keys($cols), "data"=>$data)); + +?> + diff --git a/src/warden-server/contrib/wardenweb/graph_TypeActivity_html.php b/src/warden-server/contrib/wardenweb/graph_TypeActivity_html.php new file mode 100644 index 0000000..b2461a1 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/graph_TypeActivity_html.php @@ -0,0 +1,53 @@ +<? if(!isset($_GET['per'])){$_GET['per']="day";} ?> +<html> + <head> + <script type="text/javascript" language="javascript" src="datatables/media/js/jquery.js"></script> + <script type="text/javascript" src="https://www.google.com/jsapi"></script> + <script type="text/javascript"> + google.load("visualization", "1", {packages:["corechart"]}); + google.setOnLoadCallback(fetchData); + + function fetchData() { + $.getJSON('graph_TypeActivity.php?per=<? print $_GET['per'];?>', drawChart); + } + + function drawChart(sdata) { + console.log(sdata); + var data = new google.visualization.DataTable(); + data.addColumn('datetime', 'Date'); + console.log(sdata.cols); + for (var i = 0; i < sdata.cols.length; i++) { + data.addColumn('number', sdata.cols[i]); + } + + sdatalen=sdata.data.length; + if(sdatalen > 1000) { + alert("Too many rows:"+sdatalen); + sdatalen=1000; + } + + for (var i = 0; i < sdatalen; i++) { + //for (var i = 0; i < 10; i++) { + sdata.data[i][0] = new Date(sdata.data[i][0]*1000); + console.log(sdata.data[i]); + data.addRow(sdata.data[i]); + } + var options = { + vAxis: { logScale: true }, + interpolateNulls: true, + ___colors:['#008000','#ff0000','#FFA500','#FA8072','#AFEEEE','#00A5C6','#DEBDDE','#000000'], + chartArea: {'width': '85%', 'height': '85%'}, + legend: {'position': 'top'}, + pointSize: 5 + }; + + var chart = new google.visualization.LineChart(document.getElementById('chart_div')); + chart.draw(data, options); + } + </script> + </head> + <body> + <div id="chart_div" style="width: 100%; height: 100%;"></div> + </body> +</html> + diff --git a/src/warden-server/contrib/wardenweb/index.html b/src/warden-server/contrib/wardenweb/index.html new file mode 100644 index 0000000..e056464 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/index.html @@ -0,0 +1,5 @@ +<frameset rows="30, *"> +<frame name="menu" src="webmenu.php" scrolling="no"> +<frame name="content" src="stats.php"> +</frameset> + diff --git a/src/warden-server/contrib/wardenweb/listmartians.json b/src/warden-server/contrib/wardenweb/listmartians.json new file mode 100644 index 0000000..4e0c2b9 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/listmartians.json @@ -0,0 +1 @@ +{"255.255.255.255/32":{"first":4294967295,"last":4294967295,"route":"255.255.255.255/32","descr":"limitedbroadcast"},"0.0.0.0/8":{"first":4294967296,"last":4311744511,"route":"0.0.0.0/8","descr":"broadcast"},"198.51.100.0/24":{"first":3325256704,"last":3325256959,"route":"198.51.100.0/24","descr":"RFC5737"},"224.0.0.0/4":{"first":3758096384,"last":4026531839,"route":"224.0.0.0/4","descr":"multicast"},"192.0.2.0/24":{"first":3221225984,"last":3221226239,"route":"192.0.2.0/24","descr":"RFC5737"},"169.254.0.0/16":{"first":2851995648,"last":2852061183,"route":"169.254.0.0/16","descr":"autoconfiguration"},"198.18.0.0/15":{"first":3323068416,"last":3323199487,"route":"198.18.0.0/15","descr":"RFC2544"},"192.88.99.0/24":{"first":3227017984,"last":3227018239,"route":"192.88.99.0/24","descr":"6to4anycast"},"10.0.0.0/8":{"first":167772160,"last":184549375,"route":"10.0.0.0/8","descr":"local10"},"240.0.0.0/4":{"first":4026531840,"last":4294967295,"route":"240.0.0.0/4","descr":"future"},"172.16.0.0/12":{"first":2886729728,"last":2887778303,"route":"172.16.0.0/12","descr":"local172"},"127.0.0.0/8":{"first":2130706432,"last":2147483647,"route":"127.0.0.0/8","descr":"loopback"},"203.0.113.0/24":{"first":3405803776,"last":3405804031,"route":"203.0.113.0/24","descr":"RFC5737"},"192.168.0.0/16":{"first":3232235520,"last":3232301055,"route":"192.168.0.0/16","descr":"local192"},"100.64.0.0/10":{"first":1681915904,"last":1686110207,"route":"100.64.0.0/10","descr":"RFC6598"}} \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/listmartians.pl b/src/warden-server/contrib/wardenweb/listmartians.pl new file mode 100644 index 0000000..0f60e2a --- /dev/null +++ b/src/warden-server/contrib/wardenweb/listmartians.pl @@ -0,0 +1,116 @@ +use Data::Dumper; +use JSON; + +# Prevod IP na long podobu +sub ip2long +{ + my($ip) = @_; + + my @octets = split(/\./, $ip); + my $DEC = ($octets[0] * 1 << 24) + ($octets[1] * 1 << 16) + ($octets[2] * 1 << 8) + ($octets[3]); + + $DEC = ($DEC > 0 ? $DEC : $DEC + (2 ** 32)); + + return $DEC; +} + +# Ziskani prvni a posledni adresy v long podobe +sub getFirstLastLong +{ + my($cidr) = @_; + + my @adds; + + #rozdeleni CIDR formatu na IP a masku + my @items = split('/', $cidr); + #Prevod podsite na long format + my $is = ip2long($items[0]); + push @adds, $is; + + #Prevedeni posledni IP v podsiti na long + my $ib = $is + (2 ** (32 - $items[1]) - 1); + push @adds, $ib; + + return @adds; +} + +#orezani +sub trim +{ + my($string) = @_; + + $$string =~ s/^\s+//; + $$string =~ s/\s+$//; +} + +#http://en.wikipedia.org/wiki/Reserved_IP_addresses +$input = " +route: 0.0.0.0/8 +descr: broadcast +route: 10.0.0.0/8 +descr: local10 +route: 100.64.0.0/10 +descr: RFC6598 +route: 127.0.0.0/8 +descr: loopback +route: 169.254.0.0/16 +descr: autoconfiguration +route: 172.16.0.0/12 +descr: local172 +route: 192.0.2.0/24 +descr: RFC5737 +route: 192.88.99.0/24 +descr: 6to4anycast +route: 192.168.0.0/16 +descr: local192 +route: 198.18.0.0/15 +descr: RFC2544 +route: 198.51.100.0/24 +descr: RFC5737 +route: 203.0.113.0/24 +descr: RFC5737 +route: 224.0.0.0/4 +descr: multicast +route: 240.0.0.0/4 +descr: future +route: 255.255.255.255/32 +descr: limitedbroadcast +"; + + +@winfo = split("\n", $input); +#print Dumper(@winfo); + +#todo zbytek co neni ve whois separatne + +%data=(); +$route=""; +foreach(@winfo) { + if($_ =~ /route:\s+(.*)/) { + $route = $1; + $data{$route}{'route'} = $route; + } + if($_ =~ /descr:\s+(.*)/) { + $data{$route}{'descr'} = $1; + } +} + +my $sql_net_cond = ""; +foreach (keys %data) +{ + my $net = $_; + trim(\$net); + + my @adds = getFirstLastLong($net); + $data{$net}{'first'} = $adds[0]; + $data{$net}{'last'} = $adds[1]; + + #Testovaci vypis + #printf("%s\t %u - %u\n", $net, $adds[0], $adds[1]); +# $sql_net_cond .= "inet_aton(ip) BETWEEN $adds[0] AND $adds[1] OR "; +} +#print $sql_net_cond; + +print encode_json(\%data); + +#$sql_net_cond = substr($sql_net_cond, 0, -3); diff --git a/src/warden-server/contrib/wardenweb/listnetworks.json b/src/warden-server/contrib/wardenweb/listnetworks.json new file mode 100644 index 0000000..8596bda --- /dev/null +++ b/src/warden-server/contrib/wardenweb/listnetworks.json @@ -0,0 +1 @@ +{"78.128.128.0/17":{"first":1317044224,"last":1317076991,"route":"78.128.128.0/17","descr":"CESNET6-TCZ"},"195.113.0.0/16":{"first":3278962688,"last":3279028223,"route":"195.113.0.0/16","descr":"CESNET-TCZ"},"147.32.0.0/15":{"first":2468347904,"last":2468478975,"route":"147.32.0.0/15","descr":"CVUT-TCZ + VSCHT-TCZ"},"160.216.0.0/15":{"first":2698510336,"last":2698641407,"route":"160.216.0.0/15","descr":"UNOB-TCZ + JCU-TCZ"},"147.228.0.0/16":{"first":2481192960,"last":2481258495,"route":"147.228.0.0/16","descr":"ZCU.CZ"},"193.84.192.0/19":{"first":3243556864,"last":3243565055,"route":"193.84.192.0/19","descr":"SLU-T34CZ + OPF_SLU-T34CZ"},"147.251.0.0/16":{"first":2482700288,"last":2482765823,"route":"147.251.0.0/16","descr":"MUNI-TCZ"},"193.84.160.0/20":{"first":3243548672,"last":3243552767,"route":"193.84.160.0/20","descr":"NRI-T34CZ"},"146.102.0.0/16":{"first":2456158208,"last":2456223743,"route":"146.102.0.0/16","descr":"VSE-TCZ"},"158.194.0.0/16":{"first":2663514112,"last":2663579647,"route":"158.194.0.0/16","descr":"UPOL-TCZ"},"158.196.0.0/16":{"first":2663645184,"last":2663710719,"route":"158.196.0.0/16","descr":"VSB-TCZ"},"195.178.64.0/19":{"first":3283238912,"last":3283247103,"route":"195.178.64.0/19","descr":"CESNET-T34CZ"},"147.228.0.0/14":{"first":2481192960,"last":2481455103,"route":"147.228.0.0/14","descr":"ZCU-TCZ + VUTBR-TCZ + TUL-TCZ + CAS-TCZ"},"193.84.32.0/20":{"first":3243515904,"last":3243519999,"route":"193.84.32.0/20","descr":"CZU-T34CZ"}} \ No newline at end of file diff --git a/src/warden-server/contrib/wardenweb/listnetworks.pl b/src/warden-server/contrib/wardenweb/listnetworks.pl new file mode 100644 index 0000000..2ecbb36 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/listnetworks.pl @@ -0,0 +1,83 @@ +use Data::Dumper; +use JSON; + +# Prevod IP na long podobu +sub ip2long +{ + my($ip) = @_; + + my @octets = split(/\./, $ip); + my $DEC = ($octets[0] * 1 << 24) + ($octets[1] * 1 << 16) + ($octets[2] * 1 << 8) + ($octets[3]); + + $DEC = ($DEC > 0 ? $DEC : $DEC + (2 ** 32)); + + return $DEC; +} + +# Ziskani prvni a posledni adresy v long podobe +sub getFirstLastLong +{ + my($cidr) = @_; + + my @adds; + + #rozdeleni CIDR formatu na IP a masku + my @items = split('/', $cidr); + #Prevod podsite na long format + my $is = ip2long($items[0]); + push @adds, $is; + + #Prevedeni posledni IP v podsiti na long + my $ib = $is + (2 ** (32 - $items[1]) - 1); + push @adds, $ib; + + return @adds; +} + +#orezani +sub trim +{ + my($string) = @_; + + $$string =~ s/^\s+//; + $$string =~ s/\s+$//; +} + +@winfo = split("\n", `whois -r -i origin AS2852`); +#print Dumper(@winfo); + +#todo zbytek co neni ve whois separatne +push(@winfo, "route: 147.228.0.0/16"); +push(@winfo, "descr: ZCU.CZ"); + +%data=(); +$route=""; +foreach(@winfo) { + if($_ =~ /route:\s+(.*)/) { + $route = $1; + $data{$route}{'route'} = $route; + } + if($_ =~ /descr:\s+(.*)/) { + $data{$route}{'descr'} = $1; + } +} + +my $sql_net_cond = ""; +foreach (keys %data) +{ + my $net = $_; + trim(\$net); + + my @adds = getFirstLastLong($net); + $data{$net}{'first'} = $adds[0]; + $data{$net}{'last'} = $adds[1]; + + #Testovaci vypis + #printf("%s\t %u - %u\n", $net, $adds[0], $adds[1]); +# $sql_net_cond .= "inet_aton(ip) BETWEEN $adds[0] AND $adds[1] OR "; +} +#print $sql_net_cond; + +print encode_json(\%data); + +#$sql_net_cond = substr($sql_net_cond, 0, -3); diff --git a/src/warden-server/contrib/wardenweb/show_HostnameServiceTypeActivity.php b/src/warden-server/contrib/wardenweb/show_HostnameServiceTypeActivity.php new file mode 100644 index 0000000..2105580 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/show_HostnameServiceTypeActivity.php @@ -0,0 +1,156 @@ +<style> +.formli {list-style-type: none; display:inline; } +.formli div {float:left;} +.formli div label {display:block;} + +</style> +<? + +include("db.php"); +include('formrender.php'); + +function list_something($col) { +#TODO: tohle je potreba predpocitat do cache + global $db; + $ret = array(); + + $cache_file = "/tmp/cache.wardenweb.ls.$col"; + $timedif = @(time() - filemtime($cache_file)); + if ($timedif < 84601) { + // cached file is fresh enough, return cached array + $ret = json_decode(file_get_contents($cache_file), true); + } else { + // cached file is too old, create new + $q = "SELECT $col FROM events group by $col"; + $res = mysql_query($q, $db); + while ($tmp = mysql_fetch_assoc($res)) { + array_push($ret, $tmp[$col]); + } + file_put_contents($cache_file, json_encode($ret)); + } + return $ret; +} + +#http://www.midnighthax.com/quickform.php +require_once "HTML/QuickForm.php"; + +print json_encode(($_POST)); + +if(IsSet($_POST['limit']) && !is_numeric($_POST['limit'])){ + $_POST['limit'] = 5000; +} + +?> +<table width="100%" border=1> +<tr><td> +<? +$form = new HTML_QuickForm('formRemote', 'post'); + +$res = list_something("hostname"); +$select_result = $form->addElement('select', 'hostname', 'hostname', array_combine($res, $res)); +$select_result->setSize(10); +$select_result->setMultiple(true); + +$res = list_something("service"); +$select_result = $form->addElement('select', 'service', 'service', array_combine($res, $res)); +$select_result->setSize(10); +$select_result->setMultiple(true); + +$res = list_something("type"); +$select_result = $form->addElement('select', 'type', 'type', array_combine($res, $res)); +$select_result->setSize(10); +$select_result->setMultiple(true); + +$ownnet = json_decode(file_get_contents("listnetworks.json"), true); +$res = array(); +foreach($ownnet as $tmp) { + array_push($res, (empty($tmp["descr"]) ? $tmp['route'] : $tmp['descr'])); + $ownnet[$tmp["descr"]] = $tmp["route"];#fast inverse +} +$select_result = $form->addElement('select', 'ownnet', 'ownnet', array_combine($res, $res)); +$select_result->setSize(10); +$select_result->setMultiple(true); + +$form->addElement('text', 'limit', 'limit'); +$form->addElement('submit', 'btnSubmit', 'Submit'); + +#$form->display(); + +$renderer = new DefaultFormRenderer($form); +$renderer->display(); + + +?> +</td> +<td width=50%> + +<? +if( IsSet($_POST["btnSubmit"])) { + $tmp_where=array(); + + + foreach(array("hostname","service", "type") as $col) { + if ( count($_POST[$col]) > 0 ) { + $foo = Array(); + $cq=""; + foreach ($_POST[$col] as $tmp) { + #TODO: sqli + array_push( $foo, "$col like '".mysql_real_escape_string($tmp)."'"); + } + $cq = join(" OR ", $foo); + if(strlen($cq)>0) { + array_push($tmp_where, "(".$cq.")"); + } + } + } + + + if(is_array($_POST["ownnet"])) { + $foo = Array(); + foreach($_POST["ownnet"] as $tmp) { + array_push($foo, "inet_aton(source) BETWEEN ".$ownnet[ $ownnet[$tmp] ]['first'] ." AND ".$ownnet[ $ownnet[$tmp] ]['last']); + } + $cq = join(" OR ", $foo); + if(strlen($cq)>0) { + array_push($tmp_where, "(".$cq.")"); + } + } + + $where = join(" AND ", $tmp_where); +} +?> + + +<? + if( IsSet($_POST["btnSubmit"]) and !empty($where)) { + print("<iframe src=\"graph_HostnameServiceTypeActivity_html.php?per=hour&where=".base64_encode($where)."\" style=\"width:100%; height:500\"></iframe>"); + } +?> + +</td> +</tr> +</table> + +<hr> +<? + +#TODO: strip vsechny superznaky + +if( IsSet($_POST["btnSubmit"]) and !empty($where)) { + var_dump($_POST); + + $q = "SELECT * FROM events WHERE $where ORDER BY detected DESC LIMIT ".$_POST['limit']; + $res = mysql_query($q, $db); + print "Query: ".json_encode($q)."<br>"; + print "Found: ".mysql_num_rows($res)."<br>"; + print("<pre>"); + while ($tmp = mysql_fetch_assoc($res)) { + #var_dump($tmp); + print json_encode(view_recode($tmp))."\n"; + } + print("</pre>"); +} + + +?> + diff --git a/src/warden-server/contrib/wardenweb/show_MartiansActivity.php b/src/warden-server/contrib/wardenweb/show_MartiansActivity.php new file mode 100644 index 0000000..f31f393 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/show_MartiansActivity.php @@ -0,0 +1,26 @@ +<?php + +include("db.php"); + +$martians = json_decode(file_get_contents("listmartians.json"), true); +$res = array(); + +$foo = Array(); +foreach($martians as $tmp) { + array_push($foo, "inet_aton(source) BETWEEN ".$tmp['first'] ." AND ".$tmp['last']); +} +$where = join(" OR ", $foo); + +$q = "SELECT * FROM events where $where order by detected desc;"; +$res = mysql_query($q, $db); +if (mysql_num_rows($res) == 0) { die("nodata");} + +$d = array(); +while ($tmp = mysql_fetch_assoc($res)) { + print json_encode(view_recode($tmp))."\n"; +} +mysql_free_result($res); +mysql_close($db); + +?> + diff --git a/src/warden-server/contrib/wardenweb/show_SourceActivity.php b/src/warden-server/contrib/wardenweb/show_SourceActivity.php new file mode 100644 index 0000000..33063fe --- /dev/null +++ b/src/warden-server/contrib/wardenweb/show_SourceActivity.php @@ -0,0 +1,75 @@ +<? + +include("db.php"); +$db=$db; + +if(IsSet($_GET['source']) && !IsSet($_POST['source'])) { + $_POST['source'] = $_GET['source']; + $_POST['limit'] = ""; + $_POST['btnSubmit'] = "Submit"; +} + +#http://www.midnighthax.com/quickform.php +require_once "HTML/QuickForm.php"; + +print json_encode(($_POST)); + +if(IsSet($_POST['limit']) && !is_numeric($_POST['limit'])){ + $_POST['limit'] = 5000; +} + +?> +<table width="100%" border=1> +<tr><td width="1px"> +<? +$form = new HTML_QuickForm('formRemote', 'post'); + +$form->addElement('text', 'source', 'source'); + +$form->addElement('text', 'limit', 'limit'); +$form->addElement('submit', 'btnSubmit', 'Submit'); + +$form->display(); + +?> +</td><td width=1px>COSI +<? + #fuck mvc +?> +</td><td> +<? + if(! empty($_POST["source"])) { + print("<iframe src=\"graph_SourceActivity_html.php?per=day&source=".$_POST['source']."\" style=\"width:100%; height:500\"></iframe>"); +} +?> + +</td> +</tr> +</table> + +<hr> +<? + +#TODO: strip vsechny superznaky + +if( IsSet($_POST["btnSubmit"])) { + + if( ! empty($_POST['source'])) { + $where = "source='".$_POST['source']."'"; + //$where = "source like '".$_POST['source']."%'"; + $q = "SELECT * FROM events WHERE $where ORDER BY detected DESC LIMIT ".$_POST['limit']; + $res = mysql_query($q, $db); + print "Query: ".json_encode($q)."<br>"; + print "Found: ".mysql_num_rows($res)."<br>"; + print("<pre>"); + while ($tmp = mysql_fetch_assoc($res)) { + #var_dump($tmp); + print json_encode(view_recode($tmp))."\n"; + } + print("</pre>"); + } +} + + +?> + diff --git a/src/warden-server/contrib/wardenweb/show_TargetportActivity.php b/src/warden-server/contrib/wardenweb/show_TargetportActivity.php new file mode 100644 index 0000000..5fee937 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/show_TargetportActivity.php @@ -0,0 +1,87 @@ +<? + +include("db.php"); +$db=$db; + +#http://www.midnighthax.com/quickform.php +require_once "HTML/QuickForm.php"; + +if(IsSet($_GET['port']) && !IsSet($_POST['target_port'])) { + $_POST['target_port'] = $_GET['port']; + $_POST['limit'] = ""; + $_POST['btnSubmit'] = "Submit"; +} + +print json_encode(($_POST)); + +if(IsSet($_POST['limit']) && !is_numeric($_POST['limit'])){ + $_POST['limit'] = 5000; +} + +?> +<table width="100%" border=1> +<tr><td width="1px"> +<? +$form = new HTML_QuickForm('formRemote', 'post'); + +$form->addElement('text', 'target_port', 'target_port'); + +$form->addElement('text', 'limit', 'limit'); +$form->addElement('submit', 'btnSubmit', 'Submit'); + +$form->display(); + +?> +</td><td width=1px> +<? + #fuck mvc + if(! empty($_POST["target_port"])) { + print("<a href='https://isc.sans.edu/port.html?port=".$_POST['target_port']."'>sans.org::ports</a>"); +# print("<table border=1>"); +# printf("<tr><th>%s</th><th>%s</th></tr>\n", $_POST['remote'], "count"); +# foreach ($c as $tmp) { +# printf("<tr><td>%s</td><td>%d</td></tr>\n", $tmp["_id"]["result"], $tmp["value"]["count"]); +# #print json_encode($tmp)."\n"; +# } +# print("</table>"); + } +?> +</td><td> +<? + if(! empty($_POST["target_port"])) { + print("<iframe src=\"graph_TargetportActivity_html.php?per=day&port=".$_POST['target_port']."\" style=\"width:100%; height:500\"></iframe>"); +} +?> + +</td> +</tr> +</table> + +<hr> +<? + +#TODO: strip vsechny superznaky + +if( IsSet($_POST["btnSubmit"])) { + + if( ! empty($_POST['target_port']) && is_numeric($_POST['target_port'])) { + # or je tu protoze chci mit stejne kvery pro log i mapy + $where = "target_port=".$_POST['target_port']; + $q = "SELECT * FROM events WHERE $where ORDER BY detected DESC LIMIT ".$_POST['limit']; + $res = mysql_query($q, $db); + print "Query: ".json_encode($q)."<br>"; + print "Found: ".mysql_num_rows($res)."<br>"; + print("<pre>"); + while ($tmp = mysql_fetch_assoc($res)) { + #var_dump($tmp); +# $tmp['source'] = sprintf('<a href=show_SourceActivity.php?source=%s>%s<a>', +# $tmp['source'],$tmp['source']); + print json_encode(view_recode($tmp))."\n"; + } + print("</pre>"); + } +} + + +?> + diff --git a/src/warden-server/contrib/wardenweb/show_TopTargetports.html b/src/warden-server/contrib/wardenweb/show_TopTargetports.html new file mode 100644 index 0000000..a698573 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/show_TopTargetports.html @@ -0,0 +1,24 @@ +<? + +include("db.php"); + +<table width="100%" border=0> +<tr> +<td> +<iframe src="graph_TopTargetportsNum.html" style="width:100%; height:40%"></iframe> +</td> +</tr> + +<tr> +<td> +<iframe src="graph_TopTargetportsStr.html" style="width:100%; height:40%"></iframe> +</td> +</tr> + +<tr> +<td> +<iframe src="table_TopTargetports.html" style="width:100%; height:70%"></iframe> +</td> +</tr> + +</table> diff --git a/src/warden-server/contrib/wardenweb/stats.php b/src/warden-server/contrib/wardenweb/stats.php new file mode 100644 index 0000000..58e27df --- /dev/null +++ b/src/warden-server/contrib/wardenweb/stats.php @@ -0,0 +1,59 @@ +<? + +include("db.php"); +#include("build_table_html.php"); + +if(isset($_GET['c'])) + switch($_GET['c']) { + case 'droplog': $db->log->remove(); + header("Location: ".$_SERVER["PHP_SELF"]); + break; + case 'dropmaps': + #TODO: refactor listcollections + $list = $db->listCollections(); + foreach ($list as $collection) { + $cname = $collection->getName(); + if( preg_match("/^map/", $cname)) { + print("Dropping $cname\n"); + $collection->drop(); + $db->timingReduces->remove(json_decode('{"name":"'.$cname.'"}'), array("justOne"=>true)); + } + } + header("Location: ".$_SERVER["PHP_SELF"]); + break; + case 'makemaps': + include("makemaps.php"); + header("Location: ".$_SERVER["PHP_SELF"]); + break; + default: break; + } + +?> + +<table width="100%" border=0> +<tr> + +<td width="50%"> +<iframe src="graph_TypeActivity_html.php" style="width:100%; height:400"></iframe> +</td> + +<td> +<iframe src="graph_HostnameServiceTypeActivity_html.php" style="width:100%; height:400"></iframe> +</td> + +</tr> +<tr> + +<td colspan=2> +<iframe src="table_HostnameServiceType.html" style="width:100%; height:600"></iframe> +</td> + +</tr> + +<tr> +<td colspan=2> +<iframe src="show_TargetportActivity.php" style="width:100%; height:1000"></iframe> +</td> +</tr> + +</table> diff --git a/src/warden-server/contrib/wardenweb/table_HostnameServiceType.html b/src/warden-server/contrib/wardenweb/table_HostnameServiceType.html new file mode 100644 index 0000000..6e2e1f5 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/table_HostnameServiceType.html @@ -0,0 +1,41 @@ +<html> +<head> +<style type="text/css" title="currentStyle"> +@import "datatables/media/css/demo_table.css"; +</style> +<script type="text/javascript" language="javascript" src="datatables/media/js/jquery.js"></script> +<script type="text/javascript" language="javascript" src="datatables/media/js/jquery.dataTables.js"></script> +<script type="text/javascript" charset="utf-8"> +$(document).ready(function() { + var oTable = $('#example').dataTable( { + "bFilter": true, + "iDisplayLength": 20, + "aaSorting": [], + "sAjaxSource": "table_HostnameServiceType.php", + "aoColumns": [ + { "mDataProp": "hostname" }, + { "mDataProp": "service" }, + { "mDataProp": "type" }, + { "mDataProp": "count" }, + { "mDataProp": "lastdetected" }, + { "mDataProp": "lastreceived" } + ] + } ); +} ); + +</script> +</head> +<body> +<h2>HostnameServiceType</h2> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example" width="100%"> +<thead> + <th>hostname</th> + <th>service</th> + <th>type</th> + <th>count</th> + <th>lastdetected</th> + <th>lastreceived</th> +</thead> +</table> +</body> +</html> diff --git a/src/warden-server/contrib/wardenweb/table_HostnameServiceType.php b/src/warden-server/contrib/wardenweb/table_HostnameServiceType.php new file mode 100644 index 0000000..3df0cb0 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/table_HostnameServiceType.php @@ -0,0 +1,19 @@ +<?php + +include("db.php"); + +$q = "SELECT hostname,service,type,count(*) as count, max(detected) as lastdetected,max(received) as lastreceived FROM `events` group by hostname,service,type;"; +$res = mysql_query($q, $db); +if (mysql_num_rows($res) == 0) { die("nodata");} + +$d = array(); +while ($tmp = mysql_fetch_assoc($res)) { + array_push($d, $tmp); +} +mysql_free_result($res); +mysql_close($db); + +print json_encode(array("aaData" => $d)); + +?> + diff --git a/src/warden-server/contrib/wardenweb/table_TopSources.html b/src/warden-server/contrib/wardenweb/table_TopSources.html new file mode 100644 index 0000000..4c65de2 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/table_TopSources.html @@ -0,0 +1,33 @@ +<html> +<head> +<style type="text/css" title="currentStyle"> +@import "datatables/media/css/demo_table.css"; +</style> +<script type="text/javascript" language="javascript" src="datatables/media/js/jquery.js"></script> +<script type="text/javascript" language="javascript" src="datatables/media/js/jquery.dataTables.js"></script> +<script type="text/javascript" charset="utf-8"> +$(document).ready(function() { + var oTable = $('#example').dataTable( { + "bFilter": true, + "iDisplayLength": 20, + "aaSorting": [], + "sAjaxSource": "table_TopSources.php", + "aoColumns": [ + { "mDataProp": "source" }, + { "mDataProp": "count" } + ] + } ); +} ); + +</script> +</head> +<body> +<h2>TopSources</h2> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example" width="100%"> +<thead> + <th>source</th> + <th>count</th> +</thead> +</table> +</body> +</html> diff --git a/src/warden-server/contrib/wardenweb/table_TopSources.php b/src/warden-server/contrib/wardenweb/table_TopSources.php new file mode 100644 index 0000000..6aa702e --- /dev/null +++ b/src/warden-server/contrib/wardenweb/table_TopSources.php @@ -0,0 +1,19 @@ +<?php + +include("db.php"); + +$q = "select source, count(*) as count from events where detected > from_unixtime(unix_timestamp(now())-3600*24*30) group by source order by count desc limit 100;"; +$res = mysql_query($q, $db); +if (mysql_num_rows($res) == 0) { die("nodata");} + +$d = array(); +while ($tmp = mysql_fetch_assoc($res)) { + array_push($d, $tmp); +} +mysql_free_result($res); +mysql_close($db); + +print json_encode(array("aaData" => $d)); + +?> + diff --git a/src/warden-server/contrib/wardenweb/table_TopTargetports.html b/src/warden-server/contrib/wardenweb/table_TopTargetports.html new file mode 100644 index 0000000..c8c47c4 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/table_TopTargetports.html @@ -0,0 +1,33 @@ +<html> +<head> +<style type="text/css" title="currentStyle"> +@import "datatables/media/css/demo_table.css"; +</style> +<script type="text/javascript" language="javascript" src="datatables/media/js/jquery.js"></script> +<script type="text/javascript" language="javascript" src="datatables/media/js/jquery.dataTables.js"></script> +<script type="text/javascript" charset="utf-8"> +$(document).ready(function() { + var oTable = $('#example').dataTable( { + "bFilter": true, + "iDisplayLength": 20, + "aaSorting": [], + "sAjaxSource": "table_TopTargetports.php", + "aoColumns": [ + { "mDataProp": "target_port" }, + { "mDataProp": "count" } + ] + } ); +} ); + +</script> +</head> +<body> +<h2>TopTargetports</h2> +<table cellpadding="0" cellspacing="0" border="0" class="display" id="example" width="100%"> +<thead> + <th>target_port</th> + <th>count</th> +</thead> +</table> +</body> +</html> diff --git a/src/warden-server/contrib/wardenweb/table_TopTargetports.php b/src/warden-server/contrib/wardenweb/table_TopTargetports.php new file mode 100644 index 0000000..ce7d694 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/table_TopTargetports.php @@ -0,0 +1,19 @@ +<?php + +include("db.php"); + +$q = "select target_port, count(*) as count from events where detected > from_unixtime(unix_timestamp(now())-3600*24*30) group by target_port order by count desc limit 300;"; +$res = mysql_query($q, $db); +if (mysql_num_rows($res) == 0) { die("nodata");} + +$d = array(); +while ($tmp = mysql_fetch_assoc($res)) { + array_push($d, $tmp); +} +mysql_free_result($res); +mysql_close($db); + +print json_encode(array("aaData" => $d)); + +?> + diff --git a/src/warden-server/contrib/wardenweb/webmenu.php b/src/warden-server/contrib/wardenweb/webmenu.php new file mode 100644 index 0000000..5dcefa2 --- /dev/null +++ b/src/warden-server/contrib/wardenweb/webmenu.php @@ -0,0 +1,34 @@ +<html> +<head><style>ul,li { display:inline; padding: 5px;} body { font-size: 0.8em; }</style></head> +<body> +<ul> + +<? +if(!empty($_SERVER["REMOTE_ADDR"])) { + $menu = array( + "stats" => "stats.php", + "show_SourceActivity.php" => "show_SourceActivity.php", + "show_TargetportActivity.php" => "show_TargetportActivity.php", + "show_HostnameServiceTypeActivity.php" => "show_HostnameServiceTypeActivity.php", + "show_MartiansActivity.php" => "show_MartiansActivity.php", + "TopTargetports" => "show_TopTargetports.html", + "TopSources" => "table_TopSources.html", + "dropmaps" => "stats.php?c=dropmaps", + "makemaps" => "stats.php?c=makemaps", + "phpmyadmin" => "/phpmyadmin", + "timingReduces" => "timingReduces.php" + ); + foreach($menu as $key => $val) { + printf('<li><a href="%s" target="content">%s</a></li>',$val, $key); + } +} +?> +<li>size [T/F]: + <? include('db.php');?> + TODO +</li> + +</ul> +</body> +</html> + -- GitLab