浏览代码

Added templating example

This also fixes the case where `templateResult` does not return a
string, where it will fall back to jQuery to set the value of the
option.  This allows for the `templateResult` function to return a
jQuery or DOM element that contains the templated data.

Just like with the translation methods, only strings returned from
`templateResult` will be escaped.

The old flag icons have been transferred from the old repository to
the documentation, for use in the templates.  Unfortunately I cannot
find a license for them, but I suspect a license isn't actually
needed considering the state flags are public.

This closes https://github.com/select2/select2/issues/3005.
This closes https://github.com/select2/select2/issues/818.
Kevin Brown 10 年之前
父节点
当前提交
8aca7a4085
共有 58 个文件被更改,包括 88 次插入5 次删除
  1. 3 1
      dist/js/select2.amd.full.js
  2. 3 1
      dist/js/select2.amd.js
  3. 3 1
      dist/js/select2.full.js
  4. 0 0
      dist/js/select2.full.min.js
  5. 3 1
      dist/js/select2.js
  6. 0 0
      dist/js/select2.min.js
  7. 73 0
      docs/examples.html
  8. 二进制
      docs/vendor/images/flags/ak.png
  9. 二进制
      docs/vendor/images/flags/al.png
  10. 二进制
      docs/vendor/images/flags/ar.png
  11. 二进制
      docs/vendor/images/flags/az.png
  12. 二进制
      docs/vendor/images/flags/ca.png
  13. 二进制
      docs/vendor/images/flags/co.png
  14. 二进制
      docs/vendor/images/flags/ct.png
  15. 二进制
      docs/vendor/images/flags/de.png
  16. 二进制
      docs/vendor/images/flags/fl.png
  17. 二进制
      docs/vendor/images/flags/ga.png
  18. 二进制
      docs/vendor/images/flags/hi.png
  19. 二进制
      docs/vendor/images/flags/ia.png
  20. 二进制
      docs/vendor/images/flags/id.png
  21. 二进制
      docs/vendor/images/flags/il.png
  22. 二进制
      docs/vendor/images/flags/in.png
  23. 二进制
      docs/vendor/images/flags/ks.png
  24. 二进制
      docs/vendor/images/flags/ky.png
  25. 二进制
      docs/vendor/images/flags/la.png
  26. 二进制
      docs/vendor/images/flags/ma.png
  27. 二进制
      docs/vendor/images/flags/md.png
  28. 二进制
      docs/vendor/images/flags/me.png
  29. 二进制
      docs/vendor/images/flags/mi.png
  30. 二进制
      docs/vendor/images/flags/mn.png
  31. 二进制
      docs/vendor/images/flags/mo.png
  32. 二进制
      docs/vendor/images/flags/ms.png
  33. 二进制
      docs/vendor/images/flags/mt.png
  34. 二进制
      docs/vendor/images/flags/nc.png
  35. 二进制
      docs/vendor/images/flags/nd.png
  36. 二进制
      docs/vendor/images/flags/ne.png
  37. 二进制
      docs/vendor/images/flags/nh.png
  38. 二进制
      docs/vendor/images/flags/nj.png
  39. 二进制
      docs/vendor/images/flags/nm.png
  40. 二进制
      docs/vendor/images/flags/nv.png
  41. 二进制
      docs/vendor/images/flags/ny.png
  42. 二进制
      docs/vendor/images/flags/oh.png
  43. 二进制
      docs/vendor/images/flags/ok.png
  44. 二进制
      docs/vendor/images/flags/or.png
  45. 二进制
      docs/vendor/images/flags/pa.png
  46. 二进制
      docs/vendor/images/flags/ri.png
  47. 二进制
      docs/vendor/images/flags/sc.png
  48. 二进制
      docs/vendor/images/flags/sd.png
  49. 二进制
      docs/vendor/images/flags/tn.png
  50. 二进制
      docs/vendor/images/flags/tx.png
  51. 二进制
      docs/vendor/images/flags/ut.png
  52. 二进制
      docs/vendor/images/flags/va.png
  53. 二进制
      docs/vendor/images/flags/vt.png
  54. 二进制
      docs/vendor/images/flags/wa.png
  55. 二进制
      docs/vendor/images/flags/wi.png
  56. 二进制
      docs/vendor/images/flags/wv.png
  57. 二进制
      docs/vendor/images/flags/wy.png
  58. 3 1
      src/js/select2/results.js

