Skip to content

Commit

Permalink
Refactoring: make the whole function idempotent and scoped to an elem…
Browse files Browse the repository at this point in the history
…ent at a time
  • Loading branch information
ncounter committed Apr 11, 2023
1 parent 8e50d30 commit c594901
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 16 deletions.
33 changes: 19 additions & 14 deletions src/api/app/assets/javascripts/webui/collapsible_text.js
Original file line number Diff line number Diff line change
@@ -1,20 +1,25 @@
$(document).ready(function() {
setCollapsible();
});
function setCollapsible() { // jshint ignore:line
$('.obs-collapsible-textbox').each(function() {
var container = $(this);
var textBox = container.find('.obs-collapsible-text');
var showButton = container.find('.show-content');

function setCollapsible() {
$('.obs-collapsible-textbox').on('click', function() {
var selectedText = document.getSelection().toString();
if(!selectedText) {
$(this).find('.obs-collapsible-text').toggleClass('expanded');
$(this).find('.show-content').toggleClass('more less');
// Add the event if it wasn't already added
if (container.hasClass('vanilla-textbox-to-collapse')) {
container.on('click', function() {
if(!document.getSelection().toString()) {
textBox.toggleClass('expanded');
showButton.toggleClass('more less');
}
});
// Make sure to not add the event twice by removing the target class
container.removeClass('vanilla-textbox-to-collapse');
}
});

$('.obs-collapsible-text').each(function(_index, element){
if (element.scrollHeight > element.offsetHeight) {
var $link = $('<a href="javascript:void(0)" class="show-content more"><i class="fa"></i></a>');
$(element).after($link);
// Make sure to not add the button twice and only if it makes sense to
if (showButton.length === 0 && textBox.prop('scrollHeight') > textBox.prop('offsetHeight')) {
showButton = $('<a href="javascript:void(0)" class="show-content more"><i class="fa"></i></a>');
textBox.after(showButton);
}
});
}
5 changes: 4 additions & 1 deletion src/api/app/views/webui/shared/_collapsible_text.html.haml
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
-# NOTE: look into app/assets/stylesheets/webui/collapsible-text.scss
- if text.present?
.obs-collapsible-textbox{ class: "#{extra_css_classes if defined?(extra_css_classes)}" }
.obs-collapsible-textbox.vanilla-textbox-to-collapse{ class: "#{extra_css_classes if defined?(extra_css_classes)}" }
.obs-collapsible-text
= sanitize(simple_format(text), tags: %w[br p])

:javascript
setCollapsible();
2 changes: 1 addition & 1 deletion src/api/app/views/webui/user/_involvement.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@
- involved_items.each do |involved_item|
.list-group-item
.row
.col.obs-collapsible-textbox
.col.obs-collapsible-textbox.vanilla-textbox-to-collapse
.obs-collapsible-text
- if involved_item.is_a?(Package)
= link_to(involved_item.project, project_show_path(involved_item.project))
Expand Down

0 comments on commit c594901

Please sign in to comment.