{"id":13447793,"url":"https://github.com/filamentgroup/tablesaw","last_synced_at":"2025-10-05T19:30:16.349Z","repository":{"id":10272567,"uuid":"12386312","full_name":"filamentgroup/tablesaw","owner":"filamentgroup","description":"A group of plugins for responsive tables.","archived":true,"fork":false,"pushed_at":"2022-10-20T20:31:49.000Z","size":4049,"stargazers_count":5454,"open_issues_count":0,"forks_count":429,"subscribers_count":171,"default_branch":"master","last_synced_at":"2025-09-29T02:23:09.212Z","etag":null,"topics":["datatables","html","npm-package","responsive","rwd","table"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/filamentgroup.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2013-08-26T18:19:32.000Z","updated_at":"2025-09-18T07:12:20.000Z","dependencies_parsed_at":"2022-08-29T08:51:00.345Z","dependency_job_id":null,"html_url":"https://github.com/filamentgroup/tablesaw","commit_stats":null,"previous_names":[],"tags_count":62,"template":false,"template_full_name":null,"purl":"pkg:github/filamentgroup/tablesaw","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/filamentgroup%2Ftablesaw","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/filamentgroup%2Ftablesaw/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/filamentgroup%2Ftablesaw/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/filamentgroup%2Ftablesaw/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/filamentgroup","download_url":"https://codeload.github.com/filamentgroup/tablesaw/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/filamentgroup%2Ftablesaw/sbom","scorecard":{"id":399331,"data":{"date":"2025-08-11","repo":{"name":"github.com/filamentgroup/tablesaw","commit":"01814b2e139224f7330fe098e87b664d472b77b2"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":0,"reason":"Found 0/22 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":0,"reason":"project is archived","details":["Warn: Repository is archived."],"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 10 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-18T19:45:33.474Z","repository_id":10272567,"created_at":"2025-08-18T19:45:33.474Z","updated_at":"2025-08-18T19:45:33.474Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278343084,"owners_count":25971399,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-04T02:00:05.491Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["datatables","html","npm-package","responsive","rwd","table"],"created_at":"2024-07-31T05:01:27.029Z","updated_at":"2025-10-05T19:30:15.092Z","avatar_url":"https://github.com/filamentgroup.png","language":"JavaScript","funding_links":[],"categories":["JavaScript","html"],"sub_categories":[],"readme":":warning: This project is archived and the repository is no longer maintained. \n\n# Tablesaw\n\n[![npm version](https://badge.fury.io/js/tablesaw.svg)](https://badge.fury.io/js/tablesaw)\n[![Build Status](https://img.shields.io/travis/filamentgroup/tablesaw/master.svg)](https://travis-ci.org/filamentgroup/tablesaw)\n[![Dependency Status](https://david-dm.org/filamentgroup/tablesaw.svg?theme=shields.io)](https://david-dm.org/filamentgroup/tablesaw)\n\n[![Filament Group](http://filamentgroup.com/images/fg-logo-positive-sm-crop.png) ](http://www.filamentgroup.com/)\n\nA set of plugins for responsive tables.\n\n* [Getting Started](#getting-started)\n* [Stack Mode](#stack-mode)\n* [Column Toggle Mode](#column-toggle-mode)\n* [Swipe Mode](#swipe-mode)\n* [Mini-Map](#mini-map)\n* [Mode Switcher](#mode-switcher)\n* [Sortable](#sortable)\n* [Kitchen Sink Example](http://filamentgroup.github.io/tablesaw/demo/kitchensink.html)\n* [Check All](#check-all)\n* [Internationalization i18n](#internationalization-i18n)\n* [Limitations](#limitations)\n* [Run Tests](http://filamentgroup.github.io/tablesaw/test-qunit/tablesaw.html)\n* [Browser Support](#browser-support)\n* [Bundler Compatibility](#bundler-compatibility)\n\n## Roadmap and Enhancement Queue\n\nThis repository is now using [lodash style issue management](https://twitter.com/samselikoff/status/991395669016436736) for enhancements. This means enhancement issues will be closed instead of leaving them open.\n\n* Look through [the enhancement backlog](https://github.com/filamentgroup/tablesaw/issues?q=label%3Aneeds-votes+is%3Aclosed+sort%3Areactions-%2B1-desc) and vote for your favorite features by adding a 👍 to the top comment.\n\n## Stack Mode\n\n* [Stack Demo](http://filamentgroup.github.io/tablesaw/demo/stack.html) and [Stack-Only Demo](http://filamentgroup.github.io/tablesaw/demo/stackonly.html)\n\nThe Stack Table stacks the table headers to a two column layout with headers on the left when the viewport width is less than `40em` (`640px`).\n\n![](docs/stack.gif)\n\n```html\n\u003ctable class=\"tablesaw tablesaw-stack\" data-tablesaw-mode=\"stack\"\u003e\n```\n\nIf you only want to use the Stack Table and don’t want all the extra features below (save yourself some bytes), Tablesaw provides a Stack-Only version.\n\n| Option | Description |\n| --- | --- |\n| Opt out of inline labels | To opt-out of inline label creation (the table header cell text that shows at small breakpoints) on a per-table basis, use `\u003ctable data-tablesaw-no-labels\u003e`; on a per-row basis, use `\u003ctr data-tablesaw-no-labels\u003e`; on a per-cell basis, use `\u003ctd data-tablesaw-no-labels\u003e` (added in v3.1.0) |\n| Hide headers for empty body cells | When the table cell is empty, use `\u003ctable data-tablesaw-hide-empty\u003e` to hide the header when stacked. |\n\n## Column Toggle Mode\n\n* [Column Toggle Demo](http://filamentgroup.github.io/tablesaw/demo/toggle.html)\n\nThe Column Toggle Table allows the user to select which columns they want to be visible.\n\n![](docs/columntoggle-minimap.gif)\n\n```html\n\u003ctable data-tablesaw-mode=\"columntoggle\"\u003e\n```\n\n| Option | Description |\n| --- | --- |\n| Add a Mini-Map | The little dots that appear next to the column toggle popup. Use the `data-tablesaw-minimap` attribute: `\u003ctable data-tablesaw-mode=\"columntoggle\" data-tablesaw-minimap\u003e` |\n\nThe user always has the option to select all columns. If the table gets too wide for the viewport, it can overflow and cause a page-level scrollbar. To combat this issue, we recommend wrapping your table in a `\u003cdiv class=\"tablesaw-overflow\"\u003e` element to restrict scrolling to the table-only. The [toggle demo](http://filamentgroup.github.io/tablesaw/demo/toggle.html) has one such example.\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cem\u003eAdvanced Option\u003c/em\u003e: Prioritize Columns\u003c/summary\u003e\n\nTable headers must have a `data-tablesaw-priority` attribute to be eligible to toggle. `data-tablesaw-priority` is a numeric value from 1 to 6, which determine default breakpoints at which a column will show. The breakpoint defaults are:\n\n```html\n\u003cth data-tablesaw-priority=\"persist\"\u003e\u003c!-- Not eligible for toggle, always shows --\u003e\u003c/th\u003e\n\u003cth data-tablesaw-priority=\"0\"\u003e\u003c!-- Hidden at all breakpoints by default, must be toggled back on manually --\u003e\u003c/th\u003e\n\u003cth data-tablesaw-priority=\"1\"\u003e\u003c!-- Shows at (min-width: 20em) (320px) --\u003e\u003c/th\u003e\n\u003cth data-tablesaw-priority=\"2\"\u003e\u003c!-- Shows at (min-width: 30em) (480px) --\u003e\u003c/th\u003e\n\u003cth data-tablesaw-priority=\"3\"\u003e\u003c!-- Shows at (min-width: 40em) (640px) --\u003e\u003c/th\u003e\n\u003cth data-tablesaw-priority=\"4\"\u003e\u003c!-- Shows at (min-width: 50em) (800px) --\u003e\u003c/th\u003e\n\u003cth data-tablesaw-priority=\"5\"\u003e\u003c!-- Shows at (min-width: 60em) (960px) --\u003e\u003c/th\u003e\n\u003cth data-tablesaw-priority=\"6\"\u003e\u003c!-- Shows at (min-width: 70em) (1120px) --\u003e\u003c/th\u003e\n```\n\nKeep in mind that the priorities are not exclusive—multiple columns can reuse the same priority value.\n\n\u003c/details\u003e\n\n## Swipe Mode\n\n* [Swipe Demo](http://filamentgroup.github.io/tablesaw/demo/swipe.html)\n\nAllows the user to use the swipe gesture (or use the left and right buttons) to navigate the columns.\n\n![](docs/swipe-minimap.gif)\n\n```html\n\u003ctable data-tablesaw-mode=\"swipe\"\u003e\n```\n\n\n| Options | Description |\n| --- | --- |\n| Persist a Column | Columns also respect the `data-tablesaw-priority=\"persist\"` attribute: `\u003cth data-tablesaw-priority=\"persist\"\u003e\u003c!-- Always shows --\u003e\u003c/th\u003e` |\n| Add a Mini-Map | The little dots that appear next to the column navigation buttons. Use the `data-tablesaw-minimap` attribute: `\u003ctable data-tablesaw-mode=\"swipe\" data-tablesaw-minimap\u003e` |\n| All columns visible class | Tablesaw also exposes a `tablesaw-all-cols-visible` class that is toggled on when all of the table columns are visible (and off when not). You can use this in CSS to hide the minimap or navigation buttons if needed. |\n| Disable swipe touch events | Use the `\u003ctable data-tablesaw-no-touch\u003e` attribute to opt-out of swiping left or right to navigate columns. Users will need to use the provided buttons instead. |\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cem\u003eAdvanced Option\u003c/em\u003e: Configure Swipe Thresholds\u003c/summary\u003e\n\nAdd a `TablesawConfig` object to your page in a `\u003cscript\u003e` element. It doesn’t matter if it’s declared before or after the Tablesaw JavaScript.\n\n```js\n\u003cscript\u003e\nTablesawConfig = {\n  swipeHorizontalThreshold: 15,\n  swipeVerticalThreshold: 20\n};\n\u003c/script\u003e\n```\n\n* [Configure Swipe Threshold Demo](http://filamentgroup.github.io/tablesaw/demo/swipe-config.html)\n\n\u003c/details\u003e\n\n## Mini Map\n\nUse `data-tablesaw-minimap` to add a series of small dots to show which columns are currently visible and which are hidden. Only available on `swipe` and `columntoggle` tables. Examples available above.\n\n## Mode Switcher\n\n* [Mode Switcher Demo](http://filamentgroup.github.io/tablesaw/demo/modeswitch.html)\n\n![](docs/mode-switch.gif)\n\n```html\n\u003ctable data-tablesaw-mode-switch\u003e\n\n\u003c!-- With a different default mode --\u003e\n\u003ctable data-tablesaw-mode-switch data-tablesaw-mode=\"swipe\"\u003e\n\n\u003c!-- Exclude a mode from the switcher --\u003e\n\u003ctable data-tablesaw-mode-switch data-tablesaw-mode-exclude=\"columntoggle\"\u003e\n```\n\n## Sortable\n\n* [Sortable Demo](http://filamentgroup.github.io/tablesaw/demo/sort.html)\n\nThe “sortable” option allows the user to sort the table data by clicking on the table headers. Since all the columns may not be visible on smaller breakpoints (or not there at all if using the “stack” table mode), relying solely on the column headers to choose the table sort isn’t practical. To address this, there is an optional `data-tablesaw-sortable-switch` attribute on the table that adds a select menu auto-populated with the names of each column in the table with options for choosing ascending or descending sort direction. Data options on table headers can be used to control which columns are sortable (`data-tablesaw-sortable-col`) and the default sort order (`data-tablesaw-sortable-default-col`).\n\n```html\n\u003ctable data-tablesaw-sortable\u003e\n    \u003cthead\u003e\n        \u003ctr\u003e\n            \u003c!-- Default column --\u003e\n            \u003cth data-tablesaw-sortable-col data-tablesaw-sortable-default-col\u003eRank\u003c/th\u003e\n            \u003cth data-tablesaw-sortable-col\u003eMovie Title\u003c/th\u003e\n            \u003cth data-tablesaw-sortable-col data-tablesaw-sortable-numeric\u003eYear\u003c/th\u003e\n            \u003cth data-tablesaw-sortable-col data-tablesaw-sortable-numeric\u003e\u003cabbr title=\"Rotten Tomato Rating\"\u003eRating\u003c/abbr\u003e\u003c/th\u003e\n            \u003c!-- Unsortable column --\u003e\n            \u003cth\u003eReviews\u003c/th\u003e\n        \u003c/tr\u003e\n    \u003c/thead\u003e\n    ...\n```\n\nUse `data-tablesaw-sortable-switch` to add a select form element to manually choose the sort order.\n\n```html\n\u003ctable data-tablesaw-sortable data-tablesaw-sortable-switch\u003e\n```\n\n![](docs/sortable.png)\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cem\u003eAdvanced Option\u003c/em\u003e: Custom Sort Functions\u003c/summary\u003e\n\nTablesaw provides two methods of sorting built-in: string and numeric. To use numeric sort, use the `data-tablesaw-sortable-numeric` class as shown in the above sorting markup example. Otherwise, tablesaw uses a case insensitive string sort.\n\nAll other types of sorting must use a Custom Sort function on the individual columns ([working example](http://filamentgroup.github.io/tablesaw/demo/sort-custom.html)). In the contrived example below, we want to sort full dates (e.g. `12/02/2014`) just on the year.\n\n```\n// Add a data function to the table header cell\n$( \"th#custom-sort\" ).data( \"tablesaw-sort\", function( ascending ) {\n    // return a function\n    return function( a, b ) {\n        // Ignore rows with data-tablesaw-ignorerow (leave them where they were)\n        if( a.ignored || b.ignored ) {\n            return 0;\n        }\n\n        // use a.cell and b.cell for cell values\n        var dateA = a.cell.split( \"/\" ),\n            dateB = b.cell.split( \"/\" ),\n            yearA = parseInt( dateA[ 2 ], 10 ),\n            yearB = parseInt( dateB[ 2 ], 10 );\n\n        if( ascending ) {\n            return yearA \u003e= yearB ? 1 : -1;\n        } else { // descending\n            return yearA \u003c yearB ? 1 : -1;\n        }\n    };\n});\n```\n\n\u003c/details\u003e\n\n## Kitchen ~~Table~~ Sink\n\n* [Kitchen Sink Demo](http://filamentgroup.github.io/tablesaw/demo/kitchensink.html)\n\nAll of the above options combined into a single table.\n\n## Check All\n\n_Added in 3.0.1._  Add the `data-tablesaw-checkall` to a checkbox in a `thead` cell to enable that checkbox to toggle the other checkboxes in the same column.\n\n* [Check All Demo](http://filamentgroup.github.io/tablesaw/demo/checkall.html)\n\n## Internationalization i18n\n\n_Added in 3.0.2._ Use the `TablesawConfig` global on your page to override internationalization strings. It doesn’t matter if it’s declared before or after the Tablesaw JavaScript library.\n\n```js\n\u003cscript\u003e\nTablesawConfig = {\n  i18n: {\n    modeStack: 'Stack',\n    modeSwipe: 'Swipe',\n    modeToggle: 'Toggle',\n    modeSwitchColumnsAbbreviated: 'Cols',\n    modeSwitchColumns: 'Columns',\n    columnToggleButton: 'Columns',\n    columnToggleError: 'No eligible columns.',\n    sort: 'Sort',\n    swipePreviousColumn: 'Previous column',\n    swipeNextColumn: 'Next column'\n  }\n};\n\u003c/script\u003e\n```\n\n## Getting Started\n\nAvailable through npm:\n\n```\nnpm install tablesaw\n```\n\n### The Full Tablesaw\n\n\u003cdetails open\u003e\n\u003csummary\u003eTablesaw (no dependencies)\u003c/summary\u003e\n\n```html\n\u003clink rel=\"stylesheet\" href=\"tablesaw.css\"\u003e\n\u003cscript src=\"tablesaw.js\"\u003e\u003c/script\u003e\n\u003cscript src=\"tablesaw-init.js\"\u003e\u003c/script\u003e\n```\n\n\u003c/details\u003e\n\n\u003cdetails open\u003e\n\u003csummary\u003eor Tablesaw (jQuery Plugin)\u003c/summary\u003e\n\n```html\n\u003clink rel=\"stylesheet\" href=\"tablesaw.css\"\u003e\n\u003c!-- load your own jQuery --\u003e\n\u003cscript src=\"jquery.js\"\u003e\u003c/script\u003e\n\u003cscript src=\"tablesaw.jquery.js\"\u003e\u003c/script\u003e\n\u003cscript src=\"tablesaw-init.js\"\u003e\u003c/script\u003e\n```\n\n\u003c/details\u003e\n\nDon’t forget to add your table markup! For a stack table, this is how it’d look: \n\n```html\n\u003ctable class=\"tablesaw tablesaw-stack\" data-tablesaw-mode=\"stack\"\u003e\n```\n\nThe demos above include full markup examples for all of the Tablesaw types.\n\n#### Manual initialization of Tablesaw Components\n\nIf you want to initialize your Tablesaw tables manually, don’t include `\u003cscript src=\"tablesaw-init.js\"\u003e` in your markup. Instead, you can use `Tablesaw.init()`. This will scan the tree for any Tablesaw tables and initialize them for you.\n\n*Tables must be visible for proper initialization.*\n\n```js\nTablesaw.init();\nTablesaw.init( myElement ); // OR pass an element to only init within a context\n```\n\n#### Dynamically Loading Tablesaw\n\nFor user interfaces that are dynamically built, Tablesaw can be loaded on an as-needed basis.  \nHere's how you might do this with jQuery:\n\n```js\n$('head').append('\u003cscript src=\"tablesaw.js\"\u003e\u003c/script\u003e');\n```\n\nFollowing that, tables may be initialized manually as they are created.\n\n### Using Stack-Only Tablesaw\n\n* [Stack-Only Demo](http://filamentgroup.github.io/tablesaw/demo/stackonly.html)\n\nAs shown above, we provide a Stack-mode-only package of Tablesaw. It’s a barebones version that doesn’t include any of the other features above.\n\n\u003cdetails open\u003e\n\u003csummary\u003eStack-only Tablesaw (no dependencies)\u003c/summary\u003e\n\n```html\n\u003clink rel=\"stylesheet\" href=\"tablesaw.css\"\u003e\n\u003cscript src=\"stackonly/tablesaw.stackonly.js\"\u003e\u003c/script\u003e\n\u003cscript src=\"tablesaw-init.js\"\u003e\u003c/script\u003e\n```\n\n\u003c/details\u003e\n\n\u003cdetails open\u003e\n\u003csummary\u003eor just Stack-only Tablesaw (jQuery Plugin)\u003c/summary\u003e\n\n```html\n\u003clink rel=\"stylesheet\" href=\"tablesaw.css\"\u003e\n\u003c!-- load your own jQuery --\u003e\n\u003cscript src=\"jquery.js\"\u003e\u003c/script\u003e\n\u003cscript src=\"stackonly/tablesaw.stackonly.jquery.js\"\u003e\u003c/script\u003e\n\u003cscript src=\"tablesaw-init.js\"\u003e\u003c/script\u003e\n```\n\n\u003c/details\u003e\n\nAnd then:\n\n```html\n\u003ctable class=\"tablesaw tablesaw-stack\" data-tablesaw-mode=\"stack\"\u003e\n```\n\n### Using Stack-Only Tablesaw SCSS Mixin\n\nTo easily customize the breakpoint at which the stack table switches, use the SCSS mixin.  First, include the `tablesaw.stackonly.scss` file instead of `tablesaw.stackonly.css` in your SASS. Then, use a parent selector on your table.\n\n```html\n\u003cdiv class=\"my-parent-selector\"\u003e\n    \u003ctable class=\"tablesaw\" data-tablesaw-mode=\"stack\"\u003e\n```\n\nInclude the mixin like so:\n\n```scss\n.my-parent-selector {\n  @include tablesaw-stack( 50em );\n}\n```\n\nThe argument to `tablesaw-stack` is the breakpoint at which the table will switch from columns to stacked.\n\n### Default Styles\n\n_Starting with Tablesaw 3.0, the “Bare”, or stripped down style version of Tablesaw has been made the default._\n\nSome of the more intrusive default styles have instead moved to opt-in classes you can add to the `\u003ctable\u003e` element:\n\n* `tablesaw-row-border`: Adds a bottom border to each table row.\n* `tablesaw-row-zebra`: Adds a light background color to every other table row.\n* `tablesaw-swipe-shadow`: Adds the light shadow to the right of persistant columns to make them stand out a little more.\n\n## Limitations\n\n* Simple `colspan` and `rowspan` are supported, in part thanks to a [lovely PR](https://github.com/filamentgroup/tablesaw/pull/225) from @jgibson.\n\n| | Stack | Column Toggle | Swipe | Sortable |\n| --- | --- | --- | --- | --- |\n| `rowspan` | _Not yet supported_ ([#247](https://github.com/filamentgroup/tablesaw/issues/247)) | Supported | Supported | _Not yet supported_ ([#268](https://github.com/filamentgroup/tablesaw/issues/268)) |\n| `colspan` | Supported | Supported | Supported | Supported |\n\n## [Tests](http://filamentgroup.github.io/tablesaw/test-qunit/tablesaw.html)\n\n## Browser Support\n\nAll major browsers (evergreens are not listed, but supported). Notably this project cuts the mustard for A-grade support with:\n\n* Internet Explorer 9+\n* Android Browser 2.3+\n* Blackberry OS 6+\n\nOther legacy browsers and Opera Mini receive unenhanced table markup.\n\n## Bundler Compatibility\n\n* Added in `v3.0.6`: [tested to work in Webpack](./demo/webpack/).\n\n## Building the Project Locally\n\nRun `npm install` to install dependencies and then `grunt` to build the project files into the `dist` folder.\n\n## Release Names\n\n* [3.1.0: Acacia](https://github.com/filamentgroup/tablesaw/releases/tag/v3.1.0)\n* [3.0.6: Wonderboom](https://github.com/filamentgroup/tablesaw/releases/tag/v3.0.6)\n* [3.0.3: Cucumbertree](https://github.com/filamentgroup/tablesaw/releases/tag/v3.0.3)\n* [3.0.2: Bald Cypress](https://github.com/filamentgroup/tablesaw/releases/tag/v3.0.2)\n* [3.0.1: Cypress](https://github.com/filamentgroup/tablesaw/releases/tag/v3.0.1)\n* [3.0.0: Rosewood](https://github.com/filamentgroup/tablesaw/releases/tag/v3.0.0)\n* [2.0.1: Mountain Hemlock](https://github.com/filamentgroup/tablesaw/releases/tag/v2.0.1)\n* [2.0.0: Hemlock](https://github.com/filamentgroup/tablesaw/releases/tag/v2.0.0)\n* [1.0.5: Hickory](https://github.com/filamentgroup/tablesaw/releases/tag/v1.0.5)\n* [1.0.4: Ironwood](https://github.com/filamentgroup/tablesaw/releases/tag/v1.0.4)\n* [1.0.3: Red Mahogany](https://github.com/filamentgroup/tablesaw/releases/tag/v1.0.3)\n\n_Previous versions didn’t have names._\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffilamentgroup%2Ftablesaw","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffilamentgroup%2Ftablesaw","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffilamentgroup%2Ftablesaw/lists"}