diff --git a/app/assets/javascripts/application.js.erb b/app/assets/javascripts/application.js.erb
index 3daeec359..b2f1ff666 100644
--- a/app/assets/javascripts/application.js.erb
+++ b/app/assets/javascripts/application.js.erb
@@ -283,3 +283,5 @@ $(window).scroll(function() {
scroll_function();
})
})
+
+window.I18n = I18n
diff --git a/app/assets/javascripts/repositories/repository_datatable.js b/app/assets/javascripts/repositories/repository_datatable.js
index 7ff8bb36a..74c68cf21 100644
--- a/app/assets/javascripts/repositories/repository_datatable.js
+++ b/app/assets/javascripts/repositories/repository_datatable.js
@@ -1,7 +1,7 @@
/*
globals I18n _ SmartAnnotation FilePreviewModal animateSpinner DataTableHelpers
HelperModule RepositoryDatatableRowEditor prepareRepositoryHeaderForExport
- initAssignedTasksDropdown
+ initAssignedTasksDropdown initBMTFilter
*/
//= require jquery-ui/widgets/sortable
@@ -268,6 +268,7 @@ var RepositoryDatatable = (function(global) {
$.getJSON($(TABLE_ID).data('toolbar-url'), (data) => {
$('#toolbarButtonsDatatable').remove();
$(data.html).appendTo('div.toolbar');
+ initBMTFilter();
});
TABLE.ajax.reload(null, false);
@@ -551,6 +552,7 @@ var RepositoryDatatable = (function(global) {
// Append buttons to inner toolbar in the table
$.getJSON($(TABLE_ID).data('toolbar-url'), (data) => {
$(data.html).appendTo('div.toolbar');
+ initBMTFilter();
});
$('div.toolbar-filter-buttons').prependTo('div.filter-container');
@@ -577,6 +579,7 @@ var RepositoryDatatable = (function(global) {
});
initAssignedTasksDropdown(TABLE_ID);
+
}
});
diff --git a/app/assets/stylesheets/repositories.scss b/app/assets/stylesheets/repositories.scss
index 3e3af7fc9..3535b8cd9 100644
--- a/app/assets/stylesheets/repositories.scss
+++ b/app/assets/stylesheets/repositories.scss
@@ -153,13 +153,12 @@
flex-wrap: nowrap;
height: 6em;
left: var(--repository-sidebar-margin);
- overflow: hidden;
padding: 1em 2em 0;
position: fixed;
top: calc(4em + var(--navbar-height));
transition: .4s $timing-function-sharp;
width: calc(100% - var(--repository-sidebar-margin));
- z-index: 90;
+ z-index: 100;
.filter-container {
flex-shrink: 0;
diff --git a/app/assets/stylesheets/repository/bmt_filters.scss b/app/assets/stylesheets/repository/bmt_filters.scss
new file mode 100644
index 000000000..eb17a0ceb
--- /dev/null
+++ b/app/assets/stylesheets/repository/bmt_filters.scss
@@ -0,0 +1,37 @@
+#bmtFilterContainer {
+ min-width: 300px;
+ z-index: 100;
+
+ .header {
+ align-items: center;
+ border-bottom: $border-tertiary;
+ display: flex;
+ padding: .5em 1em;
+
+ .title {
+ @include font-h2;
+ margin-right: auto;
+ }
+ }
+
+ .filter-element {
+ align-items: center;
+ display: flex;
+ }
+
+ .filters-list {
+ border-top: $border-tertiary;
+ padding: .5em 1em;
+ }
+
+ .footer {
+ align-items: center;
+ border-top: $border-tertiary;
+ display: flex;
+ padding: .5em 1em;
+
+ .add-filter {
+ margin-right: auto;
+ }
+ }
+}
diff --git a/app/javascript/packs/vue/bmt_filter.js b/app/javascript/packs/vue/bmt_filter.js
new file mode 100644
index 000000000..a1938e366
--- /dev/null
+++ b/app/javascript/packs/vue/bmt_filter.js
@@ -0,0 +1,20 @@
+import TurbolinksAdapter from 'vue-turbolinks';
+import Vue from 'vue/dist/vue.esm';
+import FilterContainer from '../../vue/bmt_filter/container.vue';
+
+Vue.use(TurbolinksAdapter);
+
+
+window.initBMTFilter = () => {
+ const app = new Vue({
+ el: '#bmtFilterContainer',
+ components: {
+ 'filter-container': FilterContainer
+ }
+ });
+
+ $('#bmtFilterContainer').on('click', (e) => {
+ e.preventDefault();
+ e.stopPropagation();
+ });
+};
diff --git a/app/javascript/vue/bmt_filter/container.vue b/app/javascript/vue/bmt_filter/container.vue
new file mode 100644
index 000000000..9793d94b3
--- /dev/null
+++ b/app/javascript/vue/bmt_filter/container.vue
@@ -0,0 +1,61 @@
+
+