From 9fcc74c2c7d9f337ecb78bed2517f91bd8c95131 Mon Sep 17 00:00:00 2001 From: Justin Coyne Date: Wed, 11 Oct 2023 16:00:06 -0500 Subject: [PATCH] Rollup the javascript --- .gitignore | 1 + README.md | 2 + .../javascripts/blacklight_range_limit.js | 20 +- .../javascripts/blacklight_range_limit.old.js | 42 ++++ .../blacklight_range_limit.esm.js | 178 ++++++++++++++++ .../blacklight_range_limit.esm.js.map | 1 + .../blacklight_range_limit.js | 199 ++++++++++++++++++ .../blacklight_range_limit.js.map | 1 + .../blacklight_range_limit.umd.js | 188 +++++++++++++++++ .../blacklight_range_limit.umd.js.map | 1 + .../blacklight_range_limit/index.js | 12 ++ .../range_limit_distro_facets.js | 2 + .../range_limit_plotting.js | 0 .../range_limit_shared.js | 0 .../range_limit_slider.js | 6 + package-lock.json | 52 +++++ package.json | 3 + rollup.config.js | 37 ++++ 18 files changed, 727 insertions(+), 18 deletions(-) create mode 100644 app/assets/javascripts/blacklight_range_limit.old.js create mode 100644 app/assets/javascripts/blacklight_range_limit/blacklight_range_limit.esm.js create mode 100644 app/assets/javascripts/blacklight_range_limit/blacklight_range_limit.esm.js.map create mode 100644 app/assets/javascripts/blacklight_range_limit/blacklight_range_limit.js create mode 100644 app/assets/javascripts/blacklight_range_limit/blacklight_range_limit.js.map create mode 100644 app/assets/javascripts/blacklight_range_limit/blacklight_range_limit.umd.js create mode 100644 app/assets/javascripts/blacklight_range_limit/blacklight_range_limit.umd.js.map create mode 100644 app/javascript/blacklight_range_limit/index.js rename app/{assets/javascripts => javascript}/blacklight_range_limit/range_limit_distro_facets.js (98%) rename app/{assets/javascripts => javascript}/blacklight_range_limit/range_limit_plotting.js (100%) rename app/{assets/javascripts => javascript}/blacklight_range_limit/range_limit_shared.js (100%) rename app/{assets/javascripts => javascript}/blacklight_range_limit/range_limit_slider.js (96%) create mode 100644 package-lock.json create mode 100644 rollup.config.js diff --git a/.gitignore b/.gitignore index 47ce01e8..0fd8f5b9 100644 --- a/.gitignore +++ b/.gitignore @@ -27,3 +27,4 @@ Gemfile.lock /pkg /tmp /.bundle +/node_modules diff --git a/README.md b/README.md index a0ef58eb..425e8208 100644 --- a/README.md +++ b/README.md @@ -171,6 +171,8 @@ Once you are done iterating on your test you will need to stop the application s # Publishing Javascript +run `npm run prepare` to build the javascript + run `npm publish` to push the javascript package to https://npmjs.org/package/blacklight-range-limit # Possible future To Do diff --git a/app/assets/javascripts/blacklight_range_limit.js b/app/assets/javascripts/blacklight_range_limit.js index 0d5e8ebf..1400675a 100644 --- a/app/assets/javascripts/blacklight_range_limit.js +++ b/app/assets/javascripts/blacklight_range_limit.js @@ -19,24 +19,8 @@ //= require 'bootstrap-slider' // Ensure that range_limit_shared is loaded first -//= require 'blacklight_range_limit/range_limit_shared' -//= require 'blacklight_range_limit/range_limit_plotting' -//= require 'blacklight_range_limit/range_limit_slider' -//= require 'blacklight_range_limit/range_limit_distro_facets' - -BlacklightRangeLimit.initialize = function() { - // Support for Blacklight 7 and 8: - const modalSelector = Blacklight.modal?.modalSelector || Blacklight.Modal.modalSelector - - RangeLimitDistroFacet.initialize(modalSelector) - RangeLimitSlider.initialize(modalSelector) -} +//= require 'blacklight_range_limit/blacklight_range_limit.umd' // Blacklight will only be defined if you aren't using this in a module context if (Blacklight) - Blacklight.onLoad(() => BlacklightRangeLimit.initialize()) - -// In a module context you can do: -// import BlacklightRangeLimit from 'blacklight_range_limit' -// Blacklight.onLoad(() => BlacklightRangeLimit.initialize()) -export default BlacklightRangeLimit \ No newline at end of file + Blacklight.onLoad(() => BlacklightRangeLimit.initialize()) \ No newline at end of file diff --git a/app/assets/javascripts/blacklight_range_limit.old.js b/app/assets/javascripts/blacklight_range_limit.old.js new file mode 100644 index 00000000..0d5e8ebf --- /dev/null +++ b/app/assets/javascripts/blacklight_range_limit.old.js @@ -0,0 +1,42 @@ +// Master manifest file for engine, so local app can require +// this one file, but get all our files -- and local app +// require does not need to change if we change file list. +// +// Note JQuery is required to be loaded for flot and blacklight_range_limit +// JS to work, expect host app to load it. + + +//= require 'flot/jquery.canvaswrapper.js' +//= require 'flot/jquery.colorhelpers.js' +//= require 'flot/jquery.flot.js' +//= require 'flot/jquery.flot.browser.js' +//= require 'flot/jquery.flot.saturated.js' +//= require 'flot/jquery.flot.drawSeries.js' +//= require 'flot/jquery.event.drag.js' +//= require 'flot/jquery.flot.hover.js' +//= require 'flot/jquery.flot.uiConstants.js' +//= require 'flot/jquery.flot.selection.js' +//= require 'bootstrap-slider' + +// Ensure that range_limit_shared is loaded first +//= require 'blacklight_range_limit/range_limit_shared' +//= require 'blacklight_range_limit/range_limit_plotting' +//= require 'blacklight_range_limit/range_limit_slider' +//= require 'blacklight_range_limit/range_limit_distro_facets' + +BlacklightRangeLimit.initialize = function() { + // Support for Blacklight 7 and 8: + const modalSelector = Blacklight.modal?.modalSelector || Blacklight.Modal.modalSelector + + RangeLimitDistroFacet.initialize(modalSelector) + RangeLimitSlider.initialize(modalSelector) +} + +// Blacklight will only be defined if you aren't using this in a module context +if (Blacklight) + Blacklight.onLoad(() => BlacklightRangeLimit.initialize()) + +// In a module context you can do: +// import BlacklightRangeLimit from 'blacklight_range_limit' +// Blacklight.onLoad(() => BlacklightRangeLimit.initialize()) +export default BlacklightRangeLimit \ No newline at end of file diff --git a/app/assets/javascripts/blacklight_range_limit/blacklight_range_limit.esm.js b/app/assets/javascripts/blacklight_range_limit/blacklight_range_limit.esm.js new file mode 100644 index 00000000..6d11318b --- /dev/null +++ b/app/assets/javascripts/blacklight_range_limit/blacklight_range_limit.esm.js @@ -0,0 +1,178 @@ +import RangeLimitDistroFacet from 'range_limit_distro_facet'; + +// for Blacklight.onLoad: + +const RangeLimitSlider = { + initialize: function(modalSelector) { + $(".range_limit .profile .range.slider_js").each(function() { + BlacklightRangeLimit.buildSlider(this); + }); + + // For Blacklight < 8, when loaded in a modal + $(modalSelector).on('shown.bs.modal', function() { + $(this).find(".range_limit .profile .range.slider_js").each(function() { + BlacklightRangeLimit.buildSlider(this); + }); + }); + + // For Blacklight 8, use a mutation observer to detect when the HTML dialog is open + BlacklightRangeLimit.initSliderModalObserver(); + + // catch event for redrawing chart, to redraw slider to match width + $("body").on("plotDrawn.blacklight.rangeLimit", function(event) { + var area = $(event.target).closest(".limit_content.range_limit"); + var plot = area.find(".chart_js").data("plot"); + var slider_el = area.find(".slider"); + + if (plot && slider_el) { + slider_el.width(plot.width()); + slider_el.css("display", "block"); + } + }); + } +}; + +// returns two element array min/max as numbers. If there is a limit applied, +// it's boundaries are are limits. Otherwise, min/max in current result +// set as sniffed from HTML. Pass in a DOM element for a div.range +// Will return NaN as min or max in case of error or other weirdness. +BlacklightRangeLimit.min_max = function min_max(range_element) { + var current_limit = $(range_element).closest(".limit_content.range_limit").find(".current"); + let min, max; + min = max = BlacklightRangeLimit.parseNum(current_limit.find(".single").data('blrlSingle')); + if ( isNaN(min)) { + min = BlacklightRangeLimit.parseNum(current_limit.find(".from").first().data('blrlBegin')); + max = BlacklightRangeLimit.parseNum(current_limit.find(".to").first().data('blrlEnd')); + } + + if (isNaN(min) || isNaN(max)) { + //no current limit, take from results min max included in spans + min = BlacklightRangeLimit.parseNum($(range_element).find(".min").first().text()); + max = BlacklightRangeLimit.parseNum($(range_element).find(".max").first().text()); + } + return [min, max] +}; + + +// Check to see if a value is an Integer +// see: http://stackoverflow.com/questions/3885817/how-to-check-if-a-number-is-float-or-integer +BlacklightRangeLimit.isInt = function isInt(n) { + return n % 1 === 0; +}; + +BlacklightRangeLimit.buildSlider = function buildSlider(thisContext) { + var range_element = $(thisContext); + + var boundaries = BlacklightRangeLimit.min_max(thisContext); + var min = boundaries[0]; + var max = boundaries[1]; + + if (BlacklightRangeLimit.isInt(min) && BlacklightRangeLimit.isInt(max)) { + $(thisContext).contents().wrapAll('
'); + + var range_element = $(thisContext); + var form = $(range_element).closest(".range_limit").find("form.range_limit"); + var begin_el = form.find("input.range_begin"); + var end_el = form.find("input.range_end"); + + var placeholder_input = $('').appendTo(range_element); + + // make sure slider is loaded + if (placeholder_input.slider !== undefined) { + placeholder_input.slider({ + min: min, + max: max, + value: [min, max], + tooltip: "hide" + }); + + // try to make slider width/orientation match chart's + var container = range_element.closest(".range_limit"); + var plot_el = container.find(".chart_js"); + var plot = plot_el.data("plot"); + var slider_el = container.find(".slider"); + + if (plot_el) { + plot_el.attr('aria-hidden', 'true'); + } + + if (slider_el) { + slider_el.attr('aria-hidden', 'true'); + } + + if (plot && slider_el) { + slider_el.width(plot.width()); + slider_el.css("display", "block"); + } else if (slider_el) { + slider_el.css("width", "100%"); + } + } + + // Slider change should update text input values. + var parent = $(thisContext).parent(); + var form = $(parent).closest(".limit_content").find("form.range_limit"); + $(parent).closest(".limit_content").find(".profile .range").on("slide", function(event, ui) { + var values = $(event.target).data("slider").getValue(); + form.find("input.range_begin").val(values[0]); + form.find("input.range_end").val(values[1]); + }); + } + + begin_el.val(min); + end_el.val(max); + + begin_el.on('input', function() { + var val = BlacklightRangeLimit.parseNum(this.value); + if (isNaN(val) || val < min) { + //for weird data, set slider at min + val = min; + } + var values = placeholder_input.data("slider").getValue(); + values[0] = val; + placeholder_input.slider("setValue", values); + }); + + end_el.on('input', function() { + var val = BlacklightRangeLimit.parseNum(this.value); + if (isNaN(val) || val > max) { + //weird entry, set slider to max + val = max; + } + var values = placeholder_input.data("slider").getValue(); + values[1] = val; + placeholder_input.slider("setValue", values); + }); + + begin_el.change(function() { + var val1 = BlacklightRangeLimit.parseNum(begin_el.val()); + var val2 = BlacklightRangeLimit.parseNum(end_el.val()); + + if (val2 < val1) { + begin_el.val(val2); + end_el.val(val1); + } + }); + + end_el.change(function() { + var val1 = BlacklightRangeLimit.parseNum(begin_el.val()); + var val2 = BlacklightRangeLimit.parseNum(end_el.val()); + + if (val2 < val1) { + begin_el.val(val2); + end_el.val(val1); + } + }); + }; + +BlacklightRangeLimit.initialize = function() { + // Support for Blacklight 7 and 8: + const modalSelector = Blacklight.modal?.modalSelector || Blacklight.Modal.modalSelector; + + RangeLimitDistroFacet.initialize(modalSelector); + RangeLimitSlider.initialize(modalSelector); +}; + +const BlacklightRangeLimit$1 = BlacklightRangeLimit; + +export { BlacklightRangeLimit$1 as default }; +//# sourceMappingURL=blacklight_range_limit.esm.js.map diff --git a/app/assets/javascripts/blacklight_range_limit/blacklight_range_limit.esm.js.map b/app/assets/javascripts/blacklight_range_limit/blacklight_range_limit.esm.js.map new file mode 100644 index 00000000..02084e31 --- /dev/null +++ b/app/assets/javascripts/blacklight_range_limit/blacklight_range_limit.esm.js.map @@ -0,0 +1 @@ +{"version":3,"file":"blacklight_range_limit.esm.js","sources":["../../../javascript/blacklight_range_limit/range_limit_slider.js","../../../javascript/blacklight_range_limit/index.js"],"sourcesContent":["// for Blacklight.onLoad:\n\nconst RangeLimitSlider = {\n initialize: function(modalSelector) {\n $(\".range_limit .profile .range.slider_js\").each(function() {\n BlacklightRangeLimit.buildSlider(this);\n });\n\n // For Blacklight < 8, when loaded in a modal\n $(modalSelector).on('shown.bs.modal', function() {\n $(this).find(\".range_limit .profile .range.slider_js\").each(function() {\n BlacklightRangeLimit.buildSlider(this);\n });\n });\n\n // For Blacklight 8, use a mutation observer to detect when the HTML dialog is open\n BlacklightRangeLimit.initSliderModalObserver();\n\n // catch event for redrawing chart, to redraw slider to match width\n $(\"body\").on(\"plotDrawn.blacklight.rangeLimit\", function(event) {\n var area = $(event.target).closest(\".limit_content.range_limit\");\n var plot = area.find(\".chart_js\").data(\"plot\");\n var slider_el = area.find(\".slider\");\n\n if (plot && slider_el) {\n slider_el.width(plot.width());\n slider_el.css(\"display\", \"block\")\n }\n });\n }\n}\n\n// returns two element array min/max as numbers. If there is a limit applied,\n// it's boundaries are are limits. Otherwise, min/max in current result\n// set as sniffed from HTML. Pass in a DOM element for a div.range\n// Will return NaN as min or max in case of error or other weirdness.\nBlacklightRangeLimit.min_max = function min_max(range_element) {\n var current_limit = $(range_element).closest(\".limit_content.range_limit\").find(\".current\")\n let min, max\n min = max = BlacklightRangeLimit.parseNum(current_limit.find(\".single\").data('blrlSingle'))\n if ( isNaN(min)) {\n min = BlacklightRangeLimit.parseNum(current_limit.find(\".from\").first().data('blrlBegin'));\n max = BlacklightRangeLimit.parseNum(current_limit.find(\".to\").first().data('blrlEnd'));\n }\n\n if (isNaN(min) || isNaN(max)) {\n //no current limit, take from results min max included in spans\n min = BlacklightRangeLimit.parseNum($(range_element).find(\".min\").first().text());\n max = BlacklightRangeLimit.parseNum($(range_element).find(\".max\").first().text());\n }\n return [min, max]\n}\n\n\n// Check to see if a value is an Integer\n// see: http://stackoverflow.com/questions/3885817/how-to-check-if-a-number-is-float-or-integer\nBlacklightRangeLimit.isInt = function isInt(n) {\n return n % 1 === 0;\n}\n\nBlacklightRangeLimit.buildSlider = function buildSlider(thisContext) {\n var range_element = $(thisContext);\n\n var boundaries = BlacklightRangeLimit.min_max(thisContext);\n var min = boundaries[0];\n var max = boundaries[1];\n\n if (BlacklightRangeLimit.isInt(min) && BlacklightRangeLimit.isInt(max)) {\n $(thisContext).contents().wrapAll('
');\n\n var range_element = $(thisContext);\n var form = $(range_element).closest(\".range_limit\").find(\"form.range_limit\");\n var begin_el = form.find(\"input.range_begin\");\n var end_el = form.find(\"input.range_end\");\n\n var placeholder_input = $('').appendTo(range_element);\n\n // make sure slider is loaded\n if (placeholder_input.slider !== undefined) {\n placeholder_input.slider({\n min: min,\n max: max,\n value: [min, max],\n tooltip: \"hide\"\n });\n\n // try to make slider width/orientation match chart's\n var container = range_element.closest(\".range_limit\");\n var plot_el = container.find(\".chart_js\");\n var plot = plot_el.data(\"plot\");\n var slider_el = container.find(\".slider\");\n\n if (plot_el) {\n plot_el.attr('aria-hidden', 'true');\n }\n\n if (slider_el) {\n slider_el.attr('aria-hidden', 'true');\n }\n\n if (plot && slider_el) {\n slider_el.width(plot.width());\n slider_el.css(\"display\", \"block\")\n } else if (slider_el) {\n slider_el.css(\"width\", \"100%\");\n }\n }\n\n // Slider change should update text input values.\n var parent = $(thisContext).parent();\n var form = $(parent).closest(\".limit_content\").find(\"form.range_limit\");\n $(parent).closest(\".limit_content\").find(\".profile .range\").on(\"slide\", function(event, ui) {\n var values = $(event.target).data(\"slider\").getValue();\n form.find(\"input.range_begin\").val(values[0]);\n form.find(\"input.range_end\").val(values[1]);\n });\n }\n\n begin_el.val(min);\n end_el.val(max);\n\n begin_el.on('input', function() {\n var val = BlacklightRangeLimit.parseNum(this.value);\n if (isNaN(val) || val < min) {\n //for weird data, set slider at min\n val = min;\n }\n var values = placeholder_input.data(\"slider\").getValue();\n values[0] = val;\n placeholder_input.slider(\"setValue\", values);\n });\n\n end_el.on('input', function() {\n var val = BlacklightRangeLimit.parseNum(this.value);\n if (isNaN(val) || val > max) {\n //weird entry, set slider to max\n val = max;\n }\n var values = placeholder_input.data(\"slider\").getValue();\n values[1] = val;\n placeholder_input.slider(\"setValue\", values);\n });\n\n begin_el.change(function() {\n var val1 = BlacklightRangeLimit.parseNum(begin_el.val());\n var val2 = BlacklightRangeLimit.parseNum(end_el.val());\n\n if (val2 < val1) {\n begin_el.val(val2);\n end_el.val(val1);\n }\n });\n\n end_el.change(function() {\n var val1 = BlacklightRangeLimit.parseNum(begin_el.val());\n var val2 = BlacklightRangeLimit.parseNum(end_el.val());\n\n if (val2 < val1) {\n begin_el.val(val2);\n end_el.val(val1);\n }\n });\n }\n\nexport default RangeLimitSlider;","import RangeLimitDistroFacet from 'range_limit_distro_facet';\nimport RangeLimitSlider from 'range_limit_slider';\n\nBlacklightRangeLimit.initialize = function() {\n // Support for Blacklight 7 and 8:\n const modalSelector = Blacklight.modal?.modalSelector || Blacklight.Modal.modalSelector \n\n RangeLimitDistroFacet.initialize(modalSelector)\n RangeLimitSlider.initialize(modalSelector)\n}\n\nexport default BlacklightRangeLimit"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/app/assets/javascripts/blacklight_range_limit/blacklight_range_limit.js b/app/assets/javascripts/blacklight_range_limit/blacklight_range_limit.js new file mode 100644 index 00000000..53bb6a3b --- /dev/null +++ b/app/assets/javascripts/blacklight_range_limit/blacklight_range_limit.js @@ -0,0 +1,199 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('range_limit_distro_facet')) : + typeof define === 'function' && define.amd ? define(['range_limit_distro_facet'], factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.BlacklightRangeLimit = factory(global.RangeLimitDistroFacet)); +})(this, (function (RangeLimitDistroFacet) { 'use strict'; + + const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e }; + + const RangeLimitDistroFacet__default = /*#__PURE__*/_interopDefaultLegacy(RangeLimitDistroFacet); + + // for Blacklight.onLoad: + + const RangeLimitSlider = { + initialize: function(modalSelector) { + $(".range_limit .profile .range.slider_js").each(function() { + BlacklightRangeLimit.buildSlider(this); + }); + + $(modalSelector).on('shown.bs.modal', function() { + $(this).find(".range_limit .profile .range.slider_js").each(function() { + BlacklightRangeLimit.buildSlider(this); + }); + }); + + // catch event for redrawing chart, to redraw slider to match width + $("body").on("plotDrawn.blacklight.rangeLimit", function(event) { + var area = $(event.target).closest(".limit_content.range_limit"); + var plot = area.find(".chart_js").data("plot"); + var slider_el = area.find(".slider"); + + if (plot && slider_el) { + slider_el.width(plot.width()); + slider_el.css("display", "block"); + } + }); + } + }; + + // returns two element array min/max as numbers. If there is a limit applied, + // it's boundaries are are limits. Otherwise, min/max in current result + // set as sniffed from HTML. Pass in a DOM element for a div.range + // Will return NaN as min or max in case of error or other weirdness. + BlacklightRangeLimit.min_max = function min_max(range_element) { + var current_limit = $(range_element).closest(".limit_content.range_limit").find(".current"); + let min, max; + min = max = BlacklightRangeLimit.parseNum(current_limit.find(".single").data('blrlSingle')); + if ( isNaN(min)) { + min = BlacklightRangeLimit.parseNum(current_limit.find(".from").first().data('blrlBegin')); + max = BlacklightRangeLimit.parseNum(current_limit.find(".to").first().data('blrlEnd')); + } + + if (isNaN(min) || isNaN(max)) { + //no current limit, take from results min max included in spans + min = BlacklightRangeLimit.parseNum($(range_element).find(".min").first().text()); + max = BlacklightRangeLimit.parseNum($(range_element).find(".max").first().text()); + } + return [min, max] + }; + + + // Check to see if a value is an Integer + // see: http://stackoverflow.com/questions/3885817/how-to-check-if-a-number-is-float-or-integer + BlacklightRangeLimit.isInt = function isInt(n) { + return n % 1 === 0; + }; + + BlacklightRangeLimit.buildSlider = function buildSlider(thisContext) { + var range_element = $(thisContext); + + var boundaries = BlacklightRangeLimit.min_max(thisContext); + var min = boundaries[0]; + var max = boundaries[1]; + + if (BlacklightRangeLimit.isInt(min) && BlacklightRangeLimit.isInt(max)) { + $(thisContext).contents().wrapAll('
'); + + var range_element = $(thisContext); + var form = $(range_element).closest(".range_limit").find("form.range_limit"); + var begin_el = form.find("input.range_begin"); + var end_el = form.find("input.range_end"); + + var placeholder_input = $('').appendTo(range_element); + + // make sure slider is loaded + if (placeholder_input.slider !== undefined) { + placeholder_input.slider({ + min: min, + max: max, + value: [min, max], + tooltip: "hide" + }); + + // try to make slider width/orientation match chart's + var container = range_element.closest(".range_limit"); + var plot_el = container.find(".chart_js"); + var plot = plot_el.data("plot"); + var slider_el = container.find(".slider"); + + if (plot_el) { + plot_el.attr('aria-hidden', 'true'); + } + + if (slider_el) { + slider_el.attr('aria-hidden', 'true'); + } + + if (plot && slider_el) { + slider_el.width(plot.width()); + slider_el.css("display", "block"); + } else if (slider_el) { + slider_el.css("width", "100%"); + } + } + + // Slider change should update text input values. + var parent = $(thisContext).parent(); + var form = $(parent).closest(".limit_content").find("form.range_limit"); + $(parent).closest(".limit_content").find(".profile .range").on("slide", function(event, ui) { + var values = $(event.target).data("slider").getValue(); + form.find("input.range_begin").val(values[0]); + form.find("input.range_end").val(values[1]); + }); + } + + begin_el.val(min); + end_el.val(max); + + begin_el.on('input', function() { + var val = BlacklightRangeLimit.parseNum(this.value); + if (isNaN(val) || val < min) { + //for weird data, set slider at min + val = min; + } + var values = placeholder_input.data("slider").getValue(); + values[0] = val; + placeholder_input.slider("setValue", values); + }); + + end_el.on('input', function() { + var val = BlacklightRangeLimit.parseNum(this.value); + if (isNaN(val) || val > max) { + //weird entry, set slider to max + val = max; + } + var values = placeholder_input.data("slider").getValue(); + values[1] = val; + placeholder_input.slider("setValue", values); + }); + + begin_el.change(function() { + var val1 = BlacklightRangeLimit.parseNum(begin_el.val()); + var val2 = BlacklightRangeLimit.parseNum(end_el.val()); + + if (val2 < val1) { + begin_el.val(val2); + end_el.val(val1); + } + }); + + end_el.change(function() { + var val1 = BlacklightRangeLimit.parseNum(begin_el.val()); + var val2 = BlacklightRangeLimit.parseNum(end_el.val()); + + if (val2 < val1) { + begin_el.val(val2); + end_el.val(val1); + } + }); + }; + + // Master manifest file for engine, so local app can require + + // Ensure that range_limit_shared is loaded first + //= require 'blacklight_range_limit/range_limit_shared' + //= require 'blacklight_range_limit/range_limit_plotting' + //= require 'blacklight_range_limit/range_limit_slider' + //= require 'blacklight_range_limit/range_limit_distro_facets' + + BlacklightRangeLimit.initialize = function() { + // Support for Blacklight 7 and 8: + const modalSelector = Blacklight.modal?.modalSelector || Blacklight.Modal.modalSelector; + + RangeLimitDistroFacet__default.default.initialize(modalSelector); + RangeLimitSlider.initialize(modalSelector); + }; + + // Blacklight will only be defined if you aren't using this in a module context + if (Blacklight) + Blacklight.onLoad(() => BlacklightRangeLimit.initialize()); + + // In a module context you can do: + // import BlacklightRangeLimit from 'blacklight_range_limit' + // Blacklight.onLoad(() => BlacklightRangeLimit.initialize()) + const BlacklightRangeLimit$1 = BlacklightRangeLimit; + + return BlacklightRangeLimit$1; + +})); +//# sourceMappingURL=blacklight_range_limit.js.map diff --git a/app/assets/javascripts/blacklight_range_limit/blacklight_range_limit.js.map b/app/assets/javascripts/blacklight_range_limit/blacklight_range_limit.js.map new file mode 100644 index 00000000..e4ef3654 --- /dev/null +++ b/app/assets/javascripts/blacklight_range_limit/blacklight_range_limit.js.map @@ -0,0 +1 @@ +{"version":3,"file":"blacklight_range_limit.js","sources":["../../../javascript/blacklight_range_limit/range_limit_slider.js","../../../javascript/blacklight_range_limit/index.js"],"sourcesContent":["// for Blacklight.onLoad:\n\nconst RangeLimitSlider = {\n initialize: function(modalSelector) {\n $(\".range_limit .profile .range.slider_js\").each(function() {\n BlacklightRangeLimit.buildSlider(this);\n });\n\n $(modalSelector).on('shown.bs.modal', function() {\n $(this).find(\".range_limit .profile .range.slider_js\").each(function() {\n BlacklightRangeLimit.buildSlider(this);\n });\n });\n\n // catch event for redrawing chart, to redraw slider to match width\n $(\"body\").on(\"plotDrawn.blacklight.rangeLimit\", function(event) {\n var area = $(event.target).closest(\".limit_content.range_limit\");\n var plot = area.find(\".chart_js\").data(\"plot\");\n var slider_el = area.find(\".slider\");\n\n if (plot && slider_el) {\n slider_el.width(plot.width());\n slider_el.css(\"display\", \"block\")\n }\n });\n }\n}\n\n// returns two element array min/max as numbers. If there is a limit applied,\n// it's boundaries are are limits. Otherwise, min/max in current result\n// set as sniffed from HTML. Pass in a DOM element for a div.range\n// Will return NaN as min or max in case of error or other weirdness.\nBlacklightRangeLimit.min_max = function min_max(range_element) {\n var current_limit = $(range_element).closest(\".limit_content.range_limit\").find(\".current\")\n let min, max\n min = max = BlacklightRangeLimit.parseNum(current_limit.find(\".single\").data('blrlSingle'))\n if ( isNaN(min)) {\n min = BlacklightRangeLimit.parseNum(current_limit.find(\".from\").first().data('blrlBegin'));\n max = BlacklightRangeLimit.parseNum(current_limit.find(\".to\").first().data('blrlEnd'));\n }\n\n if (isNaN(min) || isNaN(max)) {\n //no current limit, take from results min max included in spans\n min = BlacklightRangeLimit.parseNum($(range_element).find(\".min\").first().text());\n max = BlacklightRangeLimit.parseNum($(range_element).find(\".max\").first().text());\n }\n return [min, max]\n}\n\n\n// Check to see if a value is an Integer\n// see: http://stackoverflow.com/questions/3885817/how-to-check-if-a-number-is-float-or-integer\nBlacklightRangeLimit.isInt = function isInt(n) {\n return n % 1 === 0;\n}\n\nBlacklightRangeLimit.buildSlider = function buildSlider(thisContext) {\n var range_element = $(thisContext);\n\n var boundaries = BlacklightRangeLimit.min_max(thisContext);\n var min = boundaries[0];\n var max = boundaries[1];\n\n if (BlacklightRangeLimit.isInt(min) && BlacklightRangeLimit.isInt(max)) {\n $(thisContext).contents().wrapAll('
');\n\n var range_element = $(thisContext);\n var form = $(range_element).closest(\".range_limit\").find(\"form.range_limit\");\n var begin_el = form.find(\"input.range_begin\");\n var end_el = form.find(\"input.range_end\");\n\n var placeholder_input = $('').appendTo(range_element);\n\n // make sure slider is loaded\n if (placeholder_input.slider !== undefined) {\n placeholder_input.slider({\n min: min,\n max: max,\n value: [min, max],\n tooltip: \"hide\"\n });\n\n // try to make slider width/orientation match chart's\n var container = range_element.closest(\".range_limit\");\n var plot_el = container.find(\".chart_js\");\n var plot = plot_el.data(\"plot\");\n var slider_el = container.find(\".slider\");\n\n if (plot_el) {\n plot_el.attr('aria-hidden', 'true');\n }\n\n if (slider_el) {\n slider_el.attr('aria-hidden', 'true');\n }\n\n if (plot && slider_el) {\n slider_el.width(plot.width());\n slider_el.css(\"display\", \"block\")\n } else if (slider_el) {\n slider_el.css(\"width\", \"100%\");\n }\n }\n\n // Slider change should update text input values.\n var parent = $(thisContext).parent();\n var form = $(parent).closest(\".limit_content\").find(\"form.range_limit\");\n $(parent).closest(\".limit_content\").find(\".profile .range\").on(\"slide\", function(event, ui) {\n var values = $(event.target).data(\"slider\").getValue();\n form.find(\"input.range_begin\").val(values[0]);\n form.find(\"input.range_end\").val(values[1]);\n });\n }\n\n begin_el.val(min);\n end_el.val(max);\n\n begin_el.on('input', function() {\n var val = BlacklightRangeLimit.parseNum(this.value);\n if (isNaN(val) || val < min) {\n //for weird data, set slider at min\n val = min;\n }\n var values = placeholder_input.data(\"slider\").getValue();\n values[0] = val;\n placeholder_input.slider(\"setValue\", values);\n });\n\n end_el.on('input', function() {\n var val = BlacklightRangeLimit.parseNum(this.value);\n if (isNaN(val) || val > max) {\n //weird entry, set slider to max\n val = max;\n }\n var values = placeholder_input.data(\"slider\").getValue();\n values[1] = val;\n placeholder_input.slider(\"setValue\", values);\n });\n\n begin_el.change(function() {\n var val1 = BlacklightRangeLimit.parseNum(begin_el.val());\n var val2 = BlacklightRangeLimit.parseNum(end_el.val());\n\n if (val2 < val1) {\n begin_el.val(val2);\n end_el.val(val1);\n }\n });\n\n end_el.change(function() {\n var val1 = BlacklightRangeLimit.parseNum(begin_el.val());\n var val2 = BlacklightRangeLimit.parseNum(end_el.val());\n\n if (val2 < val1) {\n begin_el.val(val2);\n end_el.val(val1);\n }\n });\n }\n\nexport default RangeLimitSlider;","// Master manifest file for engine, so local app can require\n// this one file, but get all our files -- and local app\n// require does not need to change if we change file list.\n//\n// Note JQuery is required to be loaded for flot and blacklight_range_limit\n// JS to work, expect host app to load it.\n\n\n//= require 'flot/jquery.canvaswrapper.js'\n//= require 'flot/jquery.colorhelpers.js'\n//= require 'flot/jquery.flot.js'\n//= require 'flot/jquery.flot.browser.js'\n//= require 'flot/jquery.flot.saturated.js'\n//= require 'flot/jquery.flot.drawSeries.js'\n//= require 'flot/jquery.event.drag.js'\n//= require 'flot/jquery.flot.hover.js'\n//= require 'flot/jquery.flot.uiConstants.js'\n//= require 'flot/jquery.flot.selection.js'\n//= require 'bootstrap-slider'\n\nimport RangeLimitDistroFacet from 'range_limit_distro_facet';\nimport RangeLimitSlider from 'range_limit_slider';\n\n// Ensure that range_limit_shared is loaded first\n//= require 'blacklight_range_limit/range_limit_shared'\n//= require 'blacklight_range_limit/range_limit_plotting'\n//= require 'blacklight_range_limit/range_limit_slider'\n//= require 'blacklight_range_limit/range_limit_distro_facets'\n\nBlacklightRangeLimit.initialize = function() {\n // Support for Blacklight 7 and 8:\n const modalSelector = Blacklight.modal?.modalSelector || Blacklight.Modal.modalSelector \n\n RangeLimitDistroFacet.initialize(modalSelector)\n RangeLimitSlider.initialize(modalSelector)\n}\n\n// Blacklight will only be defined if you aren't using this in a module context\nif (Blacklight)\n Blacklight.onLoad(() => BlacklightRangeLimit.initialize())\n\n// In a module context you can do:\n// import BlacklightRangeLimit from 'blacklight_range_limit'\n// Blacklight.onLoad(() => BlacklightRangeLimit.initialize())\nexport default BlacklightRangeLimit"],"names":["RangeLimitDistroFacet"],"mappings":"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"} \ No newline at end of file diff --git a/app/assets/javascripts/blacklight_range_limit/blacklight_range_limit.umd.js b/app/assets/javascripts/blacklight_range_limit/blacklight_range_limit.umd.js new file mode 100644 index 00000000..157b74d3 --- /dev/null +++ b/app/assets/javascripts/blacklight_range_limit/blacklight_range_limit.umd.js @@ -0,0 +1,188 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('range_limit_distro_facet')) : + typeof define === 'function' && define.amd ? define(['range_limit_distro_facet'], factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.BlacklightRangeLimit = factory(global.RangeLimitDistroFacet)); +})(this, (function (RangeLimitDistroFacet) { 'use strict'; + + const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e }; + + const RangeLimitDistroFacet__default = /*#__PURE__*/_interopDefaultLegacy(RangeLimitDistroFacet); + + // for Blacklight.onLoad: + + const RangeLimitSlider = { + initialize: function(modalSelector) { + $(".range_limit .profile .range.slider_js").each(function() { + BlacklightRangeLimit.buildSlider(this); + }); + + // For Blacklight < 8, when loaded in a modal + $(modalSelector).on('shown.bs.modal', function() { + $(this).find(".range_limit .profile .range.slider_js").each(function() { + BlacklightRangeLimit.buildSlider(this); + }); + }); + + // For Blacklight 8, use a mutation observer to detect when the HTML dialog is open + BlacklightRangeLimit.initSliderModalObserver(); + + // catch event for redrawing chart, to redraw slider to match width + $("body").on("plotDrawn.blacklight.rangeLimit", function(event) { + var area = $(event.target).closest(".limit_content.range_limit"); + var plot = area.find(".chart_js").data("plot"); + var slider_el = area.find(".slider"); + + if (plot && slider_el) { + slider_el.width(plot.width()); + slider_el.css("display", "block"); + } + }); + } + }; + + // returns two element array min/max as numbers. If there is a limit applied, + // it's boundaries are are limits. Otherwise, min/max in current result + // set as sniffed from HTML. Pass in a DOM element for a div.range + // Will return NaN as min or max in case of error or other weirdness. + BlacklightRangeLimit.min_max = function min_max(range_element) { + var current_limit = $(range_element).closest(".limit_content.range_limit").find(".current"); + let min, max; + min = max = BlacklightRangeLimit.parseNum(current_limit.find(".single").data('blrlSingle')); + if ( isNaN(min)) { + min = BlacklightRangeLimit.parseNum(current_limit.find(".from").first().data('blrlBegin')); + max = BlacklightRangeLimit.parseNum(current_limit.find(".to").first().data('blrlEnd')); + } + + if (isNaN(min) || isNaN(max)) { + //no current limit, take from results min max included in spans + min = BlacklightRangeLimit.parseNum($(range_element).find(".min").first().text()); + max = BlacklightRangeLimit.parseNum($(range_element).find(".max").first().text()); + } + return [min, max] + }; + + + // Check to see if a value is an Integer + // see: http://stackoverflow.com/questions/3885817/how-to-check-if-a-number-is-float-or-integer + BlacklightRangeLimit.isInt = function isInt(n) { + return n % 1 === 0; + }; + + BlacklightRangeLimit.buildSlider = function buildSlider(thisContext) { + var range_element = $(thisContext); + + var boundaries = BlacklightRangeLimit.min_max(thisContext); + var min = boundaries[0]; + var max = boundaries[1]; + + if (BlacklightRangeLimit.isInt(min) && BlacklightRangeLimit.isInt(max)) { + $(thisContext).contents().wrapAll('
'); + + var range_element = $(thisContext); + var form = $(range_element).closest(".range_limit").find("form.range_limit"); + var begin_el = form.find("input.range_begin"); + var end_el = form.find("input.range_end"); + + var placeholder_input = $('').appendTo(range_element); + + // make sure slider is loaded + if (placeholder_input.slider !== undefined) { + placeholder_input.slider({ + min: min, + max: max, + value: [min, max], + tooltip: "hide" + }); + + // try to make slider width/orientation match chart's + var container = range_element.closest(".range_limit"); + var plot_el = container.find(".chart_js"); + var plot = plot_el.data("plot"); + var slider_el = container.find(".slider"); + + if (plot_el) { + plot_el.attr('aria-hidden', 'true'); + } + + if (slider_el) { + slider_el.attr('aria-hidden', 'true'); + } + + if (plot && slider_el) { + slider_el.width(plot.width()); + slider_el.css("display", "block"); + } else if (slider_el) { + slider_el.css("width", "100%"); + } + } + + // Slider change should update text input values. + var parent = $(thisContext).parent(); + var form = $(parent).closest(".limit_content").find("form.range_limit"); + $(parent).closest(".limit_content").find(".profile .range").on("slide", function(event, ui) { + var values = $(event.target).data("slider").getValue(); + form.find("input.range_begin").val(values[0]); + form.find("input.range_end").val(values[1]); + }); + } + + begin_el.val(min); + end_el.val(max); + + begin_el.on('input', function() { + var val = BlacklightRangeLimit.parseNum(this.value); + if (isNaN(val) || val < min) { + //for weird data, set slider at min + val = min; + } + var values = placeholder_input.data("slider").getValue(); + values[0] = val; + placeholder_input.slider("setValue", values); + }); + + end_el.on('input', function() { + var val = BlacklightRangeLimit.parseNum(this.value); + if (isNaN(val) || val > max) { + //weird entry, set slider to max + val = max; + } + var values = placeholder_input.data("slider").getValue(); + values[1] = val; + placeholder_input.slider("setValue", values); + }); + + begin_el.change(function() { + var val1 = BlacklightRangeLimit.parseNum(begin_el.val()); + var val2 = BlacklightRangeLimit.parseNum(end_el.val()); + + if (val2 < val1) { + begin_el.val(val2); + end_el.val(val1); + } + }); + + end_el.change(function() { + var val1 = BlacklightRangeLimit.parseNum(begin_el.val()); + var val2 = BlacklightRangeLimit.parseNum(end_el.val()); + + if (val2 < val1) { + begin_el.val(val2); + end_el.val(val1); + } + }); + }; + + BlacklightRangeLimit.initialize = function() { + // Support for Blacklight 7 and 8: + const modalSelector = Blacklight.modal?.modalSelector || Blacklight.Modal.modalSelector; + + RangeLimitDistroFacet__default.default.initialize(modalSelector); + RangeLimitSlider.initialize(modalSelector); + }; + + const BlacklightRangeLimit$1 = BlacklightRangeLimit; + + return BlacklightRangeLimit$1; + +})); +//# sourceMappingURL=blacklight_range_limit.umd.js.map diff --git a/app/assets/javascripts/blacklight_range_limit/blacklight_range_limit.umd.js.map b/app/assets/javascripts/blacklight_range_limit/blacklight_range_limit.umd.js.map new file mode 100644 index 00000000..c0583b34 --- /dev/null +++ b/app/assets/javascripts/blacklight_range_limit/blacklight_range_limit.umd.js.map @@ -0,0 +1 @@ +{"version":3,"file":"blacklight_range_limit.umd.js","sources":["../../../javascript/blacklight_range_limit/range_limit_slider.js","../../../javascript/blacklight_range_limit/index.js"],"sourcesContent":["// for Blacklight.onLoad:\n\nconst RangeLimitSlider = {\n initialize: function(modalSelector) {\n $(\".range_limit .profile .range.slider_js\").each(function() {\n BlacklightRangeLimit.buildSlider(this);\n });\n\n // For Blacklight < 8, when loaded in a modal\n $(modalSelector).on('shown.bs.modal', function() {\n $(this).find(\".range_limit .profile .range.slider_js\").each(function() {\n BlacklightRangeLimit.buildSlider(this);\n });\n });\n\n // For Blacklight 8, use a mutation observer to detect when the HTML dialog is open\n BlacklightRangeLimit.initSliderModalObserver();\n\n // catch event for redrawing chart, to redraw slider to match width\n $(\"body\").on(\"plotDrawn.blacklight.rangeLimit\", function(event) {\n var area = $(event.target).closest(\".limit_content.range_limit\");\n var plot = area.find(\".chart_js\").data(\"plot\");\n var slider_el = area.find(\".slider\");\n\n if (plot && slider_el) {\n slider_el.width(plot.width());\n slider_el.css(\"display\", \"block\")\n }\n });\n }\n}\n\n// returns two element array min/max as numbers. If there is a limit applied,\n// it's boundaries are are limits. Otherwise, min/max in current result\n// set as sniffed from HTML. Pass in a DOM element for a div.range\n// Will return NaN as min or max in case of error or other weirdness.\nBlacklightRangeLimit.min_max = function min_max(range_element) {\n var current_limit = $(range_element).closest(\".limit_content.range_limit\").find(\".current\")\n let min, max\n min = max = BlacklightRangeLimit.parseNum(current_limit.find(\".single\").data('blrlSingle'))\n if ( isNaN(min)) {\n min = BlacklightRangeLimit.parseNum(current_limit.find(\".from\").first().data('blrlBegin'));\n max = BlacklightRangeLimit.parseNum(current_limit.find(\".to\").first().data('blrlEnd'));\n }\n\n if (isNaN(min) || isNaN(max)) {\n //no current limit, take from results min max included in spans\n min = BlacklightRangeLimit.parseNum($(range_element).find(\".min\").first().text());\n max = BlacklightRangeLimit.parseNum($(range_element).find(\".max\").first().text());\n }\n return [min, max]\n}\n\n\n// Check to see if a value is an Integer\n// see: http://stackoverflow.com/questions/3885817/how-to-check-if-a-number-is-float-or-integer\nBlacklightRangeLimit.isInt = function isInt(n) {\n return n % 1 === 0;\n}\n\nBlacklightRangeLimit.buildSlider = function buildSlider(thisContext) {\n var range_element = $(thisContext);\n\n var boundaries = BlacklightRangeLimit.min_max(thisContext);\n var min = boundaries[0];\n var max = boundaries[1];\n\n if (BlacklightRangeLimit.isInt(min) && BlacklightRangeLimit.isInt(max)) {\n $(thisContext).contents().wrapAll('
');\n\n var range_element = $(thisContext);\n var form = $(range_element).closest(\".range_limit\").find(\"form.range_limit\");\n var begin_el = form.find(\"input.range_begin\");\n var end_el = form.find(\"input.range_end\");\n\n var placeholder_input = $('').appendTo(range_element);\n\n // make sure slider is loaded\n if (placeholder_input.slider !== undefined) {\n placeholder_input.slider({\n min: min,\n max: max,\n value: [min, max],\n tooltip: \"hide\"\n });\n\n // try to make slider width/orientation match chart's\n var container = range_element.closest(\".range_limit\");\n var plot_el = container.find(\".chart_js\");\n var plot = plot_el.data(\"plot\");\n var slider_el = container.find(\".slider\");\n\n if (plot_el) {\n plot_el.attr('aria-hidden', 'true');\n }\n\n if (slider_el) {\n slider_el.attr('aria-hidden', 'true');\n }\n\n if (plot && slider_el) {\n slider_el.width(plot.width());\n slider_el.css(\"display\", \"block\")\n } else if (slider_el) {\n slider_el.css(\"width\", \"100%\");\n }\n }\n\n // Slider change should update text input values.\n var parent = $(thisContext).parent();\n var form = $(parent).closest(\".limit_content\").find(\"form.range_limit\");\n $(parent).closest(\".limit_content\").find(\".profile .range\").on(\"slide\", function(event, ui) {\n var values = $(event.target).data(\"slider\").getValue();\n form.find(\"input.range_begin\").val(values[0]);\n form.find(\"input.range_end\").val(values[1]);\n });\n }\n\n begin_el.val(min);\n end_el.val(max);\n\n begin_el.on('input', function() {\n var val = BlacklightRangeLimit.parseNum(this.value);\n if (isNaN(val) || val < min) {\n //for weird data, set slider at min\n val = min;\n }\n var values = placeholder_input.data(\"slider\").getValue();\n values[0] = val;\n placeholder_input.slider(\"setValue\", values);\n });\n\n end_el.on('input', function() {\n var val = BlacklightRangeLimit.parseNum(this.value);\n if (isNaN(val) || val > max) {\n //weird entry, set slider to max\n val = max;\n }\n var values = placeholder_input.data(\"slider\").getValue();\n values[1] = val;\n placeholder_input.slider(\"setValue\", values);\n });\n\n begin_el.change(function() {\n var val1 = BlacklightRangeLimit.parseNum(begin_el.val());\n var val2 = BlacklightRangeLimit.parseNum(end_el.val());\n\n if (val2 < val1) {\n begin_el.val(val2);\n end_el.val(val1);\n }\n });\n\n end_el.change(function() {\n var val1 = BlacklightRangeLimit.parseNum(begin_el.val());\n var val2 = BlacklightRangeLimit.parseNum(end_el.val());\n\n if (val2 < val1) {\n begin_el.val(val2);\n end_el.val(val1);\n }\n });\n }\n\nexport default RangeLimitSlider;","import RangeLimitDistroFacet from 'range_limit_distro_facet';\nimport RangeLimitSlider from 'range_limit_slider';\n\nBlacklightRangeLimit.initialize = function() {\n // Support for Blacklight 7 and 8:\n const modalSelector = Blacklight.modal?.modalSelector || Blacklight.Modal.modalSelector \n\n RangeLimitDistroFacet.initialize(modalSelector)\n RangeLimitSlider.initialize(modalSelector)\n}\n\nexport default BlacklightRangeLimit"],"names":["RangeLimitDistroFacet"],"mappings":"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"} \ No newline at end of file diff --git a/app/javascript/blacklight_range_limit/index.js b/app/javascript/blacklight_range_limit/index.js new file mode 100644 index 00000000..6f83e3ca --- /dev/null +++ b/app/javascript/blacklight_range_limit/index.js @@ -0,0 +1,12 @@ +import RangeLimitDistroFacet from 'range_limit_distro_facet'; +import RangeLimitSlider from 'range_limit_slider'; + +BlacklightRangeLimit.initialize = function() { + // Support for Blacklight 7 and 8: + const modalSelector = Blacklight.modal?.modalSelector || Blacklight.Modal.modalSelector + + RangeLimitDistroFacet.initialize(modalSelector) + RangeLimitSlider.initialize(modalSelector) +} + +export default BlacklightRangeLimit \ No newline at end of file diff --git a/app/assets/javascripts/blacklight_range_limit/range_limit_distro_facets.js b/app/javascript/blacklight_range_limit/range_limit_distro_facets.js similarity index 98% rename from app/assets/javascripts/blacklight_range_limit/range_limit_distro_facets.js rename to app/javascript/blacklight_range_limit/range_limit_distro_facets.js index 3417da32..1add60e5 100644 --- a/app/assets/javascripts/blacklight_range_limit/range_limit_distro_facets.js +++ b/app/javascript/blacklight_range_limit/range_limit_distro_facets.js @@ -73,3 +73,5 @@ const RangeLimitDistroFacet = { }, 350)); } } + +export default RangeLimitDistroFacet; \ No newline at end of file diff --git a/app/assets/javascripts/blacklight_range_limit/range_limit_plotting.js b/app/javascript/blacklight_range_limit/range_limit_plotting.js similarity index 100% rename from app/assets/javascripts/blacklight_range_limit/range_limit_plotting.js rename to app/javascript/blacklight_range_limit/range_limit_plotting.js diff --git a/app/assets/javascripts/blacklight_range_limit/range_limit_shared.js b/app/javascript/blacklight_range_limit/range_limit_shared.js similarity index 100% rename from app/assets/javascripts/blacklight_range_limit/range_limit_shared.js rename to app/javascript/blacklight_range_limit/range_limit_shared.js diff --git a/app/assets/javascripts/blacklight_range_limit/range_limit_slider.js b/app/javascript/blacklight_range_limit/range_limit_slider.js similarity index 96% rename from app/assets/javascripts/blacklight_range_limit/range_limit_slider.js rename to app/javascript/blacklight_range_limit/range_limit_slider.js index af6bdaed..580a7669 100644 --- a/app/assets/javascripts/blacklight_range_limit/range_limit_slider.js +++ b/app/javascript/blacklight_range_limit/range_limit_slider.js @@ -6,12 +6,16 @@ const RangeLimitSlider = { BlacklightRangeLimit.buildSlider(this); }); + // For Blacklight < 8, when loaded in a modal $(modalSelector).on('shown.bs.modal', function() { $(this).find(".range_limit .profile .range.slider_js").each(function() { BlacklightRangeLimit.buildSlider(this); }); }); + // For Blacklight 8, use a mutation observer to detect when the HTML dialog is open + BlacklightRangeLimit.initSliderModalObserver(); + // catch event for redrawing chart, to redraw slider to match width $("body").on("plotDrawn.blacklight.rangeLimit", function(event) { var area = $(event.target).closest(".limit_content.range_limit"); @@ -157,3 +161,5 @@ BlacklightRangeLimit.buildSlider = function buildSlider(thisContext) { } }); } + +export default RangeLimitSlider; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..24fae748 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,52 @@ +{ + "name": "blacklight-range-limit", + "version": "8.3.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "blacklight-range-limit", + "version": "8.3.0", + "license": "Apache-2.0", + "devDependencies": { + "rollup": "^2.60.0", + "rollup-plugin-includepaths": "^0.2.4" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-includepaths": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/rollup-plugin-includepaths/-/rollup-plugin-includepaths-0.2.4.tgz", + "integrity": "sha512-iZen+XKVExeCzk7jeSZPJKL7B67slZNr8GXSC5ROBXtDGXDBH8wdjMfdNW5hf9kPt+tHyIvWh3wlE9bPrZL24g==", + "dev": true + } + } +} diff --git a/package.json b/package.json index 17d7ba5e..10ca456f 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,7 @@ "description": "A range facet UI component plugin for blacklight", "main": "app/assets/javascripts/blacklight_range_limit", "scripts": { + "prepare": "rollup --config rollup.config.js --sourcemap && ESM=true rollup --config rollup.config.js --sourcemap" }, "repository": { "type": "git", @@ -19,6 +20,8 @@ }, "homepage": "https://github.com/projectblacklight/blacklight_range_limit#readme", "devDependencies": { + "rollup": "^2.60.0", + "rollup-plugin-includepaths": "^0.2.4" }, "browserslist": [ "defaults", diff --git a/rollup.config.js b/rollup.config.js new file mode 100644 index 00000000..8d0b5298 --- /dev/null +++ b/rollup.config.js @@ -0,0 +1,37 @@ +'use strict' + +import includePaths from 'rollup-plugin-includepaths'; + +const path = require('path') + +const BUNDLE = process.env.BUNDLE === 'true' +const ESM = process.env.ESM === 'true' + +const fileDest = `blacklight_range_limit${ESM ? '.esm' : '.umd'}` +const external = [] +const globals = {} + +let includePathOptions = { + include: {}, + paths: ['app/javascript'], + external: [], + extensions: ['.js'] +}; + +const rollupConfig = { + input: path.resolve(__dirname, `app/javascript/blacklight_range_limit/index.js`), + output: { + file: path.resolve(__dirname, `app/assets/javascripts/blacklight_range_limit/${fileDest}.js`), + format: ESM ? 'esm' : 'umd', + globals, + generatedCode: 'es2015' + }, + external, + plugins: [includePaths(includePathOptions)] +} + +if (!ESM) { + rollupConfig.output.name = 'BlacklightRangeLimit' +} + +module.exports = rollupConfig