jekyll-text-theme 2.2.3 → 2.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +13 -1
  3. data/README.md +2 -2
  4. data/_data/variables.yml +2 -0
  5. data/_includes/comments-providers/valine.html +33 -0
  6. data/_includes/comments.html +2 -0
  7. data/_includes/scripts/components/lightbox.js +49 -0
  8. data/_includes/scripts/components/search/search.js +30 -45
  9. data/_includes/scripts/components/sidebar.js +2 -5
  10. data/_includes/scripts/lib/affix.js +1 -1
  11. data/_includes/scripts/lib/gallery.js +89 -0
  12. data/_includes/scripts/lib/modal.js +62 -0
  13. data/_includes/scripts/lib/swiper.js +65 -34
  14. data/_includes/scripts/lib/toc.js +1 -1
  15. data/_includes/scripts/utils/imagesLoad.js +28 -0
  16. data/_includes/scripts/{utils.js → utils/utils.js} +8 -3
  17. data/_includes/scripts/variables.html +2 -1
  18. data/_includes/search.html +2 -4
  19. data/_layouts/base.html +4 -2
  20. data/_layouts/page.html +20 -7
  21. data/_sass/common/_reset.scss +5 -10
  22. data/_sass/common/_variables.scss +10 -10
  23. data/_sass/common/classes/_overflow.scss +22 -4
  24. data/_sass/common/components/_button.scss +20 -1
  25. data/_sass/common/components/_card.scss +1 -0
  26. data/_sass/common/components/_gallery.scss +21 -0
  27. data/_sass/common/components/_item.scss +1 -1
  28. data/_sass/common/components/_modal.scss +39 -0
  29. data/_sass/common/components/_swiper.scss +7 -4
  30. data/_sass/common/components/_toc.scss +47 -50
  31. data/_sass/components/_article-content.scss +1 -1
  32. data/_sass/components/_header.scss +1 -1
  33. data/_sass/components/_lightbox.scss +7 -0
  34. data/_sass/components/_search.scss +52 -26
  35. data/_sass/layout/_base.scss +0 -4
  36. data/_sass/layout/_page.scss +17 -54
  37. data/_sass/skins/_chocolate.scss +4 -1
  38. data/_sass/skins/_dark.scss +4 -1
  39. data/_sass/skins/_default.scss +4 -1
  40. data/_sass/skins/_forest.scss +4 -1
  41. data/_sass/skins/_ocean.scss +9 -6
  42. data/_sass/skins/_orange.scss +4 -1
  43. data/assets/css/main.scss +3 -0
  44. metadata +11 -4
  45. data/_includes/comments-providers/custom.html +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d9461f40245b05bcb682f05f1169e055c189bfb8
4
- data.tar.gz: 45b6326fe6248389591323ca8ee0c9291b65f96c
3
+ metadata.gz: c8f1760199555ebd8714d3c0646fba732b0a3855
4
+ data.tar.gz: 40e51a18d2e6cfe4c4cd1047ea75daa583b8fde3
5
5
  SHA512:
6
- metadata.gz: 1e67d61e7806f62de0d53de3c22eb26fa0007ad0d6f12fc1e7e1aa24a9017e7ba80fa74e2fe419674d2b4c357a58b454fb65f5057b4d5d5e26ff18ccce149c53
7
- data.tar.gz: 29ae740535d3211c676ffdfdd692f9c942164833d57b26363f3e2c97c57cca24b0b2c6c2f969d5efb8888ed9c0ec873b4662d39dccb038c06cecfad10d329fa3
6
+ metadata.gz: 130c88eb50c06c8522745541958e79916897eb1bfdd9f1bebb579b89717b7c6ab3bd05f763ad3bd3eb4e6ae42173fbeb337e00d251a45e7348a4eeaf4f333d5c
7
+ data.tar.gz: 6febc77d3433bb1d8b808748a5e39f5408f49c67433cda0ed95bcaa13f4bdb70608ac8d1c1b63bded3c7ec37432e9e0279cb3f1da6b1bbecdd9d70d2de23b85f
@@ -1,5 +1,17 @@
1
1
  # Change Log
2
2
 
