diff --git a/panel/compiler.py b/panel/compiler.py index c0830dcc8c..159d33f4cd 100644 --- a/panel/compiler.py +++ b/panel/compiler.py @@ -348,6 +348,16 @@ def bundle_icons(verbose=False, external=True, download_list=None): for icon in glob.glob(str(icon_dir / '*')): shutil.copyfile(icon, dest_dir / os.path.basename(icon)) +def patch_tabulator(): + # https://github.com/olifolkerd/tabulator/issues/4421 + path = BUNDLE_DIR / 'datatabulator' / 'tabulator-tables@6.2.1' / 'dist' / 'js' / 'tabulator.min.js' + text = path.read_text() + old = '"focus"!==this.options("editTriggerEvent")&&"click"!==this.options("editTriggerEvent")' + new = '"click"!==this.options("editTriggerEvent")' + assert text.count(old) == 1 + text = text.replace(old, new) + path.write_text(text) + def bundle_resources(verbose=False, external=True): download_list = [] bundle_resource_urls(verbose=verbose, external=external, download_list=download_list) @@ -363,3 +373,5 @@ def bundle_resources(verbose=False, external=True): for future in futures: if future: future.result() + + patch_tabulator() diff --git a/panel/dist/bundled/datatabulator/tabulator-tables@5.5.0/dist/css/tabulator_fast.min.css b/panel/dist/bundled/datatabulator/tabulator-tables@6.2.1/dist/css/tabulator_fast.min.css similarity index 100% rename from panel/dist/bundled/datatabulator/tabulator-tables@5.5.0/dist/css/tabulator_fast.min.css rename to panel/dist/bundled/datatabulator/tabulator-tables@6.2.1/dist/css/tabulator_fast.min.css diff --git a/panel/models/tabulator.py b/panel/models/tabulator.py index 845537e103..586c42895e 100644 --- a/panel/models/tabulator.py +++ b/panel/models/tabulator.py @@ -16,7 +16,7 @@ from ..util import classproperty from .layout import HTMLBox -TABULATOR_VERSION = "5.5.0" +TABULATOR_VERSION = "6.2.1" JS_SRC = f"{config.npm_cdn}/tabulator-tables@{TABULATOR_VERSION}/dist/js/tabulator.min.js" MOMENT_SRC = f"{config.npm_cdn}/luxon/build/global/luxon.min.js" diff --git a/panel/models/tabulator.ts b/panel/models/tabulator.ts index 26fdc76a77..df5f92743c 100644 --- a/panel/models/tabulator.ts +++ b/panel/models/tabulator.ts @@ -537,7 +537,7 @@ export class DataTabulatorView extends HTMLBoxView { this.tabulator.on("tableBuilt", () => this.tableBuilt()) // Rendering callbacks - this.tabulator.on("selectableCheck", (row: any) => { + this.tabulator.on("selectableRowsCheck", (row: any) => { const selectable = this.model.selectable_rows return (selectable == null) || selectable.includes(row._row.data._index) }) @@ -652,13 +652,13 @@ export class DataTabulatorView extends HTMLBoxView { getConfiguration(): any { // Only use selectable mode if explicitly requested otherwise manually handle selections - const selectable = this.model.select_mode === "toggle" ? true : NaN + const selectableRows = this.model.select_mode === "toggle" ? true : NaN const configuration = { ...this.model.configuration, index: "_index", nestedFieldSeparator: false, movableColumns: false, - selectable, + selectableRows, columns: this.getColumns(), initialSort: this.sorters, layout: this.getLayout(), diff --git a/panel/tests/io/test_resources.py b/panel/tests/io/test_resources.py index 2c17a47b9c..ae5c9491e8 100644 --- a/panel/tests/io/test_resources.py +++ b/panel/tests/io/test_resources.py @@ -12,6 +12,7 @@ resolve_stylesheet, set_resource_mode, ) from panel.io.state import set_curdoc +from panel.models.tabulator import TABULATOR_VERSION from panel.theme.native import Native from panel.widgets import Button @@ -84,11 +85,11 @@ def test_resources_model_server(document): with set_curdoc(document): extension('tabulator') assert resources.js_files[:2] == [ - 'static/extensions/panel/bundled/datatabulator/tabulator-tables@5.5.0/dist/js/tabulator.min.js', + f'static/extensions/panel/bundled/datatabulator/tabulator-tables@{TABULATOR_VERSION}/dist/js/tabulator.min.js', 'static/extensions/panel/bundled/datatabulator/luxon/build/global/luxon.min.js', ] assert resources.css_files == [ - f'static/extensions/panel/bundled/datatabulator/tabulator-tables@5.5.0/dist/css/tabulator_simple.min.css?v={JS_VERSION}' + f'static/extensions/panel/bundled/datatabulator/tabulator-tables@{TABULATOR_VERSION}/dist/css/tabulator_simple.min.css?v={JS_VERSION}' ] def test_resources_model_cdn(document): @@ -97,11 +98,11 @@ def test_resources_model_cdn(document): with set_curdoc(document): extension('tabulator') assert resources.js_files[:2] == [ - f'{CDN_DIST}bundled/datatabulator/tabulator-tables@5.5.0/dist/js/tabulator.min.js', + f'{CDN_DIST}bundled/datatabulator/tabulator-tables@{TABULATOR_VERSION}/dist/js/tabulator.min.js', f'{CDN_DIST}bundled/datatabulator/luxon/build/global/luxon.min.js', ] assert resources.css_files == [ - f'{CDN_DIST}bundled/datatabulator/tabulator-tables@5.5.0/dist/css/tabulator_simple.min.css?v={JS_VERSION}' + f'{CDN_DIST}bundled/datatabulator/tabulator-tables@{TABULATOR_VERSION}/dist/css/tabulator_simple.min.css?v={JS_VERSION}' ] def test_resources_model_inline(document): @@ -109,13 +110,14 @@ def test_resources_model_inline(document): with set_resource_mode('inline'): with set_curdoc(document): extension('tabulator') + tabulator_jsfile = f'bundled/datatabulator/tabulator-tables@{TABULATOR_VERSION}/dist/js/tabulator.min.js' + luxon_jsfile = 'bundled/datatabulator/luxon/build/global/luxon.min.js' + tabulator_cssfile = f'bundled/datatabulator/tabulator-tables@{TABULATOR_VERSION}/dist/css/tabulator_simple.min.css' assert resources.js_raw[-2:] == [ - (DIST_DIR / 'bundled/datatabulator/tabulator-tables@5.5.0/dist/js/tabulator.min.js').read_text(encoding='utf-8'), - (DIST_DIR / 'bundled/datatabulator/luxon/build/global/luxon.min.js').read_text(encoding='utf-8') - ] - assert resources.css_raw == [ - (DIST_DIR / 'bundled/datatabulator/tabulator-tables@5.5.0/dist/css/tabulator_simple.min.css').read_text(encoding='utf-8') + (DIST_DIR / tabulator_jsfile).read_text(encoding='utf-8'), + (DIST_DIR / luxon_jsfile).read_text(encoding='utf-8'), ] + assert resources.css_raw == [(DIST_DIR / tabulator_cssfile).read_text(encoding='utf-8')] def test_resources_reactive_html_server(document): resources = Resources(mode='server')