├── .bowerrc ├── .gitignore ├── .travis.yml ├── README.md ├── app.js ├── app ├── __tests__ │ ├── FilterablePageableTable.js │ ├── PageableTable.js │ └── Table.js ├── bower_components │ ├── bootstrap │ │ ├── .bower.json │ │ ├── Gruntfile.js │ │ ├── LICENSE │ │ ├── README.md │ │ ├── bower.json │ │ ├── dist │ │ │ ├── css │ │ │ │ ├── bootstrap-theme.css │ │ │ │ ├── bootstrap-theme.css.map │ │ │ │ ├── bootstrap-theme.min.css │ │ │ │ ├── bootstrap.css │ │ │ │ ├── bootstrap.css.map │ │ │ │ └── bootstrap.min.css │ │ │ ├── fonts │ │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ │ └── glyphicons-halflings-regular.woff │ │ │ └── js │ │ │ │ ├── bootstrap.js │ │ │ │ └── bootstrap.min.js │ │ ├── fonts │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ └── glyphicons-halflings-regular.woff │ │ ├── grunt │ │ │ ├── bs-glyphicons-data-generator.js │ │ │ ├── bs-lessdoc-parser.js │ │ │ ├── bs-raw-files-generator.js │ │ │ └── sauce_browsers.yml │ │ ├── js │ │ │ ├── affix.js │ │ │ ├── alert.js │ │ │ ├── button.js │ │ │ ├── carousel.js │ │ │ ├── collapse.js │ │ │ ├── dropdown.js │ │ │ ├── modal.js │ │ │ ├── popover.js │ │ │ ├── scrollspy.js │ │ │ ├── tab.js │ │ │ ├── tooltip.js │ │ │ └── transition.js │ │ ├── less │ │ │ ├── alerts.less │ │ │ ├── badges.less │ │ │ ├── bootstrap.less │ │ │ ├── breadcrumbs.less │ │ │ ├── button-groups.less │ │ │ ├── buttons.less │ │ │ ├── carousel.less │ │ │ ├── close.less │ │ │ ├── code.less │ │ │ ├── component-animations.less │ │ │ ├── dropdowns.less │ │ │ ├── forms.less │ │ │ ├── glyphicons.less │ │ │ ├── grid.less │ │ │ ├── input-groups.less │ │ │ ├── jumbotron.less │ │ │ ├── labels.less │ │ │ ├── list-group.less │ │ │ ├── media.less │ │ │ ├── mixins.less │ │ │ ├── mixins │ │ │ │ ├── alerts.less │ │ │ │ ├── background-variant.less │ │ │ │ ├── border-radius.less │ │ │ │ ├── buttons.less │ │ │ │ ├── center-block.less │ │ │ │ ├── clearfix.less │ │ │ │ ├── forms.less │ │ │ │ ├── gradients.less │ │ │ │ ├── grid-framework.less │ │ │ │ ├── grid.less │ │ │ │ ├── hide-text.less │ │ │ │ ├── image.less │ │ │ │ ├── labels.less │ │ │ │ ├── list-group.less │ │ │ │ ├── nav-divider.less │ │ │ │ ├── nav-vertical-align.less │ │ │ │ ├── opacity.less │ │ │ │ ├── pagination.less │ │ │ │ ├── panels.less │ │ │ │ ├── progress-bar.less │ │ │ │ ├── reset-filter.less │ │ │ │ ├── resize.less │ │ │ │ ├── responsive-visibility.less │ │ │ │ ├── size.less │ │ │ │ ├── tab-focus.less │ │ │ │ ├── table-row.less │ │ │ │ ├── text-emphasis.less │ │ │ │ ├── text-overflow.less │ │ │ │ └── vendor-prefixes.less │ │ │ ├── modals.less │ │ │ ├── navbar.less │ │ │ ├── navs.less │ │ │ ├── normalize.less │ │ │ ├── pager.less │ │ │ ├── pagination.less │ │ │ ├── panels.less │ │ │ ├── popovers.less │ │ │ ├── print.less │ │ │ ├── progress-bars.less │ │ │ ├── responsive-embed.less │ │ │ ├── responsive-utilities.less │ │ │ ├── scaffolding.less │ │ │ ├── tables.less │ │ │ ├── theme.less │ │ │ ├── thumbnails.less │ │ │ ├── tooltip.less │ │ │ ├── type.less │ │ │ ├── utilities.less │ │ │ ├── variables.less │ │ │ └── wells.less │ │ └── package.json │ ├── datatables │ │ ├── .bower.json │ │ ├── .datatables-commit-sync │ │ ├── .gitignore │ │ ├── Contributing.md │ │ ├── Readme.md │ │ ├── bower.json │ │ ├── composer.json │ │ ├── dataTables.jquery.json │ │ ├── examples │ │ │ ├── advanced_init │ │ │ │ ├── column_render.html │ │ │ │ ├── complex_header.html │ │ │ │ ├── defaults.html │ │ │ │ ├── dom_multiple_elements.html │ │ │ │ ├── dom_toolbar.html │ │ │ │ ├── dt_events.html │ │ │ │ ├── events_live.html │ │ │ │ ├── footer_callback.html │ │ │ │ ├── html5-data-attributes.html │ │ │ │ ├── index.html │ │ │ │ ├── language_file.html │ │ │ │ ├── length_menu.html │ │ │ │ ├── row_callback.html │ │ │ │ ├── row_grouping.html │ │ │ │ └── sort_direction_control.html │ │ │ ├── ajax │ │ │ │ ├── custom_data_flat.html │ │ │ │ ├── custom_data_property.html │ │ │ │ ├── data │ │ │ │ │ ├── arrays.txt │ │ │ │ │ ├── arrays_custom_prop.txt │ │ │ │ │ ├── arrays_subobjects.txt │ │ │ │ │ ├── objects.txt │ │ │ │ │ ├── objects_deep.txt │ │ │ │ │ ├── objects_root_array.txt │ │ │ │ │ ├── objects_subarrays.txt │ │ │ │ │ └── orthogonal.txt │ │ │ │ ├── deep.html │ │ │ │ ├── defer_render.html │ │ │ │ ├── index.html │ │ │ │ ├── null_data_source.html │ │ │ │ ├── objects.html │ │ │ │ ├── objects_subarrays.html │ │ │ │ ├── orthogonal-data.html │ │ │ │ └── simple.html │ │ │ ├── api │ │ │ │ ├── add_row.html │ │ │ │ ├── api_in_init.html │ │ │ │ ├── counter_columns.html │ │ │ │ ├── form.html │ │ │ │ ├── highlight.html │ │ │ │ ├── index.html │ │ │ │ ├── multi_filter.html │ │ │ │ ├── multi_filter_select.html │ │ │ │ ├── regex.html │ │ │ │ ├── row_details.html │ │ │ │ ├── select_row.html │ │ │ │ ├── select_single_row.html │ │ │ │ ├── show_hide.html │ │ │ │ └── tabs_and_scrolling.html │ │ │ ├── basic_init │ │ │ │ ├── alt_pagination.html │ │ │ │ ├── comma-decimal.html │ │ │ │ ├── complex_header.html │ │ │ │ ├── dom.html │ │ │ │ ├── filter_only.html │ │ │ │ ├── flexible_width.html │ │ │ │ ├── hidden_columns.html │ │ │ │ ├── index.html │ │ │ │ ├── language.html │ │ │ │ ├── multi_col_sort.html │ │ │ │ ├── multiple_tables.html │ │ │ │ ├── scroll_x.html │ │ │ │ ├── scroll_xy.html │ │ │ │ ├── scroll_y.html │ │ │ │ ├── scroll_y_theme.html │ │ │ │ ├── state_save.html │ │ │ │ ├── table_sorting.html │ │ │ │ └── zero_configuration.html │ │ │ ├── data_sources │ │ │ │ ├── ajax.html │ │ │ │ ├── dom.html │ │ │ │ ├── index.html │ │ │ │ ├── js_array.html │ │ │ │ └── server_side.html │ │ │ ├── index.html │ │ │ ├── plug-ins │ │ │ │ ├── api.html │ │ │ │ ├── dom_sort.html │ │ │ │ ├── index.html │ │ │ │ ├── range_filtering.html │ │ │ │ ├── sorting_auto.html │ │ │ │ └── sorting_manual.html │ │ │ ├── resources │ │ │ │ ├── bootstrap │ │ │ │ │ ├── 3 │ │ │ │ │ │ ├── dataTables.bootstrap.css │ │ │ │ │ │ ├── dataTables.bootstrap.js │ │ │ │ │ │ └── index.html │ │ │ │ │ └── images │ │ │ │ │ │ ├── sort_asc.png │ │ │ │ │ │ ├── sort_asc_disabled.png │ │ │ │ │ │ ├── sort_both.png │ │ │ │ │ │ ├── sort_desc.png │ │ │ │ │ │ └── sort_desc_disabled.png │ │ │ │ ├── de_DE.txt │ │ │ │ ├── demo.css │ │ │ │ ├── demo.js │ │ │ │ ├── details_close.png │ │ │ │ ├── details_open.png │ │ │ │ ├── examples.php │ │ │ │ ├── font │ │ │ │ │ ├── raleway_thin-webfont.eot │ │ │ │ │ ├── raleway_thin-webfont.ttf │ │ │ │ │ └── raleway_thin-webfont.woff │ │ │ │ ├── foundation │ │ │ │ │ ├── dataTables.foundation.css │ │ │ │ │ ├── dataTables.foundation.js │ │ │ │ │ └── images │ │ │ │ │ │ ├── sort_asc.png │ │ │ │ │ │ ├── sort_asc_disabled.png │ │ │ │ │ │ ├── sort_both.png │ │ │ │ │ │ ├── sort_desc.png │ │ │ │ │ │ └── sort_desc_disabled.png │ │ │ │ ├── jqueryui │ │ │ │ │ ├── dataTables.jqueryui.css │ │ │ │ │ ├── dataTables.jqueryui.js │ │ │ │ │ ├── dataTables.jqueryui.scss │ │ │ │ │ └── index.html │ │ │ │ └── syntax │ │ │ │ │ ├── Syntax Highlighter license │ │ │ │ │ ├── shCore.css │ │ │ │ │ └── shCore.js │ │ │ ├── server_side │ │ │ │ ├── custom_vars.html │ │ │ │ ├── defer_loading.html │ │ │ │ ├── ids.html │ │ │ │ ├── index.html │ │ │ │ ├── jsonp.html │ │ │ │ ├── object_data.html │ │ │ │ ├── pipeline.html │ │ │ │ ├── post.html │ │ │ │ ├── row_details.html │ │ │ │ ├── scripts │ │ │ │ │ ├── ids-arrays.php │ │ │ │ │ ├── ids-objects.php │ │ │ │ │ ├── jsonp.php │ │ │ │ │ ├── mysql.sql │ │ │ │ │ ├── objects.php │ │ │ │ │ ├── post.php │ │ │ │ │ ├── postgres.sql │ │ │ │ │ ├── server_processing.php │ │ │ │ │ ├── sqlite.sql │ │ │ │ │ ├── sqlserver.sql │ │ │ │ │ └── ssp.class.php │ │ │ │ ├── select_rows.html │ │ │ │ └── simple.html │ │ │ └── styling │ │ │ │ ├── bootstrap.html │ │ │ │ ├── cell-border.html │ │ │ │ ├── compact.html │ │ │ │ ├── display.html │ │ │ │ ├── foundation.html │ │ │ │ ├── hover.html │ │ │ │ ├── index.html │ │ │ │ ├── jqueryUI.html │ │ │ │ ├── no-classes.html │ │ │ │ ├── order-column.html │ │ │ │ ├── row-border.html │ │ │ │ └── stripe.html │ │ ├── license.txt │ │ ├── media │ │ │ ├── css │ │ │ │ ├── jquery.dataTables.css │ │ │ │ ├── jquery.dataTables.min.css │ │ │ │ └── jquery.dataTables_themeroller.css │ │ │ ├── images │ │ │ │ ├── Sorting icons.psd │ │ │ │ ├── back_disabled.png │ │ │ │ ├── back_enabled.png │ │ │ │ ├── back_enabled_hover.png │ │ │ │ ├── favicon.ico │ │ │ │ ├── forward_disabled.png │ │ │ │ ├── forward_enabled.png │ │ │ │ ├── forward_enabled_hover.png │ │ │ │ ├── sort_asc.png │ │ │ │ ├── sort_asc_disabled.png │ │ │ │ ├── sort_both.png │ │ │ │ ├── sort_desc.png │ │ │ │ └── sort_desc_disabled.png │ │ │ ├── js │ │ │ │ ├── jquery.dataTables.js │ │ │ │ ├── jquery.dataTables.min.js │ │ │ │ └── jquery.js │ │ │ └── unit_testing │ │ │ │ ├── controller.js │ │ │ │ ├── controller.php │ │ │ │ ├── data_sources │ │ │ │ ├── arrays.php │ │ │ │ ├── method.php │ │ │ │ ├── objects.php │ │ │ │ └── param.php │ │ │ │ ├── index.html │ │ │ │ ├── performance │ │ │ │ ├── draw.html │ │ │ │ ├── large.php │ │ │ │ ├── page.html │ │ │ │ └── sort.html │ │ │ │ ├── templates │ │ │ │ ├── -complex_header.php │ │ │ │ ├── 2512.php │ │ │ │ ├── 6776.php │ │ │ │ ├── complex_header_2.php │ │ │ │ ├── deferred_table.php │ │ │ │ ├── dom_data.php │ │ │ │ ├── dom_data_th.php │ │ │ │ ├── dom_data_two_headers.php │ │ │ │ ├── dymanic_table.php │ │ │ │ ├── empty_table.php │ │ │ │ ├── html_table.php │ │ │ │ ├── js_data.php │ │ │ │ ├── js_data_mixed_types.php │ │ │ │ └── two_tables.php │ │ │ │ ├── tests │ │ │ │ └── 6776-scrolling-table-grows.js │ │ │ │ ├── tests_onhold │ │ │ │ ├── 1_dom │ │ │ │ │ ├── -complex_header.js │ │ │ │ │ ├── -iDraw.js │ │ │ │ │ ├── 2512.js │ │ │ │ │ ├── 2530-2.js │ │ │ │ │ ├── 2530.js │ │ │ │ │ ├── 2569.js │ │ │ │ │ ├── 2600.js │ │ │ │ │ ├── 2608.js │ │ │ │ │ ├── 2635.js │ │ │ │ │ ├── 2746-stable-sort.js │ │ │ │ │ ├── 2799.js │ │ │ │ │ ├── 2840-restore-table-width.js │ │ │ │ │ ├── 2914-state-save-sort.js │ │ │ │ │ ├── 5396-fnUpdate-arrays-mData.js │ │ │ │ │ ├── 5396-fnUpdate-arrays.js │ │ │ │ │ ├── 5508-xscroll-zero-content.js │ │ │ │ │ ├── 6776-scrolling-table-grows.js │ │ │ │ │ ├── _getDataFunctions.js │ │ │ │ │ ├── _setDataFunctions.js │ │ │ │ │ ├── _zero_config.js │ │ │ │ │ ├── aaSorting.js │ │ │ │ │ ├── aaSortingFixed.js │ │ │ │ │ ├── aoColumns.bSearchable.js │ │ │ │ │ ├── aoColumns.bSortable.js │ │ │ │ │ ├── aoColumns.bUseRendered.js │ │ │ │ │ ├── aoColumns.bVisible.js │ │ │ │ │ ├── aoColumns.bVisible2.js │ │ │ │ │ ├── aoColumns.fnRender.js │ │ │ │ │ ├── aoColumns.iDataSort.js │ │ │ │ │ ├── aoColumns.sClass.js │ │ │ │ │ ├── aoColumns.sName.js │ │ │ │ │ ├── aoColumns.sTitle.js │ │ │ │ │ ├── aoColumns.sWidth.js │ │ │ │ │ ├── aoSearchCols.js │ │ │ │ │ ├── asStripClasses.js │ │ │ │ │ ├── bAutoWidth.js │ │ │ │ │ ├── bFilter.js │ │ │ │ │ ├── bInfiniteScroll.js │ │ │ │ │ ├── bInfo.js │ │ │ │ │ ├── bJQueryUI.js │ │ │ │ │ ├── bLengthChange.js │ │ │ │ │ ├── bPaginate.js │ │ │ │ │ ├── bProcessing.js │ │ │ │ │ ├── bServerSide.js │ │ │ │ │ ├── bSort.js │ │ │ │ │ ├── bSortCellsTop.js │ │ │ │ │ ├── bSortClasses.js │ │ │ │ │ ├── fnCookieCallback.js │ │ │ │ │ ├── fnCreatedCell.js │ │ │ │ │ ├── fnCreatedRow.js │ │ │ │ │ ├── fnDeleteRow.js │ │ │ │ │ ├── fnDrawCallback.js │ │ │ │ │ ├── fnFilter.js │ │ │ │ │ ├── fnFooterCallback.js │ │ │ │ │ ├── fnHeaderCallback.js │ │ │ │ │ ├── fnInfoCallback.js │ │ │ │ │ ├── fnInitComplete.js │ │ │ │ │ ├── fnRowCallback.js │ │ │ │ │ ├── fnSetColumnVis.js │ │ │ │ │ ├── fnSetColumnVis2.js │ │ │ │ │ ├── gh-151.js │ │ │ │ │ ├── gh125 - stripe stripping.js │ │ │ │ │ ├── html-autodetect-sort.js │ │ │ │ │ ├── iDisplayLength.js │ │ │ │ │ ├── oLanguage.oPaginate.js │ │ │ │ │ ├── oLanguage.sInfo.js │ │ │ │ │ ├── oLanguage.sInfoEmpty.js │ │ │ │ │ ├── oLanguage.sInfoPostFix.js │ │ │ │ │ ├── oLanguage.sLengthMenu.js │ │ │ │ │ ├── oLanguage.sProcessing.js │ │ │ │ │ ├── oLanguage.sSearch.js │ │ │ │ │ ├── oLanguage.sUrl.js │ │ │ │ │ ├── oLanguage.sZeroRecords.js │ │ │ │ │ ├── oSearch.js │ │ │ │ │ ├── sAjaxSource.js │ │ │ │ │ ├── sDom.js │ │ │ │ │ ├── sPaginationType.js │ │ │ │ │ ├── sScrollXY.js │ │ │ │ │ └── th_in_body.js │ │ │ │ ├── 2_js │ │ │ │ │ ├── 39-nested-null.js │ │ │ │ │ ├── 6872-default-content-missing-props.js │ │ │ │ │ ├── 8549--string-sorting-nonstrings.js │ │ │ │ │ ├── _zero_config.js │ │ │ │ │ ├── aaSorting.js │ │ │ │ │ ├── aaSortingFixed.js │ │ │ │ │ ├── aoColumns.bSearchable.js │ │ │ │ │ ├── aoColumns.bSortable.js │ │ │ │ │ ├── aoColumns.bUseRendered.js │ │ │ │ │ ├── aoColumns.bVisible.js │ │ │ │ │ ├── aoColumns.fnRender.js │ │ │ │ │ ├── aoColumns.iDataSort.js │ │ │ │ │ ├── aoColumns.sClass.js │ │ │ │ │ ├── aoColumns.sName.js │ │ │ │ │ ├── aoColumns.sTitle.js │ │ │ │ │ ├── aoColumns.sWidth.js │ │ │ │ │ ├── aoSearchCols.js │ │ │ │ │ ├── asStripClasses.js │ │ │ │ │ ├── bAutoWidth.js │ │ │ │ │ ├── bFilter.js │ │ │ │ │ ├── bInfo.js │ │ │ │ │ ├── bLengthChange.js │ │ │ │ │ ├── bPaginate.js │ │ │ │ │ ├── bProcessing.js │ │ │ │ │ ├── bServerSide.js │ │ │ │ │ ├── bSort.js │ │ │ │ │ ├── bSortClasses.js │ │ │ │ │ ├── fnCreatedCell.js │ │ │ │ │ ├── fnCreatedRow.js │ │ │ │ │ ├── fnDrawCallback.js │ │ │ │ │ ├── fnFooterCallback.js │ │ │ │ │ ├── fnHeaderCallback.js │ │ │ │ │ ├── fnInitComplete.js │ │ │ │ │ ├── fnRowCallback.js │ │ │ │ │ ├── iDisplayLength.js │ │ │ │ │ ├── js_data_mixed_types.js │ │ │ │ │ ├── oLanguage.oPaginate.js │ │ │ │ │ ├── oLanguage.sInfo.js │ │ │ │ │ ├── oLanguage.sInfoEmpty.js │ │ │ │ │ ├── oLanguage.sInfoPostFix.js │ │ │ │ │ ├── oLanguage.sLengthMenu.js │ │ │ │ │ ├── oLanguage.sProcessing.js │ │ │ │ │ ├── oLanguage.sSearch.js │ │ │ │ │ ├── oLanguage.sUrl.js │ │ │ │ │ ├── oLanguage.sZeroRecords.js │ │ │ │ │ ├── oSearch.js │ │ │ │ │ ├── sAjaxSource.js │ │ │ │ │ ├── sDom.js │ │ │ │ │ └── sPaginationType.js │ │ │ │ ├── 3_ajax │ │ │ │ │ ├── _zero_config.js │ │ │ │ │ ├── aaSorting.js │ │ │ │ │ ├── aaSortingFixed.js │ │ │ │ │ ├── ajax.js │ │ │ │ │ ├── aoColumns.bSearchable.js │ │ │ │ │ ├── aoColumns.bSortable.js │ │ │ │ │ ├── aoColumns.bUseRendered.js │ │ │ │ │ ├── aoColumns.bVisible.js │ │ │ │ │ ├── aoColumns.fnRender.js │ │ │ │ │ ├── aoColumns.iDataSort.js │ │ │ │ │ ├── aoColumns.sClass.js │ │ │ │ │ ├── aoColumns.sName.js │ │ │ │ │ ├── aoColumns.sTitle.js │ │ │ │ │ ├── aoColumns.sWidth.js │ │ │ │ │ ├── aoSearchCols.js │ │ │ │ │ ├── asStripClasses.js │ │ │ │ │ ├── bAutoWidth.js │ │ │ │ │ ├── bFilter.js │ │ │ │ │ ├── bInfo.js │ │ │ │ │ ├── bLengthChange.js │ │ │ │ │ ├── bPaginate.js │ │ │ │ │ ├── bProcessing.js │ │ │ │ │ ├── bServerSide.js │ │ │ │ │ ├── bSort.js │ │ │ │ │ ├── bSortClasses.js │ │ │ │ │ ├── fnCreatedCell.js │ │ │ │ │ ├── fnCreatedRow.js │ │ │ │ │ ├── fnDrawCallback.js │ │ │ │ │ ├── fnHeaderCallback.js │ │ │ │ │ ├── fnInitComplete.js │ │ │ │ │ ├── fnRowCallback.js │ │ │ │ │ ├── fnServerData.js │ │ │ │ │ ├── fnServerParams.js │ │ │ │ │ ├── iDisplayLength.js │ │ │ │ │ ├── oLanguage.oPaginate.js │ │ │ │ │ ├── oLanguage.sInfo.js │ │ │ │ │ ├── oLanguage.sInfoEmpty.js │ │ │ │ │ ├── oLanguage.sInfoPostFix.js │ │ │ │ │ ├── oLanguage.sLengthMenu.js │ │ │ │ │ ├── oLanguage.sLoadingRecords.js │ │ │ │ │ ├── oLanguage.sProcessing.js │ │ │ │ │ ├── oLanguage.sSearch.js │ │ │ │ │ ├── oLanguage.sUrl.js │ │ │ │ │ ├── oLanguage.sZeroRecords.js │ │ │ │ │ ├── oSearch.js │ │ │ │ │ ├── sAjaxDataProp.js │ │ │ │ │ ├── sAjaxDataProp2.js │ │ │ │ │ ├── sAjaxSource.js │ │ │ │ │ ├── sDom.js │ │ │ │ │ ├── sPaginationType.js │ │ │ │ │ └── sServerMethod.js │ │ │ │ ├── 4_server-side │ │ │ │ │ ├── -iDraw.js │ │ │ │ │ ├── 2440.js │ │ │ │ │ ├── 2569.js │ │ │ │ │ ├── 2600.js │ │ │ │ │ ├── _zero_config.js │ │ │ │ │ ├── aaSorting.js │ │ │ │ │ ├── aaSortingFixed.js │ │ │ │ │ ├── ajax.js │ │ │ │ │ ├── aoColumns.bSearchable.js │ │ │ │ │ ├── aoColumns.bSortable.js │ │ │ │ │ ├── aoColumns.bUseRendered.js │ │ │ │ │ ├── aoColumns.bVisible.js │ │ │ │ │ ├── aoColumns.fnRender.js │ │ │ │ │ ├── aoColumns.sClass.js │ │ │ │ │ ├── aoColumns.sName.js │ │ │ │ │ ├── aoColumns.sTitle.js │ │ │ │ │ ├── aoColumns.sWidth.js │ │ │ │ │ ├── aoSearchCols.js │ │ │ │ │ ├── asStripClasses.js │ │ │ │ │ ├── bAutoWidth.js │ │ │ │ │ ├── bFilter.js │ │ │ │ │ ├── bInfiniteScroll.js │ │ │ │ │ ├── bInfo.js │ │ │ │ │ ├── bLengthChange.js │ │ │ │ │ ├── bPaginate.js │ │ │ │ │ ├── bProcessing.js │ │ │ │ │ ├── bServerSide.js │ │ │ │ │ ├── bSort.js │ │ │ │ │ ├── bSortClasses.js │ │ │ │ │ ├── fnCreatedCell.js │ │ │ │ │ ├── fnCreatedRow.js │ │ │ │ │ ├── fnDrawCallback.js │ │ │ │ │ ├── fnHeaderCallback.js │ │ │ │ │ ├── fnInitComplete.js │ │ │ │ │ ├── fnRowCallback.js │ │ │ │ │ ├── fnServerData.js │ │ │ │ │ ├── fnServerParams.js │ │ │ │ │ ├── iDeferLoading.js │ │ │ │ │ ├── iDisplayLength.js │ │ │ │ │ ├── oLanguage.oPaginate.js │ │ │ │ │ ├── oLanguage.sInfo.js │ │ │ │ │ ├── oLanguage.sInfoEmpty.js │ │ │ │ │ ├── oLanguage.sInfoPostFix.js │ │ │ │ │ ├── oLanguage.sLengthMenu.js │ │ │ │ │ ├── oLanguage.sProcessing.js │ │ │ │ │ ├── oLanguage.sSearch.js │ │ │ │ │ ├── oLanguage.sUrl.js │ │ │ │ │ ├── oLanguage.sZeroRecords.js │ │ │ │ │ ├── oSearch.js │ │ │ │ │ ├── sAjaxDataProp.js │ │ │ │ │ ├── sAjaxSource.js │ │ │ │ │ ├── sDom.js │ │ │ │ │ ├── sPaginationType.js │ │ │ │ │ └── sServerMethod.js │ │ │ │ ├── 5_ajax_objects │ │ │ │ │ ├── _zero_config.js │ │ │ │ │ ├── _zero_config_arrays_subobjects.js │ │ │ │ │ ├── _zero_config_deep.js │ │ │ │ │ ├── _zero_config_mDataProp.js │ │ │ │ │ ├── _zero_config_null_source.js │ │ │ │ │ ├── _zero_config_objects.js │ │ │ │ │ ├── _zero_config_objects_subarrays.js │ │ │ │ │ ├── aaSorting.js │ │ │ │ │ ├── aaSortingFixed.js │ │ │ │ │ ├── aoColumns.bSearchable.js │ │ │ │ │ ├── aoColumns.bSortable.js │ │ │ │ │ ├── aoColumns.bUseRendered.js │ │ │ │ │ ├── aoColumns.bVisible.js │ │ │ │ │ ├── aoColumns.fnRender.js │ │ │ │ │ ├── aoColumns.iDataSort.js │ │ │ │ │ ├── aoColumns.sClass.js │ │ │ │ │ ├── aoColumns.sName.js │ │ │ │ │ ├── aoColumns.sTitle.js │ │ │ │ │ ├── aoColumns.sWidth.js │ │ │ │ │ ├── aoSearchCols.js │ │ │ │ │ ├── asStripClasses.js │ │ │ │ │ ├── bAutoWidth.js │ │ │ │ │ ├── bFilter.js │ │ │ │ │ ├── bInfo.js │ │ │ │ │ ├── bLengthChange.js │ │ │ │ │ ├── bPaginate.js │ │ │ │ │ ├── bProcessing.js │ │ │ │ │ ├── bServerSide.js │ │ │ │ │ ├── bSort.js │ │ │ │ │ ├── bSortClasses.js │ │ │ │ │ ├── fnDrawCallback.js │ │ │ │ │ ├── fnHeaderCallback.js │ │ │ │ │ ├── fnInitComplete.js │ │ │ │ │ ├── fnRowCallback.js │ │ │ │ │ ├── fnServerData.js │ │ │ │ │ ├── iDisplayLength.js │ │ │ │ │ ├── oLanguage.oPaginate.js │ │ │ │ │ ├── oLanguage.sInfo.js │ │ │ │ │ ├── oLanguage.sInfoEmpty.js │ │ │ │ │ ├── oLanguage.sInfoPostFix.js │ │ │ │ │ ├── oLanguage.sLengthMenu.js │ │ │ │ │ ├── oLanguage.sProcessing.js │ │ │ │ │ ├── oLanguage.sSearch.js │ │ │ │ │ ├── oLanguage.sUrl.js │ │ │ │ │ ├── oLanguage.sZeroRecords.js │ │ │ │ │ ├── oSearch.js │ │ │ │ │ ├── sAjaxSource.js │ │ │ │ │ ├── sDom.js │ │ │ │ │ └── sPaginationType.js │ │ │ │ ├── 6776-scrolling-table-grows.js │ │ │ │ └── 6_delayed_rendering │ │ │ │ │ ├── _zero_config.js │ │ │ │ │ ├── aaSorting.js │ │ │ │ │ ├── aaSortingFixed.js │ │ │ │ │ ├── aoColumns.bSearchable.js │ │ │ │ │ ├── aoColumns.bSortable.js │ │ │ │ │ ├── aoColumns.bUseRendered.js │ │ │ │ │ ├── aoColumns.bVisible.js │ │ │ │ │ ├── aoColumns.fnRender.js │ │ │ │ │ ├── aoColumns.iDataSort.js │ │ │ │ │ ├── aoColumns.sClass.js │ │ │ │ │ ├── aoColumns.sName.js │ │ │ │ │ ├── aoColumns.sTitle.js │ │ │ │ │ ├── aoColumns.sWidth.js │ │ │ │ │ ├── aoSearchCols.js │ │ │ │ │ ├── asStripClasses.js │ │ │ │ │ ├── bAutoWidth.js │ │ │ │ │ ├── bFilter.js │ │ │ │ │ ├── bInfo.js │ │ │ │ │ ├── bLengthChange.js │ │ │ │ │ ├── bPaginate.js │ │ │ │ │ ├── bProcessing.js │ │ │ │ │ ├── bServerSide.js │ │ │ │ │ ├── bSort.js │ │ │ │ │ ├── bSortClasses.js │ │ │ │ │ ├── fnDrawCallback.js │ │ │ │ │ ├── fnHeaderCallback.js │ │ │ │ │ ├── fnInitComplete.js │ │ │ │ │ ├── fnRowCallback.js │ │ │ │ │ ├── fnServerData.js │ │ │ │ │ ├── iDisplayLength.js │ │ │ │ │ ├── oLanguage.oPaginate.js │ │ │ │ │ ├── oLanguage.sInfo.js │ │ │ │ │ ├── oLanguage.sInfoEmpty.js │ │ │ │ │ ├── oLanguage.sInfoPostFix.js │ │ │ │ │ ├── oLanguage.sLengthMenu.js │ │ │ │ │ ├── oLanguage.sProcessing.js │ │ │ │ │ ├── oLanguage.sSearch.js │ │ │ │ │ ├── oLanguage.sUrl.js │ │ │ │ │ ├── oLanguage.sZeroRecords.js │ │ │ │ │ ├── oSearch.js │ │ │ │ │ ├── sAjaxDataProp.js │ │ │ │ │ ├── sAjaxDataProp2.js │ │ │ │ │ ├── sAjaxSource.js │ │ │ │ │ ├── sDom.js │ │ │ │ │ └── sPaginationType.js │ │ │ │ └── unit_test.js │ │ └── package.json │ └── jquery │ │ ├── .bower.json │ │ ├── MIT-LICENSE.txt │ │ ├── bower.json │ │ ├── dist │ │ ├── jquery.js │ │ ├── jquery.min.js │ │ └── jquery.min.map │ │ └── src │ │ ├── ajax.js │ │ ├── ajax │ │ ├── jsonp.js │ │ ├── load.js │ │ ├── parseJSON.js │ │ ├── parseXML.js │ │ ├── script.js │ │ ├── var │ │ │ ├── nonce.js │ │ │ └── rquery.js │ │ └── xhr.js │ │ ├── attributes.js │ │ ├── attributes │ │ ├── attr.js │ │ ├── classes.js │ │ ├── prop.js │ │ ├── support.js │ │ └── val.js │ │ ├── callbacks.js │ │ ├── core.js │ │ ├── core │ │ ├── access.js │ │ ├── init.js │ │ ├── parseHTML.js │ │ ├── ready.js │ │ └── var │ │ │ └── rsingleTag.js │ │ ├── css.js │ │ ├── css │ │ ├── addGetHookIf.js │ │ ├── curCSS.js │ │ ├── defaultDisplay.js │ │ ├── hiddenVisibleSelectors.js │ │ ├── support.js │ │ ├── swap.js │ │ └── var │ │ │ ├── cssExpand.js │ │ │ ├── getStyles.js │ │ │ ├── isHidden.js │ │ │ ├── rmargin.js │ │ │ └── rnumnonpx.js │ │ ├── data.js │ │ ├── data │ │ ├── Data.js │ │ ├── accepts.js │ │ └── var │ │ │ ├── data_priv.js │ │ │ └── data_user.js │ │ ├── deferred.js │ │ ├── deprecated.js │ │ ├── dimensions.js │ │ ├── effects.js │ │ ├── effects │ │ ├── Tween.js │ │ └── animatedSelector.js │ │ ├── event.js │ │ ├── event │ │ ├── alias.js │ │ └── support.js │ │ ├── exports │ │ ├── amd.js │ │ └── global.js │ │ ├── intro.js │ │ ├── jquery.js │ │ ├── manipulation.js │ │ ├── manipulation │ │ ├── _evalUrl.js │ │ ├── support.js │ │ └── var │ │ │ └── rcheckableType.js │ │ ├── offset.js │ │ ├── outro.js │ │ ├── queue.js │ │ ├── queue │ │ └── delay.js │ │ ├── selector-native.js │ │ ├── selector-sizzle.js │ │ ├── selector.js │ │ ├── serialize.js │ │ ├── sizzle │ │ └── dist │ │ │ ├── sizzle.js │ │ │ ├── sizzle.min.js │ │ │ └── sizzle.min.map │ │ ├── traversing.js │ │ ├── traversing │ │ ├── findFilter.js │ │ └── var │ │ │ └── rneedsContext.js │ │ ├── var │ │ ├── arr.js │ │ ├── class2type.js │ │ ├── concat.js │ │ ├── hasOwn.js │ │ ├── indexOf.js │ │ ├── pnum.js │ │ ├── push.js │ │ ├── rnotwhite.js │ │ ├── slice.js │ │ ├── strundefined.js │ │ ├── support.js │ │ └── toString.js │ │ └── wrap.js ├── client.html ├── js │ ├── client-example.jsx │ ├── client.js │ ├── components │ │ ├── BackbonePagination.jsx │ │ ├── FilterSearch.jsx │ │ ├── FilterablePageableTable.jsx │ │ ├── PageableTable.jsx │ │ └── Table.jsx │ ├── server-example.jsx │ └── server.js ├── preprocessor.js └── server.html ├── bower.json ├── gulpfile.js ├── index.js └── package.json /.bowerrc: -------------------------------------------------------------------------------- 1 | { 2 | "directory": "app/bower_components" 3 | } 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | node_modules/ 3 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "0.10" 4 | -------------------------------------------------------------------------------- /app/bower_components/bootstrap/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bootstrap", 3 | "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.", 4 | "version": "3.2.0", 5 | "keywords": [ 6 | "css", 7 | "js", 8 | "less", 9 | "mobile-first", 10 | "responsive", 11 | "front-end", 12 | "framework", 13 | "web" 14 | ], 15 | "homepage": "http://getbootstrap.com", 16 | "main": [ 17 | "less/bootstrap.less", 18 | "dist/css/bootstrap.css", 19 | "dist/js/bootstrap.js", 20 | "dist/fonts/glyphicons-halflings-regular.eot", 21 | "dist/fonts/glyphicons-halflings-regular.svg", 22 | "dist/fonts/glyphicons-halflings-regular.ttf", 23 | "dist/fonts/glyphicons-halflings-regular.woff" 24 | ], 25 | "ignore": [ 26 | ".*", 27 | "_config.yml", 28 | "CNAME", 29 | "composer.json", 30 | "CONTRIBUTING.md", 31 | "docs", 32 | "js/tests", 33 | "test-infra" 34 | ], 35 | "dependencies": { 36 | "jquery": ">= 1.9.0" 37 | }, 38 | "_release": "3.2.0", 39 | "_resolution": { 40 | "type": "version", 41 | "tag": "v3.2.0", 42 | "commit": "c068162161154a4b85110ea1e7dd3d7897ce2b72" 43 | }, 44 | "_source": "git://github.com/twbs/bootstrap.git", 45 | "_target": "~3.2.0", 46 | "_originalSource": "bootstrap" 47 | } -------------------------------------------------------------------------------- /app/bower_components/bootstrap/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2011-2014 Twitter, Inc 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /app/bower_components/bootstrap/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bootstrap", 3 | "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.", 4 | "version": "3.2.0", 5 | "keywords": [ 6 | "css", 7 | "js", 8 | "less", 9 | "mobile-first", 10 | "responsive", 11 | "front-end", 12 | "framework", 13 | "web" 14 | ], 15 | "homepage": "http://getbootstrap.com", 16 | "main": [ 17 | "less/bootstrap.less", 18 | "dist/css/bootstrap.css", 19 | "dist/js/bootstrap.js", 20 | "dist/fonts/glyphicons-halflings-regular.eot", 21 | "dist/fonts/glyphicons-halflings-regular.svg", 22 | "dist/fonts/glyphicons-halflings-regular.ttf", 23 | "dist/fonts/glyphicons-halflings-regular.woff" 24 | ], 25 | "ignore": [ 26 | ".*", 27 | "_config.yml", 28 | "CNAME", 29 | "composer.json", 30 | "CONTRIBUTING.md", 31 | "docs", 32 | "js/tests", 33 | "test-infra" 34 | ], 35 | "dependencies": { 36 | "jquery": ">= 1.9.0" 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /app/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/securingsincity/backbone-react-ui/4d2d162ea19ee3a8211a876635e1812549193cee/app/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /app/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/securingsincity/backbone-react-ui/4d2d162ea19ee3a8211a876635e1812549193cee/app/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /app/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/securingsincity/backbone-react-ui/4d2d162ea19ee3a8211a876635e1812549193cee/app/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /app/bower_components/bootstrap/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/securingsincity/backbone-react-ui/4d2d162ea19ee3a8211a876635e1812549193cee/app/bower_components/bootstrap/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /app/bower_components/bootstrap/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/securingsincity/backbone-react-ui/4d2d162ea19ee3a8211a876635e1812549193cee/app/bower_components/bootstrap/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /app/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/securingsincity/backbone-react-ui/4d2d162ea19ee3a8211a876635e1812549193cee/app/bower_components/bootstrap/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /app/bower_components/bootstrap/grunt/bs-glyphicons-data-generator.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap Grunt task for Glyphicons data generation 3 | * http://getbootstrap.com 4 | * Copyright 2014 Twitter, Inc. 5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 6 | */ 7 | 'use strict'; 8 | var fs = require('fs'); 9 | 10 | module.exports = function generateGlyphiconsData(grunt) { 11 | // Pass encoding, utf8, so `readFileSync` will return a string instead of a 12 | // buffer 13 | var glyphiconsFile = fs.readFileSync('less/glyphicons.less', 'utf8'); 14 | var glyphiconsLines = glyphiconsFile.split('\n'); 15 | 16 | // Use any line that starts with ".glyphicon-" and capture the class name 17 | var iconClassName = /^\.(glyphicon-[^\s]+)/; 18 | var glyphiconsData = '# This file is generated via Grunt task. **Do not edit directly.**\n' + 19 | '# See the \'build-glyphicons-data\' task in Gruntfile.js.\n\n'; 20 | var glyphiconsYml = 'docs/_data/glyphicons.yml'; 21 | for (var i = 0, len = glyphiconsLines.length; i < len; i++) { 22 | var match = glyphiconsLines[i].match(iconClassName); 23 | 24 | if (match !== null) { 25 | glyphiconsData += '- ' + match[1] + '\n'; 26 | } 27 | } 28 | 29 | // Create the `_data` directory if it doesn't already exist 30 | if (!fs.existsSync('docs/_data')) { 31 | fs.mkdirSync('docs/_data'); 32 | } 33 | 34 | try { 35 | fs.writeFileSync(glyphiconsYml, glyphiconsData); 36 | } 37 | catch (err) { 38 | grunt.fail.warn(err); 39 | } 40 | grunt.log.writeln('File ' + glyphiconsYml.cyan + ' created.'); 41 | }; 42 | -------------------------------------------------------------------------------- /app/bower_components/bootstrap/grunt/bs-raw-files-generator.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap Grunt task for generating raw-files.min.js for the Customizer 3 | * http://getbootstrap.com 4 | * Copyright 2014 Twitter, Inc. 5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 6 | */ 7 | 8 | /* global btoa: true */ 9 | 10 | 'use strict'; 11 | var fs = require('fs'); 12 | var btoa = require('btoa'); 13 | var glob = require('glob'); 14 | 15 | function getFiles(type) { 16 | var files = {}; 17 | var recursive = (type === 'less'); 18 | var globExpr = (recursive ? '/**/*' : '/*'); 19 | glob.sync(type + globExpr) 20 | .filter(function (path) { 21 | return type === 'fonts' ? true : new RegExp('\\.' + type + '$').test(path); 22 | }) 23 | .forEach(function (fullPath) { 24 | var relativePath = fullPath.replace(/^[^/]+\//, ''); 25 | files[relativePath] = (type === 'fonts' ? btoa(fs.readFileSync(fullPath)) : fs.readFileSync(fullPath, 'utf8')); 26 | }); 27 | return 'var __' + type + ' = ' + JSON.stringify(files) + '\n'; 28 | } 29 | 30 | module.exports = function generateRawFilesJs(grunt, banner) { 31 | if (!banner) { 32 | banner = ''; 33 | } 34 | var dirs = ['js', 'less', 'fonts']; 35 | var files = banner + dirs.map(getFiles).reduce(function (combined, file) { 36 | return combined + file; 37 | }, ''); 38 | var rawFilesJs = 'docs/assets/js/raw-files.min.js'; 39 | try { 40 | fs.writeFileSync(rawFilesJs, files); 41 | } 42 | catch (err) { 43 | grunt.fail.warn(err); 44 | } 45 | grunt.log.writeln('File ' + rawFilesJs.cyan + ' created.'); 46 | }; 47 | -------------------------------------------------------------------------------- /app/bower_components/bootstrap/grunt/sauce_browsers.yml: -------------------------------------------------------------------------------- 1 | [ 2 | # Docs: https://saucelabs.com/docs/platforms/webdriver 3 | 4 | { 5 | browserName: "safari", 6 | platform: "OS X 10.9" 7 | }, 8 | { 9 | browserName: "chrome", 10 | platform: "OS X 10.9" 11 | }, 12 | { 13 | browserName: "firefox", 14 | platform: "OS X 10.9" 15 | }, 16 | 17 | # Mac Opera not currently supported by Sauce Labs 18 | 19 | { 20 | browserName: "internet explorer", 21 | version: "11", 22 | platform: "Windows 8.1" 23 | }, 24 | { 25 | browserName: "internet explorer", 26 | version: "10", 27 | platform: "Windows 8" 28 | }, 29 | { 30 | browserName: "internet explorer", 31 | version: "9", 32 | platform: "Windows 7" 33 | }, 34 | { 35 | browserName: "internet explorer", 36 | version: "8", 37 | platform: "Windows 7" 38 | }, 39 | 40 | # { # Unofficial 41 | # browserName: "internet explorer", 42 | # version: "7", 43 | # platform: "Windows XP" 44 | # }, 45 | 46 | { 47 | browserName: "chrome", 48 | platform: "Windows 8.1" 49 | }, 50 | { 51 | browserName: "firefox", 52 | platform: "Windows 8.1" 53 | }, 54 | 55 | # Win Opera 15+ not currently supported by Sauce Labs 56 | 57 | { 58 | browserName: "iphone", 59 | platform: "OS X 10.9", 60 | version: "7.1" 61 | }, 62 | 63 | # iOS Chrome not currently supported by Sauce Labs 64 | 65 | # Linux (unofficial) 66 | { 67 | browserName: "chrome", 68 | platform: "Linux" 69 | }, 70 | { 71 | browserName: "firefox", 72 | platform: "Linux" 73 | } 74 | 75 | # Android Chrome not currently supported by Sauce Labs 76 | 77 | # { # Android Browser (super-unofficial) 78 | # browserName: "android", 79 | # version: "4.0", 80 | # platform: "Linux" 81 | # } 82 | ] 83 | -------------------------------------------------------------------------------- /app/bower_components/bootstrap/less/alerts.less: -------------------------------------------------------------------------------- 1 | // 2 | // Alerts 3 | // -------------------------------------------------- 4 | 5 | 6 | // Base styles 7 | // ------------------------- 8 | 9 | .alert { 10 | padding: @alert-padding; 11 | margin-bottom: @line-height-computed; 12 | border: 1px solid transparent; 13 | border-radius: @alert-border-radius; 14 | 15 | // Headings for larger alerts 16 | h4 { 17 | margin-top: 0; 18 | // Specified for the h4 to prevent conflicts of changing @headings-color 19 | color: inherit; 20 | } 21 | // Provide class for links that match alerts 22 | .alert-link { 23 | font-weight: @alert-link-font-weight; 24 | } 25 | 26 | // Improve alignment and spacing of inner content 27 | > p, 28 | > ul { 29 | margin-bottom: 0; 30 | } 31 | > p + p { 32 | margin-top: 5px; 33 | } 34 | } 35 | 36 | // Dismissible alerts 37 | // 38 | // Expand the right padding and account for the close button's positioning. 39 | 40 | .alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0. 41 | .alert-dismissible { 42 | padding-right: (@alert-padding + 20); 43 | 44 | // Adjust close link position 45 | .close { 46 | position: relative; 47 | top: -2px; 48 | right: -21px; 49 | color: inherit; 50 | } 51 | } 52 | 53 | // Alternate styles 54 | // 55 | // Generate contextual modifier classes for colorizing the alert. 56 | 57 | .alert-success { 58 | .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text); 59 | } 60 | .alert-info { 61 | .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text); 62 | } 63 | .alert-warning { 64 | .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text); 65 | } 66 | .alert-danger { 67 | .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text); 68 | } 69 | -------------------------------------------------------------------------------- /app/bower_components/bootstrap/less/badges.less: -------------------------------------------------------------------------------- 1 | // 2 | // Badges 3 | // -------------------------------------------------- 4 | 5 | 6 | // Base class 7 | .badge { 8 | display: inline-block; 9 | min-width: 10px; 10 | padding: 3px 7px; 11 | font-size: @font-size-small; 12 | font-weight: @badge-font-weight; 13 | color: @badge-color; 14 | line-height: @badge-line-height; 15 | vertical-align: baseline; 16 | white-space: nowrap; 17 | text-align: center; 18 | background-color: @badge-bg; 19 | border-radius: @badge-border-radius; 20 | 21 | // Empty badges collapse automatically (not available in IE8) 22 | &:empty { 23 | display: none; 24 | } 25 | 26 | // Quick fix for badges in buttons 27 | .btn & { 28 | position: relative; 29 | top: -1px; 30 | } 31 | .btn-xs & { 32 | top: 0; 33 | padding: 1px 5px; 34 | } 35 | 36 | // Hover state, but only for links 37 | a& { 38 | &:hover, 39 | &:focus { 40 | color: @badge-link-hover-color; 41 | text-decoration: none; 42 | cursor: pointer; 43 | } 44 | } 45 | 46 | // Account for badges in navs 47 | a.list-group-item.active > &, 48 | .nav-pills > .active > a > & { 49 | color: @badge-active-color; 50 | background-color: @badge-active-bg; 51 | } 52 | .nav-pills > li > a > & { 53 | margin-left: 3px; 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /app/bower_components/bootstrap/less/bootstrap.less: -------------------------------------------------------------------------------- 1 | // Core variables and mixins 2 | @import "variables.less"; 3 | @import "mixins.less"; 4 | 5 | // Reset and dependencies 6 | @import "normalize.less"; 7 | @import "print.less"; 8 | @import "glyphicons.less"; 9 | 10 | // Core CSS 11 | @import "scaffolding.less"; 12 | @import "type.less"; 13 | @import "code.less"; 14 | @import "grid.less"; 15 | @import "tables.less"; 16 | @import "forms.less"; 17 | @import "buttons.less"; 18 | 19 | // Components 20 | @import "component-animations.less"; 21 | @import "dropdowns.less"; 22 | @import "button-groups.less"; 23 | @import "input-groups.less"; 24 | @import "navs.less"; 25 | @import "navbar.less"; 26 | @import "breadcrumbs.less"; 27 | @import "pagination.less"; 28 | @import "pager.less"; 29 | @import "labels.less"; 30 | @import "badges.less"; 31 | @import "jumbotron.less"; 32 | @import "thumbnails.less"; 33 | @import "alerts.less"; 34 | @import "progress-bars.less"; 35 | @import "media.less"; 36 | @import "list-group.less"; 37 | @import "panels.less"; 38 | @import "responsive-embed.less"; 39 | @import "wells.less"; 40 | @import "close.less"; 41 | 42 | // Components w/ JavaScript 43 | @import "modals.less"; 44 | @import "tooltip.less"; 45 | @import "popovers.less"; 46 | @import "carousel.less"; 47 | 48 | // Utility classes 49 | @import "utilities.less"; 50 | @import "responsive-utilities.less"; 51 | -------------------------------------------------------------------------------- /app/bower_components/bootstrap/less/breadcrumbs.less: -------------------------------------------------------------------------------- 1 | // 2 | // Breadcrumbs 3 | // -------------------------------------------------- 4 | 5 | 6 | .breadcrumb { 7 | padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal; 8 | margin-bottom: @line-height-computed; 9 | list-style: none; 10 | background-color: @breadcrumb-bg; 11 | border-radius: @border-radius-base; 12 | 13 | > li { 14 | display: inline-block; 15 | 16 | + li:before { 17 | content: "@{breadcrumb-separator}\00a0"; // Unicode space added since inline-block means non-collapsing white-space 18 | padding: 0 5px; 19 | color: @breadcrumb-color; 20 | } 21 | } 22 | 23 | > .active { 24 | color: @breadcrumb-active-color; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/bower_components/bootstrap/less/close.less: -------------------------------------------------------------------------------- 1 | // 2 | // Close icons 3 | // -------------------------------------------------- 4 | 5 | 6 | .close { 7 | float: right; 8 | font-size: (@font-size-base * 1.5); 9 | font-weight: @close-font-weight; 10 | line-height: 1; 11 | color: @close-color; 12 | text-shadow: @close-text-shadow; 13 | .opacity(.2); 14 | 15 | &:hover, 16 | &:focus { 17 | color: @close-color; 18 | text-decoration: none; 19 | cursor: pointer; 20 | .opacity(.5); 21 | } 22 | 23 | // Additional properties for button version 24 | // iOS requires the button element instead of an anchor tag. 25 | // If you want the anchor version, it requires `href="#"`. 26 | button& { 27 | padding: 0; 28 | cursor: pointer; 29 | background: transparent; 30 | border: 0; 31 | -webkit-appearance: none; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /app/bower_components/bootstrap/less/code.less: -------------------------------------------------------------------------------- 1 | // 2 | // Code (inline and block) 3 | // -------------------------------------------------- 4 | 5 | 6 | // Inline and block code styles 7 | code, 8 | kbd, 9 | pre, 10 | samp { 11 | font-family: @font-family-monospace; 12 | } 13 | 14 | // Inline code 15 | code { 16 | padding: 2px 4px; 17 | font-size: 90%; 18 | color: @code-color; 19 | background-color: @code-bg; 20 | border-radius: @border-radius-base; 21 | } 22 | 23 | // User input typically entered via keyboard 24 | kbd { 25 | padding: 2px 4px; 26 | font-size: 90%; 27 | color: @kbd-color; 28 | background-color: @kbd-bg; 29 | border-radius: @border-radius-small; 30 | box-shadow: inset 0 -1px 0 rgba(0,0,0,.25); 31 | 32 | kbd { 33 | padding: 0; 34 | font-size: 100%; 35 | box-shadow: none; 36 | } 37 | } 38 | 39 | // Blocks of code 40 | pre { 41 | display: block; 42 | padding: ((@line-height-computed - 1) / 2); 43 | margin: 0 0 (@line-height-computed / 2); 44 | font-size: (@font-size-base - 1); // 14px to 13px 45 | line-height: @line-height-base; 46 | word-break: break-all; 47 | word-wrap: break-word; 48 | color: @pre-color; 49 | background-color: @pre-bg; 50 | border: 1px solid @pre-border-color; 51 | border-radius: @border-radius-base; 52 | 53 | // Account for some code outputs that place code tags in pre tags 54 | code { 55 | padding: 0; 56 | font-size: inherit; 57 | color: inherit; 58 | white-space: pre-wrap; 59 | background-color: transparent; 60 | border-radius: 0; 61 | } 62 | } 63 | 64 | // Enable scrollable blocks of code 65 | .pre-scrollable { 66 | max-height: @pre-scrollable-max-height; 67 | overflow-y: scroll; 68 | } 69 | -------------------------------------------------------------------------------- /app/bower_components/bootstrap/less/component-animations.less: -------------------------------------------------------------------------------- 1 | // 2 | // Component animations 3 | // -------------------------------------------------- 4 | 5 | // Heads up! 6 | // 7 | // We don't use the `.opacity()` mixin here since it causes a bug with text 8 | // fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552. 9 | 10 | .fade { 11 | opacity: 0; 12 | .transition(opacity .15s linear); 13 | &.in { 14 | opacity: 1; 15 | } 16 | } 17 | 18 | .collapse { 19 | display: none; 20 | 21 | &.in { display: block; } 22 | tr&.in { display: table-row; } 23 | tbody&.in { display: table-row-group; } 24 | } 25 | 26 | .collapsing { 27 | position: relative; 28 | height: 0; 29 | overflow: hidden; 30 | .transition(height .35s ease); 31 | } 32 | -------------------------------------------------------------------------------- /app/bower_components/bootstrap/less/grid.less: -------------------------------------------------------------------------------- 1 | // 2 | // Grid system 3 | // -------------------------------------------------- 4 | 5 | 6 | // Container widths 7 | // 8 | // Set the container width, and override it for fixed navbars in media queries. 9 | 10 | .container { 11 | .container-fixed(); 12 | 13 | @media (min-width: @screen-sm-min) { 14 | width: @container-sm; 15 | } 16 | @media (min-width: @screen-md-min) { 17 | width: @container-md; 18 | } 19 | @media (min-width: @screen-lg-min) { 20 | width: @container-lg; 21 | } 22 | } 23 | 24 | 25 | // Fluid container 26 | // 27 | // Utilizes the mixin meant for fixed width containers, but without any defined 28 | // width for fluid, full width layouts. 29 | 30 | .container-fluid { 31 | .container-fixed(); 32 | } 33 | 34 | 35 | // Row 36 | // 37 | // Rows contain and clear the floats of your columns. 38 | 39 | .row { 40 | .make-row(); 41 | } 42 | 43 | 44 | // Columns 45 | // 46 | // Common styles for small and large grid columns 47 | 48 | .make-grid-columns(); 49 | 50 | 51 | // Extra small grid 52 | // 53 | // Columns, offsets, pushes, and pulls for extra small devices like 54 | // smartphones. 55 | 56 | .make-grid(xs); 57 | 58 | 59 | // Small grid 60 | // 61 | // Columns, offsets, pushes, and pulls for the small device range, from phones 62 | // to tablets. 63 | 64 | @media (min-width: @screen-sm-min) { 65 | .make-grid(sm); 66 | } 67 | 68 | 69 | // Medium grid 70 | // 71 | // Columns, offsets, pushes, and pulls for the desktop device range. 72 | 73 | @media (min-width: @screen-md-min) { 74 | .make-grid(md); 75 | } 76 | 77 | 78 | // Large grid 79 | // 80 | // Columns, offsets, pushes, and pulls for the large desktop device range. 81 | 82 | @media (min-width: @screen-lg-min) { 83 | .make-grid(lg); 84 | } 85 | -------------------------------------------------------------------------------- /app/bower_components/bootstrap/less/jumbotron.less: -------------------------------------------------------------------------------- 1 | // 2 | // Jumbotron 3 | // -------------------------------------------------- 4 | 5 | 6 | .jumbotron { 7 | padding: @jumbotron-padding; 8 | margin-bottom: @jumbotron-padding; 9 | color: @jumbotron-color; 10 | background-color: @jumbotron-bg; 11 | 12 | h1, 13 | .h1 { 14 | color: @jumbotron-heading-color; 15 | } 16 | p { 17 | margin-bottom: (@jumbotron-padding / 2); 18 | font-size: @jumbotron-font-size; 19 | font-weight: 200; 20 | } 21 | 22 | > hr { 23 | border-top-color: darken(@jumbotron-bg, 10%); 24 | } 25 | 26 | .container & { 27 | border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container 28 | } 29 | 30 | .container { 31 | max-width: 100%; 32 | } 33 | 34 | @media screen and (min-width: @screen-sm-min) { 35 | padding-top: (@jumbotron-padding * 1.6); 36 | padding-bottom: (@jumbotron-padding * 1.6); 37 | 38 | .container & { 39 | padding-left: (@jumbotron-padding * 2); 40 | padding-right: (@jumbotron-padding * 2); 41 | } 42 | 43 | h1, 44 | .h1 { 45 | font-size: (@font-size-base * 4.5); 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /app/bower_components/bootstrap/less/labels.less: -------------------------------------------------------------------------------- 1 | // 2 | // Labels 3 | // -------------------------------------------------- 4 | 5 | .label { 6 | display: inline; 7 | padding: .2em .6em .3em; 8 | font-size: 75%; 9 | font-weight: bold; 10 | line-height: 1; 11 | color: @label-color; 12 | text-align: center; 13 | white-space: nowrap; 14 | vertical-align: baseline; 15 | border-radius: .25em; 16 | 17 | // Add hover effects, but only for links 18 | a& { 19 | &:hover, 20 | &:focus { 21 | color: @label-link-hover-color; 22 | text-decoration: none; 23 | cursor: pointer; 24 | } 25 | } 26 | 27 | // Empty labels collapse automatically (not available in IE8) 28 | &:empty { 29 | display: none; 30 | } 31 | 32 | // Quick fix for labels in buttons 33 | .btn & { 34 | position: relative; 35 | top: -1px; 36 | } 37 | } 38 | 39 | // Colors 40 | // Contextual variations (linked labels get darker on :hover) 41 | 42 | .label-default { 43 | .label-variant(@label-default-bg); 44 | } 45 | 46 | .label-primary { 47 | .label-variant(@label-primary-bg); 48 | } 49 | 50 | .label-success { 51 | .label-variant(@label-success-bg); 52 | } 53 | 54 | .label-info { 55 | .label-variant(@label-info-bg); 56 | } 57 | 58 | .label-warning { 59 | .label-variant(@label-warning-bg); 60 | } 61 | 62 | .label-danger { 63 | .label-variant(@label-danger-bg); 64 | } 65 | -------------------------------------------------------------------------------- /app/bower_components/bootstrap/less/media.less: -------------------------------------------------------------------------------- 1 | // Media objects 2 | // Source: http://stubbornella.org/content/?p=497 3 | // -------------------------------------------------- 4 | 5 | 6 | // Common styles 7 | // ------------------------- 8 | 9 | // Clear the floats 10 | .media, 11 | .media-body { 12 | overflow: hidden; 13 | zoom: 1; 14 | } 15 | 16 | // Proper spacing between instances of .media 17 | .media, 18 | .media .media { 19 | margin-top: 15px; 20 | } 21 | .media:first-child { 22 | margin-top: 0; 23 | } 24 | 25 | // For images and videos, set to block 26 | .media-object { 27 | display: block; 28 | } 29 | 30 | // Reset margins on headings for tighter default spacing 31 | .media-heading { 32 | margin: 0 0 5px; 33 | } 34 | 35 | 36 | // Media image alignment 37 | // ------------------------- 38 | 39 | .media { 40 | > .pull-left { 41 | margin-right: 10px; 42 | } 43 | > .pull-right { 44 | margin-left: 10px; 45 | } 46 | } 47 | 48 | 49 | // Media list variation 50 | // ------------------------- 51 | 52 | // Undo default ul/ol styles 53 | .media-list { 54 | padding-left: 0; 55 | list-style: none; 56 | } 57 | -------------------------------------------------------------------------------- /app/bower_components/bootstrap/less/mixins.less: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------------------------------- 3 | 4 | // Utilities 5 | @import "mixins/hide-text.less"; 6 | @import "mixins/opacity.less"; 7 | @import "mixins/image.less"; 8 | @import "mixins/labels.less"; 9 | @import "mixins/reset-filter.less"; 10 | @import "mixins/resize.less"; 11 | @import "mixins/responsive-visibility.less"; 12 | @import "mixins/size.less"; 13 | @import "mixins/tab-focus.less"; 14 | @import "mixins/text-emphasis.less"; 15 | @import "mixins/text-overflow.less"; 16 | @import "mixins/vendor-prefixes.less"; 17 | 18 | // Components 19 | @import "mixins/alerts.less"; 20 | @import "mixins/buttons.less"; 21 | @import "mixins/panels.less"; 22 | @import "mixins/pagination.less"; 23 | @import "mixins/list-group.less"; 24 | @import "mixins/nav-divider.less"; 25 | @import "mixins/forms.less"; 26 | @import "mixins/progress-bar.less"; 27 | @import "mixins/table-row.less"; 28 | 29 | // Skins 30 | @import "mixins/background-variant.less"; 31 | @import "mixins/border-radius.less"; 32 | @import "mixins/gradients.less"; 33 | 34 | // Layout 35 | @import "mixins/clearfix.less"; 36 | @import "mixins/center-block.less"; 37 | @import "mixins/nav-vertical-align.less"; 38 | @import "mixins/grid-framework.less"; 39 | @import "mixins/grid.less"; 40 | -------------------------------------------------------------------------------- /app/bower_components/bootstrap/less/mixins/alerts.less: -------------------------------------------------------------------------------- 1 | // Alerts 2 | 3 | .alert-variant(@background; @border; @text-color) { 4 | background-color: @background; 5 | border-color: @border; 6 | color: @text-color; 7 | 8 | hr { 9 | border-top-color: darken(@border, 5%); 10 | } 11 | .alert-link { 12 | color: darken(@text-color, 10%); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /app/bower_components/bootstrap/less/mixins/background-variant.less: -------------------------------------------------------------------------------- 1 | // Contextual backgrounds 2 | 3 | .bg-variant(@color) { 4 | background-color: @color; 5 | a&:hover { 6 | background-color: darken(@color, 10%); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /app/bower_components/bootstrap/less/mixins/border-radius.less: -------------------------------------------------------------------------------- 1 | // Single side border-radius 2 | 3 | .border-top-radius(@radius) { 4 | border-top-right-radius: @radius; 5 | border-top-left-radius: @radius; 6 | } 7 | .border-right-radius(@radius) { 8 | border-bottom-right-radius: @radius; 9 | border-top-right-radius: @radius; 10 | } 11 | .border-bottom-radius(@radius) { 12 | border-bottom-right-radius: @radius; 13 | border-bottom-left-radius: @radius; 14 | } 15 | .border-left-radius(@radius) { 16 | border-bottom-left-radius: @radius; 17 | border-top-left-radius: @radius; 18 | } 19 | -------------------------------------------------------------------------------- /app/bower_components/bootstrap/less/mixins/buttons.less: -------------------------------------------------------------------------------- 1 | // Button variants 2 | // 3 | // Easily pump out default styles, as well as :hover, :focus, :active, 4 | // and disabled options for all buttons 5 | 6 | .button-variant(@color; @background; @border) { 7 | color: @color; 8 | background-color: @background; 9 | border-color: @border; 10 | 11 | &:hover, 12 | &:focus, 13 | &:active, 14 | &.active, 15 | .open > .dropdown-toggle& { 16 | color: @color; 17 | background-color: darken(@background, 10%); 18 | border-color: darken(@border, 12%); 19 | } 20 | &:active, 21 | &.active, 22 | .open > .dropdown-toggle& { 23 | background-image: none; 24 | } 25 | &.disabled, 26 | &[disabled], 27 | fieldset[disabled] & { 28 | &, 29 | &:hover, 30 | &:focus, 31 | &:active, 32 | &.active { 33 | background-color: @background; 34 | border-color: @border; 35 | } 36 | } 37 | 38 | .badge { 39 | color: @background; 40 | background-color: @color; 41 | } 42 | } 43 | 44 | // Button sizes 45 | .button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) { 46 | padding: @padding-vertical @padding-horizontal; 47 | font-size: @font-size; 48 | line-height: @line-height; 49 | border-radius: @border-radius; 50 | } 51 | -------------------------------------------------------------------------------- /app/bower_components/bootstrap/less/mixins/center-block.less: -------------------------------------------------------------------------------- 1 | // Center-align a block level element 2 | 3 | .center-block() { 4 | display: block; 5 | margin-left: auto; 6 | margin-right: auto; 7 | } 8 | -------------------------------------------------------------------------------- /app/bower_components/bootstrap/less/mixins/clearfix.less: -------------------------------------------------------------------------------- 1 | // Clearfix 2 | // 3 | // For modern browsers 4 | // 1. The space content is one way to avoid an Opera bug when the 5 | // contenteditable attribute is included anywhere else in the document. 6 | // Otherwise it causes space to appear at the top and bottom of elements 7 | // that are clearfixed. 8 | // 2. The use of `table` rather than `block` is only necessary if using 9 | // `:before` to contain the top-margins of child elements. 10 | // 11 | // Source: http://nicolasgallagher.com/micro-clearfix-hack/ 12 | 13 | .clearfix() { 14 | &:before, 15 | &:after { 16 | content: " "; // 1 17 | display: table; // 2 18 | } 19 | &:after { 20 | clear: both; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/bower_components/bootstrap/less/mixins/hide-text.less: -------------------------------------------------------------------------------- 1 | // CSS image replacement 2 | // 3 | // Heads up! v3 launched with with only `.hide-text()`, but per our pattern for 4 | // mixins being reused as classes with the same name, this doesn't hold up. As 5 | // of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`. 6 | // 7 | // Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757 8 | 9 | // Deprecated as of v3.0.1 (will be removed in v4) 10 | .hide-text() { 11 | font: ~"0/0" a; 12 | color: transparent; 13 | text-shadow: none; 14 | background-color: transparent; 15 | border: 0; 16 | } 17 | 18 | // New mixin to use as of v3.0.1 19 | .text-hide() { 20 | .hide-text(); 21 | } 22 | -------------------------------------------------------------------------------- /app/bower_components/bootstrap/less/mixins/image.less: -------------------------------------------------------------------------------- 1 | // Image Mixins 2 | // - Responsive image 3 | // - Retina image 4 | 5 | 6 | // Responsive image 7 | // 8 | // Keep images from scaling beyond the width of their parents. 9 | .img-responsive(@display: block) { 10 | display: @display; 11 | width: 100% \9; // Force IE10 and below to size SVG images correctly 12 | max-width: 100%; // Part 1: Set a maximum relative to the parent 13 | height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching 14 | } 15 | 16 | 17 | // Retina image 18 | // 19 | // Short retina mixin for setting background-image and -size. Note that the 20 | // spelling of `min--moz-device-pixel-ratio` is intentional. 21 | .img-retina(@file-1x; @file-2x; @width-1x; @height-1x) { 22 | background-image: url("@{file-1x}"); 23 | 24 | @media 25 | only screen and (-webkit-min-device-pixel-ratio: 2), 26 | only screen and ( min--moz-device-pixel-ratio: 2), 27 | only screen and ( -o-min-device-pixel-ratio: 2/1), 28 | only screen and ( min-device-pixel-ratio: 2), 29 | only screen and ( min-resolution: 192dpi), 30 | only screen and ( min-resolution: 2dppx) { 31 | background-image: url("@{file-2x}"); 32 | background-size: @width-1x @height-1x; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /app/bower_components/bootstrap/less/mixins/labels.less: -------------------------------------------------------------------------------- 1 | // Labels 2 | 3 | .label-variant(@color) { 4 | background-color: @color; 5 | 6 | &[href] { 7 | &:hover, 8 | &:focus { 9 | background-color: darken(@color, 10%); 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /app/bower_components/bootstrap/less/mixins/list-group.less: -------------------------------------------------------------------------------- 1 | // List Groups 2 | 3 | .list-group-item-variant(@state; @background; @color) { 4 | .list-group-item-@{state} { 5 | color: @color; 6 | background-color: @background; 7 | 8 | a& { 9 | color: @color; 10 | 11 | .list-group-item-heading { 12 | color: inherit; 13 | } 14 | 15 | &:hover, 16 | &:focus { 17 | color: @color; 18 | background-color: darken(@background, 5%); 19 | } 20 | &.active, 21 | &.active:hover, 22 | &.active:focus { 23 | color: #fff; 24 | background-color: @color; 25 | border-color: @color; 26 | } 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/bower_components/bootstrap/less/mixins/nav-divider.less: -------------------------------------------------------------------------------- 1 | // Horizontal dividers 2 | // 3 | // Dividers (basically an hr) within dropdowns and nav lists 4 | 5 | .nav-divider(@color: #e5e5e5) { 6 | height: 1px; 7 | margin: ((@line-height-computed / 2) - 1) 0; 8 | overflow: hidden; 9 | background-color: @color; 10 | } 11 | -------------------------------------------------------------------------------- /app/bower_components/bootstrap/less/mixins/nav-vertical-align.less: -------------------------------------------------------------------------------- 1 | // Navbar vertical align 2 | // 3 | // Vertically center elements in the navbar. 4 | // Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin. 5 | 6 | .navbar-vertical-align(@element-height) { 7 | margin-top: ((@navbar-height - @element-height) / 2); 8 | margin-bottom: ((@navbar-height - @element-height) / 2); 9 | } 10 | -------------------------------------------------------------------------------- /app/bower_components/bootstrap/less/mixins/opacity.less: -------------------------------------------------------------------------------- 1 | // Opacity 2 | 3 | .opacity(@opacity) { 4 | opacity: @opacity; 5 | // IE8 filter 6 | @opacity-ie: (@opacity * 100); 7 | filter: ~"alpha(opacity=@{opacity-ie})"; 8 | } 9 | -------------------------------------------------------------------------------- /app/bower_components/bootstrap/less/mixins/pagination.less: -------------------------------------------------------------------------------- 1 | // Pagination 2 | 3 | .pagination-size(@padding-vertical; @padding-horizontal; @font-size; @border-radius) { 4 | > li { 5 | > a, 6 | > span { 7 | padding: @padding-vertical @padding-horizontal; 8 | font-size: @font-size; 9 | } 10 | &:first-child { 11 | > a, 12 | > span { 13 | .border-left-radius(@border-radius); 14 | } 15 | } 16 | &:last-child { 17 | > a, 18 | > span { 19 | .border-right-radius(@border-radius); 20 | } 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/bower_components/bootstrap/less/mixins/panels.less: -------------------------------------------------------------------------------- 1 | // Panels 2 | 3 | .panel-variant(@border; @heading-text-color; @heading-bg-color; @heading-border) { 4 | border-color: @border; 5 | 6 | & > .panel-heading { 7 | color: @heading-text-color; 8 | background-color: @heading-bg-color; 9 | border-color: @heading-border; 10 | 11 | + .panel-collapse > .panel-body { 12 | border-top-color: @border; 13 | } 14 | .badge { 15 | color: @heading-bg-color; 16 | background-color: @heading-text-color; 17 | } 18 | } 19 | & > .panel-footer { 20 | + .panel-collapse > .panel-body { 21 | border-bottom-color: @border; 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/bower_components/bootstrap/less/mixins/progress-bar.less: -------------------------------------------------------------------------------- 1 | // Progress bars 2 | 3 | .progress-bar-variant(@color) { 4 | background-color: @color; 5 | 6 | // Deprecated parent class requirement as of v3.2.0 7 | .progress-striped & { 8 | #gradient > .striped(); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /app/bower_components/bootstrap/less/mixins/reset-filter.less: -------------------------------------------------------------------------------- 1 | // Reset filters for IE 2 | // 3 | // When you need to remove a gradient background, do not forget to use this to reset 4 | // the IE filter for IE9 and below. 5 | 6 | .reset-filter() { 7 | filter: e(%("progid:DXImageTransform.Microsoft.gradient(enabled = false)")); 8 | } 9 | -------------------------------------------------------------------------------- /app/bower_components/bootstrap/less/mixins/resize.less: -------------------------------------------------------------------------------- 1 | // Resize anything 2 | 3 | .resizable(@direction) { 4 | resize: @direction; // Options: horizontal, vertical, both 5 | overflow: auto; // Per CSS3 UI, `resize` only applies when `overflow` isn't `visible` 6 | } 7 | -------------------------------------------------------------------------------- /app/bower_components/bootstrap/less/mixins/responsive-visibility.less: -------------------------------------------------------------------------------- 1 | // Responsive utilities 2 | 3 | // 4 | // More easily include all the states for responsive-utilities.less. 5 | .responsive-visibility() { 6 | display: block !important; 7 | table& { display: table; } 8 | tr& { display: table-row !important; } 9 | th&, 10 | td& { display: table-cell !important; } 11 | } 12 | 13 | .responsive-invisibility() { 14 | display: none !important; 15 | } 16 | -------------------------------------------------------------------------------- /app/bower_components/bootstrap/less/mixins/size.less: -------------------------------------------------------------------------------- 1 | // Sizing shortcuts 2 | 3 | .size(@width; @height) { 4 | width: @width; 5 | height: @height; 6 | } 7 | 8 | .square(@size) { 9 | .size(@size; @size); 10 | } 11 | -------------------------------------------------------------------------------- /app/bower_components/bootstrap/less/mixins/tab-focus.less: -------------------------------------------------------------------------------- 1 | // WebKit-style focus 2 | 3 | .tab-focus() { 4 | // Default 5 | outline: thin dotted; 6 | // WebKit 7 | outline: 5px auto -webkit-focus-ring-color; 8 | outline-offset: -2px; 9 | } 10 | -------------------------------------------------------------------------------- /app/bower_components/bootstrap/less/mixins/table-row.less: -------------------------------------------------------------------------------- 1 | // Tables 2 | 3 | .table-row-variant(@state; @background) { 4 | // Exact selectors below required to override `.table-striped` and prevent 5 | // inheritance to nested tables. 6 | .table > thead > tr, 7 | .table > tbody > tr, 8 | .table > tfoot > tr { 9 | > td.@{state}, 10 | > th.@{state}, 11 | &.@{state} > td, 12 | &.@{state} > th { 13 | background-color: @background; 14 | } 15 | } 16 | 17 | // Hover states for `.table-hover` 18 | // Note: this is not available for cells or rows within `thead` or `tfoot`. 19 | .table-hover > tbody > tr { 20 | > td.@{state}:hover, 21 | > th.@{state}:hover, 22 | &.@{state}:hover > td, 23 | &:hover > .@{state}, 24 | &.@{state}:hover > th { 25 | background-color: darken(@background, 5%); 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/bower_components/bootstrap/less/mixins/text-emphasis.less: -------------------------------------------------------------------------------- 1 | // Typography 2 | 3 | .text-emphasis-variant(@color) { 4 | color: @color; 5 | a&:hover { 6 | color: darken(@color, 10%); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /app/bower_components/bootstrap/less/mixins/text-overflow.less: -------------------------------------------------------------------------------- 1 | // Text overflow 2 | // Requires inline-block or block for proper styling 3 | 4 | .text-overflow() { 5 | overflow: hidden; 6 | text-overflow: ellipsis; 7 | white-space: nowrap; 8 | } 9 | -------------------------------------------------------------------------------- /app/bower_components/bootstrap/less/pager.less: -------------------------------------------------------------------------------- 1 | // 2 | // Pager pagination 3 | // -------------------------------------------------- 4 | 5 | 6 | .pager { 7 | padding-left: 0; 8 | margin: @line-height-computed 0; 9 | list-style: none; 10 | text-align: center; 11 | &:extend(.clearfix all); 12 | li { 13 | display: inline; 14 | > a, 15 | > span { 16 | display: inline-block; 17 | padding: 5px 14px; 18 | background-color: @pager-bg; 19 | border: 1px solid @pager-border; 20 | border-radius: @pager-border-radius; 21 | } 22 | 23 | > a:hover, 24 | > a:focus { 25 | text-decoration: none; 26 | background-color: @pager-hover-bg; 27 | } 28 | } 29 | 30 | .next { 31 | > a, 32 | > span { 33 | float: right; 34 | } 35 | } 36 | 37 | .previous { 38 | > a, 39 | > span { 40 | float: left; 41 | } 42 | } 43 | 44 | .disabled { 45 | > a, 46 | > a:hover, 47 | > a:focus, 48 | > span { 49 | color: @pager-disabled-color; 50 | background-color: @pager-bg; 51 | cursor: not-allowed; 52 | } 53 | } 54 | 55 | } 56 | -------------------------------------------------------------------------------- /app/bower_components/bootstrap/less/responsive-embed.less: -------------------------------------------------------------------------------- 1 | // Embeds responsive 2 | // 3 | // Credit: Nicolas Gallagher and SUIT CSS. 4 | 5 | .embed-responsive { 6 | position: relative; 7 | display: block; 8 | height: 0; 9 | padding: 0; 10 | overflow: hidden; 11 | 12 | .embed-responsive-item, 13 | iframe, 14 | embed, 15 | object { 16 | position: absolute; 17 | top: 0; 18 | left: 0; 19 | bottom: 0; 20 | height: 100%; 21 | width: 100%; 22 | border: 0; 23 | } 24 | 25 | // Modifier class for 16:9 aspect ratio 26 | &.embed-responsive-16by9 { 27 | padding-bottom: 56.25%; 28 | } 29 | 30 | // Modifier class for 4:3 aspect ratio 31 | &.embed-responsive-4by3 { 32 | padding-bottom: 75%; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /app/bower_components/bootstrap/less/thumbnails.less: -------------------------------------------------------------------------------- 1 | // 2 | // Thumbnails 3 | // -------------------------------------------------- 4 | 5 | 6 | // Mixin and adjust the regular image class 7 | .thumbnail { 8 | display: block; 9 | padding: @thumbnail-padding; 10 | margin-bottom: @line-height-computed; 11 | line-height: @line-height-base; 12 | background-color: @thumbnail-bg; 13 | border: 1px solid @thumbnail-border; 14 | border-radius: @thumbnail-border-radius; 15 | .transition(all .2s ease-in-out); 16 | 17 | > img, 18 | a > img { 19 | &:extend(.img-responsive); 20 | margin-left: auto; 21 | margin-right: auto; 22 | } 23 | 24 | // Add a hover state for linked versions only 25 | a&:hover, 26 | a&:focus, 27 | a&.active { 28 | border-color: @link-color; 29 | } 30 | 31 | // Image captions 32 | .caption { 33 | padding: @thumbnail-caption-padding; 34 | color: @thumbnail-caption-color; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /app/bower_components/bootstrap/less/utilities.less: -------------------------------------------------------------------------------- 1 | // 2 | // Utility classes 3 | // -------------------------------------------------- 4 | 5 | 6 | // Floats 7 | // ------------------------- 8 | 9 | .clearfix { 10 | .clearfix(); 11 | } 12 | .center-block { 13 | .center-block(); 14 | } 15 | .pull-right { 16 | float: right !important; 17 | } 18 | .pull-left { 19 | float: left !important; 20 | } 21 | 22 | 23 | // Toggling content 24 | // ------------------------- 25 | 26 | // Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1 27 | .hide { 28 | display: none !important; 29 | } 30 | .show { 31 | display: block !important; 32 | } 33 | .invisible { 34 | visibility: hidden; 35 | } 36 | .text-hide { 37 | .text-hide(); 38 | } 39 | 40 | 41 | // Hide from screenreaders and browsers 42 | // 43 | // Credit: HTML5 Boilerplate 44 | 45 | .hidden { 46 | display: none !important; 47 | visibility: hidden !important; 48 | } 49 | 50 | 51 | // For Affix plugin 52 | // ------------------------- 53 | 54 | .affix { 55 | position: fixed; 56 | .translate3d(0, 0, 0); 57 | } 58 | -------------------------------------------------------------------------------- /app/bower_components/bootstrap/less/wells.less: -------------------------------------------------------------------------------- 1 | // 2 | // Wells 3 | // -------------------------------------------------- 4 | 5 | 6 | // Base class 7 | .well { 8 | min-height: 20px; 9 | padding: 19px; 10 | margin-bottom: 20px; 11 | background-color: @well-bg; 12 | border: 1px solid @well-border; 13 | border-radius: @border-radius-base; 14 | .box-shadow(inset 0 1px 1px rgba(0,0,0,.05)); 15 | blockquote { 16 | border-color: #ddd; 17 | border-color: rgba(0,0,0,.15); 18 | } 19 | } 20 | 21 | // Sizes 22 | .well-lg { 23 | padding: 24px; 24 | border-radius: @border-radius-large; 25 | } 26 | .well-sm { 27 | padding: 9px; 28 | border-radius: @border-radius-small; 29 | } 30 | -------------------------------------------------------------------------------- /app/bower_components/datatables/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "datatables", 3 | "version": "1.10.2", 4 | "main": [ 5 | "media/js/jquery.dataTables.js", 6 | "media/css/jquery.dataTables.css" 7 | ], 8 | "dependencies": { 9 | "jquery": ">=1.7.0" 10 | }, 11 | "homepage": "https://github.com/DataTables/DataTables", 12 | "_release": "1.10.2", 13 | "_resolution": { 14 | "type": "version", 15 | "tag": "1.10.2", 16 | "commit": "e07d49d42d768c0c1adf4137cc954a23a39c7beb" 17 | }, 18 | "_source": "git://github.com/DataTables/DataTables.git", 19 | "_target": "~1.10.2", 20 | "_originalSource": "datatables" 21 | } -------------------------------------------------------------------------------- /app/bower_components/datatables/.datatables-commit-sync: -------------------------------------------------------------------------------- 1 | e6ea753d4408ad0a45b409ac8105d565075c21d9 2 | -------------------------------------------------------------------------------- /app/bower_components/datatables/.gitignore: -------------------------------------------------------------------------------- 1 | extras 2 | extensions 3 | docs 4 | cdn 5 | media/css/jquery.dataTables_themeroller.min.css 6 | .DS_Store 7 | Plugins 8 | -------------------------------------------------------------------------------- /app/bower_components/datatables/Contributing.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | If you are thinking of contributing code to DataTables, first of all, thank you! All fixes, patches and enhancements to DataTables are very warmly welcomed. In order to keep thing manageable, there are a number of guidelines that should be followed in order to ensure that your modification is included in DataTables as quickly as possible: 4 | 5 | 1. Make contributions in the DataTables/DataTablesSrc repo. Changes to the built files in the built repo (DataTables/DataTables) will not be accepted since they would be overwritten by the next build! 6 | 7 | 2. Follow the style of the code in the existing files. DataTables doesn't have a coding standards document, but simple common sense of following the same style as in the existing files is ideal. For example use tabs not spaces (as you will see all source files use tabs). 8 | 9 | 3. Link to a test page showing the bug you are fixing or the feature you are adding. This allows to me to quickly identify what is being changed and why. Don't worry about being verbose in pull requests - its much better to know exactly what is changing and why! 10 | -------------------------------------------------------------------------------- /app/bower_components/datatables/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "datatables", 3 | "version": "1.10.2", 4 | "main": [ 5 | "media/js/jquery.dataTables.js", 6 | "media/css/jquery.dataTables.css" 7 | ], 8 | "dependencies": { 9 | "jquery": ">=1.7.0" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /app/bower_components/datatables/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "datatables/datatables", 3 | "version": "1.10.2", 4 | "description": "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.", 5 | "homepage": "http://www.datatables.net/", 6 | "author": "SpryMedia", 7 | "license": [ 8 | "MIT" 9 | ], 10 | "prefer-stable": true, 11 | "support": { 12 | "forum": "https://datatables.net/forums", 13 | "source": "https://github.com/DataTables/DataTablesSrc/" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /app/bower_components/datatables/dataTables.jquery.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "DataTables", 3 | "version": "1.10.2", 4 | "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.", 5 | "homepage": "http://datatables.net/", 6 | "docs": "http://datatables.net/", 7 | "demo": "http://datatables.net/examples", 8 | "download": "http://datatables.net/download", 9 | "author": { 10 | "name": "Allan Jardine", 11 | "url": "http://sprymedia.co.uk" 12 | }, 13 | "licenses": [ 14 | { 15 | "type": "MIT", 16 | "url": "http://datatables.net/license_bsd" 17 | } 18 | ], 19 | "dependencies": { 20 | "jquery": ">=1.7" 21 | }, 22 | "keywords": [ 23 | "DataTables", 24 | "DataTable", 25 | "table", 26 | "grid", 27 | "filter", 28 | "sort", 29 | "page", 30 | "internationalisable" 31 | ] 32 | } 33 | -------------------------------------------------------------------------------- /app/bower_components/datatables/examples/resources/bootstrap/images/sort_asc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/securingsincity/backbone-react-ui/4d2d162ea19ee3a8211a876635e1812549193cee/app/bower_components/datatables/examples/resources/bootstrap/images/sort_asc.png -------------------------------------------------------------------------------- /app/bower_components/datatables/examples/resources/bootstrap/images/sort_asc_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/securingsincity/backbone-react-ui/4d2d162ea19ee3a8211a876635e1812549193cee/app/bower_components/datatables/examples/resources/bootstrap/images/sort_asc_disabled.png -------------------------------------------------------------------------------- /app/bower_components/datatables/examples/resources/bootstrap/images/sort_both.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/securingsincity/backbone-react-ui/4d2d162ea19ee3a8211a876635e1812549193cee/app/bower_components/datatables/examples/resources/bootstrap/images/sort_both.png -------------------------------------------------------------------------------- /app/bower_components/datatables/examples/resources/bootstrap/images/sort_desc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/securingsincity/backbone-react-ui/4d2d162ea19ee3a8211a876635e1812549193cee/app/bower_components/datatables/examples/resources/bootstrap/images/sort_desc.png -------------------------------------------------------------------------------- /app/bower_components/datatables/examples/resources/bootstrap/images/sort_desc_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/securingsincity/backbone-react-ui/4d2d162ea19ee3a8211a876635e1812549193cee/app/bower_components/datatables/examples/resources/bootstrap/images/sort_desc_disabled.png -------------------------------------------------------------------------------- /app/bower_components/datatables/examples/resources/de_DE.txt: -------------------------------------------------------------------------------- 1 | { 2 | "processing": "Bitte warten...", 3 | "lengthMenu": "_MENU_ Einträge anzeigen", 4 | "zeroRecords": "Keine Einträge vorhanden.", 5 | "info": "_START_ bis _END_ von _TOTAL_ Einträgen", 6 | "infoEmpty": "0 bis 0 von 0 Einträgen", 7 | "infoFiltered": "(gefiltert von _MAX_ Einträgen)", 8 | "infoPostFix": "", 9 | "search": "Suchen", 10 | "url": "", 11 | "paginate": { 12 | "first": "Erster", 13 | "previous": "Zurück", 14 | "next": "Nächster", 15 | "last": "Letzter" 16 | } 17 | } -------------------------------------------------------------------------------- /app/bower_components/datatables/examples/resources/details_close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/securingsincity/backbone-react-ui/4d2d162ea19ee3a8211a876635e1812549193cee/app/bower_components/datatables/examples/resources/details_close.png -------------------------------------------------------------------------------- /app/bower_components/datatables/examples/resources/details_open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/securingsincity/backbone-react-ui/4d2d162ea19ee3a8211a876635e1812549193cee/app/bower_components/datatables/examples/resources/details_open.png -------------------------------------------------------------------------------- /app/bower_components/datatables/examples/resources/examples.php: -------------------------------------------------------------------------------- 1 | 'first_name', 'dt' => 'first_name' ), 19 | array( 'db' => 'last_name', 'dt' => 'last_name' ), 20 | array( 'db' => 'position', 'dt' => 'position' ), 21 | array( 'db' => 'office', 'dt' => 'office' ), 22 | array( 23 | 'db' => 'start_date', 24 | 'dt' => 'start_date', 25 | 'formatter' => function( $d, $row ) { 26 | return date( 'jS M y', strtotime($d)); 27 | } 28 | ), 29 | array( 30 | 'db' => 'salary', 31 | 'dt' => 'salary', 32 | 'formatter' => function( $d, $row ) { 33 | return '$'.number_format($d); 34 | } 35 | ) 36 | ); 37 | 38 | // SQL server connection information 39 | $sql_details = array( 40 | 'user' => '', 41 | 'pass' => '', 42 | 'db' => '', 43 | 'host' => '' 44 | ); 45 | 46 | 47 | /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 48 | * If you just want to use the basic configuration for DataTables with PHP 49 | * server-side, there is no need to edit below this line. 50 | */ 51 | 52 | require( 'ssp.class.php' ); 53 | 54 | echo json_encode( 55 | SSP::simple( $_GET, $sql_details, $table, $primaryKey, $columns ) 56 | ); 57 | 58 | -------------------------------------------------------------------------------- /app/bower_components/datatables/license.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2008-2013 SpryMedia Limited 2 | http://datatables.net 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy 5 | of this software and associated documentation files (the "Software"), to deal 6 | in the Software without restriction, including without limitation the rights 7 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the Software is 9 | furnished to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in 12 | all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /app/bower_components/datatables/media/images/Sorting icons.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/securingsincity/backbone-react-ui/4d2d162ea19ee3a8211a876635e1812549193cee/app/bower_components/datatables/media/images/Sorting icons.psd -------------------------------------------------------------------------------- /app/bower_components/datatables/media/images/back_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/securingsincity/backbone-react-ui/4d2d162ea19ee3a8211a876635e1812549193cee/app/bower_components/datatables/media/images/back_disabled.png -------------------------------------------------------------------------------- /app/bower_components/datatables/media/images/back_enabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/securingsincity/backbone-react-ui/4d2d162ea19ee3a8211a876635e1812549193cee/app/bower_components/datatables/media/images/back_enabled.png -------------------------------------------------------------------------------- /app/bower_components/datatables/media/images/back_enabled_hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/securingsincity/backbone-react-ui/4d2d162ea19ee3a8211a876635e1812549193cee/app/bower_components/datatables/media/images/back_enabled_hover.png -------------------------------------------------------------------------------- /app/bower_components/datatables/media/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/securingsincity/backbone-react-ui/4d2d162ea19ee3a8211a876635e1812549193cee/app/bower_components/datatables/media/images/favicon.ico -------------------------------------------------------------------------------- /app/bower_components/datatables/media/images/forward_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/securingsincity/backbone-react-ui/4d2d162ea19ee3a8211a876635e1812549193cee/app/bower_components/datatables/media/images/forward_disabled.png -------------------------------------------------------------------------------- /app/bower_components/datatables/media/images/forward_enabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/securingsincity/backbone-react-ui/4d2d162ea19ee3a8211a876635e1812549193cee/app/bower_components/datatables/media/images/forward_enabled.png -------------------------------------------------------------------------------- /app/bower_components/datatables/media/images/forward_enabled_hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/securingsincity/backbone-react-ui/4d2d162ea19ee3a8211a876635e1812549193cee/app/bower_components/datatables/media/images/forward_enabled_hover.png -------------------------------------------------------------------------------- /app/bower_components/datatables/media/images/sort_asc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/securingsincity/backbone-react-ui/4d2d162ea19ee3a8211a876635e1812549193cee/app/bower_components/datatables/media/images/sort_asc.png -------------------------------------------------------------------------------- /app/bower_components/datatables/media/images/sort_asc_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/securingsincity/backbone-react-ui/4d2d162ea19ee3a8211a876635e1812549193cee/app/bower_components/datatables/media/images/sort_asc_disabled.png -------------------------------------------------------------------------------- /app/bower_components/datatables/media/images/sort_both.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/securingsincity/backbone-react-ui/4d2d162ea19ee3a8211a876635e1812549193cee/app/bower_components/datatables/media/images/sort_both.png -------------------------------------------------------------------------------- /app/bower_components/datatables/media/images/sort_desc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/securingsincity/backbone-react-ui/4d2d162ea19ee3a8211a876635e1812549193cee/app/bower_components/datatables/media/images/sort_desc.png -------------------------------------------------------------------------------- /app/bower_components/datatables/media/images/sort_desc_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/securingsincity/backbone-react-ui/4d2d162ea19ee3a8211a876635e1812549193cee/app/bower_components/datatables/media/images/sort_desc_disabled.png -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/data_sources/arrays.php: -------------------------------------------------------------------------------- 1 | array( 23 | array(1, 2, 3, 4, 5) 24 | ) 25 | ); 26 | } 27 | else if ( $_REQUEST['dataSrc'] === 'data' ) { 28 | return array( 29 | 'data' => array( 30 | array(1, 2, 3, 4, 5) 31 | ) 32 | ); 33 | } 34 | else if ( $_REQUEST['dataSrc'] === 'nested' ) { 35 | return array( 36 | 'data' => array( 37 | 'inner' => array( 38 | array(1, 2, 3, 4, 5) 39 | ) 40 | ) 41 | ); 42 | } 43 | else if ( $_REQUEST['dataSrc'] === 'plain' ) { 44 | return array( 45 | array(1, 2, 3, 4, 5) 46 | ); 47 | } 48 | } 49 | 50 | 51 | -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/data_sources/method.php: -------------------------------------------------------------------------------- 1 | intval( $_REQUEST['sEcho'] ), 17 | 'iTotalRecords' => 1, 18 | 'iTotalDisplayRecords' => 1, 19 | 'aaData' => array( 20 | array(1, 2, 3, 4, 5) 21 | ) 22 | ) ); 23 | } 24 | else { 25 | // Client-side processing 26 | echo json_encode( array( 27 | 'aaData' => array( 28 | array(1, 2, 3, 4, 5) 29 | ) 30 | ) ); 31 | } 32 | } 33 | 34 | 35 | function fail() 36 | { 37 | if ( isset($_REQUEST['sEcho']) ) { 38 | // Server-side processing 39 | echo json_encode( array( 40 | 'sEcho' => intval( $_REQUEST['sEcho'] ), 41 | 'iTotalRecords' => 0, 42 | 'iTotalDisplayRecords' => 0, 43 | 'aaData' => array() 44 | ) ); 45 | } 46 | else { 47 | // Client-side processing 48 | echo json_encode( array( 49 | 'aaData' => array() 50 | ) ); 51 | } 52 | } 53 | 54 | -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/data_sources/objects.php: -------------------------------------------------------------------------------- 1 | intval( $_REQUEST['sEcho'] ), 7 | 'iTotalRecords' => 1, 8 | 'iTotalDisplayRecords' => 1, 9 | 'aaData' => array( 10 | array( 11 | 'engine' => 10, 12 | 'browser' => 20, 13 | 'platform' => 30, 14 | 'version' => 40, 15 | 'grade' => 50 16 | ) 17 | ) 18 | ) ); 19 | } 20 | else { 21 | echo json_encode( array( 22 | 'aaData' => array( 23 | array( 24 | 'engine' => 10, 25 | 'browser' => 20, 26 | 'platform' => 30, 27 | 'version' => 40, 28 | 'grade' => 50 29 | ) 30 | ) 31 | ) ); 32 | } 33 | 34 | -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/data_sources/param.php: -------------------------------------------------------------------------------- 1 | intval( $_REQUEST['sEcho'] ), 7 | 'iTotalRecords' => 1, 8 | 'iTotalDisplayRecords' => 1, 9 | 'aaData' => array( 10 | array(1, 2, 3, 4, 5) 11 | ), 12 | 'post' => xss( $_POST ), 13 | 'get' => xss( $_GET ), 14 | 'post_length' => count( array_keys( $_POST ) ), 15 | 'get_length' => count( array_keys( $_GET ) ) 16 | ) ); 17 | } 18 | else { 19 | echo json_encode( array( 20 | 'aaData' => array( 21 | array(1, 2, 3, 4, 5) 22 | ), 23 | 'post' => xss( $_POST ), 24 | 'get' => xss( $_GET ), 25 | 'post_length' => count( array_keys( $_POST ) ), 26 | 'get_length' => count( array_keys( $_GET ) ) 27 | ) ); 28 | } 29 | 30 | 31 | 32 | // This script shouldn't be hosted on a public server, but to prevent attacks: 33 | function xss ( $a ) 34 | { 35 | $out = array(); 36 | 37 | foreach ($a as $key => $value) { 38 | $out[ $key ] = htmlentities( $value ); 39 | } 40 | 41 | return $out; 42 | } 43 | -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/templates/dymanic_table.php: -------------------------------------------------------------------------------- 1 | 8 | 9 | 10 | 11 | 12 | 13 | DataTables unit testing 14 | 18 | 19 | 20 | 21 | 26 | '."\n"; 31 | } 32 | ?> 33 | 34 | 35 |
36 |
37 | DataTables dynamic table template 38 |
39 | 40 |

