Difference between revisions of "Replace single questions dropdown by plugin"

From Catglobe Wiki
Jump to: navigation, search
(Code)
(Code)
Line 19: Line 19:
  
 
Add this code to Javascript editor in both single or single grid dropdown layout.
 
Add this code to Javascript editor in both single or single grid dropdown layout.
 
  
Question.bind('afterShowQuestion', function(ev, question, $el) {
+
Question.bind('afterShowQuestion', function(ev, question, $el) {<br>&nbsp;$.when(<br>&nbsp; $.fn.select2 || $.ajax({<br>&nbsp; &nbsp;type: 'GET',<br>&nbsp; &nbsp;dataType: 'script',<br>&nbsp; &nbsp;cache: true,<br>&nbsp; &nbsp;url: 'https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/js/select2.min.js'<br>&nbsp; }),<br>&nbsp; $.fn.select2 || $('&lt;link/&gt;', {rel: 'stylesheet', href: 'https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/css/select2.min.css'}).appendTo('head')<br>&nbsp;).done(function() {<br>&nbsp; $('select', $el).select2({<br>&nbsp; &nbsp;minimumResultsForSearch: Infinity,<br>&nbsp; &nbsp;width: '100%',<br>&nbsp; &nbsp;templateResult: function(state) {<br>&nbsp; &nbsp; //custom option template in dropdown<br>&nbsp; &nbsp; if (!$(state.element).instance()) return null;<br>&nbsp; &nbsp; return $('&lt;div/&gt;').html(state.text).css({'text-align': 'left'});<br>&nbsp; &nbsp;},<br>&nbsp; &nbsp;templateSelection: function(state) {<br>&nbsp; &nbsp; //custom selected value<br>&nbsp; &nbsp; if (!$(state.element).instance()) return question.selectText;<br>&nbsp; &nbsp; return $('&lt;div/&gt;').html(state.text).css({'text-align': 'left'});<br>&nbsp; &nbsp;}<br>&nbsp; });<br>&nbsp; $('.select2-selection', $el).css({height: 'auto', 'min-height': '28px'});<br>&nbsp;});<br>});
&nbsp;$.when(
 
&nbsp;&nbsp;$.fn.select2 || $.ajax({
 
&nbsp;&nbsp;&nbsp;type: 'GET',
 
&nbsp;&nbsp;&nbsp;dataType: 'script',
 
&nbsp;&nbsp;&nbsp;cache: true,
 
&nbsp;&nbsp;&nbsp;url: 'https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/js/select2.min.js'
 
&nbsp;&nbsp;}),$.fn.select2 || $('&lt;link/&gt;', {rel: 'stylesheet', href: 'https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/css/select2.min.css'}).appendTo('head')
 
 
 
).done(function() {
 
&nbsp;&nbsp;$('select', $el).select2({
 
&nbsp;&nbsp;&nbsp;minimumResultsForSearch: Infinity,
 
&nbsp;&nbsp;&nbsp;width: '100%',
 
&nbsp;&nbsp;&nbsp;templateResult: function(state) {
 
&nbsp;&nbsp;&nbsp;&nbsp;//custom option template in dropdown
 
&nbsp;&nbsp;&nbsp;&nbsp;if (!$(state.element).instance()) return null;
 
&nbsp;&nbsp;&nbsp;&nbsp;return $('&lt;div/&gt;').html(state.text).css({'text-align': 'left'});
 
&nbsp;&nbsp;&nbsp;},
 
&nbsp;&nbsp;&nbsp;templateSelection: function(state) {
 
&nbsp;&nbsp;&nbsp;&nbsp;//custom selected value
 
&nbsp;&nbsp;&nbsp;&nbsp;if (!$(state.element).instance()) return question.selectText;
 
&nbsp;&nbsp;&nbsp;&nbsp;return $('&lt;div/&gt;').html(state.text).css({'text-align': 'left'});
 
&nbsp;&nbsp;&nbsp;}
 
 
 
});
 
 
 
$('.select2-selection', $el).css({height: 'auto', 'min-height': '28px'});});
 
 
 
});
 

Revision as of 08:44, 26 October 2022

Description

When viewed in dropdown layout of both Single and Single grid question. There are 3 problems in this case:
Some characters on keyboard decode/encode problem. Such as: Ampersand ( & ), single quotation  ( ' ), double quotation marks ( " ), is more than ( > ), is less than ( < ).
Same problem with characters not on keyboard. For example: ÷, ×, ±, ≠, ≡, ≤, ≥, …, ‘, °C and maybe more than that.
Problem with display HTML format in dropdown list when using it to design UI.

Expectation

These decode/encode problems will be fix and display normally like other question type and layout.

Example

Before: Before-replace.png


After: File:After-replace.PNG

Solution

Replace select dropdown default by plugin 'select2'.
URL: https://select2.org/

Code

Add this code to Javascript editor in both single or single grid dropdown layout.

Question.bind('afterShowQuestion', function(ev, question, $el) {
 $.when(
  $.fn.select2 || $.ajax({
   type: 'GET',
   dataType: 'script',
   cache: true,
   url: 'https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/js/select2.min.js'
  }),
  $.fn.select2 || $('<link/>', {rel: 'stylesheet', href: 'https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/css/select2.min.css'}).appendTo('head')
 ).done(function() {
  $('select', $el).select2({
   minimumResultsForSearch: Infinity,
   width: '100%',
   templateResult: function(state) {
    //custom option template in dropdown
    if (!$(state.element).instance()) return null;
    return $('<div/>').html(state.text).css({'text-align': 'left'});
   },
   templateSelection: function(state) {
    //custom selected value
    if (!$(state.element).instance()) return question.selectText;
    return $('<div/>').html(state.text).css({'text-align': 'left'});
   }
  });
  $('.select2-selection', $el).css({height: 'auto', 'min-height': '28px'});
 });
});