+ 3 - 1
dist/js/select2.amd.full.js

@@ -731,8 +731,10 @@ define('select2/results',[
 
     if (content == null) {
       container.style.display = 'none';
-    } else {
+    } else if (typeof content === 'string') {
       container.innerHTML = escapeMarkup(content);
+    } else {
+      $(container).append(content);
     }
   };
 

+ 3 - 1
dist/js/select2.amd.js

@@ -731,8 +731,10 @@ define('select2/results',[
 
     if (content == null) {
       container.style.display = 'none';
-    } else {
+    } else if (typeof content === 'string') {
       container.innerHTML = escapeMarkup(content);
+    } else {
+      $(container).append(content);
     }
   };
 

+ 3 - 1
dist/js/select2.full.js

@@ -1169,8 +1169,10 @@ define('select2/results',[
 
     if (content == null) {
       container.style.display = 'none';
-    } else {
+    } else if (typeof content === 'string') {
       container.innerHTML = escapeMarkup(content);
+    } else {
+      $(container).append(content);
     }
   };
 

文件差异内容过多而无法显示
+ 0 - 0
dist/js/select2.full.min.js


+ 3 - 1
dist/js/select2.js

@@ -1169,8 +1169,10 @@ define('select2/results',[
 
     if (content == null) {
       container.style.display = 'none';
-    } else {
+    } else if (typeof content === 'string') {
       container.innerHTML = escapeMarkup(content);
+    } else {
+      $(container).append(content);
     }
   };
 

文件差异内容过多而无法显示
+ 0 - 0
dist/js/select2.min.js


+ 73 - 0
docs/examples.html

@@ -7,6 +7,13 @@ slug: examples
 <script type="text/javascript" src="vendor/js/placeholders.jquery.min.js"></script>
 <script type="text/javascript" src="dist/js/i18n/es.js"></script>
 
+<style type="text/css">
+.img-flag {
+  height: 15px;
+  width: 18px;
+}
+</style>
+
 <div class="container">
   <section id="basic" class="row">
     <div class="col-md-4">
@@ -118,6 +125,52 @@ $(".js-example-placeholder-multiple").select2({
     </div>
   </section>
 
+  <section id="templating" class="row">
+    <div class="col-md-4">
+      <h1>Templating</h1>
+
+      <p>
+        Various display options of the Select2 component can be changed
+      </p>
+
+      <p>
+        <select class="js-example-templating js-states form-control"></select>
+      </p>
+
+      <p>
+        You can access the <code>&lt;option&gt;</code> element
+        (or <code>&lt;optgroup&gt;</code>) and any attributes on those elements
+        using <code>.element</code>.
+      </p>
+
+      <p>
+        Templating is primarily controlled by the
+        <a href="options.html#templateResult"><code>templateResult</code></a>
+        and <a href="options.html#templateSelection"><code>templateSelection</code></a>
+        options.
+      </p>
+    </div>
+    <div class="col-md-8">
+      <h2>Example code</h2>
+
+      <pre data-fill-from=".js-code-templating"></pre>
+
+<script type="text/x-example-code" class="js-code-templating">
+function formatState (state) {
+  if (!state.id) { return state.text; }
+  var $state = $(
+    '<span><img src="vendor/images/flags/' + state.element.value.toLowerCase() + '.png" class="img-flag" /> ' + state.text + '</span>'
+  );
+  return $state;
+};
+
+$(".js-example-templating").select2({
+  templateResult: formatState
+});
+</script>
+    </div>
+  </section>
+
   <section id="data-array" class="row">
     <div class="col-md-4">
       <h1>Loading array data</h1>
@@ -915,6 +968,26 @@ $.fn.select2.amd.require(
     maximumSelectionLength: 2
   });
 
+  function formatState (state) {
+    if (!state.id) {
+      return state.text;
+    }
+    var $state = $(
+      '<span>' +
+        '<img src="vendor/images/flags/' +
+          state.element.value.toLowerCase() +
+        '.png" class="img-flag" /> ' +
+        state.text +
+      '</span>'
+    );
+    return $state;
+  };
+
+  $(".js-example-templating").select2({
+    templateResult: formatState,
+    templateSelection: formatState
+  });
+
   $dataArray.select2({
     data: data
   });

二进制
docs/vendor/images/flags/ak.png


二进制
docs/vendor/images/flags/al.png


二进制
docs/vendor/images/flags/ar.png


二进制
docs/vendor/images/flags/az.png


二进制
docs/vendor/images/flags/ca.png


二进制
docs/vendor/images/flags/co.png


二进制
docs/vendor/images/flags/ct.png


二进制
docs/vendor/images/flags/de.png


二进制
docs/vendor/images/flags/fl.png


二进制
docs/vendor/images/flags/ga.png


二进制
docs/vendor/images/flags/hi.png


二进制
docs/vendor/images/flags/ia.png


二进制
docs/vendor/images/flags/id.png


二进制
docs/vendor/images/flags/il.png


二进制
docs/vendor/images/flags/in.png


二进制
docs/vendor/images/flags/ks.png


二进制
docs/vendor/images/flags/ky.png


二进制
docs/vendor/images/flags/la.png


二进制
docs/vendor/images/flags/ma.png


二进制
docs/vendor/images/flags/md.png


二进制
docs/vendor/images/flags/me.png


二进制
docs/vendor/images/flags/mi.png


二进制
docs/vendor/images/flags/mn.png


二进制
docs/vendor/images/flags/mo.png


二进制
docs/vendor/images/flags/ms.png


二进制
docs/vendor/images/flags/mt.png


二进制
docs/vendor/images/flags/nc.png


二进制
docs/vendor/images/flags/nd.png


二进制
docs/vendor/images/flags/ne.png


二进制
docs/vendor/images/flags/nh.png


二进制
docs/vendor/images/flags/nj.png


二进制
docs/vendor/images/flags/nm.png


二进制
docs/vendor/images/flags/nv.png


二进制
docs/vendor/images/flags/ny.png


二进制
docs/vendor/images/flags/oh.png


二进制
docs/vendor/images/flags/ok.png


二进制
docs/vendor/images/flags/or.png


二进制
docs/vendor/images/flags/pa.png


二进制
docs/vendor/images/flags/ri.png


二进制
docs/vendor/images/flags/sc.png


二进制
docs/vendor/images/flags/sd.png


二进制
docs/vendor/images/flags/tn.png


二进制
docs/vendor/images/flags/tx.png


二进制
docs/vendor/images/flags/ut.png


二进制
docs/vendor/images/flags/va.png


二进制
docs/vendor/images/flags/vt.png


二进制
docs/vendor/images/flags/wa.png


二进制
docs/vendor/images/flags/wi.png


二进制
docs/vendor/images/flags/wv.png


二进制
docs/vendor/images/flags/wy.png


+ 3 - 1
src/js/select2/results.js

@@ -485,8 +485,10 @@ define([
 
     if (content == null) {
       container.style.display = 'none';
-    } else {
+    } else if (typeof content === 'string') {
       container.innerHTML = escapeMarkup(content);
+    } else {
+      $(container).append(content);
     }
   };
 

部分文件因为文件数量过多而无法显示