3
+ ## 2.2.4 (2018-12-10)
4
+
5
+ ### Enhancements
6
+
7
+ - Swiper component Enhancement: support mouse move
8
+ - Add lightbox (modal image gallery)
9
+ - Add Valine comment system (@Lloyar)
10
+
11
+ ### Bug Fixes
12
+
13
+ - Fix some spelling errors in documents (@Krinkle)
14
+
3
15
  ## 2.2.3 (2018-11-11)
4
16
 
5
17
  ### Enhancements
@@ -81,7 +93,7 @@
81
93
 
82
94
  ## 2.0.0 (2018-07-01)
83
95
 
84
- Breaking changes, please check [Update form 1.x to 2.x](https://tianqi.name/jekyll-TeXt-theme/docs/en/update-form-1-to-2) for details
96
+ Breaking changes, please check [Update from 1.x to 2.x](https://tianqi.name/jekyll-TeXt-theme/docs/en/update-from-1-to-2) for details
85
97
 
86
98
  ### Enhancements
87
99
 
data/README.md CHANGED
@@ -26,7 +26,7 @@ TeXt is a super customizable Jekyll theme for personal site, team site, blog, pr
26
26
  - Extensions (audios, videos, slides, demos)
27
27
  - Markdown enhancements ([MathJax](https://www.mathjax.org/), [mermaid](https://mermaidjs.github.io/), [chartjs](http://www.chartjs.org/))
28
28
  - Sharing ([AddToAny](https://www.addtoany.com/), [AddThis](https://www.addthis.com/))
29
- - Comments ([Disqus](https://disqus.com/), [Gitalk](https://gitalk.github.io/))
29
+ - Comments ([Disqus](https://disqus.com/), [Gitalk](https://gitalk.github.io/), [Valine](https://valine.js.org/en/))
30
30
  - Pageview ([LeanCloud](https://leancloud.cn/))
31
31
  - Analytics ([Google Analytics](https://analytics.google.com/analytics/web/))
32
32
  - RSS ([jekyll-feed](https://github.com/jekyll/jekyll-feed))
@@ -56,7 +56,7 @@ TeXt use [Tomorrow](https://github.com/chriskempson/tomorrow-theme) as the highl
56
56
  ### Start
57
57
 
58
58
  - [Quick Start](https://tianqi.name/jekyll-TeXt-theme/docs/en/quick-start)
59
- - [Update form 1.x to 2.x](https://tianqi.name/jekyll-TeXt-theme/docs/en/update-form-1-to-2)
59
+ - [Update from 1.x to 2.x](https://tianqi.name/jekyll-TeXt-theme/docs/en/update-from-1-to-2)
60
60
 
61
61
  ### Customization
62
62
 
@@ -46,6 +46,7 @@ sources:
46
46
  gitalk:
47
47
  js: 'https://cdn.bootcss.com/gitalk/1.2.2/gitalk.min.js'
48
48
  css: 'https://cdn.bootcss.com/gitalk/1.2.2/gitalk.min.css'
49
+ valine: 'https://unpkg.com/valine/dist/Valine.min.js' # bootcdn not available
49
50
  mathjax: 'https://cdn.bootcss.com/mathjax/2.7.4/MathJax.js?config=TeX-MML-AM_CHTML'
50
51
  mermaid: 'https://cdn.bootcss.com/mermaid/8.0.0-rc.8/mermaid.min.js'
51
52
  unpkg:
@@ -56,5 +57,6 @@ sources:
56
57
  gitalk:
57
58
  js: 'https://unpkg.com/gitalk@1.2.2/dist/gitalk.min.js'
58
59
  css: 'https://unpkg.com/gitalk@1.2.2/dist/gitalk.css'
60
+ valine: 'https//unpkg.com/valine/dist/Valine.min.js'
59
61
  mathjax: 'https://unpkg.com/mathjax@2.7.4/unpacked/MathJax.js?config=TeX-MML-AM_CHTML'
60
62
  mermaid: 'https://unpkg.com/mermaid@8.0.0-rc.8/dist/mermaid.min.js'
@@ -0,0 +1,33 @@
1
+ {%- include snippets/get-sources.html -%}
2
+ {%- assign _sources = __return -%}
3
+
4
+ {%- assign _VALINE_APP_ID = site.comments.valine.app_id -%}
5
+ {%- assign _VALINE_APP_KEY = site.comments.valine.app_key -%}
6
+ {%- assign _VALINE_PLACEHOLDER = site.comments.valine.placeholder -%}
7
+
8
+
9
+ {%- if page.key and
10
+ _VALINE_APP_ID and
11
+ _VALINE_APP_KEY -%}
12
+
13
+ <div id="vcomments"></div>
14
+ <script>
15
+ window.Lazyload.js(['{{ _sources.leancloud_js_sdk}}', '{{ _sources.valine }}'], function() {
16
+ var _config = {
17
+ el: '#vcomments',
18
+ appId: '{{ _VALINE_APP_ID }}',
19
+ appKey: '{{ _VALINE_APP_KEY }}',
20
+ verify: true,
21
+ };
22
+ {%- if _VALINE_PLACEHOLDER -%}
23
+ _config.placeholder = '{{ _VALINE_PLACEHOLDER }}';
24
+ {%- endif -%}
25
+ {%- assign _page_lang_slice = page.lang | slice: 0, 2 -%}
26
+ {%- if _page_lang_slice != 'zh' -%}
27
+ _config.lang = 'en';
28
+ {%- endif -%}
29
+ new Valine(_config);
30
+ });
31
+ </script>
32
+
33
+ {%- endif -%}
@@ -3,6 +3,8 @@
3
3
  {%- include comments-providers/disqus.html -%}
4
4
  {%- elsif site.comments.provider == 'gitalk' -%}
5
5
  {%- include comments-providers/gitalk.html -%}
6
+ {%- elsif site.comments.provider == 'valine' -%}
7
+ {%- include comments-providers/valine.html -%}
6
8
  {%- elsif site.comments.provider == 'custom' -%}
7
9
  {%- include comments-providers/custom.html -%}
8
10
  {%- endif -%}
@@ -0,0 +1,49 @@
1
+ {%- include scripts/utils/imagesLoad.js -%}
2
+ (function () {
3
+ var SOURCES = window.TEXT_VARIABLES.sources;
4
+ window.Lazyload.js(SOURCES.jquery, function() {
5
+ var $pageGalleryModal = $('.js-page-gallery-modal');
6
+ var $images = $('.page__content').find('img:not(.lightbox-ignore)');
7
+ window.imagesLoad($images).then(function() {
8
+ /* global Gallery */
9
+ var pageGalleryModal = $pageGalleryModal.modal({ onChange: handleModalChange });
10
+ var gallery = null;
11
+ var modalVisible = false;
12
+ var i, items = [], image, item;
13
+ if($images && $images.length > 0) {
14
+ for (i = 0; i < $images.length; i++) {
15
+ image = $images.eq(i);
16
+ if (image.get(0).naturalWidth > 800) {
17
+ items.push({ src: image.attr('src'), w: image.get(0).naturalWidth, h: image.get(0).naturalHeight, $el: image});
18
+ }
19
+ }
20
+ }
21
+
22
+ if(items.length > 0) {
23
+ gallery = new Gallery('.gallery', items);
24
+ gallery.setOptions({ disabled: !modalVisible });
25
+ gallery.init();
26
+ for (i = 0; i < items.length; i++) {
27
+ item = items[i];
28
+ item.$el && (item.$el.addClass('popup-image'), item.$el.on('click', (function() {
29
+ var index = i;
30
+ return function() {
31
+ pageGalleryModal.show();
32
+ gallery.setOptions({ initialSlide: index });
33
+ gallery.refresh(true, { animation: false });
34
+ };
35
+ })()));
36
+ }
37
+ }
38
+
39
+ function handleModalChange(visible) {
40
+ modalVisible = visible;
41
+ gallery && gallery.setOptions({ disabled: !modalVisible });
42
+ }
43
+
44
+ $pageGalleryModal.on('click', function() {
45
+ pageGalleryModal.hide();
46
+ });
47
+ });
48
+ });
49
+ })();
@@ -56,9 +56,7 @@ window.Lazyload.js([SOURCES.jquery, PAHTS.search_js], function() {
56
56
  };
57
57
 
58
58
  function render(data) {
59
- if (!data) {
60
- return null;
61
- }
59
+ if (!data) { return null; }
62
60
  var $root = $('<ul></ul>'), i, j, key, keys, cur, itemIndex = 0;
63
61
  keys = Object.keys(data);
64
62
  for (i = 0; i < keys.length; i++) {
@@ -105,38 +103,29 @@ window.Lazyload.js([SOURCES.jquery, PAHTS.search_js], function() {
105
103
  });
106
104
 
107
105
  // search panel
108
- var $pageRoot = $('.js-page-root');
109
- var $pageMain = $('.js-page-main');
106
+ var $searchModal = $('.js-page-search-modal');
110
107
  var $searchToggle = $('.js-search-toggle');
111
- var showSearch = false;
112
- var scrollTop;
113
-
114
- function openSearchPanel() {
115
- scrollTop = $(window).scrollTop() || $pageMain.scrollTop();
116
- $pageRoot.addClass('show-search-panel');
117
- $pageMain.scrollTop(scrollTop);
118
- $searchInput[0].focus();
119
- }
108
+ var modalVisible = false;
120
109
 
121
- function closeSearchPanel() {
122
- $pageRoot.removeClass('show-search-panel');
123
- $(window).scrollTop(scrollTop);
124
- $searchInput[0].blur();
125
- setTimeout(function() {
126
- $searchInput.val(''); searchBoxEmpty();
127
- window.pageAsideAffix && window.pageAsideAffix.refresh();
128
- }, 400);
129
- }
110
+ var searchModal = $searchModal.modal({ onChange: handleModalChange });
130
111
 
131
- // Char Code: 13 Enter, 27 ESC, 37 ⬅, 38 ⬆, 39 ➡, 40 ⬇, 83 S, 191 /
132
- function isFormElement(e) {
133
- var tagName = e.target.tagName || e.srcElement.tagName;
134
- return tagName === 'INPUT' || tagName === 'SELECT' || tagName === 'TEXTAREA';
135
- }
136
- function charCodeFilter(e) {
137
- return e.target === $searchInput[0] && (e.which === 13 || e.which === 27 || e.which === 38 || e.which === 40);
112
+ function handleModalChange(visible) {
113
+ modalVisible = visible;
114
+ if (visible) {
115
+ $searchInput[0].focus();
116
+ } else {
117
+ $searchInput[0].blur();
118
+ setTimeout(function() {
119
+ $searchInput.val(''); searchBoxEmpty();
120
+ window.pageAsideAffix && window.pageAsideAffix.refresh();
121
+ }, 400);
122
+ }
138
123
  }
139
124
 
125
+ $searchToggle.on('click', function() {
126
+ modalVisible ? searchModal.hide() : searchModal.show();
127
+ });
128
+
140
129
  function updateResultItems() {
141
130
  lastActiveIndex >= 0 && $resultItems.eq(lastActiveIndex).removeClass('active');
142
131
  activeIndex >= 0 && $resultItems.eq(activeIndex).addClass('active');
@@ -155,18 +144,19 @@ window.Lazyload.js([SOURCES.jquery, PAHTS.search_js], function() {
155
144
  }
156
145
  }
157
146
 
158
- $(document).on('keyup', function(e) {
159
- if (!isFormElement(e) || charCodeFilter(e)) {
160
- if (e.which === 83 || e.which === 191) {
161
- showSearch || (showSearch = true, openSearchPanel());
162
- } else if (e.which === 27) {
163
- showSearch && (showSearch = false, closeSearchPanel());
164
- } else if (e.which === 38) {
165
- showSearch && moveActiveIndex('up');
147
+ // Char Code: 13 Enter, 37 ⬅, 38 ⬆, 39 ➡, 40 ⬇, 83 S, 191 /
148
+ $(window).on('keyup', function(e) {
149
+ if (modalVisible) {
150
+ if (e.which === 38) {
151
+ modalVisible && moveActiveIndex('up');
166
152
  } else if (e.which === 40) {
167
- showSearch && moveActiveIndex('down');
153
+ modalVisible && moveActiveIndex('down');
168
154
  } else if (e.which === 13) {
169
- showSearch && $resultItems && activeIndex >= 0 && $resultItems.eq(activeIndex).children('a')[0].click();
155
+ modalVisible && $resultItems && activeIndex >= 0 && $resultItems.eq(activeIndex).children('a')[0].click();
156
+ }
157
+ } else {
158
+ if (!window.isFormElement(e.target || e.srcElement) && (e.which === 83 || e.which === 191)) {
159
+ modalVisible || searchModal.show();
170
160
  }
171
161
  }
172
162
  });
@@ -175,9 +165,4 @@ window.Lazyload.js([SOURCES.jquery, PAHTS.search_js], function() {
175
165
  var itemIndex = $(this).parent().data('index');
176
166
  itemIndex >= 0 && (lastActiveIndex = activeIndex, activeIndex = itemIndex, updateResultItems());
177
167
  });
178
-
179
- $searchToggle.on('click', function() {
180
- showSearch = !showSearch;
181
- showSearch ? openSearchPanel() : closeSearchPanel();
182
- });
183
168
  });
@@ -8,8 +8,6 @@
8
8
  var $sidebarShow = $('.js-sidebar-show');
9
9
  var $sidebarHide = $('.js-sidebar-hide');
10
10
 
11
- var scrollTop;
12
-
13
11
  function freeze(e) {
14
12
  if (e.target === $pageMask[0]) {
15
13
  e.preventDefault();
@@ -24,11 +22,10 @@
24
22
  }
25
23
 
26
24
  $sidebarShow.on('click', function() {
27
- scrollTop = $(window).scrollTop();
28
- stopBodyScrolling(true); $pageRoot.addClass('show-sidebar'); $pageMain.scrollTop(scrollTop);
25
+ stopBodyScrolling(true); $pageRoot.addClass('show-sidebar');
29
26
  });
30
27
  $sidebarHide.on('click', function() {
31
- stopBodyScrolling(false); $pageRoot.removeClass('show-sidebar'); $(window).scrollTop(scrollTop);
28
+ stopBodyScrolling(false); $pageRoot.removeClass('show-sidebar');
32
29
  });
33
30
  });
34
31
  })();
@@ -102,7 +102,7 @@
102
102
  return {
103
103
  setOptions: setOptions,
104
104
  refresh: function() {
105
- calc(true); setState();
105
+ calc(true, { animation: false }); setState();
106
106
  }
107
107
  };
108
108
  }
@@ -0,0 +1,89 @@
1
+ (function() {
2
+ {%- include scripts/lib/swiper.js -%}
3
+ var SOURCES = window.TEXT_VARIABLES.sources;
4
+ window.Lazyload.js(SOURCES.jquery, function() {
5
+ var template =
6
+ '<div class="swiper gallery__swiper">' +
7
+ '<div class="swiper__wrapper">' +
8
+ '</div>' +
9
+ '<div class="swiper__button swiper__button--prev fas fa-chevron-left"></div>' +
10
+ '<div class="swiper__button swiper__button--next fas fa-chevron-right"></div>' +
11
+ '</div>';
12
+ function Gallery(root, items, options) {
13
+ this.$root = $(root);
14
+ this.$swiper = null;
15
+ this.$itemWrapper = null;
16
+ this.swiper = null;
17
+ this.$items = [];
18
+ this.items = items;
19
+ this.disabled = false;
20
+ this.contentWidth = 0;
21
+ this.contentHeight = 0;
22
+ }
23
+ Gallery.prototype.init = function() {
24
+ var i, item, items = this.items, itemsSnippet = '', size, self = this;
25
+ this.$root.append(template);
26
+ this.$swiper = this.$root.find('.gallery__swiper');
27
+ this.$itemWrapper = this.$root.find('.swiper__wrapper');
28
+ this.contentWidth = this.$itemWrapper && this.$itemWrapper.width();
29
+ this.contentHeight = this.$itemWrapper && this.$itemWrapper.height();
30
+ for (i = 0; i < items.length; i++) {
31
+ item = items[i];
32
+ size = this.calculateImageSize(item.w, item.h);
33
+ this.$items.push($(
34
+ '<div class="swiper__slide">' +
35
+ '<div class="gallery-item">' +
36
+ '<div class="gallery-item__content">' +
37
+ '<img src="' + item.src + '" style="width:' + size.w + 'px;height:' + size.h + 'px"/>' +
38
+ '</div>' +
39
+ '</div>' +
40
+ '</div>'
41
+ ));
42
+ }
43
+ this.$itemWrapper && this.$itemWrapper.append(this.$items);
44
+ this.swiper = this.$swiper && this.$swiper.swiper();
45
+ $(window).on('resize', function() {
46
+ if (self.disabled) { return; }
47
+ self.resizeImageSize();
48
+ });
49
+ // Char Code: 37 ⬅, 39 ➡
50
+ $(window).on('keyup', function(e) {
51
+ if (window.isFormElement(e.target || e.srcElement) || self.disabled) { return; }
52
+ if (e.which === 37) {
53
+ self.swiper && self.swiper.previous();
54
+ } else if (e.which === 39) {
55
+ self.swiper && self.swiper.next();
56
+ }
57
+ });
58
+ };
59
+ Gallery.prototype.calculateImageSize = function(w, h) {
60
+ var scale = 1;
61
+ if (this.contentWidth > 0 && this.contentHeight > 0 && w > 0 && h > 0) {
62
+ scale = Math.min(
63
+ Math.min(w, this.contentWidth) / w,
64
+ Math.min(h, this.contentHeight) / h);
65
+ }
66
+ return { w: Math.floor(w * scale), h: Math.floor(h * scale) };
67
+ };
68
+ Gallery.prototype.resizeImageSize = function() {
69
+ var i, $item, $items = this.$items, item, size;
70
+ this.contentWidth = this.$itemWrapper && this.$itemWrapper.width();
71
+ this.contentHeight = this.$itemWrapper && this.$itemWrapper.height();
72
+ if ($items.length < 1) { return; }
73
+ for (i = 0; i < $items.length; i++) {
74
+ item = this.items[i], $item = $items[i];
75
+ size = this.calculateImageSize(item.w, item.h);
76
+ $item && $item.find('img').css({ width: size.w, height: size.h });
77
+ }
78
+ }
79
+ Gallery.prototype.refresh = function() {
80
+ this.swiper && this.swiper.refresh();
81
+ this.resizeImageSize();
82
+ };
83
+ Gallery.prototype.setOptions = function(options) {
84
+ this.disabled = options.disabled;
85
+ this.swiper && this.swiper.setOptions(options);
86
+ };
87
+ window.Gallery = Gallery;
88
+ });
89
+ })();
@@ -0,0 +1,62 @@
1
+ (function() {
2
+ var SOURCES = window.TEXT_VARIABLES.sources;
3
+ window.Lazyload.js(SOURCES.jquery, function() {
4
+ var $body = $('body'), $window = $(window);
5
+ var $pageRoot = $('.js-page-root'), $pageMain = $('.js-page-main');
6
+ var activeCount = 0;
7
+ function modal(options) {
8
+ var $root = this, visible, onChange;
9
+ var scrollTop;
10
+ function setOptions(options) {
11
+ var _options = options || {};
12
+ visible = _options.initialVisible === undefined ? false : show;
13
+ onChange = _options.onChange;
14
+ }
15
+ function init() {
16
+ setState(visible);
17
+ }
18
+ function setState(isShow) {
19
+ if (isShow === visible) {
20
+ return;
21
+ }
22
+ visible = isShow;
23
+ if (visible) {
24
+ activeCount ++;
25
+ scrollTop = $(window).scrollTop() || $pageMain.scrollTop();
26
+ $root.addClass('modal--show');
27
+ $pageMain.scrollTop(scrollTop);
28
+ activeCount === 1 && ($pageRoot.addClass('show-modal'), $body.addClass('of-hidden'));
29
+ $window.on('scroll', hide);
30
+ $window.on('keyup', handleKeyup);
31
+ } else {
32
+ activeCount > 0 && activeCount --;
33
+ $root.removeClass('modal--show');
34
+ $window.scrollTop(scrollTop);
35
+ activeCount === 0 && ($pageRoot.removeClass('show-modal'), $body.removeClass('of-hidden'));
36
+ $window.off('scroll', hide);
37
+ $window.off('keyup', handleKeyup);
38
+ }
39
+ onChange && onChange(visible);
40
+ }
41
+ function show() {
42
+ setState(true);
43
+ }
44
+ function hide() {
45
+ setState(false);
46
+ }
47
+ function handleKeyup(e) {
48
+ // Char Code: 27 ESC
49
+ if (e.which === 27) {
50
+ hide();
51
+ }
52
+ }
53
+ setOptions(options);
54
+ init();
55
+ return {
56
+ show: show,
57
+ hide: hide
58
+ };
59
+ }
60
+ $.fn.modal = modal;
61
+ });
62
+ })();