Live example

41 |
42 |
43 |
44 | 45 | -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/1_dom/-complex_header.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: -complex_header 2 | oTest.fnStart( "Complex header" ); 3 | 4 | 5 | $(document).ready( function () { 6 | $('#example').dataTable(); 7 | 8 | oTest.fnTest( 9 | "Sorting on colspan has no effect", 10 | function () { $('#example thead th:eq(1)').click(); }, 11 | function () { return $('#example tbody tr td:eq(1)').html() == "Firefox 1.0"; } 12 | ); 13 | 14 | oTest.fnTest( 15 | "Sorting on non-unique TH and first TH has no effect", 16 | function () { $('#example thead th:eq(2)').click(); }, 17 | function () { return $('#example tbody tr td:eq(1)').html() == "Firefox 1.0"; } 18 | ); 19 | 20 | oTest.fnTest( 21 | "Sorting on non-unique TH and second TH will sort", 22 | function () { $('#example thead th:eq(6)').click(); }, 23 | function () { return $('#example tbody tr td:eq(4)').html() == "A"; } 24 | ); 25 | 26 | oTest.fnTest( 27 | "Sorting on non-unique TH and second TH will sort - reserve", 28 | function () { $('#example thead th:eq(6)').click(); }, 29 | function () { return $('#example tbody tr td:eq(4)').html() == "X"; } 30 | ); 31 | 32 | oTest.fnTest( 33 | "Sorting on unique TH will sort", 34 | function () { $('#example thead th:eq(5)').click(); }, 35 | function () { return $('#example tbody tr td:eq(3)').html() == "-"; } 36 | ); 37 | 38 | oTest.fnTest( 39 | "Sorting on unique TH will sort - reserve", 40 | function () { $('#example thead th:eq(5)').click(); }, 41 | function () { return $('#example tbody tr td:eq(3)').html() == "522.1"; } 42 | ); 43 | 44 | oTest.fnTest( 45 | "Sorting on unique rowspan TH will sort", 46 | function () { $('#example thead th:eq(0)').click(); }, 47 | function () { return $('#example tbody tr td:eq(0)').html() == "Gecko"; } 48 | ); 49 | 50 | 51 | oTest.fnComplete(); 52 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/1_dom/-iDraw.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: dom_data 2 | oTest.fnStart( "iDraw - check that iDraw increments for each draw" ); 3 | 4 | 5 | $(document).ready( function () { 6 | var oTable = $('#example').dataTable(); 7 | var oSettings = oTable.fnSettings(); 8 | 9 | oTest.fnTest( 10 | "After first draw, iDraw is 1", 11 | null, 12 | function () { return oSettings.iDraw == 1; } 13 | ); 14 | 15 | oTest.fnTest( 16 | "After second draw, iDraw is 2", 17 | function () { oTable.fnDraw() }, 18 | function () { return oSettings.iDraw == 2; } 19 | ); 20 | 21 | oTest.fnTest( 22 | "After sort", 23 | function () { oTable.fnSort([[1,'asc']]) }, 24 | function () { return oSettings.iDraw == 3; } 25 | ); 26 | 27 | oTest.fnTest( 28 | "After filter", 29 | function () { oTable.fnFilter('gecko') }, 30 | function () { return oSettings.iDraw == 4; } 31 | ); 32 | 33 | oTest.fnTest( 34 | "After another filter", 35 | function () { oTable.fnFilter('gec') }, 36 | function () { return oSettings.iDraw == 5; } 37 | ); 38 | 39 | 40 | oTest.fnComplete(); 41 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/1_dom/2512.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: 2512 2 | oTest.fnStart( "Check filtering with BR and HTML entity" ); 3 | 4 | 5 | $(document).ready( function () { 6 | $('#example').dataTable(); 7 | 8 | /* Basic checks */ 9 | oTest.fnTest( 10 | "Check filtering", 11 | function () { $('#example').dataTable().fnFilter('testsearchstring'); }, 12 | function () { return $('#example tbody tr').length == 1; } 13 | ); 14 | 15 | 16 | oTest.fnComplete(); 17 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/1_dom/2530-2.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: dom_data 2 | oTest.fnStart( "User given with is left when no scrolling" ); 3 | 4 | $(document).ready( function () { 5 | $('#example')[0].style.width = "80%"; 6 | $('#example').dataTable(); 7 | 8 | oTest.fnTest( 9 | "Check user width is left", 10 | null, 11 | function () { return $('#example').width() == 640; } 12 | ); 13 | 14 | oTest.fnComplete(); 15 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/1_dom/2530.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: dymanic_table 2 | oTest.fnStart( "2530 - Check width's when dealing with empty strings" ); 3 | 4 | 5 | $(document).ready( function () { 6 | $('#example').dataTable( { 7 | "aaData": [ 8 | ['','Internet Explorer 4.0','Win 95+','4','X'], 9 | ['','Internet Explorer 5.0','Win 95+','5','C'] 10 | ], 11 | "aoColumns": [ 12 | { "sTitle": "", "sWidth": "40px" }, 13 | { "sTitle": "Browser" }, 14 | { "sTitle": "Platform" }, 15 | { "sTitle": "Version", "sClass": "center" }, 16 | { "sTitle": "Grade", "sClass": "center" } 17 | ] 18 | } ); 19 | 20 | /* Basic checks */ 21 | oTest.fnTest( 22 | "Check calculated widths", 23 | null, 24 | function () { return $('#example tbody tr td:eq(0)').width() < 100; } 25 | ); 26 | 27 | 28 | oTest.fnComplete(); 29 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/1_dom/2569.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: dom_data 2 | oTest.fnStart( "Destroy with hidden columns" ); 3 | 4 | $(document).ready( function () { 5 | $('#example').dataTable( { 6 | "aoColumnDefs": [ 7 | { "bSearchable": false, "bVisible": false, "aTargets": [ 2 ] }, 8 | { "bVisible": false, "aTargets": [ 3 ] } 9 | ] 10 | } ); 11 | $('#example').dataTable().fnDestroy(); 12 | 13 | oTest.fnTest( 14 | "Check that the number of columns in table is correct", 15 | null, 16 | function () { return $('#example tbody tr:eq(0) td').length == 5; } 17 | ); 18 | 19 | 20 | oTest.fnTest( 21 | "And with scrolling", 22 | function () { 23 | $('#example').dataTable( { 24 | "sScrollY": 200, 25 | "aoColumnDefs": [ 26 | { "bSearchable": false, "bVisible": false, "aTargets": [ 2 ] }, 27 | { "bVisible": false, "aTargets": [ 3 ] } 28 | ] 29 | } ); 30 | $('#example').dataTable().fnDestroy(); 31 | }, 32 | function () { return $('#example tbody tr:eq(0) td').length == 5; } 33 | ); 34 | 35 | oTest.fnComplete(); 36 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/1_dom/2600.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: dom_data 2 | oTest.fnStart( "2600 - Display rewind when changing length" ); 3 | 4 | $(document).ready( function () { 5 | $('#example').dataTable(); 6 | 7 | oTest.fnTest( 8 | "Info correct on init", 9 | null, 10 | function () { return $('#example_info').html() == "Showing 1 to 10 of 57 entries"; } 11 | ); 12 | 13 | oTest.fnTest( 14 | "Page 2", 15 | function () { $('#example_next').click(); }, 16 | function () { return $('#example_info').html() == "Showing 11 to 20 of 57 entries"; } 17 | ); 18 | 19 | oTest.fnTest( 20 | "Page 3", 21 | function () { $('#example_next').click(); }, 22 | function () { return $('#example_info').html() == "Showing 21 to 30 of 57 entries"; } 23 | ); 24 | 25 | oTest.fnTest( 26 | "Page 4", 27 | function () { $('#example_next').click(); }, 28 | function () { return $('#example_info').html() == "Showing 31 to 40 of 57 entries"; } 29 | ); 30 | 31 | oTest.fnTest( 32 | "Page 5", 33 | function () { $('#example_next').click(); }, 34 | function () { return $('#example_info').html() == "Showing 41 to 50 of 57 entries"; } 35 | ); 36 | 37 | oTest.fnTest( 38 | "Rewind", 39 | function () { $('#example_length select').val('100'); $('#example_length select').change(); }, 40 | function () { return $('#example_info').html() == "Showing 1 to 57 of 57 entries"; } 41 | ); 42 | 43 | oTest.fnComplete(); 44 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/1_dom/2608.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: dom_data 2 | oTest.fnStart( "2608 - State saving escaping filters" ); 3 | 4 | $(document).ready( function () { 5 | $('#example').dataTable( { 6 | "bStateSave": true 7 | } ); 8 | 9 | oTest.fnTest( 10 | "Set the filter", 11 | function () { 12 | $('#example_filter input').val( '\\s*CVM\\s*$' ); 13 | $('#example_filter input').keyup(); 14 | }, 15 | function () { return $('#example_filter input').val() == '\\s*CVM\\s*$'; } 16 | ); 17 | 18 | oTest.fnTest( 19 | "Destroy the table and remake it - checking the filter was saved", 20 | function () { 21 | $('#example').dataTable( { 22 | "bStateSave": true, 23 | "bDestroy": true 24 | } ); 25 | }, 26 | function () { return $('#example_filter input').val() == '\\s*CVM\\s*$'; } 27 | ); 28 | 29 | oTest.fnTest( 30 | "Do it again without state saving and make sure filter is empty", 31 | function () { 32 | $('#example').dataTable( { 33 | "bDestroy": true 34 | } ); 35 | }, 36 | function () { return $('#example_filter input').val() == ''; } 37 | ); 38 | 39 | oTest.fnTest( 40 | "Clean up", 41 | function () { 42 | $('#example').dataTable( { 43 | "bStateSave": true, 44 | "bDestroy": true 45 | } ); 46 | $('#example_filter input').val( '' ); 47 | $('#example_filter input').keyup(); 48 | }, 49 | function () { return $('#example_filter input').val() == ''; } 50 | ); 51 | 52 | oTest.fnCookieDestroy( $('#example').dataTable() ); 53 | oTest.fnComplete(); 54 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/1_dom/2635.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: dom_data 2 | oTest.fnStart( "2635 - Hiding column and state saving" ); 3 | 4 | $(document).ready( function () { 5 | $('#example').dataTable( { 6 | "bStateSave": true 7 | } ); 8 | 9 | oTest.fnTest( 10 | "Set the hidden column", 11 | function () { 12 | $('#example').dataTable().fnSetColumnVis( 2, false ); 13 | }, 14 | function () { return $('#example thead th').length == 4; } 15 | ); 16 | 17 | oTest.fnTest( 18 | "Destroy the table and remake it - checking one column was removed", 19 | function () { 20 | $('#example').dataTable( { 21 | "bStateSave": true, 22 | "bDestroy": true 23 | } ); 24 | }, 25 | function () { return $('#example thead th').length == 4; } 26 | ); 27 | 28 | oTest.fnTest( 29 | "Do it again without state saving and make sure we are back to 5 columns", 30 | function () { 31 | $('#example').dataTable( { 32 | "bDestroy": true 33 | } ); 34 | }, 35 | function () { return $('#example thead th').length == 5; } 36 | ); 37 | 38 | oTest.fnCookieDestroy( $('#example').dataTable() ); 39 | oTest.fnComplete(); 40 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/1_dom/2799.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: two_tables 2 | oTest.fnStart( "Initialise two tables" ); 3 | 4 | $(document).ready( function () { 5 | $('table.display').dataTable(); 6 | 7 | oTest.fnTest( 8 | "Check that initialisation was okay", 9 | null, 10 | function () { return true; } 11 | ); 12 | 13 | oTest.fnComplete(); 14 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/1_dom/2840-restore-table-width.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: dom_data 2 | oTest.fnStart( "2840 - Restore table width on fnDestroy" ); 3 | 4 | $(document).ready( function () { 5 | document.cookie = ""; 6 | $('#example').dataTable( { 7 | "sScrollX": "100%", 8 | "sScrollXInner": "110%" 9 | } ); 10 | $('#example').dataTable().fnDestroy(); 11 | 12 | oTest.fnTest( 13 | "Width after destroy", 14 | null, 15 | function () { return $('#example').width() == "800"; } 16 | ); 17 | 18 | oTest.fnComplete(); 19 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/1_dom/2914-state-save-sort.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: dom_data 2 | oTest.fnStart( "2914 - State saving with an empty array" ); 3 | 4 | $(document).ready( function () { 5 | document.cookie = ""; 6 | $('#example').dataTable( { 7 | "bStateSave": true, 8 | "aaSorting": [] 9 | } ); 10 | 11 | oTest.fnTest( 12 | "No sort", 13 | null, 14 | function () { return $('#example tbody td:eq(3)').html() == "4"; } 15 | ); 16 | 17 | oTest.fnTest( 18 | "Next page", 19 | function () { 20 | $('#example').dataTable().fnPageChange( 'next' ); 21 | }, 22 | function () { return $('#example tbody td:eq(1)').html() == "Camino 1.0"; } 23 | ); 24 | 25 | oTest.fnTest( 26 | "Destroy the table and remake it - checking we are still on the next page", 27 | function () { 28 | $('#example').dataTable( { 29 | "bStateSave": true, 30 | "aaSorting": [], 31 | "bDestroy": true 32 | } ); 33 | }, 34 | function () { return $('#example tbody td:eq(1)').html() == "Camino 1.0"; } 35 | ); 36 | 37 | oTest.fnCookieDestroy( $('#example').dataTable() ); 38 | oTest.fnComplete(); 39 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/1_dom/5508-xscroll-zero-content.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: dom_data 2 | oTest.fnStart( "5508 - Table container width doesn't change when filtering applied to scrolling table" ); 3 | 4 | $(document).ready( function () { 5 | $('#example').dataTable( { 6 | "sScrollY": "300px", 7 | "bPaginate": false 8 | } ); 9 | 10 | oTest.fnTest( 11 | "Width of container 800px on init with scroll", 12 | null, 13 | function () { return $('div.dataTables_scrollBody').width() == 800; } 14 | ); 15 | 16 | oTest.fnTest( 17 | "Unaltered when filter applied", 18 | function () { $('#example').dataTable().fnFilter('123'); }, 19 | function () { return $('div.dataTables_scrollBody').width() == 800; } 20 | ); 21 | 22 | oTest.fnComplete(); 23 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/1_dom/aaSortingFixed.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: dom_data 2 | oTest.fnStart( "aaSortingFixed" ); 3 | 4 | $(document).ready( function () { 5 | /* Check the default */ 6 | var oTable = $('#example').dataTable(); 7 | var oSettings = oTable.fnSettings(); 8 | 9 | oTest.fnTest( 10 | "No fixed sorting by default", 11 | null, 12 | function () { 13 | return oSettings.aaSortingFixed == null; 14 | } 15 | ); 16 | 17 | 18 | oTest.fnTest( 19 | "Fixed sorting on first column (string/asc) with user sorting on second column (string/asc)", 20 | function () { 21 | oSession.fnRestore(); 22 | $('#example').dataTable( { 23 | "aaSortingFixed": [['0','asc']] 24 | } ); 25 | $('#example thead th:eq(1)').click(); 26 | }, 27 | function () { return $('#example tbody td:eq(1)').html() == "Camino 1.0"; } 28 | ); 29 | 30 | oTest.fnTest( 31 | "Fixed sorting on first column (string/asc) with user sorting on second column (string/desc)", 32 | function () { 33 | $('#example thead th:eq(1)').click(); 34 | }, 35 | function () { return $('#example tbody td:eq(1)').html() == "Seamonkey 1.1"; } 36 | ); 37 | 38 | oTest.fnTest( 39 | "Fixed sorting on fourth column (int/asc) with user sorting on second column (string/asc)", 40 | function () { 41 | oSession.fnRestore(); 42 | $('#example').dataTable( { 43 | "aaSortingFixed": [['3','asc']] 44 | } ); 45 | $('#example thead th:eq(1)').click(); 46 | }, 47 | function () { return $('#example tbody td:eq(1)').html() == "All others"; } 48 | ); 49 | 50 | oTest.fnTest( 51 | "Fixed sorting on fourth column (int/asc) with user sorting on second column (string/desc)", 52 | function () { 53 | $('#example thead th:eq(1)').click(); 54 | }, 55 | function () { return $('#example tbody td:eq(1)').html() == "PSP browser"; } 56 | ); 57 | 58 | 59 | oTest.fnComplete(); 60 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/1_dom/aoColumns.sName.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: dom_data 2 | oTest.fnStart( "aoColumns.sName" ); 3 | 4 | /* This has no effect at all in DOM methods - so we just check that it has applied the name */ 5 | 6 | $(document).ready( function () { 7 | /* Check the default */ 8 | var oTable = $('#example').dataTable( { 9 | "aoColumns": [ 10 | null, 11 | null, 12 | null, 13 | { "sName": 'unit test' }, 14 | null 15 | ] 16 | } ); 17 | var oSettings = oTable.fnSettings(); 18 | 19 | oTest.fnTest( 20 | "Names are stored in the columns object", 21 | null, 22 | function () { return oSettings.aoColumns[3].sName =="unit test"; } 23 | ); 24 | 25 | 26 | oTest.fnComplete(); 27 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/1_dom/bFilter.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: dom_data 2 | oTest.fnStart( "bFilter" ); 3 | 4 | $(document).ready( function () { 5 | /* Check the default */ 6 | $('#example').dataTable(); 7 | 8 | oTest.fnTest( 9 | "Filtering div exists by default", 10 | null, 11 | function () { return document.getElementById('example_filter') != null; } 12 | ); 13 | 14 | /* Check can disable */ 15 | oTest.fnTest( 16 | "Fltering can be disabled", 17 | function () { 18 | oSession.fnRestore(); 19 | $('#example').dataTable( { 20 | "bFilter": false 21 | } ); 22 | }, 23 | function () { return document.getElementById('example_filter') == null; } 24 | ); 25 | 26 | /* Enable makes no difference */ 27 | oTest.fnTest( 28 | "Filtering enabled override", 29 | function () { 30 | oSession.fnRestore(); 31 | $('#example').dataTable( { 32 | "bFilter": true 33 | } ); 34 | }, 35 | function () { return document.getElementById('example_filter') != null; } 36 | ); 37 | 38 | 39 | oTest.fnComplete(); 40 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/1_dom/bInfo.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: dom_data 2 | oTest.fnStart( "bInfo" ); 3 | 4 | $(document).ready( function () { 5 | /* Check the default */ 6 | $('#example').dataTable(); 7 | 8 | oTest.fnTest( 9 | "Info div exists by default", 10 | null, 11 | function () { return document.getElementById('example_info') != null; } 12 | ); 13 | 14 | /* Check can disable */ 15 | oTest.fnTest( 16 | "Info can be disabled", 17 | function () { 18 | oSession.fnRestore(); 19 | $('#example').dataTable( { 20 | "bInfo": false 21 | } ); 22 | }, 23 | function () { return document.getElementById('example_info') == null; } 24 | ); 25 | 26 | /* Enable makes no difference */ 27 | oTest.fnTest( 28 | "Info enabled override", 29 | function () { 30 | oSession.fnRestore(); 31 | $('#example').dataTable( { 32 | "bInfo": true 33 | } ); 34 | }, 35 | function () { return document.getElementById('example_info') != null; } 36 | ); 37 | 38 | 39 | oTest.fnComplete(); 40 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/1_dom/bJQueryUI.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: dom_data 2 | oTest.fnStart( "bJQueryUI" ); 3 | 4 | $(document).ready( function () { 5 | $('#example').dataTable( { 6 | "bJQueryUI": true 7 | } ); 8 | 9 | oTest.fnTest( 10 | "Header elements are fully wrapped by DIVs", 11 | null, 12 | function () { 13 | var test = true; 14 | $('#example thead th').each( function () { 15 | if ( this.childNodes > 1 ) { 16 | test = false; 17 | } 18 | } ); 19 | return test; 20 | } 21 | ); 22 | 23 | oTest.fnTest( 24 | "One div for each header element", 25 | null, 26 | function () { 27 | return $('#example thead th div').length == 5; 28 | } 29 | ); 30 | 31 | oTest.fnTest( 32 | "One span for each header element, nested as child of div", 33 | null, 34 | function () { 35 | return $('#example thead th div>span').length == 5; 36 | } 37 | ); 38 | 39 | oTest.fnComplete(); 40 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/1_dom/bPaginate.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: dom_data 2 | oTest.fnStart( "bPaginate" ); 3 | 4 | $(document).ready( function () { 5 | /* Check the default */ 6 | $('#example').dataTable(); 7 | 8 | oTest.fnTest( 9 | "Pagiantion div exists by default", 10 | null, 11 | function () { return document.getElementById('example_paginate') != null; } 12 | ); 13 | 14 | oTest.fnTest( 15 | "Information div takes paging into account", 16 | null, 17 | function () { return document.getElementById('example_info').innerHTML == 18 | "Showing 1 to 10 of 57 entries"; } 19 | ); 20 | 21 | /* Check can disable */ 22 | oTest.fnTest( 23 | "Pagiantion can be disabled", 24 | function () { 25 | oSession.fnRestore(); 26 | $('#example').dataTable( { 27 | "bPaginate": false 28 | } ); 29 | }, 30 | function () { return document.getElementById('example_paginate') == null; } 31 | ); 32 | 33 | oTest.fnTest( 34 | "Information div takes paging disabled into account", 35 | null, 36 | function () { return document.getElementById('example_info').innerHTML == 37 | "Showing 1 to 57 of 57 entries"; } 38 | ); 39 | 40 | /* Enable makes no difference */ 41 | oTest.fnTest( 42 | "Pagiantion enabled override", 43 | function () { 44 | oSession.fnRestore(); 45 | $('#example').dataTable( { 46 | "bPaginate": true 47 | } ); 48 | }, 49 | function () { return document.getElementById('example_paginate') != null; } 50 | ); 51 | 52 | 53 | 54 | oTest.fnComplete(); 55 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/1_dom/bServerSide.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: dom_data 2 | oTest.fnStart( "bServerSide" ); 3 | 4 | /* Not interested in server-side processing here other than to check that it is off */ 5 | 6 | $(document).ready( function () { 7 | /* Check the default */ 8 | var oTable = $('#example').dataTable(); 9 | var oSettings = oTable.fnSettings(); 10 | 11 | oTest.fnTest( 12 | "Server side is off by default", 13 | null, 14 | function () { return oSettings.oFeatures.bServerSide == false; } 15 | ); 16 | 17 | oTest.fnComplete(); 18 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/1_dom/fnDeleteRow.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: dom_data 2 | oTest.fnStart( "fnDeleteRow" ); 3 | 4 | $(document).ready( function () { 5 | /* Check the default */ 6 | var oTable = $('#example').dataTable(); 7 | var oSettings = oTable.fnSettings(); 8 | 9 | oTest.fnTest( 10 | "Check that the default data is sane", 11 | null, 12 | function () { return oSettings.asDataSearch.join(' ').match(/4.0/g).length == 3; } 13 | ); 14 | 15 | oTest.fnTest( 16 | "Remove the first data row, and check that hte search data has been updated", 17 | function () { oTable.fnDeleteRow( 0 ); }, 18 | function () { return oSettings.asDataSearch.join(' ').match(/4.0/g).length == 2; } 19 | ); 20 | 21 | oTest.fnTest( 22 | "Check that the info element has been updated", 23 | null, 24 | function () { return $('#example_info').html() == "Showing 1 to 10 of 56 entries"; } 25 | ); 26 | 27 | 28 | 29 | oTest.fnComplete(); 30 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/1_dom/fnDrawCallback.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: dom_data 2 | oTest.fnStart( "fnDrawCallback" ); 3 | 4 | /* Fairly boring function compared to the others! */ 5 | 6 | $(document).ready( function () { 7 | /* Check the default */ 8 | var oTable = $('#example').dataTable(); 9 | var oSettings = oTable.fnSettings(); 10 | var mPass; 11 | 12 | oTest.fnTest( 13 | "Default should be null", 14 | null, 15 | function () { return oSettings.fnDrawCallback == null; } 16 | ); 17 | 18 | 19 | oTest.fnTest( 20 | "One argument passed", 21 | function () { 22 | oSession.fnRestore(); 23 | 24 | mPass = -1; 25 | $('#example').dataTable( { 26 | "fnDrawCallback": function ( ) { 27 | mPass = arguments.length; 28 | } 29 | } ); 30 | }, 31 | function () { return mPass == 1; } 32 | ); 33 | 34 | 35 | oTest.fnTest( 36 | "That one argument is the settings object", 37 | function () { 38 | oSession.fnRestore(); 39 | 40 | oTable = $('#example').dataTable( { 41 | "fnDrawCallback": function ( oSettings ) { 42 | mPass = oSettings; 43 | } 44 | } ); 45 | }, 46 | function () { return oTable.fnSettings() == mPass; } 47 | ); 48 | 49 | 50 | oTest.fnTest( 51 | "fnRowCallback called once on first draw", 52 | function () { 53 | oSession.fnRestore(); 54 | 55 | mPass = 0; 56 | $('#example').dataTable( { 57 | "fnDrawCallback": function ( ) { 58 | mPass++; 59 | } 60 | } ); 61 | }, 62 | function () { return mPass == 1; } 63 | ); 64 | 65 | oTest.fnTest( 66 | "fnRowCallback called once on each draw there after as well", 67 | function () { 68 | $('#example_next').click(); 69 | $('#example_next').click(); 70 | $('#example_next').click(); 71 | }, 72 | function () { return mPass == 4; } 73 | ); 74 | 75 | 76 | 77 | 78 | 79 | oTest.fnComplete(); 80 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/1_dom/fnFilter.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: dom_data 2 | oTest.fnStart( "fnFilter" ); 3 | 4 | $(document).ready( function () { 5 | /* Check the default */ 6 | var oTable = $('#example').dataTable(); 7 | oTable.fnFilter(1); 8 | 9 | oTest.fnTest( 10 | "Filtering with a non-string input is valid", 11 | null, 12 | function () { return $('#example_info').html() == "Showing 1 to 10 of 32 entries (filtered from 57 total entries)"; } 13 | ); 14 | 15 | oTest.fnComplete(); 16 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/1_dom/gh125 - stripe stripping.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: dom_data 2 | oTest.fnStart( "Odd and even are stripped from all rows" ); 3 | 4 | $(document).ready( function () { 5 | $('table tbody tr').addClass( 'odd even' ); 6 | $('table.display').dataTable(); 7 | 8 | oTest.fnTest( 9 | "Odd is applied to exactly 5 rows", 10 | null, 11 | function () { 12 | return $('#example tbody tr.odd').length === 5; 13 | } 14 | ); 15 | 16 | oTest.fnTest( 17 | "Even is applied to exactly 5 rows", 18 | null, 19 | function () { 20 | return $('#example tbody tr.even').length === 5; 21 | } 22 | ); 23 | 24 | oTest.fnTest( 25 | "First row is odd", 26 | null, 27 | function () { 28 | return $('#example tbody tr:eq(0)').hasClass('odd') && 29 | ! $('#example tbody tr:eq(0)').hasClass('even'); 30 | } 31 | ); 32 | 33 | oTest.fnTest( 34 | "Second row is even", 35 | null, 36 | function () { 37 | return $('#example tbody tr:eq(1)').hasClass('even') && 38 | ! $('#example tbody tr:eq(1)').hasClass('odd'); 39 | } 40 | ); 41 | 42 | oTest.fnTest( 43 | "Third row is odd", 44 | null, 45 | function () { 46 | return $('#example tbody tr:eq(2)').hasClass('odd') && 47 | ! $('#example tbody tr:eq(2)').hasClass('even'); 48 | } 49 | ); 50 | 51 | oTest.fnTest( 52 | "Fourth row is even", 53 | null, 54 | function () { 55 | return $('#example tbody tr:eq(3)').hasClass('even') && 56 | ! $('#example tbody tr:eq(3)').hasClass('odd'); 57 | } 58 | ); 59 | 60 | oTest.fnComplete(); 61 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/1_dom/html-autodetect-sort.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: html_table 2 | oTest.fnStart( "HTML auto detect" ); 3 | 4 | $(document).ready( function () { 5 | var oTable = $('#example').dataTable(); 6 | 7 | oTest.fnTest( 8 | "Initial sort", 9 | null, 10 | function () { 11 | var ret = 12 | $('#example tbody tr:eq(0) td:eq(0)').html() == '1' && 13 | $('#example tbody tr:eq(1) td:eq(0)').html() == '2' && 14 | $('#example tbody tr:eq(2) td:eq(0)').html() == '3'; 15 | return ret; 16 | } 17 | ); 18 | 19 | oTest.fnTest( 20 | "HTML sort", 21 | function () { $('#example thead th:eq(1)').click() }, 22 | function () { 23 | var ret = 24 | $('#example tbody tr:eq(0) td:eq(0)').html() == '2' && 25 | $('#example tbody tr:eq(1) td:eq(0)').html() == '1' && 26 | $('#example tbody tr:eq(2) td:eq(0)').html() == '4'; 27 | return ret; 28 | } 29 | ); 30 | 31 | oTest.fnTest( 32 | "HTML reverse sort", 33 | function () { $('#example thead th:eq(1)').click() }, 34 | function () { 35 | var ret = 36 | $('#example tbody tr:eq(0) td:eq(0)').html() == '3' && 37 | $('#example tbody tr:eq(1) td:eq(0)').html() == '4' && 38 | $('#example tbody tr:eq(2) td:eq(0)').html() == '1'; 39 | return ret; 40 | } 41 | ); 42 | 43 | oTest.fnTest( 44 | "Numeric sort", 45 | function () { $('#example thead th:eq(0)').click() }, 46 | function () { 47 | var ret = 48 | $('#example tbody tr:eq(0) td:eq(0)').html() == '1' && 49 | $('#example tbody tr:eq(1) td:eq(0)').html() == '2' && 50 | $('#example tbody tr:eq(2) td:eq(0)').html() == '3'; 51 | return ret; 52 | } 53 | ); 54 | 55 | 56 | oTest.fnComplete(); 57 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/1_dom/iDisplayLength.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: dom_data 2 | oTest.fnStart( "iDisplayLength" ); 3 | 4 | $(document).ready( function () { 5 | /* Check the default */ 6 | $('#example').dataTable(); 7 | 8 | oTest.fnTest( 9 | "Default length is ten", 10 | null, 11 | function () { return $('#example tbody tr').length == 10; } 12 | ); 13 | 14 | oTest.fnTest( 15 | "Select menu shows 10", 16 | null, 17 | function () { return $('#example_length select').val() == 10; } 18 | ); 19 | 20 | 21 | oTest.fnTest( 22 | "Set initial length to 25", 23 | function () { 24 | oSession.fnRestore(); 25 | $('#example').dataTable( { 26 | "iDisplayLength": 25 27 | } ); 28 | }, 29 | function () { return $('#example tbody tr').length == 25; } 30 | ); 31 | 32 | oTest.fnTest( 33 | "Select menu shows 25", 34 | null, 35 | function () { return $('#example_length select').val() == 25; } 36 | ); 37 | 38 | 39 | oTest.fnTest( 40 | "Set initial length to 100", 41 | function () { 42 | oSession.fnRestore(); 43 | $('#example').dataTable( { 44 | "iDisplayLength": 100 45 | } ); 46 | }, 47 | function () { return $('#example tbody tr').length == 57; } 48 | ); 49 | 50 | oTest.fnTest( 51 | "Select menu shows 25", 52 | null, 53 | function () { return $('#example_length select').val() == 100; } 54 | ); 55 | 56 | 57 | oTest.fnTest( 58 | "Set initial length to 23 (unknown select menu length)", 59 | function () { 60 | oSession.fnRestore(); 61 | $('#example').dataTable( { 62 | "iDisplayLength": 23 63 | } ); 64 | }, 65 | function () { return $('#example tbody tr').length == 23; } 66 | ); 67 | 68 | oTest.fnTest( 69 | "Select menu shows 10 (since 23 is unknow)", 70 | null, 71 | function () { return $('#example_length select').val() == 10; } 72 | ); 73 | 74 | 75 | oTest.fnComplete(); 76 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/1_dom/oLanguage.sProcessing.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: dom_data 2 | oTest.fnStart( "oLanguage.sProcessing" ); 3 | 4 | $(document).ready( function () { 5 | /* Check the default */ 6 | var oTable = $('#example').dataTable( { 7 | "bProcessing": true 8 | } ); 9 | var oSettings = oTable.fnSettings(); 10 | 11 | oTest.fnTest( 12 | "Processing language is 'Processing...' by default", 13 | null, 14 | function () { return oSettings.oLanguage.sProcessing == "Processing..."; } 15 | ); 16 | 17 | oTest.fnTest( 18 | "Processing language default is in the DOM", 19 | null, 20 | function () { return document.getElementById('example_processing').innerHTML = "Processing..."; } 21 | ); 22 | 23 | 24 | oTest.fnTest( 25 | "Processing language can be defined", 26 | function () { 27 | oSession.fnRestore(); 28 | oTable = $('#example').dataTable( { 29 | "bProcessing": true, 30 | "oLanguage": { 31 | "sProcessing": "unit test" 32 | } 33 | } ); 34 | oSettings = oTable.fnSettings(); 35 | }, 36 | function () { return oSettings.oLanguage.sProcessing == "unit test"; } 37 | ); 38 | 39 | oTest.fnTest( 40 | "Processing language definition is in the DOM", 41 | null, 42 | function () { return document.getElementById('example_processing').innerHTML = "unit test"; } 43 | ); 44 | 45 | 46 | oTest.fnComplete(); 47 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/1_dom/oLanguage.sSearch.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: dom_data 2 | oTest.fnStart( "oLanguage.sSearch" ); 3 | 4 | $(document).ready( function () { 5 | /* Check the default */ 6 | var oTable = $('#example').dataTable(); 7 | var oSettings = oTable.fnSettings(); 8 | 9 | oTest.fnTest( 10 | "Search language is 'Search:' by default", 11 | null, 12 | function () { return oSettings.oLanguage.sSearch == "Search:"; } 13 | ); 14 | 15 | oTest.fnTest( 16 | "A label input is used", 17 | null, 18 | function () { return $('label', oSettings.aanFeatures.f[0]).length == 1 } 19 | ); 20 | 21 | oTest.fnTest( 22 | "Search language default is in the DOM", 23 | null, 24 | function () { return $('label', oSettings.aanFeatures.f[0]).text() 25 | == "Search: "; } 26 | ); 27 | 28 | 29 | oTest.fnTest( 30 | "Search language can be defined", 31 | function () { 32 | oSession.fnRestore(); 33 | oTable = $('#example').dataTable( { 34 | "oLanguage": { 35 | "sSearch": "unit test" 36 | } 37 | } ); 38 | oSettings = oTable.fnSettings(); 39 | }, 40 | function () { return oSettings.oLanguage.sSearch == "unit test"; } 41 | ); 42 | 43 | oTest.fnTest( 44 | "Info language definition is in the DOM", 45 | null, 46 | function () { return $('label', oSettings.aanFeatures.f[0]).text().indexOf('unit test') !== -1; } 47 | ); 48 | 49 | 50 | oTest.fnTest( 51 | "Blank search has a no (separator) inserted", 52 | function () { 53 | oSession.fnRestore(); 54 | oTable = $('#example').dataTable( { 55 | "oLanguage": { 56 | "sSearch": "" 57 | } 58 | } ); 59 | oSettings = oTable.fnSettings(); 60 | }, 61 | function () { return document.getElementById('example_filter').childNodes.length == 1; } 62 | ); 63 | 64 | 65 | oTest.fnComplete(); 66 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/1_dom/oLanguage.sZeroRecords.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: dom_data 2 | oTest.fnStart( "oLanguage.sZeroRecords" ); 3 | 4 | $(document).ready( function () { 5 | /* Check the default */ 6 | var oTable = $('#example').dataTable(); 7 | var oSettings = oTable.fnSettings(); 8 | 9 | oTest.fnTest( 10 | "Zero records language is 'No matching records found' by default", 11 | null, 12 | function () { return oSettings.oLanguage.sZeroRecords == "No matching records found"; } 13 | ); 14 | 15 | oTest.fnTest( 16 | "Text is shown when empty table (after filtering)", 17 | function () { oTable.fnFilter('nothinghere'); }, 18 | function () { return $('#example tbody tr td')[0].innerHTML == "No matching records found" } 19 | ); 20 | 21 | 22 | 23 | oTest.fnTest( 24 | "Zero records language can be defined", 25 | function () { 26 | oSession.fnRestore(); 27 | oTable = $('#example').dataTable( { 28 | "oLanguage": { 29 | "sZeroRecords": "unit test" 30 | } 31 | } ); 32 | oSettings = oTable.fnSettings(); 33 | }, 34 | function () { return oSettings.oLanguage.sZeroRecords == "unit test"; } 35 | ); 36 | 37 | oTest.fnTest( 38 | "Text is shown when empty table (after filtering)", 39 | function () { oTable.fnFilter('nothinghere2'); }, 40 | function () { return $('#example tbody tr td')[0].innerHTML == "unit test" } 41 | ); 42 | 43 | 44 | oTest.fnComplete(); 45 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/1_dom/sAjaxSource.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: dom_data 2 | oTest.fnStart( "sAjaxSource" ); 3 | 4 | /* Not interested in ajax source here other than to check it's default */ 5 | 6 | $(document).ready( function () { 7 | /* Check the default */ 8 | var oTable = $('#example').dataTable(); 9 | var oSettings = oTable.fnSettings(); 10 | 11 | oTest.fnTest( 12 | "Server side is off by default", 13 | null, 14 | function () { return oSettings.sAjaxSource == null; } 15 | ); 16 | 17 | oTest.fnComplete(); 18 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/2_js/39-nested-null.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: empty_table 2 | oTest.fnStart( "39 - nested null values" ); 3 | 4 | $(document).ready( function () { 5 | var test = false; 6 | 7 | $.fn.dataTable.ext.sErrMode = "throw"; 8 | 9 | oTest.fnTest( 10 | "No default content throws an error", 11 | function () { 12 | try { 13 | $('#example').dataTable( { 14 | "aaData": [ 15 | { "a": "0", "b": {"c": 0} }, 16 | { "a": "1", "b": {"c": 3} }, 17 | { "a": "2", "b": null } 18 | ], 19 | "aoColumns": [ 20 | { "mDataProp": "a" }, 21 | { "mDataProp": "b" }, 22 | { "mDataProp": "b.c" } 23 | ] 24 | } ); 25 | } 26 | catch(err) { 27 | test = true; 28 | } 29 | }, 30 | function () { return test; } 31 | ); 32 | 33 | oTest.fnTest( 34 | "Table renders", 35 | function () { 36 | oSession.fnRestore(); 37 | 38 | $('#example').dataTable( { 39 | "aaData": [ 40 | { "a": "0", "b": {"c": 0} }, 41 | { "a": "1", "b": {"c": 3} }, 42 | { "a": "2", "b": null } 43 | ], 44 | "aoColumns": [ 45 | { "mDataProp": "a" }, 46 | { "mDataProp": "b" }, 47 | { "mDataProp": "b.c", "sDefaultContent": "allan" } 48 | ] 49 | } ); 50 | }, 51 | function () { return $('#example tbody td:eq(0)').html() === "0"; } 52 | ); 53 | 54 | oTest.fnTest( 55 | "Default content applied", 56 | function () { 57 | oSession.fnRestore(); 58 | 59 | $('#example').dataTable( { 60 | "aaData": [ 61 | { "a": "0", "b": {"c": 0} }, 62 | { "a": "1", "b": {"c": 3} }, 63 | { "a": "2", "b": null } 64 | ], 65 | "aoColumns": [ 66 | { "mDataProp": "a" }, 67 | { "mDataProp": "b" }, 68 | { "mDataProp": "b.c", "sDefaultContent": "allan" } 69 | ] 70 | } ); 71 | }, 72 | function () { return $('#example tbody td:eq(8)').html() === "allan"; } 73 | ); 74 | 75 | oTest.fnComplete(); 76 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/2_js/8549--string-sorting-nonstrings.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: empty_table 2 | oTest.fnStart( "8549 - string sorting non-string types" ); 3 | 4 | $(document).ready( function () { 5 | var test = false; 6 | 7 | $.fn.dataTable.ext.sErrMode = "throw"; 8 | 9 | 10 | 11 | /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 12 | * Shallow properties 13 | */ 14 | 15 | $('#example').dataTable( { 16 | "aaData": [ 17 | [ null ], 18 | [ 5 ], 19 | [ "1a" ], 20 | [ new Date(0) ] 21 | ], 22 | "aoColumns": [ 23 | { "sTitle": "Test" } 24 | ] 25 | } ); 26 | 27 | oTest.fnTest( 28 | "Sorting works - first cell is empty", 29 | null, 30 | function () { return $('#example tbody tr:eq(0) td:eq(0)').html() === ""; } 31 | ); 32 | 33 | oTest.fnTest( 34 | "Second cell is 1a", 35 | null, 36 | function () { return $('#example tbody tr:eq(1) td:eq(0)').html() === "1a"; } 37 | ); 38 | 39 | oTest.fnTest( 40 | "Third cell is 5", 41 | null, 42 | function () { return $('#example tbody tr:eq(2) td:eq(0)').html() === "5"; } 43 | ); 44 | 45 | 46 | oTest.fnComplete(); 47 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/2_js/aoColumns.sName.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: js_data 2 | oTest.fnStart( "aoColumns.sName" ); 3 | 4 | /* This has no effect at all in DOM methods - so we just check that it has applied the name */ 5 | 6 | $(document).ready( function () { 7 | /* Check the default */ 8 | var oTable = $('#example').dataTable( { 9 | "aaData": gaaData, 10 | "aoColumns": [ 11 | null, 12 | null, 13 | null, 14 | { "sName": 'unit test' }, 15 | null 16 | ] 17 | } ); 18 | var oSettings = oTable.fnSettings(); 19 | 20 | oTest.fnTest( 21 | "Names are stored in the columns object", 22 | null, 23 | function () { return oSettings.aoColumns[3].sName =="unit test"; } 24 | ); 25 | 26 | 27 | oTest.fnComplete(); 28 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/2_js/bFilter.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: js_data 2 | oTest.fnStart( "bFilter" ); 3 | 4 | $(document).ready( function () { 5 | /* Check the default */ 6 | $('#example').dataTable( { 7 | "aaData": gaaData 8 | } ); 9 | 10 | oTest.fnTest( 11 | "Filtering div exists by default", 12 | null, 13 | function () { return document.getElementById('example_filter') != null; } 14 | ); 15 | 16 | /* Check can disable */ 17 | oTest.fnTest( 18 | "Fltering can be disabled", 19 | function () { 20 | oSession.fnRestore(); 21 | $('#example').dataTable( { 22 | "aaData": gaaData, 23 | "bFilter": false 24 | } ); 25 | }, 26 | function () { return document.getElementById('example_filter') == null; } 27 | ); 28 | 29 | /* Enable makes no difference */ 30 | oTest.fnTest( 31 | "Filtering enabled override", 32 | function () { 33 | oSession.fnRestore(); 34 | $('#example').dataTable( { 35 | "aaData": gaaData, 36 | "bFilter": true 37 | } ); 38 | }, 39 | function () { return document.getElementById('example_filter') != null; } 40 | ); 41 | 42 | 43 | oTest.fnComplete(); 44 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/2_js/bInfo.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: js_data 2 | oTest.fnStart( "bInfo" ); 3 | 4 | $(document).ready( function () { 5 | /* Check the default */ 6 | $('#example').dataTable( { 7 | "aaData": gaaData 8 | } ); 9 | 10 | oTest.fnTest( 11 | "Info div exists by default", 12 | null, 13 | function () { return document.getElementById('example_info') != null; } 14 | ); 15 | 16 | /* Check can disable */ 17 | oTest.fnTest( 18 | "Info can be disabled", 19 | function () { 20 | oSession.fnRestore(); 21 | $('#example').dataTable( { 22 | "aaData": gaaData, 23 | "bInfo": false 24 | } ); 25 | }, 26 | function () { return document.getElementById('example_info') == null; } 27 | ); 28 | 29 | /* Enable makes no difference */ 30 | oTest.fnTest( 31 | "Info enabled override", 32 | function () { 33 | oSession.fnRestore(); 34 | $('#example').dataTable( { 35 | "aaData": gaaData, 36 | "bInfo": true 37 | } ); 38 | }, 39 | function () { return document.getElementById('example_info') != null; } 40 | ); 41 | 42 | 43 | oTest.fnComplete(); 44 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/2_js/bPaginate.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: js_data 2 | oTest.fnStart( "bPaginate" ); 3 | 4 | $(document).ready( function () { 5 | /* Check the default */ 6 | $('#example').dataTable( { 7 | "aaData": gaaData 8 | } ); 9 | 10 | oTest.fnTest( 11 | "Pagiantion div exists by default", 12 | null, 13 | function () { return document.getElementById('example_paginate') != null; } 14 | ); 15 | 16 | oTest.fnTest( 17 | "Information div takes paging into account", 18 | null, 19 | function () { return document.getElementById('example_info').innerHTML == 20 | "Showing 1 to 10 of 57 entries"; } 21 | ); 22 | 23 | /* Check can disable */ 24 | oTest.fnTest( 25 | "Pagiantion can be disabled", 26 | function () { 27 | oSession.fnRestore(); 28 | $('#example').dataTable( { 29 | "aaData": gaaData, 30 | "bPaginate": false 31 | } ); 32 | }, 33 | function () { return document.getElementById('example_paginate') == null; } 34 | ); 35 | 36 | oTest.fnTest( 37 | "Information div takes paging disabled into account", 38 | null, 39 | function () { return document.getElementById('example_info').innerHTML == 40 | "Showing 1 to 57 of 57 entries"; } 41 | ); 42 | 43 | /* Enable makes no difference */ 44 | oTest.fnTest( 45 | "Pagiantion enabled override", 46 | function () { 47 | oSession.fnRestore(); 48 | $('#example').dataTable( { 49 | "aaData": gaaData, 50 | "bPaginate": true 51 | } ); 52 | }, 53 | function () { return document.getElementById('example_paginate') != null; } 54 | ); 55 | 56 | 57 | 58 | oTest.fnComplete(); 59 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/2_js/bServerSide.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: js_data 2 | oTest.fnStart( "bServerSide" ); 3 | 4 | /* Not interested in server-side processing here other than to check that it is off */ 5 | 6 | $(document).ready( function () { 7 | /* Check the default */ 8 | var oTable = $('#example').dataTable( { 9 | "aaData": gaaData 10 | } ); 11 | var oSettings = oTable.fnSettings(); 12 | 13 | oTest.fnTest( 14 | "Server side is off by default", 15 | null, 16 | function () { return oSettings.oFeatures.bServerSide == false; } 17 | ); 18 | 19 | oTest.fnComplete(); 20 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/2_js/oLanguage.sProcessing.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: js_data 2 | oTest.fnStart( "oLanguage.sProcessing" ); 3 | 4 | $(document).ready( function () { 5 | /* Check the default */ 6 | var oTable = $('#example').dataTable( { 7 | "aaData": gaaData, 8 | "bProcessing": true 9 | } ); 10 | var oSettings = oTable.fnSettings(); 11 | 12 | oTest.fnTest( 13 | "Processing language is 'Processing...' by default", 14 | null, 15 | function () { return oSettings.oLanguage.sProcessing == "Processing..."; } 16 | ); 17 | 18 | oTest.fnTest( 19 | "Processing language default is in the DOM", 20 | null, 21 | function () { return document.getElementById('example_processing').innerHTML = "Processing..."; } 22 | ); 23 | 24 | 25 | oTest.fnTest( 26 | "Processing language can be defined", 27 | function () { 28 | oSession.fnRestore(); 29 | oTable = $('#example').dataTable( { 30 | "aaData": gaaData, 31 | "bProcessing": true, 32 | "oLanguage": { 33 | "sProcessing": "unit test" 34 | } 35 | } ); 36 | oSettings = oTable.fnSettings(); 37 | }, 38 | function () { return oSettings.oLanguage.sProcessing == "unit test"; } 39 | ); 40 | 41 | oTest.fnTest( 42 | "Processing language definition is in the DOM", 43 | null, 44 | function () { return document.getElementById('example_processing').innerHTML = "unit test"; } 45 | ); 46 | 47 | 48 | oTest.fnComplete(); 49 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/2_js/oLanguage.sSearch.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: js_data 2 | oTest.fnStart( "oLanguage.sSearch" ); 3 | 4 | $(document).ready( function () { 5 | /* Check the default */ 6 | var oTable = $('#example').dataTable( { 7 | "aaData": gaaData 8 | } ); 9 | var oSettings = oTable.fnSettings(); 10 | 11 | oTest.fnTest( 12 | "Search language is 'Search:' by default", 13 | null, 14 | function () { return oSettings.oLanguage.sSearch == "Search:"; } 15 | ); 16 | 17 | oTest.fnTest( 18 | "A label input is used", 19 | null, 20 | function () { return $('label', oSettings.aanFeatures.f[0]).length == 1 } 21 | ); 22 | 23 | oTest.fnTest( 24 | "Search language default is in the DOM", 25 | null, 26 | function () { return $('label', oSettings.aanFeatures.f[0]).text() 27 | == "Search: "; } 28 | ); 29 | 30 | 31 | oTest.fnTest( 32 | "Search language can be defined", 33 | function () { 34 | oSession.fnRestore(); 35 | oTable = $('#example').dataTable( { 36 | "aaData": gaaData, 37 | "oLanguage": { 38 | "sSearch": "unit test" 39 | } 40 | } ); 41 | oSettings = oTable.fnSettings(); 42 | }, 43 | function () { return oSettings.oLanguage.sSearch == "unit test"; } 44 | ); 45 | 46 | oTest.fnTest( 47 | "Info language definition is in the DOM", 48 | null, 49 | function () { return $('label', oSettings.aanFeatures.f[0]).text().indexOf('unit test') !== -1; } 50 | ); 51 | 52 | 53 | oTest.fnTest( 54 | "Blank search has a no (separator) inserted", 55 | function () { 56 | oSession.fnRestore(); 57 | oTable = $('#example').dataTable( { 58 | "aaData": gaaData, 59 | "oLanguage": { 60 | "sSearch": "" 61 | } 62 | } ); 63 | oSettings = oTable.fnSettings(); 64 | }, 65 | function () { return document.getElementById('example_filter').childNodes.length == 1; } 66 | ); 67 | 68 | 69 | oTest.fnComplete(); 70 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/2_js/oLanguage.sZeroRecords.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: js_data 2 | oTest.fnStart( "oLanguage.sZeroRecords" ); 3 | 4 | $(document).ready( function () { 5 | /* Check the default */ 6 | var oTable = $('#example').dataTable( { 7 | "aaData": gaaData 8 | } ); 9 | var oSettings = oTable.fnSettings(); 10 | 11 | oTest.fnTest( 12 | "Zero records language is 'No matching records found' by default", 13 | null, 14 | function () { return oSettings.oLanguage.sZeroRecords == "No matching records found"; } 15 | ); 16 | 17 | oTest.fnTest( 18 | "Text is shown when empty table (after filtering)", 19 | function () { oTable.fnFilter('nothinghere'); }, 20 | function () { return $('#example tbody tr td')[0].innerHTML == "No matching records found" } 21 | ); 22 | 23 | 24 | 25 | oTest.fnTest( 26 | "Zero records language can be defined", 27 | function () { 28 | oSession.fnRestore(); 29 | oTable = $('#example').dataTable( { 30 | "aaData": gaaData, 31 | "oLanguage": { 32 | "sZeroRecords": "unit test" 33 | } 34 | } ); 35 | oSettings = oTable.fnSettings(); 36 | }, 37 | function () { return oSettings.oLanguage.sZeroRecords == "unit test"; } 38 | ); 39 | 40 | oTest.fnTest( 41 | "Text is shown when empty table (after filtering)", 42 | function () { oTable.fnFilter('nothinghere2'); }, 43 | function () { return $('#example tbody tr td')[0].innerHTML == "unit test" } 44 | ); 45 | 46 | 47 | oTest.fnComplete(); 48 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/2_js/sAjaxSource.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: js_data 2 | oTest.fnStart( "sAjaxSource" ); 3 | 4 | /* Not interested in ajax source here other than to check it's default */ 5 | 6 | $(document).ready( function () { 7 | /* Check the default */ 8 | var oTable = $('#example').dataTable( { 9 | "aaData": gaaData 10 | } ); 11 | var oSettings = oTable.fnSettings(); 12 | 13 | oTest.fnTest( 14 | "Server side is off by default", 15 | null, 16 | function () { return oSettings.sAjaxSource == null; } 17 | ); 18 | 19 | oTest.fnComplete(); 20 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/3_ajax/aoColumns.sName.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: empty_table 2 | oTest.fnStart( "aoColumns.sName" ); 3 | 4 | /* This has no effect at all in DOM methods - so we just check that it has applied the name */ 5 | 6 | $(document).ready( function () { 7 | /* Check the default */ 8 | var oTable = $('#example').dataTable( { 9 | "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", 10 | "aoColumns": [ 11 | null, 12 | null, 13 | null, 14 | { "sName": 'unit test' }, 15 | null 16 | ] 17 | } ); 18 | var oSettings = oTable.fnSettings(); 19 | 20 | oTest.fnWaitTest( 21 | "Names are stored in the columns object", 22 | null, 23 | function () { return oSettings.aoColumns[3].sName =="unit test"; } 24 | ); 25 | 26 | 27 | oTest.fnComplete(); 28 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/3_ajax/bFilter.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: empty_table 2 | oTest.fnStart( "bFilter" ); 3 | 4 | $(document).ready( function () { 5 | /* Check the default */ 6 | $('#example').dataTable( { 7 | "sAjaxSource": "../../../examples/ajax/sources/arrays.txt" 8 | } ); 9 | 10 | oTest.fnWaitTest( 11 | "Filtering div exists by default", 12 | null, 13 | function () { return document.getElementById('example_filter') != null; } 14 | ); 15 | 16 | /* Check can disable */ 17 | oTest.fnWaitTest( 18 | "Fltering can be disabled", 19 | function () { 20 | oSession.fnRestore(); 21 | $('#example').dataTable( { 22 | "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", 23 | "bFilter": false 24 | } ); 25 | }, 26 | function () { return document.getElementById('example_filter') == null; } 27 | ); 28 | 29 | /* Enable makes no difference */ 30 | oTest.fnWaitTest( 31 | "Filtering enabled override", 32 | function () { 33 | oSession.fnRestore(); 34 | $('#example').dataTable( { 35 | "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", 36 | "bFilter": true 37 | } ); 38 | }, 39 | function () { return document.getElementById('example_filter') != null; } 40 | ); 41 | 42 | 43 | oTest.fnComplete(); 44 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/3_ajax/bInfo.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: empty_table 2 | oTest.fnStart( "bInfo" ); 3 | 4 | $(document).ready( function () { 5 | /* Check the default */ 6 | $('#example').dataTable( { 7 | "sAjaxSource": "../../../examples/ajax/sources/arrays.txt" 8 | } ); 9 | 10 | oTest.fnWaitTest( 11 | "Info div exists by default", 12 | null, 13 | function () { return document.getElementById('example_info') != null; } 14 | ); 15 | 16 | /* Check can disable */ 17 | oTest.fnWaitTest( 18 | "Info can be disabled", 19 | function () { 20 | oSession.fnRestore(); 21 | $('#example').dataTable( { 22 | "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", 23 | "bInfo": false 24 | } ); 25 | }, 26 | function () { return document.getElementById('example_info') == null; } 27 | ); 28 | 29 | /* Enable makes no difference */ 30 | oTest.fnWaitTest( 31 | "Info enabled override", 32 | function () { 33 | oSession.fnRestore(); 34 | $('#example').dataTable( { 35 | "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", 36 | "bInfo": true 37 | } ); 38 | }, 39 | function () { return document.getElementById('example_info') != null; } 40 | ); 41 | 42 | 43 | oTest.fnComplete(); 44 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/3_ajax/bPaginate.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: empty_table 2 | oTest.fnStart( "bPaginate" ); 3 | 4 | $(document).ready( function () { 5 | /* Check the default */ 6 | $('#example').dataTable( { 7 | "sAjaxSource": "../../../examples/ajax/sources/arrays.txt" 8 | } ); 9 | 10 | oTest.fnWaitTest( 11 | "Pagiantion div exists by default", 12 | null, 13 | function () { return document.getElementById('example_paginate') != null; } 14 | ); 15 | 16 | oTest.fnWaitTest( 17 | "Information div takes paging into account", 18 | null, 19 | function () { return document.getElementById('example_info').innerHTML == 20 | "Showing 1 to 10 of 57 entries"; } 21 | ); 22 | 23 | /* Check can disable */ 24 | oTest.fnWaitTest( 25 | "Pagiantion can be disabled", 26 | function () { 27 | oSession.fnRestore(); 28 | $('#example').dataTable( { 29 | "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", 30 | "bPaginate": false 31 | } ); 32 | }, 33 | function () { return document.getElementById('example_paginate') == null; } 34 | ); 35 | 36 | oTest.fnWaitTest( 37 | "Information div takes paging disabled into account", 38 | null, 39 | function () { return document.getElementById('example_info').innerHTML == 40 | "Showing 1 to 57 of 57 entries"; } 41 | ); 42 | 43 | /* Enable makes no difference */ 44 | oTest.fnWaitTest( 45 | "Pagiantion enabled override", 46 | function () { 47 | oSession.fnRestore(); 48 | $('#example').dataTable( { 49 | "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", 50 | "bPaginate": true 51 | } ); 52 | }, 53 | function () { return document.getElementById('example_paginate') != null; } 54 | ); 55 | 56 | 57 | 58 | oTest.fnComplete(); 59 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/3_ajax/bServerSide.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: empty_table 2 | oTest.fnStart( "bServerSide" ); 3 | 4 | /* Not interested in server-side processing here other than to check that it is off */ 5 | 6 | $(document).ready( function () { 7 | /* Check the default */ 8 | var oTable = $('#example').dataTable( { 9 | "sAjaxSource": "../../../examples/ajax/sources/arrays.txt" 10 | } ); 11 | var oSettings = oTable.fnSettings(); 12 | 13 | oTest.fnWaitTest( 14 | "Server side is off by default", 15 | null, 16 | function () { return oSettings.oFeatures.bServerSide == false; } 17 | ); 18 | 19 | oTest.fnComplete(); 20 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/3_ajax/fnServerData.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: empty_table 2 | oTest.fnStart( "fnServerData for Ajax sourced data" ); 3 | 4 | $(document).ready( function () { 5 | var mPass; 6 | 7 | oTest.fnTest( 8 | "Argument length", 9 | function () { 10 | $('#example').dataTable( { 11 | "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", 12 | "fnServerData": function () { 13 | mPass = arguments.length; 14 | } 15 | } ); 16 | }, 17 | function () { return mPass == 4; } 18 | ); 19 | 20 | oTest.fnTest( 21 | "Url", 22 | function () { 23 | $('#example').dataTable( { 24 | "bDestroy": true, 25 | "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", 26 | "fnServerData": function (sUrl, aoData, fnCallback, oSettings) { 27 | mPass = sUrl == "../../../examples/ajax/sources/arrays.txt"; 28 | } 29 | } ); 30 | }, 31 | function () { return mPass; } 32 | ); 33 | 34 | oTest.fnTest( 35 | "Data array", 36 | function () { 37 | $('#example').dataTable( { 38 | "bDestroy": true, 39 | "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", 40 | "fnServerData": function (sUrl, aoData, fnCallback, oSettings) { 41 | mPass = aoData.length==0; 42 | } 43 | } ); 44 | }, 45 | function () { return mPass; } 46 | ); 47 | 48 | oTest.fnTest( 49 | "Callback function", 50 | function () { 51 | $('#example').dataTable( { 52 | "bDestroy": true, 53 | "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", 54 | "fnServerData": function (sUrl, aoData, fnCallback, oSettings) { 55 | mPass = typeof fnCallback == 'function'; 56 | } 57 | } ); 58 | }, 59 | function () { return mPass; } 60 | ); 61 | 62 | 63 | oTest.fnComplete(); 64 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/3_ajax/oLanguage.sProcessing.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: empty_table 2 | oTest.fnStart( "oLanguage.sProcessing" ); 3 | 4 | $(document).ready( function () { 5 | /* Check the default */ 6 | var oTable = $('#example').dataTable( { 7 | "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", 8 | "bProcessing": true 9 | } ); 10 | var oSettings = oTable.fnSettings(); 11 | 12 | oTest.fnWaitTest( 13 | "Processing language is 'Processing...' by default", 14 | null, 15 | function () { return oSettings.oLanguage.sProcessing == "Processing..."; } 16 | ); 17 | 18 | oTest.fnTest( 19 | "Processing language default is in the DOM", 20 | null, 21 | function () { return document.getElementById('example_processing').innerHTML = "Processing..."; } 22 | ); 23 | 24 | 25 | oTest.fnWaitTest( 26 | "Processing language can be defined", 27 | function () { 28 | oSession.fnRestore(); 29 | oTable = $('#example').dataTable( { 30 | "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", 31 | "bProcessing": true, 32 | "oLanguage": { 33 | "sProcessing": "unit test" 34 | } 35 | } ); 36 | oSettings = oTable.fnSettings(); 37 | }, 38 | function () { return oSettings.oLanguage.sProcessing == "unit test"; } 39 | ); 40 | 41 | oTest.fnTest( 42 | "Processing language definition is in the DOM", 43 | null, 44 | function () { return document.getElementById('example_processing').innerHTML = "unit test"; } 45 | ); 46 | 47 | 48 | oTest.fnComplete(); 49 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/3_ajax/oLanguage.sZeroRecords.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: empty_table 2 | oTest.fnStart( "oLanguage.sZeroRecords" ); 3 | 4 | $(document).ready( function () { 5 | /* Check the default */ 6 | var oTable = $('#example').dataTable( { 7 | "sAjaxSource": "../../../examples/ajax/sources/arrays.txt" 8 | } ); 9 | var oSettings = oTable.fnSettings(); 10 | 11 | oTest.fnWaitTest( 12 | "Zero records language is 'No matching records found' by default", 13 | null, 14 | function () { return oSettings.oLanguage.sZeroRecords == "No matching records found"; } 15 | ); 16 | 17 | oTest.fnWaitTest( 18 | "Text is shown when empty table (after filtering)", 19 | function () { oTable.fnFilter('nothinghere'); }, 20 | function () { return $('#example tbody tr td')[0].innerHTML == "No matching records found" } 21 | ); 22 | 23 | 24 | 25 | oTest.fnWaitTest( 26 | "Zero records language can be defined", 27 | function () { 28 | oSession.fnRestore(); 29 | oTable = $('#example').dataTable( { 30 | "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", 31 | "oLanguage": { 32 | "sZeroRecords": "unit test" 33 | } 34 | } ); 35 | oSettings = oTable.fnSettings(); 36 | }, 37 | function () { return oSettings.oLanguage.sZeroRecords == "unit test"; } 38 | ); 39 | 40 | oTest.fnWaitTest( 41 | "Text is shown when empty table (after filtering)", 42 | function () { oTable.fnFilter('nothinghere2'); }, 43 | function () { return $('#example tbody tr td')[0].innerHTML == "unit test" } 44 | ); 45 | 46 | 47 | oTest.fnComplete(); 48 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/3_ajax/sAjaxSource.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: empty_table 2 | oTest.fnStart( "sAjaxSource" ); 3 | 4 | /* Sanitfy check really - all the other tests blast this */ 5 | 6 | $(document).ready( function () { 7 | /* Check the default */ 8 | var oTable = $('#example').dataTable( { 9 | "sAjaxSource": "../../../examples/ajax/sources/arrays.txt" 10 | } ); 11 | var oSettings = oTable.fnSettings(); 12 | 13 | oTest.fnWaitTest( 14 | "Server side is off by default", 15 | null, 16 | function () { 17 | return oSettings.sAjaxSource == "../../../examples/ajax/sources/arrays.txt"; 18 | } 19 | ); 20 | 21 | oTest.fnComplete(); 22 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/3_ajax/sServerMethod.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: empty_table 2 | oTest.fnStart( "sServerMethod" ); 3 | 4 | 5 | $(document).ready( function () { 6 | /* Check the default */ 7 | var oTable = $('#example').dataTable( { 8 | "sAjaxSource": "../data_sources/method.php?method=get" 9 | } ); 10 | 11 | oTest.fnWaitTest( 12 | "Default method was GET", 13 | null, 14 | function () { 15 | // A valid request will place a single row in the table 16 | return $('tbody td').eq(0).html() === '1'; 17 | } 18 | ); 19 | 20 | oTest.fnWaitTest( 21 | "Can make a POST request", 22 | function () { 23 | oSession.fnRestore(); 24 | $('#example').dataTable( { 25 | "sAjaxSource": "../data_sources/method.php?method=post", 26 | "sServerMethod": "POST" 27 | } ); 28 | }, 29 | function () { 30 | return $('tbody td').eq(0).html() === '1'; 31 | } 32 | ); 33 | 34 | oTest.fnWaitTest( 35 | "Can make a PUT request", 36 | function () { 37 | oSession.fnRestore(); 38 | $('#example').dataTable( { 39 | "sAjaxSource": "../data_sources/method.php?method=put", 40 | "sServerMethod": "PUT" 41 | } ); 42 | }, 43 | function () { 44 | return $('tbody td').eq(0).html() === '1'; 45 | } 46 | ); 47 | 48 | oTest.fnComplete(); 49 | } ); 50 | -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/4_server-side/-iDraw.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: empty_table 2 | oTest.fnStart( "iDraw - check that iDraw increments for each draw" ); 3 | 4 | 5 | $(document).ready( function () { 6 | var oTable = $('#example').dataTable( { 7 | "bServerSide": true, 8 | "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php" 9 | } ); 10 | var oSettings = oTable.fnSettings(); 11 | 12 | oTest.fnWaitTest( 13 | "After first draw, iDraw is 1", 14 | null, 15 | function () { return oSettings.iDraw == 1; } 16 | ); 17 | 18 | oTest.fnWaitTest( 19 | "After second draw, iDraw is 2", 20 | function () { oTable.fnDraw() }, 21 | function () { return oSettings.iDraw == 2; } 22 | ); 23 | 24 | oTest.fnWaitTest( 25 | "After sort", 26 | function () { oTable.fnSort([[1,'asc']]) }, 27 | function () { return oSettings.iDraw == 3; } 28 | ); 29 | 30 | oTest.fnWaitTest( 31 | "After filter", 32 | function () { oTable.fnFilter('gecko') }, 33 | function () { return oSettings.iDraw == 4; } 34 | ); 35 | 36 | oTest.fnWaitTest( 37 | "After another filter", 38 | function () { oTable.fnFilter('gec') }, 39 | function () { return oSettings.iDraw == 5; } 40 | ); 41 | 42 | 43 | oTest.fnComplete(); 44 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/4_server-side/2440.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: empty_table 2 | /* 3 | * NOTE: There are some differences in this zero config script for server-side 4 | * processing compared to the other data sources. The main reason for this is the 5 | * difference in how the server-side processing does it's filtering. Also the 6 | * sorting state is always reset on each draw. 7 | */ 8 | oTest.fnStart( "Info element with display all" ); 9 | 10 | $(document).ready( function () { 11 | var oTable = $('#example').dataTable( { 12 | "bServerSide": true, 13 | "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php" 14 | } ); 15 | 16 | oTable.fnSettings()._iDisplayLength = -1; 17 | oTable.oApi._fnCalculateEnd( oTable.fnSettings() ); 18 | oTable.fnDraw(); 19 | 20 | 21 | /* Basic checks */ 22 | oTest.fnWaitTest( 23 | "Check length is correct when -1 length given", 24 | null, 25 | function () { 26 | return document.getElementById('example_info').innerHTML == 27 | "Showing 1 to 57 of 57 entries"; 28 | } 29 | ); 30 | 31 | oTest.fnComplete(); 32 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/4_server-side/2569.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: empty_table 2 | oTest.fnStart( "Destroy with hidden columns" ); 3 | 4 | $(document).ready( function () { 5 | var mTest; 6 | 7 | 8 | $('#example').dataTable( { 9 | "bServerSide": true, 10 | "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", 11 | "aoColumnDefs": [ 12 | { "bSearchable": false, "bVisible": false, "aTargets": [ 2 ] }, 13 | { "bVisible": false, "aTargets": [ 3 ] } 14 | ], 15 | "fnInitComplete": function () { 16 | this.fnDestroy(); 17 | } 18 | } ); 19 | 20 | oTest.fnWaitTest( 21 | "Check that the number of columns in table is correct", 22 | null, 23 | function () { return $('#example tbody tr:eq(0) td').length == 5; } 24 | ); 25 | 26 | 27 | oTest.fnTest( 28 | "And with scrolling", 29 | function () { 30 | $('#example').dataTable( { 31 | "bServerSide": true, 32 | "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", 33 | "sScrollY": 200, 34 | "aoColumnDefs": [ 35 | { "bSearchable": false, "bVisible": false, "aTargets": [ 2 ] }, 36 | { "bVisible": false, "aTargets": [ 3 ] } 37 | ], 38 | "fnInitComplete": function () { 39 | this.fnDestroy(); 40 | } 41 | } ); 42 | }, 43 | function () { return $('#example tbody tr:eq(0) td').length == 5; } 44 | ); 45 | 46 | oTest.fnComplete(); 47 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/4_server-side/2600.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: empty_table 2 | oTest.fnStart( "2600 - Display rewind when changing length" ); 3 | 4 | $(document).ready( function () { 5 | $('#example').dataTable( { 6 | "bServerSide": true, 7 | "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php" 8 | } ); 9 | 10 | oTest.fnWaitTest( 11 | "Info correct on init", 12 | null, 13 | function () { return $('#example_info').html() == "Showing 1 to 10 of 57 entries"; } 14 | ); 15 | 16 | oTest.fnWaitTest( 17 | "Page 2", 18 | function () { $('#example_next').click(); }, 19 | function () { return $('#example_info').html() == "Showing 11 to 20 of 57 entries"; } 20 | ); 21 | 22 | oTest.fnWaitTest( 23 | "Page 3", 24 | function () { $('#example_next').click(); }, 25 | function () { return $('#example_info').html() == "Showing 21 to 30 of 57 entries"; } 26 | ); 27 | 28 | oTest.fnWaitTest( 29 | "Page 4", 30 | function () { $('#example_next').click(); }, 31 | function () { return $('#example_info').html() == "Showing 31 to 40 of 57 entries"; } 32 | ); 33 | 34 | oTest.fnWaitTest( 35 | "Page 5", 36 | function () { $('#example_next').click(); }, 37 | function () { return $('#example_info').html() == "Showing 41 to 50 of 57 entries"; } 38 | ); 39 | 40 | oTest.fnWaitTest( 41 | "Rewind", 42 | function () { $('#example_length select').val('100'); $('#example_length select').change(); }, 43 | function () { return $('#example_info').html() == "Showing 1 to 57 of 57 entries"; } 44 | ); 45 | 46 | oTest.fnComplete(); 47 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/4_server-side/aoColumns.bSearchable.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: empty_table 2 | oTest.fnStart( "aoColumns.bSeachable" ); 3 | 4 | $(document).ready( function () { 5 | /* Check the default */ 6 | var oTable = $('#example').dataTable( { 7 | "bServerSide": true, 8 | "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php" 9 | } ); 10 | var oSettings = oTable.fnSettings(); 11 | 12 | oTest.fnWaitTest( 13 | "Columns are searchable by default", 14 | function () { oTable.fnFilter("Camino"); }, 15 | function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == "Camino 1.0"; } 16 | ); 17 | 18 | /* NOT ACTUALLY GOING TO TEST BSEARCHABLE HERE. Reason being is that it requires the server 19 | * side to alter it's processing, and this information about columns is not actually sent to 20 | * the server 21 | */ 22 | 23 | 24 | oTest.fnComplete(); 25 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/4_server-side/aoColumns.bUseRendered.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: empty_table 2 | oTest.fnStart( "aoColumns.bUseRendered" ); 3 | 4 | /* bUseRendered is used to alter sorting data, if false then the original data is used for 5 | * sorting rather than the rendered data 6 | */ 7 | 8 | $(document).ready( function () { 9 | /* Check the default */ 10 | var mTmp = 0; 11 | 12 | var oTable = $('#example').dataTable( { 13 | "bServerSide": true, 14 | "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", 15 | "aoColumns": [ 16 | null, 17 | { "fnRender": function (a) { 18 | if ( mTmp == 0 ) { 19 | mTmp++; 20 | return "aaa"; 21 | } else 22 | return a.aData[a.iDataColumn]; 23 | } }, 24 | null, 25 | null, 26 | null 27 | ] 28 | } ); 29 | var oSettings = oTable.fnSettings(); 30 | 31 | oTest.fnWaitTest( 32 | "Default for bUseRendered is true - rendered data is used for sorting", 33 | function () { $('#example thead th:eq(1)').click(); }, 34 | function () { return $('#example tbody tr:eq(0) td:eq(1)').html() == 'aaa'; } 35 | ); 36 | 37 | /* Limited to what we can do here as the sorting is done on the server side. So stop here. */ 38 | 39 | 40 | 41 | 42 | oTest.fnComplete(); 43 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/4_server-side/aoColumns.sName.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: empty_table 2 | oTest.fnStart( "aoColumns.sName" ); 3 | 4 | /* This has no effect at all in DOM methods - so we just check that it has applied the name */ 5 | 6 | $(document).ready( function () { 7 | /* Check the default */ 8 | var oTable = $('#example').dataTable( { 9 | "bServerSide": true, 10 | "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", 11 | "aoColumns": [ 12 | null, 13 | null, 14 | null, 15 | { "sName": 'unit test' }, 16 | null 17 | ] 18 | } ); 19 | var oSettings = oTable.fnSettings(); 20 | 21 | oTest.fnWaitTest( 22 | "Names are stored in the columns object", 23 | null, 24 | function () { return oSettings.aoColumns[3].sName =="unit test"; } 25 | ); 26 | 27 | 28 | oTest.fnComplete(); 29 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/4_server-side/bFilter.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: empty_table 2 | oTest.fnStart( "bFilter" ); 3 | 4 | $(document).ready( function () { 5 | /* Check the default */ 6 | $('#example').dataTable( { 7 | "bServerSide": true, 8 | "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php" 9 | } ); 10 | 11 | oTest.fnWaitTest( 12 | "Filtering div exists by default", 13 | null, 14 | function () { return document.getElementById('example_filter') != null; } 15 | ); 16 | 17 | /* Check can disable */ 18 | oTest.fnWaitTest( 19 | "Fltering can be disabled", 20 | function () { 21 | oSession.fnRestore(); 22 | $('#example').dataTable( { 23 | "bServerSide": true, 24 | "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", 25 | "bFilter": false 26 | } ); 27 | }, 28 | function () { return document.getElementById('example_filter') == null; } 29 | ); 30 | 31 | /* Enable makes no difference */ 32 | oTest.fnWaitTest( 33 | "Filtering enabled override", 34 | function () { 35 | oSession.fnRestore(); 36 | $('#example').dataTable( { 37 | "bServerSide": true, 38 | "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", 39 | "bFilter": true 40 | } ); 41 | }, 42 | function () { return document.getElementById('example_filter') != null; } 43 | ); 44 | 45 | 46 | oTest.fnComplete(); 47 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/4_server-side/bInfo.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: empty_table 2 | oTest.fnStart( "bInfo" ); 3 | 4 | $(document).ready( function () { 5 | /* Check the default */ 6 | $('#example').dataTable( { 7 | "bServerSide": true, 8 | "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php" 9 | } ); 10 | 11 | oTest.fnWaitTest( 12 | "Info div exists by default", 13 | null, 14 | function () { return document.getElementById('example_info') != null; } 15 | ); 16 | 17 | /* Check can disable */ 18 | oTest.fnWaitTest( 19 | "Info can be disabled", 20 | function () { 21 | oSession.fnRestore(); 22 | $('#example').dataTable( { 23 | "bServerSide": true, 24 | "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", 25 | "bInfo": false 26 | } ); 27 | }, 28 | function () { return document.getElementById('example_info') == null; } 29 | ); 30 | 31 | /* Enable makes no difference */ 32 | oTest.fnWaitTest( 33 | "Info enabled override", 34 | function () { 35 | oSession.fnRestore(); 36 | $('#example').dataTable( { 37 | "bServerSide": true, 38 | "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", 39 | "bInfo": true 40 | } ); 41 | }, 42 | function () { return document.getElementById('example_info') != null; } 43 | ); 44 | 45 | 46 | oTest.fnComplete(); 47 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/4_server-side/bPaginate.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: empty_table 2 | oTest.fnStart( "bPaginate" ); 3 | 4 | $(document).ready( function () { 5 | /* Check the default */ 6 | $('#example').dataTable( { 7 | "bServerSide": true, 8 | "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php" 9 | } ); 10 | 11 | oTest.fnWaitTest( 12 | "Pagiantion div exists by default", 13 | null, 14 | function () { return document.getElementById('example_paginate') != null; } 15 | ); 16 | 17 | oTest.fnWaitTest( 18 | "Information div takes paging into account", 19 | null, 20 | function () { return document.getElementById('example_info').innerHTML == 21 | "Showing 1 to 10 of 57 entries"; } 22 | ); 23 | 24 | /* Check can disable */ 25 | oTest.fnWaitTest( 26 | "Pagiantion can be disabled", 27 | function () { 28 | oSession.fnRestore(); 29 | $('#example').dataTable( { 30 | "bServerSide": true, 31 | "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", 32 | "bPaginate": false 33 | } ); 34 | }, 35 | function () { return document.getElementById('example_paginate') == null; } 36 | ); 37 | 38 | oTest.fnWaitTest( 39 | "Information div takes paging disabled into account", 40 | null, 41 | function () { return document.getElementById('example_info').innerHTML == 42 | "Showing 1 to 57 of 57 entries"; } 43 | ); 44 | 45 | /* Enable makes no difference */ 46 | oTest.fnWaitTest( 47 | "Pagiantion enabled override", 48 | function () { 49 | oSession.fnRestore(); 50 | $('#example').dataTable( { 51 | "bServerSide": true, 52 | "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", 53 | "bPaginate": true 54 | } ); 55 | }, 56 | function () { return document.getElementById('example_paginate') != null; } 57 | ); 58 | 59 | 60 | 61 | oTest.fnComplete(); 62 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/4_server-side/bServerSide.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: empty_table 2 | oTest.fnStart( "bServerSide" ); 3 | 4 | /* All the other scripts blast the ssp processing */ 5 | 6 | $(document).ready( function () { 7 | /* Check the default */ 8 | var oTable = $('#example').dataTable( { 9 | "bServerSide": true, 10 | "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php" 11 | } ); 12 | var oSettings = oTable.fnSettings(); 13 | 14 | oTest.fnWaitTest( 15 | "Server side can be set to on", 16 | null, 17 | function () { return oSettings.oFeatures.bServerSide == true; } 18 | ); 19 | 20 | oTest.fnComplete(); 21 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/4_server-side/fnServerData.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: empty_table 2 | oTest.fnStart( "fnServerData for SSP sourced data" ); 3 | 4 | $(document).ready( function () { 5 | var mPass; 6 | 7 | oTest.fnTest( 8 | "Argument length", 9 | function () { 10 | $('#example').dataTable( { 11 | "bServerSide": true, 12 | "sAjaxSource": "../data_sources/param.php", 13 | "fnServerData": function () { 14 | mPass = arguments.length; 15 | } 16 | } ); 17 | }, 18 | function () { return mPass == 4; } 19 | ); 20 | 21 | oTest.fnTest( 22 | "Url", 23 | function () { 24 | $('#example').dataTable( { 25 | "bDestroy": true, 26 | "bServerSide": true, 27 | "sAjaxSource": "../data_sources/param.php", 28 | "fnServerData": function (sUrl, aoData, fnCallback, oSettings) { 29 | mPass = sUrl == "../data_sources/param.php"; 30 | } 31 | } ); 32 | }, 33 | function () { return mPass; } 34 | ); 35 | 36 | oTest.fnTest( 37 | "Data array", 38 | function () { 39 | $('#example').dataTable( { 40 | "bDestroy": true, 41 | "bServerSide": true, 42 | "sAjaxSource": "../data_sources/param.php", 43 | "fnServerData": function (sUrl, aoData, fnCallback, oSettings) { 44 | mPass = aoData.length==35; 45 | } 46 | } ); 47 | }, 48 | function () { return mPass; } 49 | ); 50 | 51 | oTest.fnTest( 52 | "Callback function", 53 | function () { 54 | $('#example').dataTable( { 55 | "bDestroy": true, 56 | "bServerSide": true, 57 | "sAjaxSource": "../data_sources/param.php", 58 | "fnServerData": function (sUrl, aoData, fnCallback, oSettings) { 59 | mPass = typeof fnCallback == 'function'; 60 | } 61 | } ); 62 | }, 63 | function () { return mPass; } 64 | ); 65 | 66 | 67 | oTest.fnComplete(); 68 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/4_server-side/oLanguage.sProcessing.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: empty_table 2 | oTest.fnStart( "oLanguage.sProcessing" ); 3 | 4 | $(document).ready( function () { 5 | /* Check the default */ 6 | var oTable = $('#example').dataTable( { 7 | "bServerSide": true, 8 | "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", 9 | "bProcessing": true 10 | } ); 11 | var oSettings = oTable.fnSettings(); 12 | 13 | oTest.fnWaitTest( 14 | "Processing language is 'Processing...' by default", 15 | null, 16 | function () { return oSettings.oLanguage.sProcessing == "Processing..."; } 17 | ); 18 | 19 | oTest.fnTest( 20 | "Processing language default is in the DOM", 21 | null, 22 | function () { return document.getElementById('example_processing').innerHTML = "Processing..."; } 23 | ); 24 | 25 | 26 | oTest.fnWaitTest( 27 | "Processing language can be defined", 28 | function () { 29 | oSession.fnRestore(); 30 | oTable = $('#example').dataTable( { 31 | "bServerSide": true, 32 | "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", 33 | "bProcessing": true, 34 | "oLanguage": { 35 | "sProcessing": "unit test" 36 | } 37 | } ); 38 | oSettings = oTable.fnSettings(); 39 | }, 40 | function () { return oSettings.oLanguage.sProcessing == "unit test"; } 41 | ); 42 | 43 | oTest.fnTest( 44 | "Processing language definition is in the DOM", 45 | null, 46 | function () { return document.getElementById('example_processing').innerHTML = "unit test"; } 47 | ); 48 | 49 | 50 | oTest.fnComplete(); 51 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/4_server-side/oLanguage.sZeroRecords.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: empty_table 2 | oTest.fnStart( "oLanguage.sZeroRecords" ); 3 | 4 | $(document).ready( function () { 5 | /* Check the default */ 6 | var oTable = $('#example').dataTable( { 7 | "bServerSide": true, 8 | "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php" 9 | } ); 10 | var oSettings = oTable.fnSettings(); 11 | 12 | oTest.fnWaitTest( 13 | "Zero records language is 'No matching records found' by default", 14 | null, 15 | function () { return oSettings.oLanguage.sZeroRecords == "No matching records found"; } 16 | ); 17 | 18 | oTest.fnWaitTest( 19 | "Text is shown when empty table (after filtering)", 20 | function () { oTable.fnFilter('nothinghere'); }, 21 | function () { 22 | if ( $('#example tbody tr td').length == 0 ) 23 | return false; 24 | return $('#example tbody tr td')[0].innerHTML == "No matching records found"; 25 | } 26 | ); 27 | 28 | 29 | 30 | oTest.fnWaitTest( 31 | "Zero records language can be defined", 32 | function () { 33 | oSession.fnRestore(); 34 | oTable = $('#example').dataTable( { 35 | "bServerSide": true, 36 | "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php", 37 | "oLanguage": { 38 | "sZeroRecords": "unit test" 39 | } 40 | } ); 41 | oSettings = oTable.fnSettings(); 42 | }, 43 | function () { return oSettings.oLanguage.sZeroRecords == "unit test"; } 44 | ); 45 | 46 | oTest.fnWaitTest( 47 | "Text is shown when empty table (after filtering)", 48 | function () { oTable.fnFilter('nothinghere2'); }, 49 | function () { 50 | if ( $('#example tbody tr td').length == 0 ) 51 | return false; 52 | return $('#example tbody tr td')[0].innerHTML == "unit test" 53 | } 54 | ); 55 | 56 | 57 | oTest.fnComplete(); 58 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/4_server-side/sAjaxSource.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: empty_table 2 | oTest.fnStart( "sAjaxSource" ); 3 | 4 | /* Sanitfy check really - all the other tests blast this */ 5 | 6 | $(document).ready( function () { 7 | /* Check the default */ 8 | var oTable = $('#example').dataTable( { 9 | "bServerSide": true, 10 | "sAjaxSource": "../../../examples/server_side/scripts/server_processing.php" 11 | } ); 12 | var oSettings = oTable.fnSettings(); 13 | 14 | oTest.fnWaitTest( 15 | "Server side is off by default", 16 | null, 17 | function () { 18 | return oSettings.sAjaxSource == "../../../examples/server_side/scripts/server_processing.php"; 19 | } 20 | ); 21 | 22 | oTest.fnComplete(); 23 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/4_server-side/sServerMethod.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: empty_table 2 | oTest.fnStart( "sServerMethod" ); 3 | 4 | 5 | $(document).ready( function () { 6 | /* Check the default */ 7 | var oTable = $('#example').dataTable( { 8 | "bServerSide": true, 9 | "sAjaxSource": "../data_sources/method.php?method=get" 10 | } ); 11 | 12 | oTest.fnWaitTest( 13 | "Default method was GET", 14 | null, 15 | function () { 16 | // A valid request will place a single row in the table 17 | return $('tbody td').eq(0).html() === '1'; 18 | } 19 | ); 20 | 21 | oTest.fnWaitTest( 22 | "Can make a POST request", 23 | function () { 24 | oSession.fnRestore(); 25 | $('#example').dataTable( { 26 | "bServerSide": true, 27 | "sAjaxSource": "../data_sources/method.php?method=post", 28 | "sServerMethod": "POST" 29 | } ); 30 | }, 31 | function () { 32 | return $('tbody td').eq(0).html() === '1'; 33 | } 34 | ); 35 | 36 | oTest.fnWaitTest( 37 | "Can make a PUT request", 38 | function () { 39 | oSession.fnRestore(); 40 | $('#example').dataTable( { 41 | "bServerSide": true, 42 | "sAjaxSource": "../data_sources/method.php?method=put", 43 | "sServerMethod": "PUT" 44 | } ); 45 | }, 46 | function () { 47 | return $('tbody td').eq(0).html() === '1'; 48 | } 49 | ); 50 | 51 | oTest.fnComplete(); 52 | } ); 53 | -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/5_ajax_objects/aoColumns.sName.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: empty_table 2 | oTest.fnStart( "aoColumns.sName" ); 3 | 4 | /* This has no effect at all in DOM methods - so we just check that it has applied the name */ 5 | 6 | $(document).ready( function () { 7 | /* Check the default */ 8 | var oTable = $('#example').dataTable( { 9 | "sAjaxSource": "../../../examples/ajax/sources/objects.txt", 10 | "aoColumns": [ 11 | { "mData": "engine" }, 12 | { "mData": "browser" }, 13 | { "mData": "platform" }, 14 | { "mData": "version", "sName": 'unit test' }, 15 | { "mData": "grade" } 16 | ] 17 | } ); 18 | var oSettings = oTable.fnSettings(); 19 | 20 | oTest.fnWaitTest( 21 | "Names are stored in the columns object", 22 | null, 23 | function () { return oSettings.aoColumns[3].sName =="unit test"; } 24 | ); 25 | 26 | 27 | oTest.fnComplete(); 28 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/5_ajax_objects/bServerSide.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: empty_table 2 | oTest.fnStart( "bServerSide" ); 3 | 4 | /* Not interested in server-side processing here other than to check that it is off */ 5 | 6 | $(document).ready( function () { 7 | /* Check the default */ 8 | var oTable = $('#example').dataTable( { 9 | "sAjaxSource": "../../../examples/ajax/sources/objects.txt", 10 | "aoColumns": [ 11 | { "mData": "engine" }, 12 | { "mData": "browser" }, 13 | { "mData": "platform" }, 14 | { "mData": "version" }, 15 | { "mData": "grade" } 16 | ] 17 | } ); 18 | var oSettings = oTable.fnSettings(); 19 | 20 | oTest.fnWaitTest( 21 | "Server side is off by default", 22 | null, 23 | function () { return oSettings.oFeatures.bServerSide == false; } 24 | ); 25 | 26 | oTest.fnComplete(); 27 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/5_ajax_objects/sAjaxSource.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: empty_table 2 | oTest.fnStart( "sAjaxSource" ); 3 | 4 | /* Sanitfy check really - all the other tests blast this */ 5 | 6 | $(document).ready( function () { 7 | /* Check the default */ 8 | var oTable = $('#example').dataTable( { 9 | "sAjaxSource": "../../../examples/ajax/sources/objects.txt", 10 | "aoColumns": [ 11 | { "mData": "engine" }, 12 | { "mData": "browser" }, 13 | { "mData": "platform" }, 14 | { "mData": "version" }, 15 | { "mData": "grade" } 16 | ] 17 | } ); 18 | var oSettings = oTable.fnSettings(); 19 | 20 | oTest.fnWaitTest( 21 | "Server side is off by default", 22 | null, 23 | function () { 24 | return oSettings.sAjaxSource == "../../../examples/ajax/sources/objects.txt"; 25 | } 26 | ); 27 | 28 | oTest.fnComplete(); 29 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/aoColumns.sName.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: empty_table 2 | oTest.fnStart( "aoColumns.sName" ); 3 | 4 | /* This has no effect at all in DOM methods - so we just check that it has applied the name */ 5 | 6 | $(document).ready( function () { 7 | /* Check the default */ 8 | var oTable = $('#example').dataTable( { 9 | "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", 10 | "bDeferRender": true, 11 | "aoColumns": [ 12 | null, 13 | null, 14 | null, 15 | { "sName": 'unit test' }, 16 | null 17 | ] 18 | } ); 19 | var oSettings = oTable.fnSettings(); 20 | 21 | oTest.fnWaitTest( 22 | "Names are stored in the columns object", 23 | null, 24 | function () { return oSettings.aoColumns[3].sName =="unit test"; } 25 | ); 26 | 27 | 28 | oTest.fnComplete(); 29 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/bFilter.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: empty_table 2 | oTest.fnStart( "bFilter" ); 3 | 4 | $(document).ready( function () { 5 | /* Check the default */ 6 | $('#example').dataTable( { 7 | "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", 8 | "bDeferRender": true 9 | } ); 10 | 11 | oTest.fnWaitTest( 12 | "Filtering div exists by default", 13 | null, 14 | function () { return document.getElementById('example_filter') != null; } 15 | ); 16 | 17 | /* Check can disable */ 18 | oTest.fnWaitTest( 19 | "Fltering can be disabled", 20 | function () { 21 | oSession.fnRestore(); 22 | $('#example').dataTable( { 23 | "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", 24 | "bDeferRender": true, 25 | "bFilter": false 26 | } ); 27 | }, 28 | function () { return document.getElementById('example_filter') == null; } 29 | ); 30 | 31 | /* Enable makes no difference */ 32 | oTest.fnWaitTest( 33 | "Filtering enabled override", 34 | function () { 35 | oSession.fnRestore(); 36 | $('#example').dataTable( { 37 | "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", 38 | "bDeferRender": true, 39 | "bFilter": true 40 | } ); 41 | }, 42 | function () { return document.getElementById('example_filter') != null; } 43 | ); 44 | 45 | 46 | oTest.fnComplete(); 47 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/bInfo.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: empty_table 2 | oTest.fnStart( "bInfo" ); 3 | 4 | $(document).ready( function () { 5 | /* Check the default */ 6 | $('#example').dataTable( { 7 | "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", 8 | "bDeferRender": true 9 | } ); 10 | 11 | oTest.fnWaitTest( 12 | "Info div exists by default", 13 | null, 14 | function () { return document.getElementById('example_info') != null; } 15 | ); 16 | 17 | /* Check can disable */ 18 | oTest.fnWaitTest( 19 | "Info can be disabled", 20 | function () { 21 | oSession.fnRestore(); 22 | $('#example').dataTable( { 23 | "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", 24 | "bDeferRender": true, 25 | "bInfo": false 26 | } ); 27 | }, 28 | function () { return document.getElementById('example_info') == null; } 29 | ); 30 | 31 | /* Enable makes no difference */ 32 | oTest.fnWaitTest( 33 | "Info enabled override", 34 | function () { 35 | oSession.fnRestore(); 36 | $('#example').dataTable( { 37 | "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", 38 | "bDeferRender": true, 39 | "bInfo": true 40 | } ); 41 | }, 42 | function () { return document.getElementById('example_info') != null; } 43 | ); 44 | 45 | 46 | oTest.fnComplete(); 47 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/bPaginate.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: empty_table 2 | oTest.fnStart( "bPaginate" ); 3 | 4 | $(document).ready( function () { 5 | /* Check the default */ 6 | $('#example').dataTable( { 7 | "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", 8 | "bDeferRender": true 9 | } ); 10 | 11 | oTest.fnWaitTest( 12 | "Pagiantion div exists by default", 13 | null, 14 | function () { return document.getElementById('example_paginate') != null; } 15 | ); 16 | 17 | oTest.fnWaitTest( 18 | "Information div takes paging into account", 19 | null, 20 | function () { return document.getElementById('example_info').innerHTML == 21 | "Showing 1 to 10 of 57 entries"; } 22 | ); 23 | 24 | /* Check can disable */ 25 | oTest.fnWaitTest( 26 | "Pagiantion can be disabled", 27 | function () { 28 | oSession.fnRestore(); 29 | $('#example').dataTable( { 30 | "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", 31 | "bDeferRender": true, 32 | "bPaginate": false 33 | } ); 34 | }, 35 | function () { return document.getElementById('example_paginate') == null; } 36 | ); 37 | 38 | oTest.fnWaitTest( 39 | "Information div takes paging disabled into account", 40 | null, 41 | function () { return document.getElementById('example_info').innerHTML == 42 | "Showing 1 to 57 of 57 entries"; } 43 | ); 44 | 45 | /* Enable makes no difference */ 46 | oTest.fnWaitTest( 47 | "Pagiantion enabled override", 48 | function () { 49 | oSession.fnRestore(); 50 | $('#example').dataTable( { 51 | "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", 52 | "bDeferRender": true, 53 | "bPaginate": true 54 | } ); 55 | }, 56 | function () { return document.getElementById('example_paginate') != null; } 57 | ); 58 | 59 | 60 | 61 | oTest.fnComplete(); 62 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/bServerSide.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: empty_table 2 | oTest.fnStart( "bServerSide" ); 3 | 4 | /* Not interested in server-side processing here other than to check that it is off */ 5 | 6 | $(document).ready( function () { 7 | /* Check the default */ 8 | var oTable = $('#example').dataTable( { 9 | "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", 10 | "bDeferRender": true 11 | } ); 12 | var oSettings = oTable.fnSettings(); 13 | 14 | oTest.fnWaitTest( 15 | "Server side is off by default", 16 | null, 17 | function () { return oSettings.oFeatures.bServerSide == false; } 18 | ); 19 | 20 | oTest.fnComplete(); 21 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/fnServerData.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: empty_table 2 | oTest.fnStart( "fnServerData for Ajax sourced data" ); 3 | 4 | $(document).ready( function () { 5 | var mPass; 6 | 7 | oTest.fnTest( 8 | "Argument length", 9 | function () { 10 | $('#example').dataTable( { 11 | "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", 12 | "bDeferRender": true, 13 | "fnServerData": function () { 14 | mPass = arguments.length; 15 | } 16 | } ); 17 | }, 18 | function () { return mPass == 4; } 19 | ); 20 | 21 | oTest.fnTest( 22 | "Url", 23 | function () { 24 | $('#example').dataTable( { 25 | "bDestroy": true, 26 | "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", 27 | "bDeferRender": true, 28 | "fnServerData": function (sUrl, aoData, fnCallback, oSettings) { 29 | mPass = sUrl == "../../../examples/ajax/sources/arrays.txt"; 30 | } 31 | } ); 32 | }, 33 | function () { return mPass; } 34 | ); 35 | 36 | oTest.fnTest( 37 | "Data array", 38 | function () { 39 | $('#example').dataTable( { 40 | "bDestroy": true, 41 | "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", 42 | "bDeferRender": true, 43 | "fnServerData": function (sUrl, aoData, fnCallback, oSettings) { 44 | mPass = aoData.length==0; 45 | } 46 | } ); 47 | }, 48 | function () { return mPass; } 49 | ); 50 | 51 | oTest.fnTest( 52 | "Callback function", 53 | function () { 54 | $('#example').dataTable( { 55 | "bDestroy": true, 56 | "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", 57 | "bDeferRender": true, 58 | "fnServerData": function (sUrl, aoData, fnCallback, oSettings) { 59 | mPass = typeof fnCallback == 'function'; 60 | } 61 | } ); 62 | }, 63 | function () { return mPass; } 64 | ); 65 | 66 | 67 | oTest.fnComplete(); 68 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sProcessing.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: empty_table 2 | oTest.fnStart( "oLanguage.sProcessing" ); 3 | 4 | $(document).ready( function () { 5 | /* Check the default */ 6 | var oTable = $('#example').dataTable( { 7 | "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", 8 | "bDeferRender": true, 9 | "bProcessing": true 10 | } ); 11 | var oSettings = oTable.fnSettings(); 12 | 13 | oTest.fnWaitTest( 14 | "Processing language is 'Processing...' by default", 15 | null, 16 | function () { return oSettings.oLanguage.sProcessing == "Processing..."; } 17 | ); 18 | 19 | oTest.fnTest( 20 | "Processing language default is in the DOM", 21 | null, 22 | function () { return document.getElementById('example_processing').innerHTML = "Processing..."; } 23 | ); 24 | 25 | 26 | oTest.fnWaitTest( 27 | "Processing language can be defined", 28 | function () { 29 | oSession.fnRestore(); 30 | oTable = $('#example').dataTable( { 31 | "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", 32 | "bDeferRender": true, 33 | "bProcessing": true, 34 | "oLanguage": { 35 | "sProcessing": "unit test" 36 | } 37 | } ); 38 | oSettings = oTable.fnSettings(); 39 | }, 40 | function () { return oSettings.oLanguage.sProcessing == "unit test"; } 41 | ); 42 | 43 | oTest.fnTest( 44 | "Processing language definition is in the DOM", 45 | null, 46 | function () { return document.getElementById('example_processing').innerHTML = "unit test"; } 47 | ); 48 | 49 | 50 | oTest.fnComplete(); 51 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/oLanguage.sZeroRecords.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: empty_table 2 | oTest.fnStart( "oLanguage.sZeroRecords" ); 3 | 4 | $(document).ready( function () { 5 | /* Check the default */ 6 | var oTable = $('#example').dataTable( { 7 | "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", 8 | "bDeferRender": true 9 | } ); 10 | var oSettings = oTable.fnSettings(); 11 | 12 | oTest.fnWaitTest( 13 | "Zero records language is 'No matching records found' by default", 14 | null, 15 | function () { return oSettings.oLanguage.sZeroRecords == "No matching records found"; } 16 | ); 17 | 18 | oTest.fnWaitTest( 19 | "Text is shown when empty table (after filtering)", 20 | function () { oTable.fnFilter('nothinghere'); }, 21 | function () { return $('#example tbody tr td')[0].innerHTML == "No matching records found" } 22 | ); 23 | 24 | 25 | 26 | oTest.fnWaitTest( 27 | "Zero records language can be defined", 28 | function () { 29 | oSession.fnRestore(); 30 | oTable = $('#example').dataTable( { 31 | "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", 32 | "bDeferRender": true, 33 | "oLanguage": { 34 | "sZeroRecords": "unit test" 35 | } 36 | } ); 37 | oSettings = oTable.fnSettings(); 38 | }, 39 | function () { return oSettings.oLanguage.sZeroRecords == "unit test"; } 40 | ); 41 | 42 | oTest.fnWaitTest( 43 | "Text is shown when empty table (after filtering)", 44 | function () { oTable.fnFilter('nothinghere2'); }, 45 | function () { return $('#example tbody tr td')[0].innerHTML == "unit test" } 46 | ); 47 | 48 | 49 | oTest.fnComplete(); 50 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/media/unit_testing/tests_onhold/6_delayed_rendering/sAjaxSource.js: -------------------------------------------------------------------------------- 1 | // DATA_TEMPLATE: empty_table 2 | oTest.fnStart( "sAjaxSource" ); 3 | 4 | /* Sanitfy check really - all the other tests blast this */ 5 | 6 | $(document).ready( function () { 7 | /* Check the default */ 8 | var oTable = $('#example').dataTable( { 9 | "sAjaxSource": "../../../examples/ajax/sources/arrays.txt", 10 | "bDeferRender": true 11 | } ); 12 | var oSettings = oTable.fnSettings(); 13 | 14 | oTest.fnWaitTest( 15 | "Server side is off by default", 16 | null, 17 | function () { 18 | return oSettings.sAjaxSource == "../../../examples/ajax/sources/arrays.txt"; 19 | } 20 | ); 21 | 22 | oTest.fnComplete(); 23 | } ); -------------------------------------------------------------------------------- /app/bower_components/datatables/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "DataTables", 3 | "version": "1.10.2", 4 | "title": "DataTables", 5 | "author": { 6 | "name": "Allan Jardine", 7 | "url": "http://sprymedia.co.uk" 8 | }, 9 | "licenses": [ 10 | { 11 | "type": "MIT", 12 | "url": "http://datatables.net/license" 13 | } 14 | ], 15 | "dependencies": { 16 | "jquery": ">=1.7" 17 | }, 18 | "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.", 19 | "keywords": [ 20 | "DataTables", 21 | "DataTable", 22 | "table", 23 | "grid", 24 | "filter", 25 | "sort", 26 | "page", 27 | "internationalisable" 28 | ], 29 | "homepage": "http://datatables.net" 30 | } 31 | -------------------------------------------------------------------------------- /app/bower_components/jquery/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jquery", 3 | "version": "2.1.1", 4 | "main": "dist/jquery.js", 5 | "license": "MIT", 6 | "ignore": [ 7 | "**/.*", 8 | "build", 9 | "speed", 10 | "test", 11 | "*.md", 12 | "AUTHORS.txt", 13 | "Gruntfile.js", 14 | "package.json" 15 | ], 16 | "devDependencies": { 17 | "sizzle": "1.10.19", 18 | "requirejs": "2.1.10", 19 | "qunit": "1.14.0", 20 | "sinon": "1.8.1" 21 | }, 22 | "keywords": [ 23 | "jquery", 24 | "javascript", 25 | "library" 26 | ], 27 | "homepage": "https://github.com/jquery/jquery", 28 | "_release": "2.1.1", 29 | "_resolution": { 30 | "type": "version", 31 | "tag": "2.1.1", 32 | "commit": "4dec426aa2a6cbabb1b064319ba7c272d594a688" 33 | }, 34 | "_source": "git://github.com/jquery/jquery.git", 35 | "_target": ">=1.7.0", 36 | "_originalSource": "jquery" 37 | } -------------------------------------------------------------------------------- /app/bower_components/jquery/MIT-LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright 2014 jQuery Foundation and other contributors 2 | http://jquery.com/ 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining 5 | a copy of this software and associated documentation files (the 6 | "Software"), to deal in the Software without restriction, including 7 | without limitation the rights to use, copy, modify, merge, publish, 8 | distribute, sublicense, and/or sell copies of the Software, and to 9 | permit persons to whom the Software is furnished to do so, subject to 10 | the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be 13 | included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 17 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 18 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 19 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 20 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 21 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /app/bower_components/jquery/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jquery", 3 | "version": "2.1.1", 4 | "main": "dist/jquery.js", 5 | "license": "MIT", 6 | "ignore": [ 7 | "**/.*", 8 | "build", 9 | "speed", 10 | "test", 11 | "*.md", 12 | "AUTHORS.txt", 13 | "Gruntfile.js", 14 | "package.json" 15 | ], 16 | "devDependencies": { 17 | "sizzle": "1.10.19", 18 | "requirejs": "2.1.10", 19 | "qunit": "1.14.0", 20 | "sinon": "1.8.1" 21 | }, 22 | "keywords": [ 23 | "jquery", 24 | "javascript", 25 | "library" 26 | ] 27 | } 28 | -------------------------------------------------------------------------------- /app/bower_components/jquery/src/ajax/parseJSON.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../core" 3 | ], function( jQuery ) { 4 | 5 | // Support: Android 2.3 6 | // Workaround failure to string-cast null input 7 | jQuery.parseJSON = function( data ) { 8 | return JSON.parse( data + "" ); 9 | }; 10 | 11 | return jQuery.parseJSON; 12 | 13 | }); 14 | -------------------------------------------------------------------------------- /app/bower_components/jquery/src/ajax/parseXML.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../core" 3 | ], function( jQuery ) { 4 | 5 | // Cross-browser xml parsing 6 | jQuery.parseXML = function( data ) { 7 | var xml, tmp; 8 | if ( !data || typeof data !== "string" ) { 9 | return null; 10 | } 11 | 12 | // Support: IE9 13 | try { 14 | tmp = new DOMParser(); 15 | xml = tmp.parseFromString( data, "text/xml" ); 16 | } catch ( e ) { 17 | xml = undefined; 18 | } 19 | 20 | if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { 21 | jQuery.error( "Invalid XML: " + data ); 22 | } 23 | return xml; 24 | }; 25 | 26 | return jQuery.parseXML; 27 | 28 | }); 29 | -------------------------------------------------------------------------------- /app/bower_components/jquery/src/ajax/script.js: -------------------------------------------------------------------------------- 1 | define([ 2 | "../core", 3 | "../ajax" 4 | ], function( jQuery ) { 5 | 6 | // Install script dataType 7 | jQuery.ajaxSetup({ 8 | accepts: { 9 | script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript" 10 | }, 11 | contents: { 12 | script: /(?:java|ecma)script/ 13 | }, 14 | converters: { 15 | "text script": function( text ) { 16 | jQuery.globalEval( text ); 17 | return text; 18 | } 19 | } 20 | }); 21 | 22 | // Handle cache's special case and crossDomain 23 | jQuery.ajaxPrefilter( "script", function( s ) { 24 | if ( s.cache === undefined ) { 25 | s.cache = false; 26 | } 27 | if ( s.crossDomain ) { 28 | s.type = "GET"; 29 | } 30 | }); 31 | 32 | // Bind script tag hack transport 33 | jQuery.ajaxTransport( "script", function( s ) { 34 | // This transport only deals with cross domain requests 35 | if ( s.crossDomain ) { 36 | var script, callback; 37 | return { 38 | send: function( _, complete ) { 39 | script = jQuery(" 20 | 21 | -------------------------------------------------------------------------------- /app/js/components/FilterablePageableTable.jsx: -------------------------------------------------------------------------------- 1 | /** @jsx React.DOM */ 2 | var React = require('react/addons'); 3 | $ = jQuery = require('jquery'); 4 | var PageableTable = require('./PageableTable.jsx'); 5 | var FilterSearch = require('./FilterSearch.jsx'); 6 | bootstrap = require('../../bower_components/bootstrap/dist/js/bootstrap') 7 | var Backbone = require('backbone'); 8 | require('backbone.paginator'); 9 | var _ = require('lodash'); 10 | 11 | /* 12 | Options: 13 | 14 | initialCollection : a backbone pageable collection 15 | maximumPages : the number of pages to display before using an ellipsis, defaults to 10 16 | 17 | */ 18 | 19 | module.exports = React.createClass({displayName: 'exports', 20 | getInitialState: function() { 21 | return {initialCollection: this.props.initialCollection} 22 | }, 23 | 24 | /** 25 | * Search handler for collections 26 | * @param {collection} newCollection The updated collection upon search 27 | */ 28 | search: function(newCollection) { 29 | this.setState({collection: newCollection}) 30 | }, 31 | render: function () { 32 | var self = this; 33 | var maximumPages = this.props.maximumPages ? this.props.maximumPages : 10; 34 | return( 35 |
36 | 37 | 38 |
) 39 | } 40 | }); 41 | -------------------------------------------------------------------------------- /app/js/components/PageableTable.jsx: -------------------------------------------------------------------------------- 1 | /** @jsx React.DOM */ 2 | var React = require('react/addons'); 3 | $ = jQuery = require('jquery'); 4 | var Table = require('./Table.jsx'); 5 | var BackbonePagination = require('./BackbonePagination.jsx'); 6 | global.bootstrap = require('../../bower_components/bootstrap/dist/js/bootstrap') 7 | var Backbone = require('backbone'); 8 | require('backbone.paginator'); 9 | var _ = require('lodash'); 10 | 11 | /* 12 | Options: 13 | 14 | initialCollection : a backbone pageable collection 15 | maximumPages : the number of pages to display before using an ellipsis, defaults to 10 16 | 17 | */ 18 | 19 | module.exports = React.createClass({displayName: 'exports', 20 | getInitialState: function() { 21 | return {initialCollection: this.props.initialCollection} 22 | }, 23 | /** 24 | * Change page handler for collections 25 | * @param {collection} newCollection The updated collection upon changing pages 26 | */ 27 | changePage: function(newCollection) { 28 | this.setState({collection: newCollection}) 29 | }, 30 | render: function () { 31 | var self = this; 32 | var maximumPages = this.props.maximumPages ? this.props.maximumPages : 10; 33 | return( 34 |
35 | 36 | 37 | ) 38 | } 39 | }); 40 | -------------------------------------------------------------------------------- /app/preprocessor.js: -------------------------------------------------------------------------------- 1 | var ReactTools = require('react-tools'); 2 | var MAGIC = "/** @jsx"; 3 | module.exports = { 4 | process: function(src, file) { 5 | if (!/\.jsx$/.test(file) || src.slice(0, MAGIC.length) != MAGIC) return src; 6 | return ReactTools.transform(src); 7 | } 8 | }; 9 | -------------------------------------------------------------------------------- /app/server.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | React Test 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | -------------------------------------------------------------------------------- /bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "backbone-react-ui", 3 | "version": "0.1.0", 4 | "authors": [ 5 | "James Hrisho " 6 | ], 7 | "moduleType": [ 8 | "globals" 9 | ], 10 | "license": "MIT", 11 | "ignore": [ 12 | "**/.*", 13 | "node_modules", 14 | "bower_components", 15 | "test", 16 | "tests" 17 | ], 18 | "dependencies": { 19 | "bootstrap": "~3.2.0", 20 | "datatables": "~1.10.2" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | module.exports.BackbonePagination = require('./app/js/components/BackbonePagination.jsx') 2 | module.exports.Table = require('./app/js/components/Table.jsx') 3 | module.exports.PageableTable = require('./app/js/components/PageableTable.jsx') 4 | module.exports.FilterablePageableTable = require('./app/js/components/FilterablePageableTable.jsx') 5 | module.exports.FilterSearch = require('./app/js/components/FilterSearch.jsx') 6 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "backbone-react-ui", 3 | "version": "0.1.8", 4 | "description": "React components for use with Backbone, Bootstrap and Backbone.Paginator", 5 | "main": "index", 6 | "directories": { 7 | "test": "__tests__" 8 | }, 9 | "scripts": { 10 | "test": "./node_modules/jest-cli/bin/jest.js" 11 | }, 12 | "homepage": "https://github.com/securingsincity/backbone-react-ui", 13 | "dependencies": { 14 | "backbone": "^1.1.2", 15 | "backbone.paginator": "^2.0.2", 16 | "browserify": "^5.11.0", 17 | "express": "^4.8.7", 18 | "gulp-express": "0.0.9", 19 | "jquery": "^2.1.1", 20 | "lodash": "^2.4.1", 21 | "react": "^0.12.2", 22 | "request": "^2.36.0", 23 | "serve-index": "^1.2.0", 24 | "serve-static": "^1.5.3" 25 | }, 26 | "bugs": { 27 | "url": "https://github.com/securingsincity/backbone-react-ui/issues" 28 | }, 29 | "keywords": [ 30 | "backbone", 31 | "react-component", 32 | "react", 33 | "jest", 34 | "datatables" 35 | ], 36 | "devDependencies": { 37 | "gulp-connect-multi": "^1.0.8", 38 | "jest-cli": "*", 39 | "react-tools": "^0.12.2", 40 | "reactify": "^0.17.1", 41 | "vinyl-source-stream": "^0.1.1" 42 | }, 43 | "browserify": { 44 | "transform": [ 45 | "reactify" 46 | ] 47 | }, 48 | "jest": { 49 | "scriptPreprocessor": "/preprocessor.js", 50 | "rootDir": "app", 51 | "testPathIgnorePatterns": [ 52 | "/node_modules/", 53 | "/node_modules/" 54 | ], 55 | "collectCoverage": true, 56 | "unmockedModulePathPatterns": [ 57 | "/node_modules/react" 58 | ] 59 | }, 60 | "repository": { 61 | "type": "git", 62 | "url": "https://github.com/securingsincity/backbone-react-ui.git" 63 | }, 64 | "author": "James Hrisho", 65 | "license": "MIT" 66 | } 67 | --------------------------------------------------------------------------------