j1-template 2020.0.8 → 2020.0.13
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/_includes/themes/j1/blocks/ads/ad.html +64 -0
- data/_includes/themes/j1/blocks/footer/boxes/links_box.proc +1 -1
- data/_includes/themes/j1/layouts/content_generator_blog_archive.html +3 -2
- data/_includes/themes/j1/layouts/content_generator_collection.html +3 -2
- data/_includes/themes/j1/layouts/content_generator_page.html +3 -2
- data/_includes/themes/j1/layouts/content_generator_post.html +12 -12
- data/_includes/themes/j1/layouts/layout_metadata_generator.html +134 -4
- data/_includes/themes/j1/modules/connectors/ad/custom-provider.html +6 -9
- data/_includes/themes/j1/modules/connectors/ad/google-adsense.html +9 -6
- data/_includes/themes/j1/modules/connectors/ads +3 -6
- data/_includes/themes/j1/modules/navigator/generator.html +6 -7
- data/_includes/themes/j1/modules/navigator/procedures/topsearch.proc +10 -5
- data/_includes/themes/j1/procedures/layouts/module_writer.proc +1 -1
- data/_includes/themes/j1/procedures/posts/collate_timeline.proc +7 -7
- data/_layouts/default.html +18 -13
- data/assets/data/authclient.html +18 -8
- data/assets/data/banner.html +23 -23
- data/assets/data/carousel.json +30 -21
- data/assets/data/cookie_consent.html +79 -51
- data/assets/data/footer.html +14 -5
- data/assets/data/galleries.json +90 -81
- data/assets/data/gallery_customizer.html +19 -10
- data/assets/data/mdi_icons.json +55 -1
- data/assets/data/menu.html +14 -7
- data/assets/data/mmenu.html +47 -94
- data/assets/data/mmenu_sidebar.html +40 -44
- data/assets/data/mmenu_toc.html +19 -3
- data/assets/data/panel.html +30 -23
- data/assets/data/quicklinks.html +13 -3
- data/assets/data/{search.yml → search.json} +44 -14
- data/assets/data/ssm.html +20 -9
- data/assets/data/themes.json +17 -6
- data/assets/data/twa_v1.json +7034 -6978
- data/assets/themes/j1/adapter/js/algolia.js +34 -17
- data/assets/themes/j1/adapter/js/attic.js +66 -46
- data/assets/themes/j1/adapter/js/carousel.js +43 -22
- data/assets/themes/j1/adapter/js/clipboard.js +230 -0
- data/assets/themes/j1/adapter/js/cookie_consent.js +21 -4
- data/assets/themes/j1/adapter/js/framer.js +18 -3
- data/assets/themes/j1/adapter/js/gallery_customizer.js +27 -10
- data/assets/themes/j1/adapter/js/j1.js +342 -757
- data/assets/themes/j1/adapter/js/{justified_gallery.js → jf_gallery.js} +64 -38
- data/assets/themes/j1/adapter/js/lightbox.js +20 -3
- data/assets/themes/j1/adapter/js/logger.js +23 -6
- data/assets/themes/j1/adapter/js/mdb.js +167 -0
- data/assets/themes/j1/adapter/js/mmenu.js +33 -30
- data/assets/themes/j1/adapter/js/navigator.js +126 -140
- data/assets/themes/j1/adapter/js/searcher.js +22 -4
- data/assets/themes/j1/adapter/js/ssm.js +84 -63
- data/assets/themes/j1/adapter/js/themer.js +35 -53
- data/assets/themes/j1/adapter/js/toccer.js +29 -14
- data/assets/themes/j1/core/css/theme_extensions.css +120 -1230
- data/assets/themes/j1/core/css/theme_extensions.min.css +1 -1
- data/assets/themes/j1/core/css/uno.css +256 -1288
- data/assets/themes/j1/core/css/uno.min.css +1 -1
- data/assets/themes/j1/core/css/vendor.css +7 -57
- data/assets/themes/j1/core/css/vendor.min.css +2 -2
- data/assets/themes/j1/core/js/template.js +16 -86
- data/assets/themes/j1/core/js/template.js.map +1 -1
- data/assets/themes/j1/core/js/template.min.js +1 -1
- data/assets/themes/j1/extensions/bsDatepicker/css/datepicker.css +203 -0
- data/assets/themes/j1/extensions/bsDatepicker/css/theme/uno.css +235 -0
- data/assets/themes/j1/extensions/bsDatepicker/js/datepicker.js +509 -0
- data/assets/themes/j1/extensions/bsDatepicker/less/datepicker.less +122 -0
- data/assets/themes/j1/extensions/bsThemeSwitcher/js/switcher.js +425 -0
- data/assets/themes/j1/extensions/bsThemeSwitcher/js/switcher.min.js +20 -0
- data/assets/themes/j1/extensions/clipboard/LICENSE +20 -0
- data/assets/themes/j1/extensions/clipboard/css/theme/uno.css +52 -0
- data/assets/themes/j1/extensions/clipboard/css/theme/uno.min.css +52 -0
- data/assets/themes/j1/extensions/clipboard/js/clipboard.js +975 -0
- data/assets/themes/j1/extensions/clipboard/js/clipboard.min.js +7 -0
- data/assets/themes/j1/extensions/{iconify → iconifyAPI}/js/iconify.min.js +0 -0
- data/assets/themes/j1/extensions/iframeResizer/LICENSE +21 -0
- data/assets/themes/j1/extensions/iframeResizer/examples/frame.absolute.html +127 -0
- data/assets/themes/j1/extensions/iframeResizer/examples/frame.content.html +157 -0
- data/assets/themes/j1/extensions/iframeResizer/examples/frame.hover.html +68 -0
- data/assets/themes/j1/extensions/iframeResizer/examples/frame.nested.html +100 -0
- data/assets/themes/j1/extensions/iframeResizer/examples/frame.textarea.html +45 -0
- data/assets/themes/j1/extensions/iframeResizer/examples/frame.tolerance.html +113 -0
- data/assets/themes/j1/extensions/iframeResizer/examples/index.html +83 -0
- data/assets/themes/j1/extensions/iframeResizer/examples/two.html +88 -0
- data/assets/themes/j1/extensions/iframeResizer/js/client/iframeResizer.contentWindow.js +1288 -0
- data/assets/themes/j1/extensions/iframeResizer/js/client/iframeResizer.contentWindow.map +1 -0
- data/assets/themes/j1/extensions/iframeResizer/js/client/iframeResizer.contentWindow.min.js +10 -0
- data/assets/themes/j1/extensions/iframeResizer/js/iframeResizer.js +1390 -0
- data/assets/themes/j1/extensions/iframeResizer/js/iframeResizer.map +1 -0
- data/assets/themes/j1/extensions/iframeResizer/js/iframeResizer.min.js +9 -0
- data/assets/themes/j1/extensions/jqMouseWheel/README.md +76 -0
- data/assets/themes/j1/extensions/jqMouseWheel/js/jquery.mousewheel.js +221 -0
- data/assets/themes/j1/extensions/jqMouseWheel/js/jquery.mousewheel.min.js +9 -0
- data/assets/themes/j1/extensions/{justified_gallery → justifiedGallery}/LICENSE +0 -0
- data/assets/themes/j1/extensions/{justified_gallery → justifiedGallery}/README.md +0 -0
- data/assets/themes/j1/extensions/{justified_gallery → justifiedGallery}/_versions/v3.7.0/css/justifiedGallery.css +0 -0
- data/assets/themes/j1/extensions/{justified_gallery → justifiedGallery}/_versions/v3.7.0/css/justifiedGallery.min.css +0 -0
- data/assets/themes/j1/extensions/{justified_gallery → justifiedGallery}/_versions/v3.7.0/css/theme/uno.css +0 -0
- data/assets/themes/j1/extensions/{justified_gallery → justifiedGallery}/_versions/v3.7.0/js/justifiedGallery.3.7.0.js +0 -0
- data/assets/themes/j1/extensions/{justified_gallery → justifiedGallery}/_versions/v3.7.0/js/justifiedGallery.js +0 -0
- data/assets/themes/j1/extensions/{justified_gallery → justifiedGallery}/_versions/v3.7.0/js/justifiedGallery.min.js +0 -0
- data/assets/themes/j1/extensions/{justified_gallery → justifiedGallery}/_versions/v3.7.0/less/.csslintrc +0 -0
- data/assets/themes/j1/extensions/{justified_gallery → justifiedGallery}/_versions/v3.7.0/less/justifiedGallery.less +0 -0
- data/assets/themes/j1/extensions/{justified_gallery → justifiedGallery}/_versions/v4.0.0/css/justifiedGallery.css +0 -0
- data/assets/themes/j1/extensions/{justified_gallery → justifiedGallery}/_versions/v4.0.0/css/justifiedGallery.min.css +0 -0
- data/assets/themes/j1/extensions/{justified_gallery → justifiedGallery}/_versions/v4.0.0/css/theme/uno.css +0 -0
- data/assets/themes/j1/extensions/{justified_gallery → justifiedGallery}/_versions/v4.0.0/js/jquery.justifiedGallery.js +0 -0
- data/assets/themes/j1/extensions/{justified_gallery → justifiedGallery}/_versions/v4.0.0/js/jquery.justifiedGallery.min.js +0 -0
- data/assets/themes/j1/extensions/{justified_gallery → justifiedGallery}/css/justifiedGallery.css +0 -0
- data/assets/themes/j1/extensions/{justified_gallery → justifiedGallery}/css/justifiedGallery.min.css +0 -0
- data/assets/themes/j1/extensions/{justified_gallery → justifiedGallery}/css/theme/uno.css +0 -0
- data/assets/themes/j1/extensions/{justified_gallery → justifiedGallery}/css/theme/uno.min.css +0 -0
- data/assets/themes/j1/extensions/{justified_gallery → justifiedGallery}/js/justifiedGallery.js +0 -0
- data/assets/themes/j1/extensions/{justified_gallery → justifiedGallery}/js/justifiedGallery.min.js +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/core/lg-fb-comment-box.css +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/core/lg-fb-comment-box.min.css +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/core/lg-transitions.css +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/core/lg-transitions.min.css +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/core/lightgallery.css +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/core/lightgallery.min.css +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/fonts/lg.eot +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/fonts/lg.svg +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/fonts/lg.ttf +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/fonts/lg.woff +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/img/loading.gif +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/img/video-play.png +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/img/vimeo-play.png +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/img/youtube-play.png +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/themes/icons/animation-w.png +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/themes/icons/customize-w.png +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/themes/icons/dynamic-w.png +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/themes/icons/facebook-icon.svg +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/themes/icons/googleplus-icon.svg +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/themes/icons/html5-w.png +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/themes/icons/linked-in.png +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/themes/icons/module-w.png +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/themes/icons/play-button.png +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/themes/icons/responsive-w.png +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/themes/icons/thumb-w.png +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/themes/icons/touch-w.png +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/themes/icons/twitter-icon.svg +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/themes/icons/twitter.png +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/themes/icons/video1-w.png +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/themes/icons/zoom-w.png +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/themes/icons/zoom.png +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/themes/uno.css +1 -1
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/css/themes/uno.min.css +1 -1
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/js/core/lightgallery.js +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/js/core/lightgallery.min.js +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/js/modules/j1/j1-video.js +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/js/modules/j1/j1-video.min.js +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/js/modules/lg-autoplay.js +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/js/modules/lg-autoplay.min.js +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/js/modules/lg-fullscreen.js +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/js/modules/lg-fullscreen.min.js +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/js/modules/lg-hash.js +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/js/modules/lg-hash.min.js +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/js/modules/lg-pager.js +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/js/modules/lg-pager.min.js +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/js/modules/lg-share.js +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/js/modules/lg-share.min.js +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/js/modules/lg-thumbnail.js +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/js/modules/lg-thumbnail.min.js +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/js/modules/lg-video.js +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/js/modules/lg-video.min.js +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/js/modules/lg-zoom.js +0 -0
- data/assets/themes/j1/extensions/{light_gallery → lightGallery}/js/modules/lg-zoom.min.js +0 -0
- data/assets/themes/j1/extensions/lightbox/LICENSE +22 -0
- data/assets/themes/j1/extensions/lightbox/css/lightbox.css +224 -0
- data/assets/themes/j1/extensions/lightbox/css/lightbox.min.css +21 -0
- data/assets/themes/j1/extensions/lightbox/css/theme/uno.css +25 -0
- data/assets/themes/j1/extensions/lightbox/css/theme/uno.min.css +26 -0
- data/{lib/starter_web/assets/images/modules/lightbox → assets/themes/j1/extensions/lightbox/images}/close.png +0 -0
- data/{lib/starter_web/assets/images/modules/lightbox → assets/themes/j1/extensions/lightbox/images}/loading.gif +0 -0
- data/{lib/starter_web/assets/images/modules/lightbox → assets/themes/j1/extensions/lightbox/images}/next.png +0 -0
- data/{lib/starter_web/assets/images/modules/lightbox → assets/themes/j1/extensions/lightbox/images}/prev.png +0 -0
- data/assets/themes/j1/extensions/lightbox/js/lightbox.js +583 -0
- data/assets/themes/j1/extensions/lightbox/js/lightbox.min.js +35 -0
- data/assets/themes/j1/extensions/mmenuLight/css/mmenu.css +392 -0
- data/assets/themes/j1/extensions/mmenuLight/css/mmenu.min.css +393 -0
- data/assets/themes/j1/extensions/mmenuLight/css/theme/uno.css +170 -0
- data/assets/themes/j1/extensions/mmenuLight/css/theme/uno.min.css +169 -0
- data/assets/themes/j1/extensions/mmenuLight/js/mmenu.js +30 -0
- data/assets/themes/j1/extensions/noUISlider/LICENSE +13 -0
- data/assets/themes/j1/extensions/noUISlider/css/nouislider.css +260 -0
- data/assets/themes/j1/extensions/noUISlider/css/nouislider.min.css +1 -0
- data/assets/themes/j1/extensions/noUISlider/js/nouislider.js +2312 -0
- data/assets/themes/j1/extensions/noUISlider/js/nouislider.min.js +3 -0
- data/assets/themes/j1/extensions/twemoji/js/LICENSE +21 -0
- data/assets/themes/j1/extensions/twemoji/js/picker/LICENSE +21 -0
- data/assets/themes/j1/extensions/twemoji/js/picker/twemoji-picker.js +21 -0
- data/assets/themes/j1/extensions/twemoji/js/picker/twemoji-picker.min.js +21 -0
- data/assets/themes/j1/extensions/twemoji/js/twemoji.js +590 -0
- data/assets/themes/j1/extensions/twemoji/js/twemoji.min.js +25 -0
- data/lib/j1/version.rb +3 -3
- data/lib/starter_web/Gemfile +7 -1
- data/lib/starter_web/_config.yml +9 -8
- data/lib/starter_web/_data/_defaults/resources.yml +13 -13
- data/lib/starter_web/_data/blocks/banner.yml +21 -29
- data/lib/starter_web/_data/blocks/footer.yml +10 -3
- data/lib/starter_web/_data/blocks/panel.yml +13 -13
- data/lib/starter_web/_data/layouts/default.yml +10 -0
- data/lib/starter_web/_data/layouts/home.yml +7 -7
- data/lib/starter_web/_data/layouts/page.yml +15 -16
- data/lib/starter_web/_data/modules/advertising.yml +48 -0
- data/lib/starter_web/_data/modules/attics.yml +2 -38
- data/lib/starter_web/_data/modules/cookie_consent.yml +3 -95
- data/lib/starter_web/_data/modules/defaults/attics.yml +16 -15
- data/lib/starter_web/_data/modules/defaults/cookie_consent.yml +75 -12
- data/lib/starter_web/_data/modules/defaults/jekyll_search.yml +9 -9
- data/lib/starter_web/_data/modules/defaults/navigator.yml +56 -21
- data/lib/starter_web/_data/modules/defaults/ssm.yml +3 -3
- data/lib/starter_web/_data/modules/defaults/toccer.yml +4 -8
- data/lib/starter_web/_data/modules/jekyll_search.yml +3 -21
- data/lib/starter_web/_data/modules/navigator.yml +1 -1
- data/lib/starter_web/_data/modules/navigator_menu.yml +4 -0
- data/lib/starter_web/_data/modules/ssm.yml +9 -0
- data/lib/starter_web/_data/modules/themer.yml +2 -3
- data/lib/starter_web/_data/modules/toccer.yml +6 -11
- data/lib/starter_web/_data/resources.yml +240 -112
- data/lib/starter_web/_data/template_settings.yml +117 -6
- data/lib/starter_web/_plugins/asciidoctor-extensions/fab-icon-inline.rb +1 -1
- data/lib/starter_web/_plugins/asciidoctor-extensions/fas-icon-inline.rb +2 -2
- data/lib/starter_web/_plugins/asciidoctor-extensions/iconify-icon-inline.rb +2 -2
- data/lib/starter_web/_plugins/asciidoctor-extensions/mdi-icon-inline.rb +2 -2
- data/lib/starter_web/_plugins/asciidoctor-extensions/twitter-emoji-inline.rb +2 -2
- data/lib/starter_web/_plugins/minifyJS.rb +54 -0
- data/lib/starter_web/_plugins/{uglify.rb → minifyJSON.rb} +15 -9
- data/lib/starter_web/assets/images/modules/attics/admin-dashboard-bootstrap-1280x600.jpg +0 -0
- data/lib/starter_web/assets/images/modules/attics/alex-holyoake-1920x1280.jpg +0 -0
- data/lib/starter_web/assets/images/modules/attics/anaya-katlego-1920x1280.jpg +0 -0
- data/lib/starter_web/assets/images/modules/attics/antonella-lombardi-1920x1280.jpg +0 -0
- data/lib/starter_web/assets/images/modules/attics/antonino-visalli-1920x1280.jpg +0 -0
- data/lib/starter_web/assets/images/modules/attics/banner/library-1920x800-bw.jpg +0 -0
- data/lib/starter_web/assets/images/modules/attics/banner/signpost-1920x800-bw.jpg +0 -0
- data/lib/starter_web/assets/images/modules/attics/banner/water-journal-1280x600.jpg +0 -0
- data/lib/starter_web/assets/images/modules/attics/banner/write-1280x600-bw.jpg +0 -0
- data/lib/starter_web/assets/images/modules/attics/brandon-mowinkel-1920x1280.jpg +0 -0
- data/lib/starter_web/assets/images/modules/attics/building-blocks-1920x1280-bw.jpg +0 -0
- data/lib/starter_web/assets/images/modules/attics/cookies-1920x1200-bw.jpg +0 -0
- data/lib/starter_web/assets/images/modules/attics/daniel-jensen-1920x1280.jpg +0 -0
- data/lib/starter_web/assets/images/modules/attics/giammarco-boscaro-1920x1280.jpg +0 -0
- data/lib/starter_web/assets/images/modules/attics/go-up-1920x1280-bw.jpg +0 -0
- data/lib/starter_web/assets/images/modules/attics/ian-schneider-1920x1280.jpg +0 -0
- data/lib/starter_web/assets/images/modules/attics/ideas-start-here-1920x1280-bw.jpg +0 -0
- data/lib/starter_web/assets/images/modules/attics/jason-rosewell-1920x1280.jpg +0 -0
- data/lib/starter_web/assets/images/modules/attics/jessica-ruscello-1920x1280.jpg +0 -0
- data/lib/starter_web/assets/images/modules/attics/lianhao-1920x1280.jpg +0 -0
- data/lib/starter_web/assets/images/modules/attics/library-1920x1280-bw.jpg +0 -0
- data/lib/starter_web/assets/images/modules/attics/matthaeus-1920x1280.jpg +0 -0
- data/lib/starter_web/assets/images/modules/attics/nousnou-iwasaki-1920x1280.jpg +0 -0
- data/lib/starter_web/assets/images/modules/attics/premium-1920x1280-bw.jpg +0 -0
- data/lib/starter_web/assets/images/modules/attics/robert-v-ruggiero-1920x1280.jpg +0 -0
- data/lib/starter_web/assets/images/modules/attics/romain-vignes-1920x1280.jpg +0 -0
- data/lib/starter_web/assets/images/modules/attics/runner-1920x1200-bw.jpg +0 -0
- data/lib/starter_web/assets/images/modules/attics/spider-web-1920x1200-bw.jpg +0 -0
- data/lib/starter_web/assets/images/modules/attics/the-place-1920x1280-bw.jpg +0 -0
- data/lib/starter_web/assets/images/modules/attics/welcome-1920x1280-bw.jpg +0 -0
- data/lib/starter_web/assets/images/modules/carousel/cats/cat-1.jpg +0 -0
- data/lib/starter_web/assets/images/modules/carousel/mega_cities/andreas-brucker_b.jpg +0 -0
- data/lib/starter_web/assets/images/modules/carousel/mega_cities/denys-nevozhai-1_b.jpg +0 -0
- data/lib/starter_web/assets/images/modules/carousel/mega_cities/denys-nevozhai-2_b.jpg +0 -0
- data/lib/starter_web/assets/images/modules/carousel/mega_cities/luca-bravo_b.jpg +0 -0
- data/lib/starter_web/assets/images/modules/carousel/mega_cities/thomas-tucker_b.jpg +0 -0
- data/lib/starter_web/assets/images/modules/gallery/mega_cities/banter-snaps_b.jpg +0 -0
- data/lib/starter_web/assets/images/modules/gallery/mega_cities/denys-nevozhai-1_b.jpg +0 -0
- data/lib/starter_web/assets/images/modules/gallery/mega_cities/denys-nevozhai-2-bw.jpg +0 -0
- data/lib/starter_web/assets/images/modules/gallery/mega_cities/denys-nevozhai-2_b.jpg +0 -0
- data/lib/starter_web/assets/images/modules/gallery/mega_cities/emmad-mazhari_b.jpg +0 -0
- data/lib/starter_web/assets/images/modules/gallery/mega_cities/ethan-brooke_b.jpg +0 -0
- data/lib/starter_web/assets/images/modules/gallery/mega_cities/federico-rizzarelli_b.jpg +0 -0
- data/lib/starter_web/assets/images/modules/gallery/mega_cities/gints-gailis_b.jpg +0 -0
- data/lib/starter_web/assets/images/modules/gallery/mega_cities/johan-mouchet_b.jpg +0 -0
- data/lib/starter_web/assets/images/modules/gallery/mega_cities/luca-bravo_b.jpg +0 -0
- data/lib/starter_web/assets/images/modules/gallery/mega_cities/oskars-sylwan_b.jpg +0 -0
- data/lib/starter_web/assets/images/modules/gallery/mega_cities/steven-diaz_b.jpg +0 -0
- data/lib/starter_web/assets/images/modules/gallery/mega_cities/thomas-tucker-bw.jpg +0 -0
- data/lib/starter_web/assets/images/modules/gallery/mega_cities/thomas-tucker_b.jpg +0 -0
- data/lib/starter_web/index.html +9 -8
- data/lib/starter_web/package.json +1 -1
- data/lib/starter_web/pages/public/clear_button.adoc +121 -0
- data/lib/starter_web/pages/public/learn/examples/floating_ad.adoc +221 -0
- data/lib/starter_web/pages/public/learn/{floating_sidebar.adoc → examples/floating_div.adoc} +60 -50
- data/lib/starter_web/pages/public/learn/kickstarter/web_in_a_day/000_includes/parts.asciidoc +1 -1
- data/lib/starter_web/pages/public/learn/kickstarter/web_in_a_day/100_meet_and_greet_jekyll.adoc +9 -4
- data/lib/starter_web/pages/public/learn/roundtrip/000_bs_tour_api.adoc +2 -2
- data/lib/starter_web/pages/public/learn/roundtrip/000_includes/documents/410_table_3_column.asciidoc +1 -1
- data/lib/starter_web/pages/public/learn/roundtrip/000_includes/documents/419_advanced_modals_html.asciidoc +5 -5
- data/lib/starter_web/pages/public/learn/roundtrip/100_present_images.adoc +2 -2
- data/lib/starter_web/pages/public/learn/roundtrip/200_typography.adoc +4 -3
- data/lib/starter_web/pages/public/learn/roundtrip/300_icon_fonts.adoc +35 -44
- data/lib/starter_web/pages/public/learn/roundtrip/400_asciidoc_extensions.adoc +1 -1
- data/lib/starter_web/pages/public/learn/roundtrip/420_responsive_tables_extensions.adoc +39 -39
- data/lib/starter_web/pages/public/learn/vtutorials/000_includes/documents/410_table_3_column.asciidoc +1 -1
- data/lib/starter_web/pages/public/learn/whats_up.adoc +1 -0
- data/lib/starter_web/pages/public/panels/intro_panel/panel.adoc +54 -48
- data/lib/starter_web/pages/public/previewer/000_includes/tables/mdi_icons/100_absolute_sizes.asciidoc +1 -1
- data/lib/starter_web/pages/public/previewer/000_includes/tables/mdi_icons/110_bs_grid_sizes.asciidoc +1 -1
- data/lib/starter_web/pages/public/previewer/000_includes/tables/mdi_icons/120_relative_sizes.asciidoc +1 -41
- data/lib/starter_web/pages/public/previewer/000_includes/tables/mdi_icons/200_rotate.asciidoc +1 -1
- data/lib/starter_web/pages/public/previewer/000_includes/tables/mdi_icons/300_flip.asciidoc +1 -1
- data/lib/starter_web/pages/public/previewer/000_includes/tables/mdi_icons/400_spin_pulsed.asciidoc +1 -1
- data/lib/starter_web/pages/public/previewer/000_includes/tables/mdi_icons/500_bw_color_palette.asciidoc +1 -1
- data/lib/starter_web/pages/public/previewer/000_includes/tables/mdi_icons/510_bs_color_palette.asciidoc +1 -1
- data/lib/starter_web/pages/public/previewer/000_includes/tables/mdi_icons/600_md_color_palette.asciidoc +1 -1
- data/lib/starter_web/pages/public/previewer/000_includes/tables/mdi_icons/601_md_color_palette_indigo.asciidoc +1 -1
- data/lib/starter_web/pages/public/previewer/000_includes/tables/mdi_icons/602_md_color_palette_pink.asciidoc +1 -1
- data/lib/starter_web/pages/public/previewer/000_includes/tables/twitter_emoji/100_bs_sizes.asciidoc +1 -1
- data/lib/starter_web/pages/public/previewer/000_includes/tables/twitter_emoji/100_relative_sizes.asciidoc +1 -1
- data/lib/starter_web/pages/public/previewer/000_includes/tables/twitter_emoji/200_rotate.asciidoc +1 -1
- data/lib/starter_web/pages/public/previewer/000_includes/tables/twitter_emoji/300_flip.asciidoc +1 -1
- data/lib/starter_web/pages/public/previewer/000_includes/tables/twitter_emoji/400_spin_pulsed.asciidoc +1 -1
- data/lib/starter_web/pages/public/previewer/bootstrap_theme.adoc +672 -863
- data/lib/starter_web/pages/public/previewer/iframer.adoc +15 -14
- data/lib/starter_web/pages/public/previewer/justified_gallery.html +1 -1
- data/lib/starter_web/pages/public/previewer/mdb_preview/000_includes/attributes.asciidoc +69 -0
- data/lib/starter_web/pages/public/previewer/mdb_preview/000_includes/documents/100_buttons.asciidoc +170 -0
- data/lib/starter_web/pages/public/previewer/mdb_preview/mdb_previewer.adoc +52 -0
- data/lib/starter_web/pages/public/previewer/mdi_icons_preview.adoc +1 -1
- data/lib/starter_web/pages/public/previewer/twitter_emoji_preview.adoc +2 -2
- data/lib/starter_web/utilsrv/_defaults/package.json +1 -1
- data/lib/starter_web/utilsrv/package.json +1 -1
- metadata +148 -105
- data/assets/data/colors.json +0 -42
- data/assets/data/font_sizes.json +0 -42
- data/assets/data/messages.yml +0 -131
- data/assets/themes/j1/extensions/iframe_resizer/examples/frame.absolute.html +0 -86
- data/assets/themes/j1/extensions/iframe_resizer/examples/frame.content.html +0 -58
- data/assets/themes/j1/extensions/iframe_resizer/examples/frame.hover.html +0 -51
- data/assets/themes/j1/extensions/iframe_resizer/examples/frame.nested.html +0 -68
- data/assets/themes/j1/extensions/iframe_resizer/examples/frame.textarea.html +0 -46
- data/assets/themes/j1/extensions/iframe_resizer/examples/frame.tolerance.html +0 -79
- data/assets/themes/j1/extensions/iframe_resizer/examples/index.html +0 -70
- data/assets/themes/j1/extensions/iframe_resizer/examples/two.html +0 -71
- data/assets/themes/j1/extensions/iframe_resizer/js/client/iframeResizer.contentWindow.js +0 -1104
- data/assets/themes/j1/extensions/iframe_resizer/js/client/iframeResizer.contentWindow.map +0 -1
- data/assets/themes/j1/extensions/iframe_resizer/js/client/iframeResizer.contentWindow.min.js +0 -10
- data/assets/themes/j1/extensions/log4javascript/log4javascript.js +0 -5826
- data/assets/themes/j1/extensions/log4javascript/log4javascript.min.js +0 -266
- data/lib/starter_web/assets/images/modules/attics/admin-dashboard-bootstrap-1280x600.png +0 -0
- data/lib/starter_web/assets/images/modules/attics/mae-mu-Vf9gbsLZyf0-unsplash.jpg +0 -0
- data/lib/starter_web/assets/images/modules/attics/mae-mue-1920x1280-v.jpg +0 -0
- data/lib/starter_web/assets/images/modules/attics/mae-mue-1920x1280.jpg +0 -0
@@ -0,0 +1,3 @@
|
|
1
|
+
/*! nouislider - 10.1.0 - 2017-07-28 13:09:54 */
|
2
|
+
|
3
|
+
!function(a){"function"==typeof define&&define.amd?define([],a):"object"==typeof exports?module.exports=a():window.noUiSlider=a()}(function(){"use strict";function a(a){return"object"==typeof a&&"function"==typeof a.to&&"function"==typeof a.from}function b(a){a.parentElement.removeChild(a)}function c(a){a.preventDefault()}function d(a){return a.filter(function(a){return!this[a]&&(this[a]=!0)},{})}function e(a,b){return Math.round(a/b)*b}function f(a,b){var c=a.getBoundingClientRect(),d=a.ownerDocument,e=d.documentElement,f=o(d);return/webkit.*Chrome.*Mobile/i.test(navigator.userAgent)&&(f.x=0),b?c.top+f.y-e.clientTop:c.left+f.x-e.clientLeft}function g(a){return"number"==typeof a&&!isNaN(a)&&isFinite(a)}function h(a,b,c){c>0&&(l(a,b),setTimeout(function(){m(a,b)},c))}function i(a){return Math.max(Math.min(a,100),0)}function j(a){return Array.isArray(a)?a:[a]}function k(a){a=String(a);var b=a.split(".");return b.length>1?b[1].length:0}function l(a,b){a.classList?a.classList.add(b):a.className+=" "+b}function m(a,b){a.classList?a.classList.remove(b):a.className=a.className.replace(new RegExp("(^|\\b)"+b.split(" ").join("|")+"(\\b|$)","gi")," ")}function n(a,b){return a.classList?a.classList.contains(b):new RegExp("\\b"+b+"\\b").test(a.className)}function o(a){var b=void 0!==window.pageXOffset,c="CSS1Compat"===(a.compatMode||"");return{x:b?window.pageXOffset:c?a.documentElement.scrollLeft:a.body.scrollLeft,y:b?window.pageYOffset:c?a.documentElement.scrollTop:a.body.scrollTop}}function p(){return window.navigator.pointerEnabled?{start:"pointerdown",move:"pointermove",end:"pointerup"}:window.navigator.msPointerEnabled?{start:"MSPointerDown",move:"MSPointerMove",end:"MSPointerUp"}:{start:"mousedown touchstart",move:"mousemove touchmove",end:"mouseup touchend"}}function q(){var a=!1;try{var b=Object.defineProperty({},"passive",{get:function(){a=!0}});window.addEventListener("test",null,b)}catch(a){}return a}function r(){return window.CSS&&CSS.supports&&CSS.supports("touch-action","none")}function s(a,b){return 100/(b-a)}function t(a,b){return 100*b/(a[1]-a[0])}function u(a,b){return t(a,a[0]<0?b+Math.abs(a[0]):b-a[0])}function v(a,b){return b*(a[1]-a[0])/100+a[0]}function w(a,b){for(var c=1;a>=b[c];)c+=1;return c}function x(a,b,c){if(c>=a.slice(-1)[0])return 100;var d,e,f,g,h=w(c,a);return d=a[h-1],e=a[h],f=b[h-1],g=b[h],f+u([d,e],c)/s(f,g)}function y(a,b,c){if(c>=100)return a.slice(-1)[0];var d,e,f,g,h=w(c,b);return d=a[h-1],e=a[h],f=b[h-1],g=b[h],v([d,e],(c-f)*s(f,g))}function z(a,b,c,d){if(100===d)return d;var f,g,h=w(d,a);return c?(f=a[h-1],g=a[h],d-f>(g-f)/2?g:f):b[h-1]?a[h-1]+e(d-a[h-1],b[h-1]):d}function A(a,b,c){var d;if("number"==typeof b&&(b=[b]),"[object Array]"!==Object.prototype.toString.call(b))throw new Error("noUiSlider ("+_+"): 'range' contains invalid value.");if(d="min"===a?0:"max"===a?100:parseFloat(a),!g(d)||!g(b[0]))throw new Error("noUiSlider ("+_+"): 'range' value isn't numeric.");c.xPct.push(d),c.xVal.push(b[0]),d?c.xSteps.push(!isNaN(b[1])&&b[1]):isNaN(b[1])||(c.xSteps[0]=b[1]),c.xHighestCompleteStep.push(0)}function B(a,b,c){if(!b)return!0;c.xSteps[a]=t([c.xVal[a],c.xVal[a+1]],b)/s(c.xPct[a],c.xPct[a+1]);var d=(c.xVal[a+1]-c.xVal[a])/c.xNumSteps[a],e=Math.ceil(Number(d.toFixed(3))-1),f=c.xVal[a]+c.xNumSteps[a]*e;c.xHighestCompleteStep[a]=f}function C(a,b,c){this.xPct=[],this.xVal=[],this.xSteps=[c||!1],this.xNumSteps=[!1],this.xHighestCompleteStep=[],this.snap=b;var d,e=[];for(d in a)a.hasOwnProperty(d)&&e.push([a[d],d]);for(e.length&&"object"==typeof e[0][0]?e.sort(function(a,b){return a[0][0]-b[0][0]}):e.sort(function(a,b){return a[0]-b[0]}),d=0;d<e.length;d++)A(e[d][1],e[d][0],this);for(this.xNumSteps=this.xSteps.slice(0),d=0;d<this.xNumSteps.length;d++)B(d,this.xNumSteps[d],this)}function D(b){if(a(b))return!0;throw new Error("noUiSlider ("+_+"): 'format' requires 'to' and 'from' methods.")}function E(a,b){if(!g(b))throw new Error("noUiSlider ("+_+"): 'step' is not numeric.");a.singleStep=b}function F(a,b){if("object"!=typeof b||Array.isArray(b))throw new Error("noUiSlider ("+_+"): 'range' is not an object.");if(void 0===b.min||void 0===b.max)throw new Error("noUiSlider ("+_+"): Missing 'min' or 'max' in 'range'.");if(b.min===b.max)throw new Error("noUiSlider ("+_+"): 'range' 'min' and 'max' cannot be equal.");a.spectrum=new C(b,a.snap,a.singleStep)}function G(a,b){if(b=j(b),!Array.isArray(b)||!b.length)throw new Error("noUiSlider ("+_+"): 'start' option is incorrect.");a.handles=b.length,a.start=b}function H(a,b){if(a.snap=b,"boolean"!=typeof b)throw new Error("noUiSlider ("+_+"): 'snap' option must be a boolean.")}function I(a,b){if(a.animate=b,"boolean"!=typeof b)throw new Error("noUiSlider ("+_+"): 'animate' option must be a boolean.")}function J(a,b){if(a.animationDuration=b,"number"!=typeof b)throw new Error("noUiSlider ("+_+"): 'animationDuration' option must be a number.")}function K(a,b){var c,d=[!1];if("lower"===b?b=[!0,!1]:"upper"===b&&(b=[!1,!0]),!0===b||!1===b){for(c=1;c<a.handles;c++)d.push(b);d.push(!1)}else{if(!Array.isArray(b)||!b.length||b.length!==a.handles+1)throw new Error("noUiSlider ("+_+"): 'connect' option doesn't match handle count.");d=b}a.connect=d}function L(a,b){switch(b){case"horizontal":a.ort=0;break;case"vertical":a.ort=1;break;default:throw new Error("noUiSlider ("+_+"): 'orientation' option is invalid.")}}function M(a,b){if(!g(b))throw new Error("noUiSlider ("+_+"): 'margin' option must be numeric.");if(0!==b&&(a.margin=a.spectrum.getMargin(b),!a.margin))throw new Error("noUiSlider ("+_+"): 'margin' option is only supported on linear sliders.")}function N(a,b){if(!g(b))throw new Error("noUiSlider ("+_+"): 'limit' option must be numeric.");if(a.limit=a.spectrum.getMargin(b),!a.limit||a.handles<2)throw new Error("noUiSlider ("+_+"): 'limit' option is only supported on linear sliders with 2 or more handles.")}function O(a,b){if(!g(b))throw new Error("noUiSlider ("+_+"): 'padding' option must be numeric.");if(0!==b){if(a.padding=a.spectrum.getMargin(b),!a.padding)throw new Error("noUiSlider ("+_+"): 'padding' option is only supported on linear sliders.");if(a.padding<0)throw new Error("noUiSlider ("+_+"): 'padding' option must be a positive number.");if(a.padding>=50)throw new Error("noUiSlider ("+_+"): 'padding' option must be less than half the range.")}}function P(a,b){switch(b){case"ltr":a.dir=0;break;case"rtl":a.dir=1;break;default:throw new Error("noUiSlider ("+_+"): 'direction' option was not recognized.")}}function Q(a,b){if("string"!=typeof b)throw new Error("noUiSlider ("+_+"): 'behaviour' must be a string containing options.");var c=b.indexOf("tap")>=0,d=b.indexOf("drag")>=0,e=b.indexOf("fixed")>=0,f=b.indexOf("snap")>=0,g=b.indexOf("hover")>=0;if(e){if(2!==a.handles)throw new Error("noUiSlider ("+_+"): 'fixed' behaviour must be used with 2 handles");M(a,a.start[1]-a.start[0])}a.events={tap:c||f,drag:d,fixed:e,snap:f,hover:g}}function R(a,b){if(a.multitouch=b,"boolean"!=typeof b)throw new Error("noUiSlider ("+_+"): 'multitouch' option must be a boolean.")}function S(a,b){if(!1!==b)if(!0===b){a.tooltips=[];for(var c=0;c<a.handles;c++)a.tooltips.push(!0)}else{if(a.tooltips=j(b),a.tooltips.length!==a.handles)throw new Error("noUiSlider ("+_+"): must pass a formatter for all handles.");a.tooltips.forEach(function(a){if("boolean"!=typeof a&&("object"!=typeof a||"function"!=typeof a.to))throw new Error("noUiSlider ("+_+"): 'tooltips' must be passed a formatter or 'false'.")})}}function T(a,b){a.ariaFormat=b,D(b)}function U(a,b){a.format=b,D(b)}function V(a,b){if(void 0!==b&&"string"!=typeof b&&!1!==b)throw new Error("noUiSlider ("+_+"): 'cssPrefix' must be a string or `false`.");a.cssPrefix=b}function W(a,b){if(void 0!==b&&"object"!=typeof b)throw new Error("noUiSlider ("+_+"): 'cssClasses' must be an object.");if("string"==typeof a.cssPrefix){a.cssClasses={};for(var c in b)b.hasOwnProperty(c)&&(a.cssClasses[c]=a.cssPrefix+b[c])}else a.cssClasses=b}function X(a,b){if(!0!==b&&!1!==b)throw new Error("noUiSlider ("+_+"): 'useRequestAnimationFrame' option should be true (default) or false.");a.useRequestAnimationFrame=b}function Y(a){var b={margin:0,limit:0,padding:0,animate:!0,animationDuration:300,ariaFormat:aa,format:aa},c={step:{r:!1,t:E},start:{r:!0,t:G},connect:{r:!0,t:K},direction:{r:!0,t:P},snap:{r:!1,t:H},animate:{r:!1,t:I},animationDuration:{r:!1,t:J},range:{r:!0,t:F},orientation:{r:!1,t:L},margin:{r:!1,t:M},limit:{r:!1,t:N},padding:{r:!1,t:O},behaviour:{r:!0,t:Q},multitouch:{r:!0,t:R},ariaFormat:{r:!1,t:T},format:{r:!1,t:U},tooltips:{r:!1,t:S},cssPrefix:{r:!1,t:V},cssClasses:{r:!1,t:W},useRequestAnimationFrame:{r:!1,t:X}},d={connect:!1,direction:"ltr",behaviour:"tap",multitouch:!1,orientation:"horizontal",cssPrefix:"noUi-",cssClasses:{target:"target",base:"base",origin:"origin",handle:"handle",handleLower:"handle-lower",handleUpper:"handle-upper",horizontal:"horizontal",vertical:"vertical",background:"background",connect:"connect",ltr:"ltr",rtl:"rtl",draggable:"draggable",drag:"state-drag",tap:"state-tap",active:"active",tooltip:"tooltip",pips:"pips",pipsHorizontal:"pips-horizontal",pipsVertical:"pips-vertical",marker:"marker",markerHorizontal:"marker-horizontal",markerVertical:"marker-vertical",markerNormal:"marker-normal",markerLarge:"marker-large",markerSub:"marker-sub",value:"value",valueHorizontal:"value-horizontal",valueVertical:"value-vertical",valueNormal:"value-normal",valueLarge:"value-large",valueSub:"value-sub"},useRequestAnimationFrame:!0};a.format&&!a.ariaFormat&&(a.ariaFormat=a.format),Object.keys(c).forEach(function(e){if(void 0===a[e]&&void 0===d[e]){if(c[e].r)throw new Error("noUiSlider ("+_+"): '"+e+"' is required.");return!0}c[e].t(b,void 0===a[e]?d[e]:a[e])}),b.pips=a.pips;var e=[["left","top"],["right","bottom"]];return b.style=e[b.dir][b.ort],b.styleOposite=e[b.dir?0:1][b.ort],b}function Z(a,e,g){function k(a,b){var c=wa.createElement("div");return b&&l(c,b),a.appendChild(c),c}function s(a,b){var c=k(a,e.cssClasses.origin),d=k(c,e.cssClasses.handle);return d.setAttribute("data-handle",b),d.setAttribute("tabindex","0"),d.setAttribute("role","slider"),d.setAttribute("aria-orientation",e.ort?"vertical":"horizontal"),0===b?l(d,e.cssClasses.handleLower):b===e.handles-1&&l(d,e.cssClasses.handleUpper),c}function t(a,b){return!!b&&k(a,e.cssClasses.connect)}function u(a,b){ia=[],ja=[],ja.push(t(b,a[0]));for(var c=0;c<e.handles;c++)ia.push(s(b,c)),ra[c]=c,ja.push(t(b,a[c+1]))}function v(a){l(a,e.cssClasses.target),0===e.dir?l(a,e.cssClasses.ltr):l(a,e.cssClasses.rtl),0===e.ort?l(a,e.cssClasses.horizontal):l(a,e.cssClasses.vertical),ha=k(a,e.cssClasses.base)}function w(a,b){return!!e.tooltips[b]&&k(a.firstChild,e.cssClasses.tooltip)}function x(){var a=ia.map(w);ea("update",function(b,c,d){if(a[c]){var f=b[c];!0!==e.tooltips[c]&&(f=e.tooltips[c].to(d[c])),a[c].innerHTML=f}})}function y(){ea("update",function(a,b,c,d,f){ra.forEach(function(a){var b=ia[a],d=S(qa,a,0,!0,!0,!0),g=S(qa,a,100,!0,!0,!0),h=f[a],i=e.ariaFormat.to(c[a]);b.children[0].setAttribute("aria-valuemin",d.toFixed(1)),b.children[0].setAttribute("aria-valuemax",g.toFixed(1)),b.children[0].setAttribute("aria-valuenow",h.toFixed(1)),b.children[0].setAttribute("aria-valuetext",i)})})}function z(a,b,c){if("range"===a||"steps"===a)return ta.xVal;if("count"===a){if(!b)throw new Error("noUiSlider ("+_+"): 'values' required for mode 'count'.");var d,e=100/(b-1),f=0;for(b=[];(d=f++*e)<=100;)b.push(d);a="positions"}return"positions"===a?b.map(function(a){return ta.fromStepping(c?ta.getStep(a):a)}):"values"===a?c?b.map(function(a){return ta.fromStepping(ta.getStep(ta.toStepping(a)))}):b:void 0}function A(a,b,c){function e(a,b){return(a+b).toFixed(7)/1}var f={},g=ta.xVal[0],h=ta.xVal[ta.xVal.length-1],i=!1,j=!1,k=0;return c=d(c.slice().sort(function(a,b){return a-b})),c[0]!==g&&(c.unshift(g),i=!0),c[c.length-1]!==h&&(c.push(h),j=!0),c.forEach(function(d,g){var h,l,m,n,o,p,q,r,s,t,u=d,v=c[g+1];if("steps"===b&&(h=ta.xNumSteps[g]),h||(h=v-u),!1!==u&&void 0!==v)for(h=Math.max(h,1e-7),l=u;l<=v;l=e(l,h)){for(n=ta.toStepping(l),o=n-k,r=o/a,s=Math.round(r),t=o/s,m=1;m<=s;m+=1)p=k+m*t,f[p.toFixed(5)]=["x",0];q=c.indexOf(l)>-1?1:"steps"===b?2:0,!g&&i&&(q=0),l===v&&j||(f[n.toFixed(5)]=[l,q]),k=n}}),f}function B(a,b,c){function d(a,b){var c=b===e.cssClasses.value,d=c?j:m,f=c?h:i;return b+" "+d[e.ort]+" "+f[a]}function f(a,f){f[1]=f[1]&&b?b(f[0],f[1]):f[1];var h=k(g,!1);h.className=d(f[1],e.cssClasses.marker),h.style[e.style]=a+"%",f[1]&&(h=k(g,!1),h.className=d(f[1],e.cssClasses.value),h.style[e.style]=a+"%",h.innerText=c.to(f[0]))}var g=wa.createElement("div"),h=[e.cssClasses.valueNormal,e.cssClasses.valueLarge,e.cssClasses.valueSub],i=[e.cssClasses.markerNormal,e.cssClasses.markerLarge,e.cssClasses.markerSub],j=[e.cssClasses.valueHorizontal,e.cssClasses.valueVertical],m=[e.cssClasses.markerHorizontal,e.cssClasses.markerVertical];return l(g,e.cssClasses.pips),l(g,0===e.ort?e.cssClasses.pipsHorizontal:e.cssClasses.pipsVertical),Object.keys(a).forEach(function(b){f(b,a[b])}),g}function C(){la&&(b(la),la=null)}function D(a){C();var b=a.mode,c=a.density||1,d=a.filter||!1,e=a.values||!1,f=a.stepped||!1,g=z(b,e,f),h=A(c,b,g),i=a.format||{to:Math.round};return la=pa.appendChild(B(h,d,i))}function E(){var a=ha.getBoundingClientRect(),b="offset"+["Width","Height"][e.ort];return 0===e.ort?a.width||ha[b]:a.height||ha[b]}function F(a,b,c,d){var f=function(f){return!pa.hasAttribute("disabled")&&(!n(pa,e.cssClasses.tap)&&(!!(f=G(f,d.pageOffset,d.target||b))&&(!(a===ma.start&&void 0!==f.buttons&&f.buttons>1)&&((!d.hover||!f.buttons)&&(oa||f.preventDefault(),f.calcPoint=f.points[e.ort],void c(f,d))))))},g=[];return a.split(" ").forEach(function(a){b.addEventListener(a,f,!!oa&&{passive:!0}),g.push([a,f])}),g}function G(a,b,c){var d,f,g=0===a.type.indexOf("touch"),h=0===a.type.indexOf("mouse"),i=0===a.type.indexOf("pointer");if(0===a.type.indexOf("MSPointer")&&(i=!0),g&&e.multitouch){var j=function(a){return a.target===c||c.contains(a.target)};if("touchstart"===a.type){var k=Array.prototype.filter.call(a.touches,j);if(k.length>1)return!1;d=k[0].pageX,f=k[0].pageY}else{var l=Array.prototype.find.call(a.changedTouches,j);if(!l)return!1;d=l.pageX,f=l.pageY}}else if(g){if(a.touches.length>1)return!1;d=a.changedTouches[0].pageX,f=a.changedTouches[0].pageY}return b=b||o(wa),(h||i)&&(d=a.clientX+b.x,f=a.clientY+b.y),a.pageOffset=b,a.points=[d,f],a.cursor=h||i,a}function H(a){var b=a-f(ha,e.ort),c=100*b/E();return e.dir?100-c:c}function I(a){var b=100,c=!1;return ia.forEach(function(d,e){if(!d.hasAttribute("disabled")){var f=Math.abs(qa[e]-a);f<b&&(c=e,b=f)}}),c}function J(a,b,c,d){var e=c.slice(),f=[!a,a],g=[a,!a];d=d.slice(),a&&d.reverse(),d.length>1?d.forEach(function(a,c){var d=S(e,a,e[a]+b,f[c],g[c],!1);!1===d?b=0:(b=d-e[a],e[a]=d)}):f=g=[!0];var h=!1;d.forEach(function(a,d){h=W(a,c[a]+b,f[d],g[d])||h}),h&&d.forEach(function(a){K("update",a),K("slide",a)})}function K(a,b,c){Object.keys(va).forEach(function(d){var f=d.split(".")[0];a===f&&va[d].forEach(function(a){a.call(ka,ua.map(e.format.to),b,ua.slice(),c||!1,qa.slice())})})}function L(a,b){"mouseout"===a.type&&"HTML"===a.target.nodeName&&null===a.relatedTarget&&N(a,b)}function M(a,b){if(-1===navigator.appVersion.indexOf("MSIE 9")&&0===a.buttons&&0!==b.buttonsProperty)return N(a,b);var c=(e.dir?-1:1)*(a.calcPoint-b.startCalcPoint);J(c>0,100*c/b.baseSize,b.locations,b.handleNumbers)}function N(a,b){b.handle&&(m(b.handle,e.cssClasses.active),sa-=1),b.listeners.forEach(function(a){xa.removeEventListener(a[0],a[1])}),0===sa&&(m(pa,e.cssClasses.drag),V(),a.cursor&&(ya.style.cursor="",ya.removeEventListener("selectstart",c))),b.handleNumbers.forEach(function(a){K("change",a),K("set",a),K("end",a)})}function O(a,b){var d;if(1===b.handleNumbers.length){var f=ia[b.handleNumbers[0]];if(f.hasAttribute("disabled"))return!1;d=f.children[0],sa+=1,l(d,e.cssClasses.active)}a.stopPropagation();var g=[],h=F(ma.move,xa,M,{target:a.target,handle:d,listeners:g,startCalcPoint:a.calcPoint,baseSize:E(),pageOffset:a.pageOffset,handleNumbers:b.handleNumbers,buttonsProperty:a.buttons,locations:qa.slice()}),i=F(ma.end,xa,N,{target:a.target,handle:d,listeners:g,handleNumbers:b.handleNumbers}),j=F("mouseout",xa,L,{target:a.target,handle:d,listeners:g,handleNumbers:b.handleNumbers});g.push.apply(g,h.concat(i,j)),a.cursor&&(ya.style.cursor=getComputedStyle(a.target).cursor,ia.length>1&&l(pa,e.cssClasses.drag),ya.addEventListener("selectstart",c,!1)),b.handleNumbers.forEach(function(a){K("start",a)})}function P(a){a.stopPropagation();var b=H(a.calcPoint),c=I(b);if(!1===c)return!1;e.events.snap||h(pa,e.cssClasses.tap,e.animationDuration),W(c,b,!0,!0),V(),K("slide",c,!0),K("update",c,!0),K("change",c,!0),K("set",c,!0),e.events.snap&&O(a,{handleNumbers:[c]})}function Q(a){var b=H(a.calcPoint),c=ta.getStep(b),d=ta.fromStepping(c);Object.keys(va).forEach(function(a){"hover"===a.split(".")[0]&&va[a].forEach(function(a){a.call(ka,d)})})}function R(a){a.fixed||ia.forEach(function(a,b){F(ma.start,a.children[0],O,{handleNumbers:[b]})}),a.tap&&F(ma.start,ha,P,{}),a.hover&&F(ma.move,ha,Q,{hover:!0}),a.drag&&ja.forEach(function(b,c){if(!1!==b&&0!==c&&c!==ja.length-1){var d=ia[c-1],f=ia[c],g=[b];l(b,e.cssClasses.draggable),a.fixed&&(g.push(d.children[0]),g.push(f.children[0])),g.forEach(function(a){F(ma.start,a,O,{handles:[d,f],handleNumbers:[c-1,c]})})}})}function S(a,b,c,d,f,g){return ia.length>1&&(d&&b>0&&(c=Math.max(c,a[b-1]+e.margin)),f&&b<ia.length-1&&(c=Math.min(c,a[b+1]-e.margin))),ia.length>1&&e.limit&&(d&&b>0&&(c=Math.min(c,a[b-1]+e.limit)),f&&b<ia.length-1&&(c=Math.max(c,a[b+1]-e.limit))),e.padding&&(0===b&&(c=Math.max(c,e.padding)),b===ia.length-1&&(c=Math.min(c,100-e.padding))),c=ta.getStep(c),!((c=i(c))===a[b]&&!g)&&c}function T(a){return a+"%"}function U(a,b){qa[a]=b,ua[a]=ta.fromStepping(b);var c=function(){ia[a].style[e.style]=T(b),X(a),X(a+1)};window.requestAnimationFrame&&e.useRequestAnimationFrame?window.requestAnimationFrame(c):c()}function V(){ra.forEach(function(a){var b=qa[a]>50?-1:1,c=3+(ia.length+b*a);ia[a].childNodes[0].style.zIndex=c})}function W(a,b,c,d){return!1!==(b=S(qa,a,b,c,d,!1))&&(U(a,b),!0)}function X(a){if(ja[a]){var b=0,c=100;0!==a&&(b=qa[a-1]),a!==ja.length-1&&(c=qa[a]),ja[a].style[e.style]=T(b),ja[a].style[e.styleOposite]=T(100-c)}}function Z(a,b){null!==a&&!1!==a&&("number"==typeof a&&(a=String(a)),!1===(a=e.format.from(a))||isNaN(a)||W(b,ta.toStepping(a),!1,!1))}function $(a,b){var c=j(a),d=void 0===qa[0];b=void 0===b||!!b,c.forEach(Z),e.animate&&!d&&h(pa,e.cssClasses.tap,e.animationDuration),ra.forEach(function(a){W(a,qa[a],!0,!1)}),V(),ra.forEach(function(a){K("update",a),null!==c[a]&&b&&K("set",a)})}function aa(a){$(e.start,a)}function ba(){var a=ua.map(e.format.to);return 1===a.length?a[0]:a}function ca(){for(var a in e.cssClasses)e.cssClasses.hasOwnProperty(a)&&m(pa,e.cssClasses[a]);for(;pa.firstChild;)pa.removeChild(pa.firstChild);delete pa.noUiSlider}function da(){return qa.map(function(a,b){var c=ta.getNearbySteps(a),d=ua[b],e=c.thisStep.step,f=null;!1!==e&&d+e>c.stepAfter.startValue&&(e=c.stepAfter.startValue-d),f=d>c.thisStep.startValue?c.thisStep.step:!1!==c.stepBefore.step&&d-c.stepBefore.highestStep,100===a?e=null:0===a&&(f=null);var g=ta.countStepDecimals();return null!==e&&!1!==e&&(e=Number(e.toFixed(g))),null!==f&&!1!==f&&(f=Number(f.toFixed(g))),[f,e]})}function ea(a,b){va[a]=va[a]||[],va[a].push(b),"update"===a.split(".")[0]&&ia.forEach(function(a,b){K("update",b)})}function fa(a){var b=a&&a.split(".")[0],c=b&&a.substring(b.length);Object.keys(va).forEach(function(a){var d=a.split(".")[0],e=a.substring(d.length);b&&b!==d||c&&c!==e||delete va[a]})}function ga(a,b){var c=ba(),d=["margin","limit","padding","range","animate","snap","step","format"];d.forEach(function(b){void 0!==a[b]&&(g[b]=a[b])});var f=Y(g);d.forEach(function(b){void 0!==a[b]&&(e[b]=f[b])}),ta=f.spectrum,e.margin=f.margin,e.limit=f.limit,e.padding=f.padding,e.pips&&D(e.pips),qa=[],$(a.start||c,b)}var ha,ia,ja,ka,la,ma=p(),na=r(),oa=na&&q(),pa=a,qa=[],ra=[],sa=0,ta=e.spectrum,ua=[],va={},wa=a.ownerDocument,xa=wa.documentElement,ya=wa.body;if(pa.noUiSlider)throw new Error("noUiSlider ("+_+"): Slider was already initialized.");return v(pa),u(e.connect,ha),ka={destroy:ca,steps:da,on:ea,off:fa,get:ba,set:$,reset:aa,__moveHandles:function(a,b,c){J(a,b,qa,c)},options:g,updateOptions:ga,target:pa,removePips:C,pips:D},R(e.events),$(e.start),e.pips&&D(e.pips),e.tooltips&&x(),y(),ka}function $(a,b){if(!a||!a.nodeName)throw new Error("noUiSlider ("+_+"): create requires a single element, got: "+a);var c=Y(b,a),d=Z(a,c,b);return a.noUiSlider=d,d}var _="10.1.0";C.prototype.getMargin=function(a){var b=this.xNumSteps[0];if(b&&a/b%1!=0)throw new Error("noUiSlider ("+_+"): 'limit', 'margin' and 'padding' must be divisible by step.");return 2===this.xPct.length&&t(this.xVal,a)},C.prototype.toStepping=function(a){return a=x(this.xVal,this.xPct,a)},C.prototype.fromStepping=function(a){return y(this.xVal,this.xPct,a)},C.prototype.getStep=function(a){return a=z(this.xPct,this.xSteps,this.snap,a)},C.prototype.getNearbySteps=function(a){var b=w(a,this.xPct);return{stepBefore:{startValue:this.xVal[b-2],step:this.xNumSteps[b-2],highestStep:this.xHighestCompleteStep[b-2]},thisStep:{startValue:this.xVal[b-1],step:this.xNumSteps[b-1],highestStep:this.xHighestCompleteStep[b-1]},stepAfter:{startValue:this.xVal[b-0],step:this.xNumSteps[b-0],highestStep:this.xHighestCompleteStep[b-0]}}},C.prototype.countStepDecimals=function(){var a=this.xNumSteps.map(k);return Math.max.apply(null,a)},C.prototype.convert=function(a){return this.getStep(this.toStepping(a))};var aa={to:function(a){return void 0!==a&&a.toFixed(2)},from:Number};return{version:_,create:$}});
|
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2018 Twitter, Inc and other contributors
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2015 xLs51
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
@@ -0,0 +1,21 @@
|
|
1
|
+
/*
|
2
|
+
# -----------------------------------------------------------------------------
|
3
|
+
# ~/twemoji/twemoji-picker.js
|
4
|
+
# Twemoji-Picker v2017-06-03 implementation for J1 template
|
5
|
+
#
|
6
|
+
# Product/Info:
|
7
|
+
# https://jekyll.one
|
8
|
+
# https://github.com/xLs51/Twemoji-Picker
|
9
|
+
#
|
10
|
+
# Copyright (C) 2020 Juergen Adams
|
11
|
+
# Copyright (C) 2015 xLs51
|
12
|
+
#
|
13
|
+
# J1 Template is licensed under the MIT License.
|
14
|
+
# See: https://github.com/jekyll-one-org/J1 Template/blob/master/LICENSE
|
15
|
+
# Twemoji-Picker is licensed under under the MIT License.
|
16
|
+
# For details, https://github.com/xLs51/Twemoji-Picker
|
17
|
+
#
|
18
|
+
# -----------------------------------------------------------------------------
|
19
|
+
*/
|
20
|
+
|
21
|
+
(function(e,c,g){var b=150;var d={};var a="/assets/data/twa_v1.json";e.TwemojiPicker=function(j,i){var h=this;e.when(h._loadDatabase()).done(function(k){h.$el=e(j);h._init(i)})};e.TwemojiPicker.defaults={init:null,size:25,icon:"grinning",iconSize:25,height:100,width:null,category:["smile","cherry-blossom","video-game","oncoming-automobile","symbols"],categorySize:20,pickerPosition:null,pickerHeight:150,pickerWidth:null,placeholder:"",};e.TwemojiPicker.prototype={_init:function(h){this.options=e.extend(true,{},e.TwemojiPicker.defaults,h);this._initPicker();this._initCategory();this._initTwemoji();this._initText();this._initStyle();this._initEvents()},_loadDatabase:function f(){return e.ajax({url:a,success:function(h){if(typeof h=="string"){d=JSON.parse(h)}if(typeof h=="object"){d=h}}})},_initPicker:function(){var h=this;h.$id="#"+h.$el["0"].id;h.$pickerHeigth=h.options.height.replace("px","");h.$pickerHeigth=Number(h.$pickerHeigth);h.$wrapper=h.$el.wrap('<div class="twemoji-wrap"></div>').parent();h.$wrapper.append('<div class="twemoji-textarea" contentEditable="true" placeholder="'+h.options.placeholder+'"></div>');h.$wrapper.append('<div class="twemoji-textarea-duplicate"></div>');h.$wrapper.append('<div class="twemoji-icon-picker"> <span id="open-group" class="mr-2"><button type="button" name="open-group" class="btn btn-indigo btn-md btn-raised btn-flex mt-3 mb-3"><i class="toggle-button mdi mdi-toggle-switch-off mdi-lg mdi-md-indigo-50 mr-1"></i> Picker </button></span><span id="clear-textarea"><button type="button" name="clear-textarea" class="btn btn-red btn-md btn-raised btn-flex mt-3 mb-3"><i class="mdi mdi-sticker-emoji mdi-lg mdi-md-indigo-50 mr-1"></i> Clear </button></span></div>');h.$wrapper.append('<div class="twemoji-picker"></div>');h.$el.hide();h.$textarea=h.$wrapper.find(".twemoji-textarea");h.$textareaDuplicate=h.$wrapper.find(".twemoji-textarea-duplicate").hide();h.$iconPicker=h.$wrapper.find("#open-group");h.$clearTextarea=h.$wrapper.find("#clear-textarea");h.$picker=h.$wrapper.find(".twemoji-picker").hide()},_initCategory:function(){var h=this;var i=this.options.category;this.categoryName=["people","nature","object","place","symbol"];this.$picker.append('<div class="twemoji-picker-category"></div>');this.$pickerCategory=this.$picker.find(".twemoji-picker-category");e.each(this.categoryName,function(j,k){h.$pickerCategory.append('<span data-category="'+k+'">'+h.imageFromName(i[j])+"</span>")});this.$pickerCategory.find("span:first").addClass("active")},_initTwemoji:function(){var h=this;e.each(this.categoryName,function(j,k){h.$picker.append('<div class="twemoji-list '+k+'"></div>');e.each(d,function(i,l){if(l.category===k){h.$wrapper.find(".twemoji-picker ."+k).append('<span><img class="emoji" draggable="false" src="'+l.base64+'" alt="'+l.value+'" title="'+l.name+'"></span>')}})});this.$twemojiList=this.$picker.find(".twemoji-list");this.$twemojiList.not(":first").hide()},_initText:function(){if(this.options.init){var j=this.options.init;var i=/:([\w-]+):/g;var h;while(h==i.exec(j)){j=j.replace(h[0],this.imageFromName(h[1],true))}this.$textarea.html(j);this.copyTextArea(this.$textarea.html())}},_initStyle:function(){this.$wrapper.css({width:this.options.width?this.options.width:"100%",height:this.options.height?this.options.height:"",});this.$wrapper.find("img").css({width:this.options.size,height:this.options.size,});this.$iconPicker.css({width:this.options.iconSize,height:this.options.iconSize,});this.$pickerCategory.find("img").css({width:this.options.categorySize,height:this.options.categorySize,});this.$twemojiList.css({width:this.options.pickerWidth?this.options.pickerWidth:"100%",height:this.options.pickerHeight,});this.$picker.css({width:this.options.pickerWidth?this.options.pickerWidth:"100%",top:this.options.pickerPosition==="top"?"-"+this.$picker.outerHeight()+"px":"",})},_initEvents:function(){var h=this;this.$textarea.on("keyup",function(){h.copyTextArea(e(this).html())});this.$iconPicker.on("click",function(){var i=e(".twemoji-picker").height()+b;e("#picker").height(i);e(".toggle-button").toggleClass("mdi-toggle-switch-off mdi-toggle-switch");if(!h.openedPicker){h.openPicker()}else{h.closePicker();e("#picker").height(h.$pickerHeigth)}});this.$clearTextarea.on("click",function(){h.copyTextArea("");e(h.$id).val("");e(".twemoji-textarea > .emoji-span").remove()});this.$pickerCategory.find("span").on("click",function(){var i=e(this).data("category");h.openCategory(e(this),i)});this.$pickerCategory.find(".close").on("click",function(){if(h.openedPicker){h.closePicker()}});this.$twemojiList.find("img").on("click",function(){h.copyTwemoji(e(this))})},copyText:function(j){var i=document.createElement("textarea");i.setAttribute("style","position:fixed;opacity:0;top:100px;left:100px");i.value=j;document.body.appendChild(i);i.select();document.execCommand("copy");var h=document.createElement("div");h.setAttribute("class","copied");h.appendChild(document.createTextNode("Copied to Clipboard"));document.body.appendChild(h);setTimeout(function(){document.body.removeChild(i);document.body.removeChild(h)},1500)},openPicker:function(){this.$picker.show();this.openedPicker=true},closePicker:function(){this.$picker.hide();this.openedPicker=false},openCategory:function(h,i){this.$pickerCategory.find("span").removeClass("active");h.addClass("active");this.$twemojiList.not(".twemoji-picker ."+i).hide();this.$twemojiList.filter(".twemoji-picker ."+i).show()},copyTwemoji:function(l){var i=l.attr("alt");var k=l.attr("src");var j=l.attr("title");var h="emoji:"+j+"[]";this.copyText(h);this.$textarea.focus();this.pasteAtCursor('<span class="emoji-span"><img class="emoji" src="'+k+'" title="'+j+'" alt="'+i+'" width="'+this.options.size+'" height="'+this.options.size+'"> '+h+"</span> ");this.copyTextArea(this.$textarea.html())},copyTextArea:function(j){var h=this.$textareaDuplicate.html(j);h.find("img").replaceWith(function(){return this.alt});var i=h.html();this.$el.text(i)},imageFromName:function(i,j){var h=e.grep(d,function(k){return k.name==i});if(j){return'<img class="emoji" src="'+h[0].base64+'" alt="'+h[0].value+'" width="'+this.options.size+'" height="'+this.options.size+'">'}return'<img class="emoji" draggable="false" src="'+h[0].base64+'" alt="'+i+'">'},pasteAtCursor:function(m){var l,h;if(c.getSelection){l=c.getSelection();if(l.getRangeAt&&l.rangeCount){h=l.getRangeAt(0);h.deleteContents();var i=document.createElement("div");i.innerHTML=m;var n=document.createDocumentFragment(),k,j;while((k=i.firstChild)){j=n.appendChild(k)}h.insertNode(n);if(j){h=h.cloneRange();h.setStartAfter(j);h.collapse(true);l.removeAllRanges();l.addRange(h)}}}else{if(document.selection&&document.selection.type!="Control"){document.selection.createRange().pasteHTML(m)}}}};e.fn.twemojiPicker=function(i){var h=e.data(this,"twemojiPicker");this.each(function(){h?h._init():h=e.data(this,"twemojiPicker",new e.TwemojiPicker(this,i))});return h}})(jQuery,window);
|
@@ -0,0 +1,21 @@
|
|
1
|
+
/*
|
2
|
+
# -----------------------------------------------------------------------------
|
3
|
+
# ~/twemoji/twemoji-picker.js
|
4
|
+
# Twemoji-Picker v2017-06-03 implementation for J1 template
|
5
|
+
#
|
6
|
+
# Product/Info:
|
7
|
+
# https://jekyll.one
|
8
|
+
# https://github.com/xLs51/Twemoji-Picker
|
9
|
+
#
|
10
|
+
# Copyright (C) 2020 Juergen Adams
|
11
|
+
# Copyright (C) 2015 xLs51
|
12
|
+
#
|
13
|
+
# J1 Template is licensed under the MIT License.
|
14
|
+
# See: https://github.com/jekyll-one-org/J1 Template/blob/master/LICENSE
|
15
|
+
# Twemoji-Picker is licensed under under the MIT License.
|
16
|
+
# For details, https://github.com/xLs51/Twemoji-Picker
|
17
|
+
#
|
18
|
+
# -----------------------------------------------------------------------------
|
19
|
+
*/
|
20
|
+
|
21
|
+
(function(e,c,g){var b=150;var d={};var a="/assets/data/twa_v1.json";e.TwemojiPicker=function(j,i){var h=this;e.when(h._loadDatabase()).done(function(k){h.$el=e(j);h._init(i)})};e.TwemojiPicker.defaults={init:null,size:25,icon:"grinning",iconSize:25,height:100,width:null,category:["smile","cherry-blossom","video-game","oncoming-automobile","symbols"],categorySize:20,pickerPosition:null,pickerHeight:150,pickerWidth:null,placeholder:"",};e.TwemojiPicker.prototype={_init:function(h){this.options=e.extend(true,{},e.TwemojiPicker.defaults,h);this._initPicker();this._initCategory();this._initTwemoji();this._initText();this._initStyle();this._initEvents()},_loadDatabase:function f(){return e.ajax({url:a,success:function(h){if(typeof h=="string"){d=JSON.parse(h)}if(typeof h=="object"){d=h}}})},_initPicker:function(){var h=this;h.$id="#"+h.$el["0"].id;h.$pickerHeigth=h.options.height.replace("px","");h.$pickerHeigth=Number(h.$pickerHeigth);h.$wrapper=h.$el.wrap('<div class="twemoji-wrap"></div>').parent();h.$wrapper.append('<div class="twemoji-textarea" contentEditable="true" placeholder="'+h.options.placeholder+'"></div>');h.$wrapper.append('<div class="twemoji-textarea-duplicate"></div>');h.$wrapper.append('<div class="twemoji-icon-picker"> <span id="open-group" class="mr-2"><button type="button" name="open-group" class="btn btn-indigo btn-md btn-raised btn-flex mt-3 mb-3"><i class="toggle-button mdi mdi-toggle-switch-off mdi-lg mdi-md-indigo-50 mr-1"></i> Picker </button></span><span id="clear-textarea"><button type="button" name="clear-textarea" class="btn btn-red btn-md btn-raised btn-flex mt-3 mb-3"><i class="mdi mdi-sticker-emoji mdi-lg mdi-md-indigo-50 mr-1"></i> Clear </button></span></div>');h.$wrapper.append('<div class="twemoji-picker"></div>');h.$el.hide();h.$textarea=h.$wrapper.find(".twemoji-textarea");h.$textareaDuplicate=h.$wrapper.find(".twemoji-textarea-duplicate").hide();h.$iconPicker=h.$wrapper.find("#open-group");h.$clearTextarea=h.$wrapper.find("#clear-textarea");h.$picker=h.$wrapper.find(".twemoji-picker").hide()},_initCategory:function(){var h=this;var i=this.options.category;this.categoryName=["people","nature","object","place","symbol"];this.$picker.append('<div class="twemoji-picker-category"></div>');this.$pickerCategory=this.$picker.find(".twemoji-picker-category");e.each(this.categoryName,function(j,k){h.$pickerCategory.append('<span data-category="'+k+'">'+h.imageFromName(i[j])+"</span>")});this.$pickerCategory.find("span:first").addClass("active")},_initTwemoji:function(){var h=this;e.each(this.categoryName,function(j,k){h.$picker.append('<div class="twemoji-list '+k+'"></div>');e.each(d,function(i,l){if(l.category===k){h.$wrapper.find(".twemoji-picker ."+k).append('<span><img class="emoji" draggable="false" src="'+l.base64+'" alt="'+l.value+'" title="'+l.name+'"></span>')}})});this.$twemojiList=this.$picker.find(".twemoji-list");this.$twemojiList.not(":first").hide()},_initText:function(){if(this.options.init){var j=this.options.init;var i=/:([\w-]+):/g;var h;while(h==i.exec(j)){j=j.replace(h[0],this.imageFromName(h[1],true))}this.$textarea.html(j);this.copyTextArea(this.$textarea.html())}},_initStyle:function(){this.$wrapper.css({width:this.options.width?this.options.width:"100%",height:this.options.height?this.options.height:"",});this.$wrapper.find("img").css({width:this.options.size,height:this.options.size,});this.$iconPicker.css({width:this.options.iconSize,height:this.options.iconSize,});this.$pickerCategory.find("img").css({width:this.options.categorySize,height:this.options.categorySize,});this.$twemojiList.css({width:this.options.pickerWidth?this.options.pickerWidth:"100%",height:this.options.pickerHeight,});this.$picker.css({width:this.options.pickerWidth?this.options.pickerWidth:"100%",top:this.options.pickerPosition==="top"?"-"+this.$picker.outerHeight()+"px":"",})},_initEvents:function(){var h=this;this.$textarea.on("keyup",function(){h.copyTextArea(e(this).html())});this.$iconPicker.on("click",function(){var i=e(".twemoji-picker").height()+b;e("#picker").height(i);e(".toggle-button").toggleClass("mdi-toggle-switch-off mdi-toggle-switch");if(!h.openedPicker){h.openPicker()}else{h.closePicker();e("#picker").height(h.$pickerHeigth)}});this.$clearTextarea.on("click",function(){h.copyTextArea("");e(h.$id).val("");e(".twemoji-textarea > .emoji-span").remove()});this.$pickerCategory.find("span").on("click",function(){var i=e(this).data("category");h.openCategory(e(this),i)});this.$pickerCategory.find(".close").on("click",function(){if(h.openedPicker){h.closePicker()}});this.$twemojiList.find("img").on("click",function(){h.copyTwemoji(e(this))})},copyText:function(j){var i=document.createElement("textarea");i.setAttribute("style","position:fixed;opacity:0;top:100px;left:100px");i.value=j;document.body.appendChild(i);i.select();document.execCommand("copy");var h=document.createElement("div");h.setAttribute("class","copied");h.appendChild(document.createTextNode("Copied to Clipboard"));document.body.appendChild(h);setTimeout(function(){document.body.removeChild(i);document.body.removeChild(h)},1500)},openPicker:function(){this.$picker.show();this.openedPicker=true},closePicker:function(){this.$picker.hide();this.openedPicker=false},openCategory:function(h,i){this.$pickerCategory.find("span").removeClass("active");h.addClass("active");this.$twemojiList.not(".twemoji-picker ."+i).hide();this.$twemojiList.filter(".twemoji-picker ."+i).show()},copyTwemoji:function(l){var i=l.attr("alt");var k=l.attr("src");var j=l.attr("title");var h="emoji:"+j+"[]";this.copyText(h);this.$textarea.focus();this.pasteAtCursor('<span class="emoji-span"><img class="emoji" src="'+k+'" title="'+j+'" alt="'+i+'" width="'+this.options.size+'" height="'+this.options.size+'"> '+h+"</span> ");this.copyTextArea(this.$textarea.html())},copyTextArea:function(j){var h=this.$textareaDuplicate.html(j);h.find("img").replaceWith(function(){return this.alt});var i=h.html();this.$el.text(i)},imageFromName:function(i,j){var h=e.grep(d,function(k){return k.name==i});if(j){return'<img class="emoji" src="'+h[0].base64+'" alt="'+h[0].value+'" width="'+this.options.size+'" height="'+this.options.size+'">'}return'<img class="emoji" draggable="false" src="'+h[0].base64+'" alt="'+i+'">'},pasteAtCursor:function(m){var l,h;if(c.getSelection){l=c.getSelection();if(l.getRangeAt&&l.rangeCount){h=l.getRangeAt(0);h.deleteContents();var i=document.createElement("div");i.innerHTML=m;var n=document.createDocumentFragment(),k,j;while((k=i.firstChild)){j=n.appendChild(k)}h.insertNode(n);if(j){h=h.cloneRange();h.setStartAfter(j);h.collapse(true);l.removeAllRanges();l.addRange(h)}}}else{if(document.selection&&document.selection.type!="Control"){document.selection.createRange().pasteHTML(m)}}}};e.fn.twemojiPicker=function(i){var h=e.data(this,"twemojiPicker");this.each(function(){h?h._init():h=e.data(this,"twemojiPicker",new e.TwemojiPicker(this,i))});return h}})(jQuery,window);
|
@@ -0,0 +1,590 @@
|
|
1
|
+
|
2
|
+
/*
|
3
|
+
# -----------------------------------------------------------------------------
|
4
|
+
# ~/twemoji/twemoji.js
|
5
|
+
# Twemoji v13.0.0 implementation for J1 template
|
6
|
+
#
|
7
|
+
# Product/Info:
|
8
|
+
# https://jekyll.one
|
9
|
+
# https://github.com/twitter/twemoji
|
10
|
+
#
|
11
|
+
# Copyright (C) 2020 Juergen Adams
|
12
|
+
# Copyright (C) 2018 Twitter, Inc and other contributors
|
13
|
+
#
|
14
|
+
# J1 Template is licensed under the MIT License.
|
15
|
+
# See: https://github.com/jekyll-one-org/J1 Template/blob/master/LICENSE
|
16
|
+
# Twemoji is licensed under under the MIT License.
|
17
|
+
# See: https://github.com/twitter/twemoji/blob/gh-pages/LICENSE
|
18
|
+
#
|
19
|
+
# -----------------------------------------------------------------------------
|
20
|
+
*/
|
21
|
+
|
22
|
+
/*! Copyright Twitter Inc. and other contributors. Licensed under MIT *//*
|
23
|
+
https://github.com/twitter/twemoji/blob/gh-pages/LICENSE
|
24
|
+
*/
|
25
|
+
|
26
|
+
/*jslint indent: 2, browser: true, bitwise: true, plusplus: true */
|
27
|
+
|
28
|
+
var twemoji = (function (
|
29
|
+
// WARNING: this file is generated automatically via
|
30
|
+
// `node scripts/build.js`
|
31
|
+
// please update its `createTwemoji` function
|
32
|
+
// at the bottom of the same file instead.
|
33
|
+
|
34
|
+
) {
|
35
|
+
'use strict';
|
36
|
+
|
37
|
+
/*jshint maxparams:4 */
|
38
|
+
|
39
|
+
var
|
40
|
+
// the exported module object
|
41
|
+
twemoji = {
|
42
|
+
|
43
|
+
|
44
|
+
/////////////////////////
|
45
|
+
// properties //
|
46
|
+
/////////////////////////
|
47
|
+
|
48
|
+
// default assets url, by default will be Twitter Inc. CDN
|
49
|
+
base: 'https://twemoji.maxcdn.com/v/13.0.0/',
|
50
|
+
|
51
|
+
// default assets file extensions, by default '.png'
|
52
|
+
ext: '.png',
|
53
|
+
|
54
|
+
// default assets/folder size, by default "72x72"
|
55
|
+
// available via Twitter CDN: 72
|
56
|
+
size: '72x72',
|
57
|
+
|
58
|
+
// default class name, by default 'emoji'
|
59
|
+
className: 'emoji',
|
60
|
+
|
61
|
+
// basic utilities / helpers to convert code points
|
62
|
+
// to JavaScript surrogates and vice versa
|
63
|
+
convert: {
|
64
|
+
|
65
|
+
/**
|
66
|
+
* Given an HEX codepoint, returns UTF16 surrogate pairs.
|
67
|
+
*
|
68
|
+
* @param string generic codepoint, i.e. '1F4A9'
|
69
|
+
* @return string codepoint transformed into utf16 surrogates pair,
|
70
|
+
* i.e. \uD83D\uDCA9
|
71
|
+
*
|
72
|
+
* @example
|
73
|
+
* twemoji.convert.fromCodePoint('1f1e8');
|
74
|
+
* // "\ud83c\udde8"
|
75
|
+
*
|
76
|
+
* '1f1e8-1f1f3'.split('-').map(twemoji.convert.fromCodePoint).join('')
|
77
|
+
* // "\ud83c\udde8\ud83c\uddf3"
|
78
|
+
*/
|
79
|
+
fromCodePoint: fromCodePoint,
|
80
|
+
|
81
|
+
/**
|
82
|
+
* Given UTF16 surrogate pairs, returns the equivalent HEX codepoint.
|
83
|
+
*
|
84
|
+
* @param string generic utf16 surrogates pair, i.e. \uD83D\uDCA9
|
85
|
+
* @param string optional separator for double code points, default='-'
|
86
|
+
* @return string utf16 transformed into codepoint, i.e. '1F4A9'
|
87
|
+
*
|
88
|
+
* @example
|
89
|
+
* twemoji.convert.toCodePoint('\ud83c\udde8\ud83c\uddf3');
|
90
|
+
* // "1f1e8-1f1f3"
|
91
|
+
*
|
92
|
+
* twemoji.convert.toCodePoint('\ud83c\udde8\ud83c\uddf3', '~');
|
93
|
+
* // "1f1e8~1f1f3"
|
94
|
+
*/
|
95
|
+
toCodePoint: toCodePoint
|
96
|
+
},
|
97
|
+
|
98
|
+
|
99
|
+
/////////////////////////
|
100
|
+
// methods //
|
101
|
+
/////////////////////////
|
102
|
+
|
103
|
+
/**
|
104
|
+
* User first: used to remove missing images
|
105
|
+
* preserving the original text intent when
|
106
|
+
* a fallback for network problems is desired.
|
107
|
+
* Automatically added to Image nodes via DOM
|
108
|
+
* It could be recycled for string operations via:
|
109
|
+
* $('img.emoji').on('error', twemoji.onerror)
|
110
|
+
*/
|
111
|
+
onerror: function onerror() {
|
112
|
+
if (this.parentNode) {
|
113
|
+
this.parentNode.replaceChild(createText(this.alt, false), this);
|
114
|
+
}
|
115
|
+
},
|
116
|
+
|
117
|
+
/**
|
118
|
+
* Main method/logic to generate either <img> tags or HTMLImage nodes.
|
119
|
+
* "emojify" a generic text or DOM Element.
|
120
|
+
*
|
121
|
+
* @overloads
|
122
|
+
*
|
123
|
+
* String replacement for `innerHTML` or server side operations
|
124
|
+
* twemoji.parse(string);
|
125
|
+
* twemoji.parse(string, Function);
|
126
|
+
* twemoji.parse(string, Object);
|
127
|
+
*
|
128
|
+
* HTMLElement tree parsing for safer operations over existing DOM
|
129
|
+
* twemoji.parse(HTMLElement);
|
130
|
+
* twemoji.parse(HTMLElement, Function);
|
131
|
+
* twemoji.parse(HTMLElement, Object);
|
132
|
+
*
|
133
|
+
* @param string|HTMLElement the source to parse and enrich with emoji.
|
134
|
+
*
|
135
|
+
* string replace emoji matches with <img> tags.
|
136
|
+
* Mainly used to inject emoji via `innerHTML`
|
137
|
+
* It does **not** parse the string or validate it,
|
138
|
+
* it simply replaces found emoji with a tag.
|
139
|
+
* NOTE: be sure this won't affect security.
|
140
|
+
*
|
141
|
+
* HTMLElement walk through the DOM tree and find emoji
|
142
|
+
* that are inside **text node only** (nodeType === 3)
|
143
|
+
* Mainly used to put emoji in already generated DOM
|
144
|
+
* without compromising surrounding nodes and
|
145
|
+
* **avoiding** the usage of `innerHTML`.
|
146
|
+
* NOTE: Using DOM elements instead of strings should
|
147
|
+
* improve security without compromising too much
|
148
|
+
* performance compared with a less safe `innerHTML`.
|
149
|
+
*
|
150
|
+
* @param Function|Object [optional]
|
151
|
+
* either the callback that will be invoked or an object
|
152
|
+
* with all properties to use per each found emoji.
|
153
|
+
*
|
154
|
+
* Function if specified, this will be invoked per each emoji
|
155
|
+
* that has been found through the RegExp except
|
156
|
+
* those follwed by the invariant \uFE0E ("as text").
|
157
|
+
* Once invoked, parameters will be:
|
158
|
+
*
|
159
|
+
* iconId:string the lower case HEX code point
|
160
|
+
* i.e. "1f4a9"
|
161
|
+
*
|
162
|
+
* options:Object all info for this parsing operation
|
163
|
+
*
|
164
|
+
* variant:char the optional \uFE0F ("as image")
|
165
|
+
* variant, in case this info
|
166
|
+
* is anyhow meaningful.
|
167
|
+
* By default this is ignored.
|
168
|
+
*
|
169
|
+
* If such callback will return a falsy value instead
|
170
|
+
* of a valid `src` to use for the image, nothing will
|
171
|
+
* actually change for that specific emoji.
|
172
|
+
*
|
173
|
+
*
|
174
|
+
* Object if specified, an object containing the following properties
|
175
|
+
*
|
176
|
+
* callback Function the callback to invoke per each found emoji.
|
177
|
+
* base string the base url, by default twemoji.base
|
178
|
+
* ext string the image extension, by default twemoji.ext
|
179
|
+
* size string the assets size, by default twemoji.size
|
180
|
+
*
|
181
|
+
* @example
|
182
|
+
*
|
183
|
+
* twemoji.parse("I \u2764\uFE0F emoji!");
|
184
|
+
* // I <img class="emoji" draggable="false" alt="❤️" src="/assets/2764.gif"/> emoji!
|
185
|
+
*
|
186
|
+
*
|
187
|
+
* twemoji.parse("I \u2764\uFE0F emoji!", function(iconId, options) {
|
188
|
+
* return '/assets/' + iconId + '.gif';
|
189
|
+
* });
|
190
|
+
* // I <img class="emoji" draggable="false" alt="❤️" src="/assets/2764.gif"/> emoji!
|
191
|
+
*
|
192
|
+
*
|
193
|
+
* twemoji.parse("I \u2764\uFE0F emoji!", {
|
194
|
+
* size: 72,
|
195
|
+
* callback: function(iconId, options) {
|
196
|
+
* return '/assets/' + options.size + '/' + iconId + options.ext;
|
197
|
+
* }
|
198
|
+
* });
|
199
|
+
* // I <img class="emoji" draggable="false" alt="❤️" src="/assets/72x72/2764.png"/> emoji!
|
200
|
+
*
|
201
|
+
*/
|
202
|
+
parse: parse,
|
203
|
+
|
204
|
+
/**
|
205
|
+
* Given a string, invokes the callback argument
|
206
|
+
* per each emoji found in such string.
|
207
|
+
* This is the most raw version used by
|
208
|
+
* the .parse(string) method itself.
|
209
|
+
*
|
210
|
+
* @param string generic string to parse
|
211
|
+
* @param Function a generic callback that will be
|
212
|
+
* invoked to replace the content.
|
213
|
+
* This calback wil receive standard
|
214
|
+
* String.prototype.replace(str, callback)
|
215
|
+
* arguments such:
|
216
|
+
* callback(
|
217
|
+
* rawText, // the emoji match
|
218
|
+
* );
|
219
|
+
*
|
220
|
+
* and others commonly received via replace.
|
221
|
+
*/
|
222
|
+
replace: replace,
|
223
|
+
|
224
|
+
/**
|
225
|
+
* Simplify string tests against emoji.
|
226
|
+
*
|
227
|
+
* @param string some text that might contain emoji
|
228
|
+
* @return boolean true if any emoji was found, false otherwise.
|
229
|
+
*
|
230
|
+
* @example
|
231
|
+
*
|
232
|
+
* if (twemoji.test(someContent)) {
|
233
|
+
* console.log("emoji All The Things!");
|
234
|
+
* }
|
235
|
+
*/
|
236
|
+
test: test
|
237
|
+
},
|
238
|
+
|
239
|
+
// used to escape HTML special chars in attributes
|
240
|
+
escaper = {
|
241
|
+
'&': '&',
|
242
|
+
'<': '<',
|
243
|
+
'>': '>',
|
244
|
+
"'": ''',
|
245
|
+
'"': '"'
|
246
|
+
},
|
247
|
+
|
248
|
+
// RegExp based on emoji's official Unicode standards
|
249
|
+
// http://www.unicode.org/Public/UNIDATA/EmojiSources.txt
|
250
|
+
re = /(?:\ud83d\udc68\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffc-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffd-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc68\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffd\udfff]|\ud83d\udc68\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffe]|\ud83d\udc69\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffc-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffc-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffd-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb\udffd-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc69\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc69\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffd\udfff]|\ud83d\udc69\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb-\udffd\udfff]|\ud83d\udc69\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffe]|\ud83d\udc69\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb-\udffe]|\ud83e\uddd1\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\u200d\ud83e\udd1d\u200d\ud83e\uddd1|\ud83d\udc6b\ud83c[\udffb-\udfff]|\ud83d\udc6c\ud83c[\udffb-\udfff]|\ud83d\udc6d\ud83c[\udffb-\udfff]|\ud83d[\udc6b-\udc6d])|(?:\ud83d[\udc68\udc69]|\ud83e\uddd1)(?:\ud83c[\udffb-\udfff])?\u200d(?:\u2695\ufe0f|\u2696\ufe0f|\u2708\ufe0f|\ud83c[\udf3e\udf73\udf7c\udf84\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92]|\ud83e[\uddaf-\uddb3\uddbc\uddbd])|(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75]|\u26f9)((?:\ud83c[\udffb-\udfff]|\ufe0f)\u200d[\u2640\u2642]\ufe0f)|(?:\ud83c[\udfc3\udfc4\udfca]|\ud83d[\udc6e\udc70\udc71\udc73\udc77\udc81\udc82\udc86\udc87\ude45-\ude47\ude4b\ude4d\ude4e\udea3\udeb4-\udeb6]|\ud83e[\udd26\udd35\udd37-\udd39\udd3d\udd3e\uddb8\uddb9\uddcd-\uddcf\uddd6-\udddd])(?:\ud83c[\udffb-\udfff])?\u200d[\u2640\u2642]\ufe0f|(?:\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d[\udc68\udc69]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68|\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d[\udc68\udc69]|\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f|\ud83c\udff3\ufe0f\u200d\ud83c\udf08|\ud83c\udff4\u200d\u2620\ufe0f|\ud83d\udc15\u200d\ud83e\uddba|\ud83d\udc3b\u200d\u2744\ufe0f|\ud83d\udc41\u200d\ud83d\udde8|\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc6f\u200d\u2640\ufe0f|\ud83d\udc6f\u200d\u2642\ufe0f|\ud83e\udd3c\u200d\u2640\ufe0f|\ud83e\udd3c\u200d\u2642\ufe0f|\ud83e\uddde\u200d\u2640\ufe0f|\ud83e\uddde\u200d\u2642\ufe0f|\ud83e\udddf\u200d\u2640\ufe0f|\ud83e\udddf\u200d\u2642\ufe0f|\ud83d\udc08\u200d\u2b1b)|[#*0-9]\ufe0f?\u20e3|(?:[©®\u2122\u265f]\ufe0f)|(?:\ud83c[\udc04\udd70\udd71\udd7e\udd7f\ude02\ude1a\ude2f\ude37\udf21\udf24-\udf2c\udf36\udf7d\udf96\udf97\udf99-\udf9b\udf9e\udf9f\udfcd\udfce\udfd4-\udfdf\udff3\udff5\udff7]|\ud83d[\udc3f\udc41\udcfd\udd49\udd4a\udd6f\udd70\udd73\udd76-\udd79\udd87\udd8a-\udd8d\udda5\udda8\uddb1\uddb2\uddbc\uddc2-\uddc4\uddd1-\uddd3\udddc-\uddde\udde1\udde3\udde8\uddef\uddf3\uddfa\udecb\udecd-\udecf\udee0-\udee5\udee9\udef0\udef3]|[\u203c\u2049\u2139\u2194-\u2199\u21a9\u21aa\u231a\u231b\u2328\u23cf\u23ed-\u23ef\u23f1\u23f2\u23f8-\u23fa\u24c2\u25aa\u25ab\u25b6\u25c0\u25fb-\u25fe\u2600-\u2604\u260e\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262a\u262e\u262f\u2638-\u263a\u2640\u2642\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267b\u267f\u2692-\u2697\u2699\u269b\u269c\u26a0\u26a1\u26a7\u26aa\u26ab\u26b0\u26b1\u26bd\u26be\u26c4\u26c5\u26c8\u26cf\u26d1\u26d3\u26d4\u26e9\u26ea\u26f0-\u26f5\u26f8\u26fa\u26fd\u2702\u2708\u2709\u270f\u2712\u2714\u2716\u271d\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u2764\u27a1\u2934\u2935\u2b05-\u2b07\u2b1b\u2b1c\u2b50\u2b55\u3030\u303d\u3297\u3299])(?:\ufe0f|(?!\ufe0e))|(?:(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75\udd90]|[\u261d\u26f7\u26f9\u270c\u270d])(?:\ufe0f|(?!\ufe0e))|(?:\ud83c[\udf85\udfc2-\udfc4\udfc7\udfca]|\ud83d[\udc42\udc43\udc46-\udc50\udc66-\udc69\udc6e\udc70-\udc78\udc7c\udc81-\udc83\udc85-\udc87\udcaa\udd7a\udd95\udd96\ude45-\ude47\ude4b-\ude4f\udea3\udeb4-\udeb6\udec0\udecc]|\ud83e[\udd0c\udd0f\udd18-\udd1c\udd1e\udd1f\udd26\udd30-\udd39\udd3d\udd3e\udd77\uddb5\uddb6\uddb8\uddb9\uddbb\uddcd-\uddcf\uddd1-\udddd]|[\u270a\u270b]))(?:\ud83c[\udffb-\udfff])?|(?:\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f|\ud83c\udde6\ud83c[\udde8-\uddec\uddee\uddf1\uddf2\uddf4\uddf6-\uddfa\uddfc\uddfd\uddff]|\ud83c\udde7\ud83c[\udde6\udde7\udde9-\uddef\uddf1-\uddf4\uddf6-\uddf9\uddfb\uddfc\uddfe\uddff]|\ud83c\udde8\ud83c[\udde6\udde8\udde9\uddeb-\uddee\uddf0-\uddf5\uddf7\uddfa-\uddff]|\ud83c\udde9\ud83c[\uddea\uddec\uddef\uddf0\uddf2\uddf4\uddff]|\ud83c\uddea\ud83c[\udde6\udde8\uddea\uddec\udded\uddf7-\uddfa]|\ud83c\uddeb\ud83c[\uddee-\uddf0\uddf2\uddf4\uddf7]|\ud83c\uddec\ud83c[\udde6\udde7\udde9-\uddee\uddf1-\uddf3\uddf5-\uddfa\uddfc\uddfe]|\ud83c\udded\ud83c[\uddf0\uddf2\uddf3\uddf7\uddf9\uddfa]|\ud83c\uddee\ud83c[\udde8-\uddea\uddf1-\uddf4\uddf6-\uddf9]|\ud83c\uddef\ud83c[\uddea\uddf2\uddf4\uddf5]|\ud83c\uddf0\ud83c[\uddea\uddec-\uddee\uddf2\uddf3\uddf5\uddf7\uddfc\uddfe\uddff]|\ud83c\uddf1\ud83c[\udde6-\udde8\uddee\uddf0\uddf7-\uddfb\uddfe]|\ud83c\uddf2\ud83c[\udde6\udde8-\udded\uddf0-\uddff]|\ud83c\uddf3\ud83c[\udde6\udde8\uddea-\uddec\uddee\uddf1\uddf4\uddf5\uddf7\uddfa\uddff]|\ud83c\uddf4\ud83c\uddf2|\ud83c\uddf5\ud83c[\udde6\uddea-\udded\uddf0-\uddf3\uddf7-\uddf9\uddfc\uddfe]|\ud83c\uddf6\ud83c\udde6|\ud83c\uddf7\ud83c[\uddea\uddf4\uddf8\uddfa\uddfc]|\ud83c\uddf8\ud83c[\udde6-\uddea\uddec-\uddf4\uddf7-\uddf9\uddfb\uddfd-\uddff]|\ud83c\uddf9\ud83c[\udde6\udde8\udde9\uddeb-\udded\uddef-\uddf4\uddf7\uddf9\uddfb\uddfc\uddff]|\ud83c\uddfa\ud83c[\udde6\uddec\uddf2\uddf3\uddf8\uddfe\uddff]|\ud83c\uddfb\ud83c[\udde6\udde8\uddea\uddec\uddee\uddf3\uddfa]|\ud83c\uddfc\ud83c[\uddeb\uddf8]|\ud83c\uddfd\ud83c\uddf0|\ud83c\uddfe\ud83c[\uddea\uddf9]|\ud83c\uddff\ud83c[\udde6\uddf2\uddfc]|\ud83c[\udccf\udd8e\udd91-\udd9a\udde6-\uddff\ude01\ude32-\ude36\ude38-\ude3a\ude50\ude51\udf00-\udf20\udf2d-\udf35\udf37-\udf7c\udf7e-\udf84\udf86-\udf93\udfa0-\udfc1\udfc5\udfc6\udfc8\udfc9\udfcf-\udfd3\udfe0-\udff0\udff4\udff8-\udfff]|\ud83d[\udc00-\udc3e\udc40\udc44\udc45\udc51-\udc65\udc6a\udc6f\udc79-\udc7b\udc7d-\udc80\udc84\udc88-\udca9\udcab-\udcfc\udcff-\udd3d\udd4b-\udd4e\udd50-\udd67\udda4\uddfb-\ude44\ude48-\ude4a\ude80-\udea2\udea4-\udeb3\udeb7-\udebf\udec1-\udec5\uded0-\uded2\uded5-\uded7\udeeb\udeec\udef4-\udefc\udfe0-\udfeb]|\ud83e[\udd0d\udd0e\udd10-\udd17\udd1d\udd20-\udd25\udd27-\udd2f\udd3a\udd3c\udd3f-\udd45\udd47-\udd76\udd78\udd7a-\uddb4\uddb7\uddba\uddbc-\uddcb\uddd0\uddde-\uddff\ude70-\ude74\ude78-\ude7a\ude80-\ude86\ude90-\udea8\udeb0-\udeb6\udec0-\udec2\uded0-\uded6]|[\u23e9-\u23ec\u23f0\u23f3\u267e\u26ce\u2705\u2728\u274c\u274e\u2753-\u2755\u2795-\u2797\u27b0\u27bf\ue50a])|\ufe0f/g,
|
251
|
+
|
252
|
+
// avoid runtime RegExp creation for not so smart,
|
253
|
+
// not JIT based, and old browsers / engines
|
254
|
+
UFE0Fg = /\uFE0F/g,
|
255
|
+
|
256
|
+
// avoid using a string literal like '\u200D' here because minifiers expand it inline
|
257
|
+
U200D = String.fromCharCode(0x200D),
|
258
|
+
|
259
|
+
// used to find HTML special chars in attributes
|
260
|
+
rescaper = /[&<>'"]/g,
|
261
|
+
|
262
|
+
// nodes with type 1 which should **not** be parsed
|
263
|
+
shouldntBeParsed = /^(?:iframe|noframes|noscript|script|select|style|textarea)$/,
|
264
|
+
|
265
|
+
// just a private shortcut
|
266
|
+
fromCharCode = String.fromCharCode;
|
267
|
+
|
268
|
+
return twemoji;
|
269
|
+
|
270
|
+
|
271
|
+
/////////////////////////
|
272
|
+
// private functions //
|
273
|
+
// declaration //
|
274
|
+
/////////////////////////
|
275
|
+
|
276
|
+
/**
|
277
|
+
* Shortcut to create text nodes
|
278
|
+
* @param string text used to create DOM text node
|
279
|
+
* @return Node a DOM node with that text
|
280
|
+
*/
|
281
|
+
function createText(text, clean) {
|
282
|
+
return document.createTextNode(clean ? text.replace(UFE0Fg, '') : text);
|
283
|
+
}
|
284
|
+
|
285
|
+
/**
|
286
|
+
* Utility function to escape html attribute text
|
287
|
+
* @param string text use in HTML attribute
|
288
|
+
* @return string text encoded to use in HTML attribute
|
289
|
+
*/
|
290
|
+
function escapeHTML(s) {
|
291
|
+
return s.replace(rescaper, replacer);
|
292
|
+
}
|
293
|
+
|
294
|
+
/**
|
295
|
+
* Default callback used to generate emoji src
|
296
|
+
* based on Twitter CDN
|
297
|
+
* @param string the emoji codepoint string
|
298
|
+
* @param string the default size to use, i.e. "36x36"
|
299
|
+
* @return string the image source to use
|
300
|
+
*/
|
301
|
+
function defaultImageSrcGenerator(icon, options) {
|
302
|
+
return ''.concat(options.base, options.size, '/', icon, options.ext);
|
303
|
+
}
|
304
|
+
|
305
|
+
/**
|
306
|
+
* Given a generic DOM nodeType 1, walk through all children
|
307
|
+
* and store every nodeType 3 (#text) found in the tree.
|
308
|
+
* @param Element a DOM Element with probably some text in it
|
309
|
+
* @param Array the list of previously discovered text nodes
|
310
|
+
* @return Array same list with new discovered nodes, if any
|
311
|
+
*/
|
312
|
+
function grabAllTextNodes(node, allText) {
|
313
|
+
var
|
314
|
+
childNodes = node.childNodes,
|
315
|
+
length = childNodes.length,
|
316
|
+
subnode,
|
317
|
+
nodeType;
|
318
|
+
while (length--) {
|
319
|
+
subnode = childNodes[length];
|
320
|
+
nodeType = subnode.nodeType;
|
321
|
+
// parse emoji only in text nodes
|
322
|
+
if (nodeType === 3) {
|
323
|
+
// collect them to process emoji later
|
324
|
+
allText.push(subnode);
|
325
|
+
}
|
326
|
+
// ignore all nodes that are not type 1, that are svg, or that
|
327
|
+
// should not be parsed as script, style, and others
|
328
|
+
else if (nodeType === 1 && !('ownerSVGElement' in subnode) &&
|
329
|
+
!shouldntBeParsed.test(subnode.nodeName.toLowerCase())) {
|
330
|
+
grabAllTextNodes(subnode, allText);
|
331
|
+
}
|
332
|
+
}
|
333
|
+
return allText;
|
334
|
+
}
|
335
|
+
|
336
|
+
/**
|
337
|
+
* Used to both remove the possible variant
|
338
|
+
* and to convert utf16 into code points.
|
339
|
+
* If there is a zero-width-joiner (U+200D), leave the variants in.
|
340
|
+
* @param string the raw text of the emoji match
|
341
|
+
* @return string the code point
|
342
|
+
*/
|
343
|
+
function grabTheRightIcon(rawText) {
|
344
|
+
// if variant is present as \uFE0F
|
345
|
+
return toCodePoint(rawText.indexOf(U200D) < 0 ?
|
346
|
+
rawText.replace(UFE0Fg, '') :
|
347
|
+
rawText
|
348
|
+
);
|
349
|
+
}
|
350
|
+
|
351
|
+
/**
|
352
|
+
* DOM version of the same logic / parser:
|
353
|
+
* emojify all found sub-text nodes placing images node instead.
|
354
|
+
* @param Element generic DOM node with some text in some child node
|
355
|
+
* @param Object options containing info about how to parse
|
356
|
+
*
|
357
|
+
* .callback Function the callback to invoke per each found emoji.
|
358
|
+
* .base string the base url, by default twemoji.base
|
359
|
+
* .ext string the image extension, by default twemoji.ext
|
360
|
+
* .size string the assets size, by default twemoji.size
|
361
|
+
*
|
362
|
+
* @return Element same generic node with emoji in place, if any.
|
363
|
+
*/
|
364
|
+
function parseNode(node, options) {
|
365
|
+
var
|
366
|
+
allText = grabAllTextNodes(node, []),
|
367
|
+
length = allText.length,
|
368
|
+
attrib,
|
369
|
+
attrname,
|
370
|
+
modified,
|
371
|
+
fragment,
|
372
|
+
subnode,
|
373
|
+
text,
|
374
|
+
match,
|
375
|
+
i,
|
376
|
+
index,
|
377
|
+
img,
|
378
|
+
rawText,
|
379
|
+
iconId,
|
380
|
+
src;
|
381
|
+
while (length--) {
|
382
|
+
modified = false;
|
383
|
+
fragment = document.createDocumentFragment();
|
384
|
+
subnode = allText[length];
|
385
|
+
text = subnode.nodeValue;
|
386
|
+
i = 0;
|
387
|
+
while ((match = re.exec(text))) {
|
388
|
+
index = match.index;
|
389
|
+
if (index !== i) {
|
390
|
+
fragment.appendChild(
|
391
|
+
createText(text.slice(i, index), true)
|
392
|
+
);
|
393
|
+
}
|
394
|
+
rawText = match[0];
|
395
|
+
iconId = grabTheRightIcon(rawText);
|
396
|
+
i = index + rawText.length;
|
397
|
+
src = options.callback(iconId, options);
|
398
|
+
if (iconId && src) {
|
399
|
+
img = new Image();
|
400
|
+
img.onerror = options.onerror;
|
401
|
+
img.setAttribute('draggable', 'false');
|
402
|
+
attrib = options.attributes(rawText, iconId);
|
403
|
+
for (attrname in attrib) {
|
404
|
+
if (
|
405
|
+
attrib.hasOwnProperty(attrname) &&
|
406
|
+
// don't allow any handlers to be set + don't allow overrides
|
407
|
+
attrname.indexOf('on') !== 0 &&
|
408
|
+
!img.hasAttribute(attrname)
|
409
|
+
) {
|
410
|
+
img.setAttribute(attrname, attrib[attrname]);
|
411
|
+
}
|
412
|
+
}
|
413
|
+
img.className = options.className;
|
414
|
+
img.alt = rawText;
|
415
|
+
img.src = src;
|
416
|
+
modified = true;
|
417
|
+
fragment.appendChild(img);
|
418
|
+
}
|
419
|
+
if (!img) fragment.appendChild(createText(rawText, false));
|
420
|
+
img = null;
|
421
|
+
}
|
422
|
+
// is there actually anything to replace in here ?
|
423
|
+
if (modified) {
|
424
|
+
// any text left to be added ?
|
425
|
+
if (i < text.length) {
|
426
|
+
fragment.appendChild(
|
427
|
+
createText(text.slice(i), true)
|
428
|
+
);
|
429
|
+
}
|
430
|
+
// replace the text node only, leave intact
|
431
|
+
// anything else surrounding such text
|
432
|
+
subnode.parentNode.replaceChild(fragment, subnode);
|
433
|
+
}
|
434
|
+
}
|
435
|
+
return node;
|
436
|
+
}
|
437
|
+
|
438
|
+
/**
|
439
|
+
* String/HTML version of the same logic / parser:
|
440
|
+
* emojify a generic text placing images tags instead of surrogates pair.
|
441
|
+
* @param string generic string with possibly some emoji in it
|
442
|
+
* @param Object options containing info about how to parse
|
443
|
+
*
|
444
|
+
* .callback Function the callback to invoke per each found emoji.
|
445
|
+
* .base string the base url, by default twemoji.base
|
446
|
+
* .ext string the image extension, by default twemoji.ext
|
447
|
+
* .size string the assets size, by default twemoji.size
|
448
|
+
*
|
449
|
+
* @return the string with <img tags> replacing all found and parsed emoji
|
450
|
+
*/
|
451
|
+
function parseString(str, options) {
|
452
|
+
return replace(str, function (rawText) {
|
453
|
+
var
|
454
|
+
ret = rawText,
|
455
|
+
iconId = grabTheRightIcon(rawText),
|
456
|
+
src = options.callback(iconId, options),
|
457
|
+
attrib,
|
458
|
+
attrname;
|
459
|
+
if (iconId && src) {
|
460
|
+
// recycle the match string replacing the emoji
|
461
|
+
// with its image counter part
|
462
|
+
ret = '<img '.concat(
|
463
|
+
'class="', options.className, '" ',
|
464
|
+
'draggable="false" ',
|
465
|
+
// needs to preserve user original intent
|
466
|
+
// when variants should be copied and pasted too
|
467
|
+
'alt="',
|
468
|
+
rawText,
|
469
|
+
'"',
|
470
|
+
' src="',
|
471
|
+
src,
|
472
|
+
'"'
|
473
|
+
);
|
474
|
+
attrib = options.attributes(rawText, iconId);
|
475
|
+
for (attrname in attrib) {
|
476
|
+
if (
|
477
|
+
attrib.hasOwnProperty(attrname) &&
|
478
|
+
// don't allow any handlers to be set + don't allow overrides
|
479
|
+
attrname.indexOf('on') !== 0 &&
|
480
|
+
ret.indexOf(' ' + attrname + '=') === -1
|
481
|
+
) {
|
482
|
+
ret = ret.concat(' ', attrname, '="', escapeHTML(attrib[attrname]), '"');
|
483
|
+
}
|
484
|
+
}
|
485
|
+
ret = ret.concat('/>');
|
486
|
+
}
|
487
|
+
return ret;
|
488
|
+
});
|
489
|
+
}
|
490
|
+
|
491
|
+
/**
|
492
|
+
* Function used to actually replace HTML special chars
|
493
|
+
* @param string HTML special char
|
494
|
+
* @return string encoded HTML special char
|
495
|
+
*/
|
496
|
+
function replacer(m) {
|
497
|
+
return escaper[m];
|
498
|
+
}
|
499
|
+
|
500
|
+
/**
|
501
|
+
* Default options.attribute callback
|
502
|
+
* @return null
|
503
|
+
*/
|
504
|
+
function returnNull() {
|
505
|
+
return null;
|
506
|
+
}
|
507
|
+
|
508
|
+
/**
|
509
|
+
* Given a generic value, creates its squared counterpart if it's a number.
|
510
|
+
* As example, number 36 will return '36x36'.
|
511
|
+
* @param any a generic value.
|
512
|
+
* @return any a string representing asset size, i.e. "36x36"
|
513
|
+
* only in case the value was a number.
|
514
|
+
* Returns initial value otherwise.
|
515
|
+
*/
|
516
|
+
function toSizeSquaredAsset(value) {
|
517
|
+
return typeof value === 'number' ?
|
518
|
+
value + 'x' + value :
|
519
|
+
value;
|
520
|
+
}
|
521
|
+
|
522
|
+
|
523
|
+
/////////////////////////
|
524
|
+
// exported functions //
|
525
|
+
// declaration //
|
526
|
+
/////////////////////////
|
527
|
+
|
528
|
+
function fromCodePoint(codepoint) {
|
529
|
+
var code = typeof codepoint === 'string' ?
|
530
|
+
parseInt(codepoint, 16) : codepoint;
|
531
|
+
if (code < 0x10000) {
|
532
|
+
return fromCharCode(code);
|
533
|
+
}
|
534
|
+
code -= 0x10000;
|
535
|
+
return fromCharCode(
|
536
|
+
0xD800 + (code >> 10),
|
537
|
+
0xDC00 + (code & 0x3FF)
|
538
|
+
);
|
539
|
+
}
|
540
|
+
|
541
|
+
function parse(what, how) {
|
542
|
+
if (!how || typeof how === 'function') {
|
543
|
+
how = {callback: how};
|
544
|
+
}
|
545
|
+
// if first argument is string, inject html <img> tags
|
546
|
+
// otherwise use the DOM tree and parse text nodes only
|
547
|
+
return (typeof what === 'string' ? parseString : parseNode)(what, {
|
548
|
+
callback: how.callback || defaultImageSrcGenerator,
|
549
|
+
attributes: typeof how.attributes === 'function' ? how.attributes : returnNull,
|
550
|
+
base: typeof how.base === 'string' ? how.base : twemoji.base,
|
551
|
+
ext: how.ext || twemoji.ext,
|
552
|
+
size: how.folder || toSizeSquaredAsset(how.size || twemoji.size),
|
553
|
+
className: how.className || twemoji.className,
|
554
|
+
onerror: how.onerror || twemoji.onerror
|
555
|
+
});
|
556
|
+
}
|
557
|
+
|
558
|
+
function replace(text, callback) {
|
559
|
+
return String(text).replace(re, callback);
|
560
|
+
}
|
561
|
+
|
562
|
+
function test(text) {
|
563
|
+
// IE6 needs a reset before too
|
564
|
+
re.lastIndex = 0;
|
565
|
+
var result = re.test(text);
|
566
|
+
re.lastIndex = 0;
|
567
|
+
return result;
|
568
|
+
}
|
569
|
+
|
570
|
+
function toCodePoint(unicodeSurrogates, sep) {
|
571
|
+
var
|
572
|
+
r = [],
|
573
|
+
c = 0,
|
574
|
+
p = 0,
|
575
|
+
i = 0;
|
576
|
+
while (i < unicodeSurrogates.length) {
|
577
|
+
c = unicodeSurrogates.charCodeAt(i++);
|
578
|
+
if (p) {
|
579
|
+
r.push((0x10000 + ((p - 0xD800) << 10) + (c - 0xDC00)).toString(16));
|
580
|
+
p = 0;
|
581
|
+
} else if (0xD800 <= c && c <= 0xDBFF) {
|
582
|
+
p = c;
|
583
|
+
} else {
|
584
|
+
r.push(c.toString(16));
|
585
|
+
}
|
586
|
+
}
|
587
|
+
return r.join(sep || '-');
|
588
|
+
}
|
589
|
+
|
590
|
+
}());
|