') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); Add concept picker and Ontology filters to data region filter dialog by Sigmonia · Pull Request #2205 · LabKey/platform · GitHub
Skip to content

Add concept picker and Ontology filters to data region filter dialog - #2205

Merged
Sigmonia merged 34 commits into
developfrom
fb_ontFilter
May 1, 2021
Merged

Add concept picker and Ontology filters to data region filter dialog#2205
Sigmonia merged 34 commits into
developfrom
fb_ontFilter

Conversation

@Sigmonia

@SigmoniaSigmonia commented Apr 21, 2021

Copy link
Copy Markdown
Contributor

Add injection divs to filterdialog
add fetchPathsForCodes ontology action method
Update filter values via tree
Add css filter icon
some CSS FilterDialog updates
TODO:
Add getPathsForCodes server-side action
Add new filter operators
Limit selection of available filters to only those that can be used
update tree on filter type changes
cleanup styling
move filter icon to right
TODO: use paths for SubTree filters
Add injection divs to filterdialog
add fetchPathsForCodes ontology action method
Update filter values via tree
Add css filter icon
some CSS FilterDialog updates
TODO:
Add getPathsForCodes server-side action
Add new filter operators
Limit selection of available filters to only those that can be used
update tree on filter type changes
cleanup styling
move filter icon to right
TODO: use paths for SubTree filters
Map path filter to tree path
Comment threadcore/src/client/ConceptFilter/ConceptFilterView.scss
Comment threadcore/src/client/ConceptFilter/ConceptFilterView.tsx Outdated
Comment threadcore/src/client/ConceptFilter/ConceptFilterView.tsx Outdated
Comment threadcore/src/client/ConceptFilter/ConceptFilterView.tsx Outdated
Comment threadsearch/src/org/labkey/search/SearchController.java Outdated
Comment threadapi/webapp/clientapi/ext3/FilterDialog.js Outdated
Comment threadapi/webapp/clientapi/ext3/FilterDialog.js Outdated
@Sigmonia
Sigmonia requested a review from cnatheApril 27, 2021 20:15
Comment threadcore/src/client/ConceptFilter/ConceptFilterView.scss Outdated

});

Ext.reg('filter-view-conceptfilter', LABKEY.FilterDialog.View.ConceptFilter);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I really like this implementation with the separate LABKEY.FilterDialog.View.ConceptFilter. Nice job with the necessary refactors in the default filter panels so that you had the necessary functions to subclass / override.

@Sigmonia
Sigmonia merged commit a300c0a into developMay 1, 2021
@Sigmonia
Sigmonia deleted the fb_ontFilter branch May 1, 2021 20:48
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Sigmonia@cnathe