keppler 2.1.17 → 2.1.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.lock +2 -2
- data/installer/core/.gitignore +88 -0
- data/installer/core/app/views/admin/layouts/_sidebar.html.haml +2 -2
- data/installer/core/rockets/keppler_frontend/app/controllers/keppler_frontend/app/frontend_controller.rb +0 -1
- data/installer/core/rockets/keppler_frontend/app/models/keppler_frontend/view.rb +1 -1
- data/installer/core/rockets/keppler_frontend/config/data/views.yml +1 -1
- data/lib/keppler/version.rb +1 -1
- data/testing-with-2.1.18/.gitignore +88 -0
- data/testing-with-2.1.18/.ruby-version +1 -0
- data/testing-with-2.1.18/Gemfile +149 -0
- data/testing-with-2.1.18/Gemfile.lock +645 -0
- data/testing-with-2.1.18/Guardfile +18 -0
- data/testing-with-2.1.18/LICENSE +674 -0
- data/testing-with-2.1.18/README.md +134 -0
- data/testing-with-2.1.18/Rakefile +6 -0
- data/testing-with-2.1.18/_config.yml +1 -0
- data/testing-with-2.1.18/app/assets/images/.keep +0 -0
- data/testing-with-2.1.18/app/assets/images/admin/astronauta_keppler.svg +123 -0
- data/testing-with-2.1.18/app/assets/images/admin/avatar_keppler.svg +100 -0
- data/testing-with-2.1.18/app/assets/images/admin/en.png +0 -0
- data/testing-with-2.1.18/app/assets/images/admin/es.png +0 -0
- data/testing-with-2.1.18/app/assets/images/admin/favicon.png +0 -0
- data/testing-with-2.1.18/app/assets/images/admin/image_default.png +0 -0
- data/testing-with-2.1.18/app/assets/images/admin/logo.png +0 -0
- data/testing-with-2.1.18/app/assets/images/admin/logo2.png +0 -0
- data/testing-with-2.1.18/app/assets/images/admin/profile-menu.jpg +0 -0
- data/testing-with-2.1.18/app/assets/images/admin/search.png +0 -0
- data/testing-with-2.1.18/app/assets/images/admin/slice-icon-orange.png +0 -0
- data/testing-with-2.1.18/app/assets/images/admin/slice-icon.png +0 -0
- data/testing-with-2.1.18/app/assets/images/admin/slice.png +0 -0
- data/testing-with-2.1.18/app/assets/images/admin/slice_white.png +0 -0
- data/testing-with-2.1.18/app/assets/images/app/Cohete_nubes_new.png +0 -0
- data/testing-with-2.1.18/app/assets/images/app/Home_Keppler.png +0 -0
- data/testing-with-2.1.18/app/assets/images/app/Home_Keppler2.png +0 -0
- data/testing-with-2.1.18/app/assets/images/app/fondo.svg +19 -0
- data/testing-with-2.1.18/app/assets/images/app/keppler-front.png +0 -0
- data/testing-with-2.1.18/app/assets/images/app/slice-front.png +0 -0
- data/testing-with-2.1.18/app/assets/images/app/slice.png +0 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/application.coffee +25 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/bootstrap-colorpicker.js +1322 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/bootstrap-file-input/fileinput.js +4463 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/bootstrap-file-input/locales/LANG.js +100 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/bootstrap-file-input/locales/es.js +100 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/bootstrap-file-input/plugins/piexif.js +2471 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/bootstrap-file-input/plugins/piexif.min.js +1 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/bootstrap-file-input/plugins/purify.js +812 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/bootstrap-file-input/plugins/purify.min.js +1 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/bootstrap-file-input/plugins/sortable.js +1590 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/bootstrap-file-input/plugins/sortable.min.js +1 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/code_editor.js +94 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/addon/comment/comment.js +209 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/addon/comment/continuecomment.js +78 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/addon/dialog/dialog.css +32 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/addon/dialog/dialog.js +161 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/addon/display/autorefresh.js +47 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/addon/display/fullscreen.css +6 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/addon/display/fullscreen.js +41 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/addon/display/panel.js +123 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/addon/display/placeholder.js +63 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/addon/display/rulers.js +51 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/addon/edit/closebrackets.js +194 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/addon/edit/closetag.js +175 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/addon/edit/continuelist.js +89 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/addon/edit/matchbrackets.js +145 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/addon/edit/matchtags.js +66 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/addon/edit/trailingspace.js +27 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/addon/fold/brace-fold.js +105 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/addon/fold/comment-fold.js +59 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/addon/fold/foldcode.js +152 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/addon/fold/foldgutter.css +20 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/addon/fold/foldgutter.js +146 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/addon/fold/indent-fold.js +48 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/addon/fold/markdown-fold.js +49 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/addon/fold/xml-fold.js +184 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/addon/hint/anyword-hint.js +41 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/addon/hint/css-hint.js +60 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/addon/hint/html-hint.js +348 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/addon/hint/javascript-hint.js +157 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/addon/hint/show-hint.css +36 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/addon/hint/show-hint.js +433 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/addon/hint/sql-hint.js +299 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/addon/hint/xml-hint.js +110 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/addon/mode/loadmode.js +64 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/addon/mode/multiplex.js +131 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/addon/mode/overlay.js +90 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/addon/mode/simple.js +216 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/addon/scroll/annotatescrollbar.js +122 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/addon/scroll/scrollpastend.js +48 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/addon/scroll/simplescrollbars.css +66 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/addon/scroll/simplescrollbars.js +152 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/addon/search/jump-to-line.js +49 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/addon/search/match-highlighter.js +165 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/addon/search/matchesonscrollbar.css +8 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/addon/search/matchesonscrollbar.js +97 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/addon/search/search.js +252 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/addon/search/searchcursor.js +293 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/codemirror.js +9683 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/keymap/sublime.js +691 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/mode/css/css.js +832 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/mode/css/gss.html +103 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/mode/css/index.html +75 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/mode/css/less.html +152 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/mode/css/scss.html +157 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/mode/haml/haml.js +161 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/mode/haml/index.html +79 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/mode/htmlembedded/htmlembedded.js +37 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/mode/htmlembedded/index.html +60 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/mode/htmlmixed/htmlmixed.js +152 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/mode/htmlmixed/index.html +100 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/mode/javascript/index.html +114 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/mode/javascript/javascript.js +896 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/mode/javascript/json-ld.html +72 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/mode/javascript/typescript.html +61 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/mode/ruby/index.html +183 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/mode/ruby/ruby.js +296 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/mode/vue/index.html +69 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/mode/vue/vue.js +77 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/mode/xml/index.html +61 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/mode/xml/xml.js +402 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/mode/yaml-frontmatter/index.html +121 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/mode/yaml-frontmatter/yaml-frontmatter.js +68 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/mode/yaml/index.html +80 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/codemirror/mode/yaml/yaml.js +119 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/file_uploader.coffee +152 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/img_preview.js +32 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/jscolor.js +1855 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/main.coffee +58 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/notification.js +14 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/ruby_console.js +14 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/sidebar.js +24 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/sort.coffee +8 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/swal.js +39 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/sweetalert2/delete-confirm.js +118 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/sweetalert2/sweetalert2.all.min.js +2 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/switch.js +6 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/tooltips.coffee +4 -0
- data/testing-with-2.1.18/app/assets/javascripts/admin/upload_records.coffee +8 -0
- data/testing-with-2.1.18/app/assets/javascripts/app/application.js.coffee +9 -0
- data/testing-with-2.1.18/app/assets/javascripts/app/google_analytics.js.coffee +5 -0
- data/testing-with-2.1.18/app/assets/javascripts/ckeditor/config.js +130 -0
- data/testing-with-2.1.18/app/assets/javascripts/errors/application.js.coffee +1 -0
- data/testing-with-2.1.18/app/assets/javascripts/errors/errors.js +113 -0
- data/testing-with-2.1.18/app/assets/javascripts/vue_admin/index.js +111 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/application.scss +48 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/bootstrap-file-input/fileinput-rtl.scss +133 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/bootstrap-file-input/fileinput.scss +760 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/bootstrap-file-input/themes/explorer-fa/theme.scss +213 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/bootstrap-file-input/themes/explorer-fas/theme.scss +213 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/bootstrap-file-input/themes/explorer/theme.scss +213 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/codemirror/addon/comment/comment.js +209 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/codemirror/addon/comment/continuecomment.js +78 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/codemirror/addon/dialog/dialog.css +32 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/codemirror/addon/dialog/dialog.js +161 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/codemirror/addon/display/autorefresh.js +47 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/codemirror/addon/display/fullscreen.css +6 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/codemirror/addon/display/fullscreen.js +41 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/codemirror/addon/display/panel.js +123 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/codemirror/addon/display/placeholder.js +63 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/codemirror/addon/display/rulers.js +51 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/codemirror/addon/edit/closebrackets.js +194 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/codemirror/addon/edit/closetag.js +175 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/codemirror/addon/edit/continuelist.js +89 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/codemirror/addon/edit/matchbrackets.js +145 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/codemirror/addon/edit/matchtags.js +66 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/codemirror/addon/edit/trailingspace.js +27 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/codemirror/addon/fold/brace-fold.js +105 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/codemirror/addon/fold/comment-fold.js +59 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/codemirror/addon/fold/foldcode.js +152 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/codemirror/addon/fold/foldgutter.css +20 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/codemirror/addon/fold/foldgutter.js +146 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/codemirror/addon/fold/indent-fold.js +48 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/codemirror/addon/fold/markdown-fold.js +49 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/codemirror/addon/fold/xml-fold.js +184 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/codemirror/addon/hint/anyword-hint.js +41 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/codemirror/addon/hint/css-hint.js +60 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/codemirror/addon/hint/html-hint.js +348 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/codemirror/addon/hint/javascript-hint.js +157 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/codemirror/addon/hint/show-hint.css +36 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/codemirror/addon/hint/show-hint.js +433 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/codemirror/addon/hint/sql-hint.js +299 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/codemirror/addon/hint/xml-hint.js +110 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/codemirror/addon/scroll/annotatescrollbar.js +122 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/codemirror/addon/scroll/scrollpastend.js +48 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/codemirror/addon/scroll/simplescrollbars.css +66 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/codemirror/addon/scroll/simplescrollbars.js +152 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/codemirror/addon/search/jump-to-line.js +49 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/codemirror/addon/search/match-highlighter.js +165 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/codemirror/addon/search/matchesonscrollbar.css +8 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/codemirror/addon/search/matchesonscrollbar.js +97 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/codemirror/addon/search/search.js +252 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/codemirror/addon/search/searchcursor.js +293 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/codemirror/codemirror.css +366 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/codemirror/theme/monokai.css +41 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/components/layouts/_footer.scss +5 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/components/layouts/_settings.scss +51 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/components/navigation/_navbar.scss +187 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/components/navigation/_sidebar.scss +207 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/components/navigation/_turbolinks.scss +4 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/components/paginator/_paginator.scss +53 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/fonts-and-icons/ZXuke1cDvLCKLDcimxB44_lu.woff2 +0 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/fonts-and-icons/boxicons.css +2918 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/fonts-and-icons/fonts.css +8 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/fonts-and-icons/fonts/Simple-Line-Icons.eot +0 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/fonts-and-icons/fonts/Simple-Line-Icons.ttf +0 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/fonts-and-icons/fonts/Simple-Line-Icons.woff +0 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/fonts-and-icons/fonts/Simple-Line-Icons.woff2 +0 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/fonts-and-icons/fonts/boxicons.eot +0 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/fonts-and-icons/fonts/boxicons.svg +808 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/fonts-and-icons/fonts/boxicons.ttf +0 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/fonts-and-icons/fonts/boxicons.woff +0 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/fonts-and-icons/fonts/boxicons.woff2 +0 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/fonts-and-icons/icons.css +778 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/pages/_appearance.scss +5 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/pages/_bootstrap-colorpicker.scss +269 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/pages/_customize.scss +22 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/pages/_datepicker.scss +1086 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/pages/_devise.scss +189 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/pages/_files.scss +229 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/pages/_form.scss +190 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/pages/_index.scss +466 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/pages/_listing.scss +40 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/pages/_preloader.scss +224 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/pages/_rockets.scss +13 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/pages/_roles.scss +3 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/pages/_search.scss +244 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/pages/_show.scss +23 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/pages/_switchs.scss +143 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/pages/_themes.scss +45 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/pages/_timepicker.scss +14 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/pages/_user.scss +6 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/utils/_base.scss +65 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/utils/_mixins.scss +26 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/utils/_theme.scss +124 -0
- data/testing-with-2.1.18/app/assets/stylesheets/admin/utils/_variables.scss +109 -0
- data/testing-with-2.1.18/app/assets/stylesheets/app/application.scss +30 -0
- data/testing-with-2.1.18/app/assets/stylesheets/app/base/_base_project.scss +17 -0
- data/testing-with-2.1.18/app/assets/stylesheets/app/base/_typography.scss +1 -0
- data/testing-with-2.1.18/app/assets/stylesheets/app/components/_buttons.scss +0 -0
- data/testing-with-2.1.18/app/assets/stylesheets/app/components/_inputs.scss +0 -0
- data/testing-with-2.1.18/app/assets/stylesheets/app/components/_navbar.scss +21 -0
- data/testing-with-2.1.18/app/assets/stylesheets/app/layout/_container.scss +0 -0
- data/testing-with-2.1.18/app/assets/stylesheets/app/layout/_footer.scss +15 -0
- data/testing-with-2.1.18/app/assets/stylesheets/app/layout/_header.scss +39 -0
- data/testing-with-2.1.18/app/assets/stylesheets/app/pages/_front.sass +83 -0
- data/testing-with-2.1.18/app/assets/stylesheets/app/plugins/_bootstrap_override.scss +37 -0
- data/testing-with-2.1.18/app/assets/stylesheets/app/plugins/_font_awesome.scss +2 -0
- data/testing-with-2.1.18/app/assets/stylesheets/app/plugins/_keppler.scss +161 -0
- data/testing-with-2.1.18/app/assets/stylesheets/app/plugins/_npogress.scss +2 -0
- data/testing-with-2.1.18/app/assets/stylesheets/app/utils/_mixins.scss +18 -0
- data/testing-with-2.1.18/app/assets/stylesheets/app/utils/_variables.scss +28 -0
- data/testing-with-2.1.18/app/assets/stylesheets/errors/application.scss +3 -0
- data/testing-with-2.1.18/app/assets/stylesheets/errors/errors.scss +161 -0
- data/testing-with-2.1.18/app/assets/stylesheets/vendor/admin-lte/_skin-blue.scss +141 -0
- data/testing-with-2.1.18/app/assets/stylesheets/vendor/sweetalert2/sweetalert2.scss +11 -0
- data/testing-with-2.1.18/app/controllers/admin/admin_controller.rb +95 -0
- data/testing-with-2.1.18/app/controllers/admin/meta_tags_controller.rb +118 -0
- data/testing-with-2.1.18/app/controllers/admin/permissions_controller.rb +55 -0
- data/testing-with-2.1.18/app/controllers/admin/rockets_controller.rb +95 -0
- data/testing-with-2.1.18/app/controllers/admin/roles_controller.rb +124 -0
- data/testing-with-2.1.18/app/controllers/admin/scripts_controller.rb +104 -0
- data/testing-with-2.1.18/app/controllers/admin/seos_controller.rb +31 -0
- data/testing-with-2.1.18/app/controllers/admin/settings_controller.rb +131 -0
- data/testing-with-2.1.18/app/controllers/admin/users_controller.rb +122 -0
- data/testing-with-2.1.18/app/controllers/app/app_controller.rb +38 -0
- data/testing-with-2.1.18/app/controllers/app/front_controller.rb +8 -0
- data/testing-with-2.1.18/app/controllers/application_controller.rb +151 -0
- data/testing-with-2.1.18/app/controllers/concerns/.keep +0 -0
- data/testing-with-2.1.18/app/controllers/concerns/devise_params.rb +33 -0
- data/testing-with-2.1.18/app/controllers/concerns/mailer_config.rb +37 -0
- data/testing-with-2.1.18/app/controllers/concerns/object_query.rb +50 -0
- data/testing-with-2.1.18/app/controllers/concerns/settings.rb +105 -0
- data/testing-with-2.1.18/app/controllers/devise/sessions_controller.rb +108 -0
- data/testing-with-2.1.18/app/controllers/errors_controller.rb +30 -0
- data/testing-with-2.1.18/app/helpers/admin_helper.rb +138 -0
- data/testing-with-2.1.18/app/helpers/application_helper.rb +33 -0
- data/testing-with-2.1.18/app/helpers/fronts_helper.rb +38 -0
- data/testing-with-2.1.18/app/helpers/rockets_helper.rb +8 -0
- data/testing-with-2.1.18/app/helpers/roles_helper.rb +5 -0
- data/testing-with-2.1.18/app/helpers/scaffolds_helper.rb +5 -0
- data/testing-with-2.1.18/app/inputs/keppler_boolean_input.rb +52 -0
- data/testing-with-2.1.18/app/inputs/keppler_file_input.rb +124 -0
- data/testing-with-2.1.18/app/mailers/.keep +0 -0
- data/testing-with-2.1.18/app/mailers/application_mailer.rb +42 -0
- data/testing-with-2.1.18/app/models/.keep +0 -0
- data/testing-with-2.1.18/app/models/appearance.rb +7 -0
- data/testing-with-2.1.18/app/models/application_record.rb +6 -0
- data/testing-with-2.1.18/app/models/concerns/.keep +0 -0
- data/testing-with-2.1.18/app/models/concerns/activity_history.rb +11 -0
- data/testing-with-2.1.18/app/models/concerns/clone_record.rb +14 -0
- data/testing-with-2.1.18/app/models/concerns/downloadable.rb +16 -0
- data/testing-with-2.1.18/app/models/concerns/searchable.rb +27 -0
- data/testing-with-2.1.18/app/models/concerns/sortable.rb +13 -0
- data/testing-with-2.1.18/app/models/concerns/uploadable.rb +13 -0
- data/testing-with-2.1.18/app/models/front.rb +5 -0
- data/testing-with-2.1.18/app/models/google_analytics_setting.rb +6 -0
- data/testing-with-2.1.18/app/models/meta_tag.rb +54 -0
- data/testing-with-2.1.18/app/models/permission.rb +6 -0
- data/testing-with-2.1.18/app/models/rocket.rb +105 -0
- data/testing-with-2.1.18/app/models/role.rb +134 -0
- data/testing-with-2.1.18/app/models/script.rb +21 -0
- data/testing-with-2.1.18/app/models/seo.rb +49 -0
- data/testing-with-2.1.18/app/models/setting.rb +19 -0
- data/testing-with-2.1.18/app/models/smtp_setting.rb +7 -0
- data/testing-with-2.1.18/app/models/social_account.rb +6 -0
- data/testing-with-2.1.18/app/models/user.rb +75 -0
- data/testing-with-2.1.18/app/policies/application_policy.rb +18 -0
- data/testing-with-2.1.18/app/policies/controller_policy.rb +59 -0
- data/testing-with-2.1.18/app/policies/meta_tag_policy.rb +11 -0
- data/testing-with-2.1.18/app/policies/permission_policy.rb +23 -0
- data/testing-with-2.1.18/app/policies/rocket_policy.rb +11 -0
- data/testing-with-2.1.18/app/policies/role_policy.rb +31 -0
- data/testing-with-2.1.18/app/policies/script_policy.rb +11 -0
- data/testing-with-2.1.18/app/policies/seo_policy.rb +23 -0
- data/testing-with-2.1.18/app/policies/setting_policy.rb +15 -0
- data/testing-with-2.1.18/app/policies/user_policy.rb +19 -0
- data/testing-with-2.1.18/app/services/admin/appearance_service.rb +49 -0
- data/testing-with-2.1.18/app/services/admin/git_handler.rb +28 -0
- data/testing-with-2.1.18/app/uploaders/attachment_uploader.rb +61 -0
- data/testing-with-2.1.18/app/uploaders/ckeditor_attachment_file_uploader.rb +38 -0
- data/testing-with-2.1.18/app/uploaders/ckeditor_picture_uploader.rb +49 -0
- data/testing-with-2.1.18/app/uploaders/template_uploader.rb +44 -0
- data/testing-with-2.1.18/app/views/admin/layouts/_footer.html.haml +0 -0
- data/testing-with-2.1.18/app/views/admin/layouts/_git_info.html.haml +13 -0
- data/testing-with-2.1.18/app/views/admin/layouts/_head.html.haml +7 -0
- data/testing-with-2.1.18/app/views/admin/layouts/_keppler_boolean_script.haml +12 -0
- data/testing-with-2.1.18/app/views/admin/layouts/_listing_preloader.haml +4 -0
- data/testing-with-2.1.18/app/views/admin/layouts/_messages.html.haml +4 -0
- data/testing-with-2.1.18/app/views/admin/layouts/_navigation.html.haml +59 -0
- data/testing-with-2.1.18/app/views/admin/layouts/_preloader.html.haml +14 -0
- data/testing-with-2.1.18/app/views/admin/layouts/_sidebar.html.haml +83 -0
- data/testing-with-2.1.18/app/views/admin/layouts/application.html.haml +23 -0
- data/testing-with-2.1.18/app/views/admin/layouts/index/remote_messages.js.haml +9 -0
- data/testing-with-2.1.18/app/views/admin/meta_tags/_description.html.haml +13 -0
- data/testing-with-2.1.18/app/views/admin/meta_tags/_form.html.haml +35 -0
- data/testing-with-2.1.18/app/views/admin/meta_tags/_listing.html.haml +40 -0
- data/testing-with-2.1.18/app/views/admin/meta_tags/edit.html.haml +2 -0
- data/testing-with-2.1.18/app/views/admin/meta_tags/index.html.haml +69 -0
- data/testing-with-2.1.18/app/views/admin/meta_tags/new.html.haml +2 -0
- data/testing-with-2.1.18/app/views/admin/meta_tags/reload.js.haml +5 -0
- data/testing-with-2.1.18/app/views/admin/meta_tags/show.html.haml +28 -0
- data/testing-with-2.1.18/app/views/admin/permissions/_switch.html.haml +13 -0
- data/testing-with-2.1.18/app/views/admin/permissions/add.html.haml +95 -0
- data/testing-with-2.1.18/app/views/admin/permissions/create.html.haml +0 -0
- data/testing-with-2.1.18/app/views/admin/permissions/create.js.erb +2 -0
- data/testing-with-2.1.18/app/views/admin/permissions/show.js.erb +2 -0
- data/testing-with-2.1.18/app/views/admin/permissions/toggle_permissions.js.erb +6 -0
- data/testing-with-2.1.18/app/views/admin/rockets/_create_rocket.haml +61 -0
- data/testing-with-2.1.18/app/views/admin/rockets/_install_rocket.haml +28 -0
- data/testing-with-2.1.18/app/views/admin/rockets/rockets.haml +54 -0
- data/testing-with-2.1.18/app/views/admin/roles/_description.html.haml +13 -0
- data/testing-with-2.1.18/app/views/admin/roles/_form.html.haml +27 -0
- data/testing-with-2.1.18/app/views/admin/roles/_listing.html.haml +42 -0
- data/testing-with-2.1.18/app/views/admin/roles/_switch.html.haml +24 -0
- data/testing-with-2.1.18/app/views/admin/roles/edit.html.haml +1 -0
- data/testing-with-2.1.18/app/views/admin/roles/index.html.haml +64 -0
- data/testing-with-2.1.18/app/views/admin/roles/new.html.haml +1 -0
- data/testing-with-2.1.18/app/views/admin/roles/reload.js.haml +5 -0
- data/testing-with-2.1.18/app/views/admin/roles/show.html.haml +29 -0
- data/testing-with-2.1.18/app/views/admin/scripts/_description.html.haml +13 -0
- data/testing-with-2.1.18/app/views/admin/scripts/_form.html.haml +30 -0
- data/testing-with-2.1.18/app/views/admin/scripts/_listing.html.haml +40 -0
- data/testing-with-2.1.18/app/views/admin/scripts/edit.html.haml +1 -0
- data/testing-with-2.1.18/app/views/admin/scripts/index.html.haml +70 -0
- data/testing-with-2.1.18/app/views/admin/scripts/new.html.haml +1 -0
- data/testing-with-2.1.18/app/views/admin/scripts/reload.js.haml +5 -0
- data/testing-with-2.1.18/app/views/admin/scripts/show.html.haml +28 -0
- data/testing-with-2.1.18/app/views/admin/seos/robots.html.haml +35 -0
- data/testing-with-2.1.18/app/views/admin/seos/sitemap.html.haml +36 -0
- data/testing-with-2.1.18/app/views/admin/settings/_form.html.haml +10 -0
- data/testing-with-2.1.18/app/views/admin/settings/components/_preview.html.haml +30 -0
- data/testing-with-2.1.18/app/views/admin/settings/edit.html.haml +4 -0
- data/testing-with-2.1.18/app/views/admin/settings/fields/_appearance.html.haml +64 -0
- data/testing-with-2.1.18/app/views/admin/settings/fields/_basic_information.html.haml +40 -0
- data/testing-with-2.1.18/app/views/admin/settings/fields/_email_setting.html.haml +18 -0
- data/testing-with-2.1.18/app/views/admin/settings/fields/_google_analytics_setting.html.haml +21 -0
- data/testing-with-2.1.18/app/views/admin/settings/fields/_social_accounts.html.haml +43 -0
- data/testing-with-2.1.18/app/views/admin/users/_description.html.haml +13 -0
- data/testing-with-2.1.18/app/views/admin/users/_form.html.haml +45 -0
- data/testing-with-2.1.18/app/views/admin/users/_listing.html.haml +47 -0
- data/testing-with-2.1.18/app/views/admin/users/delete_avatar.js.haml +3 -0
- data/testing-with-2.1.18/app/views/admin/users/edit.html.haml +1 -0
- data/testing-with-2.1.18/app/views/admin/users/filter_by_role.js.erb +9 -0
- data/testing-with-2.1.18/app/views/admin/users/index.html.haml +69 -0
- data/testing-with-2.1.18/app/views/admin/users/new.html.haml +1 -0
- data/testing-with-2.1.18/app/views/admin/users/reload.js.haml +5 -0
- data/testing-with-2.1.18/app/views/admin/users/show.html.haml +34 -0
- data/testing-with-2.1.18/app/views/app/front/index.html.haml +223 -0
- data/testing-with-2.1.18/app/views/app/front/message.haml +1 -0
- data/testing-with-2.1.18/app/views/app/layouts/_footer.html.haml +3 -0
- data/testing-with-2.1.18/app/views/app/layouts/_google_analytics.html.haml +13 -0
- data/testing-with-2.1.18/app/views/app/layouts/_head.html.haml +15 -0
- data/testing-with-2.1.18/app/views/app/layouts/_messages.html.haml +6 -0
- data/testing-with-2.1.18/app/views/app/layouts/_meta_tags.html.haml +40 -0
- data/testing-with-2.1.18/app/views/app/layouts/_navigation.html.haml +13 -0
- data/testing-with-2.1.18/app/views/app/layouts/_navigation_links.html.haml +6 -0
- data/testing-with-2.1.18/app/views/app/layouts/application.html.haml +10 -0
- data/testing-with-2.1.18/app/views/application_mailer/testing.html.haml +1 -0
- data/testing-with-2.1.18/app/views/devise/confirmations/new.html.erb +16 -0
- data/testing-with-2.1.18/app/views/devise/mailer/reset_password_instructions.html.haml +6 -0
- data/testing-with-2.1.18/app/views/devise/passwords/edit.html.haml +31 -0
- data/testing-with-2.1.18/app/views/devise/passwords/new.html.haml +27 -0
- data/testing-with-2.1.18/app/views/devise/registrations/edit.html.erb +48 -0
- data/testing-with-2.1.18/app/views/devise/registrations/new.html.erb +19 -0
- data/testing-with-2.1.18/app/views/devise/sessions/new.html.haml +35 -0
- data/testing-with-2.1.18/app/views/devise/shared/_links.html.erb +21 -0
- data/testing-with-2.1.18/app/views/errors/internal_server_error.html.haml +50 -0
- data/testing-with-2.1.18/app/views/errors/not_authorized.html.haml +76 -0
- data/testing-with-2.1.18/app/views/errors/not_found.html.haml +101 -0
- data/testing-with-2.1.18/app/views/errors/unprocessable.html.haml +50 -0
- data/testing-with-2.1.18/app/views/kaminari/_first_page.html.haml +11 -0
- data/testing-with-2.1.18/app/views/kaminari/_gap.html.haml +8 -0
- data/testing-with-2.1.18/app/views/kaminari/_last_page.html.haml +11 -0
- data/testing-with-2.1.18/app/views/kaminari/_next_page.html.haml +11 -0
- data/testing-with-2.1.18/app/views/kaminari/_page.html.haml +10 -0
- data/testing-with-2.1.18/app/views/kaminari/_paginator.html.haml +18 -0
- data/testing-with-2.1.18/app/views/kaminari/_prev_page.html.haml +11 -0
- data/testing-with-2.1.18/app/views/layouts/errors/_head.html.haml +3 -0
- data/testing-with-2.1.18/app/views/layouts/errors/application.html.haml +11 -0
- data/testing-with-2.1.18/app/views/layouts/mailers/mailer.html.haml +3 -0
- data/testing-with-2.1.18/app/views/layouts/mailers/mailer.text.haml +1 -0
- data/testing-with-2.1.18/app/views/layouts/templates/application.html.haml +1 -0
- data/testing-with-2.1.18/app/views/public_activity/layout/_create.html.haml +44 -0
- data/testing-with-2.1.18/app/views/public_activity/layout/_destroy.html.haml +15 -0
- data/testing-with-2.1.18/app/views/public_activity/layout/_update.html.haml +44 -0
- data/testing-with-2.1.18/app/views/public_activity/session/_create.html.haml +13 -0
- data/testing-with-2.1.18/app/views/public_activity/session/_destroy.html.haml +13 -0
- data/testing-with-2.1.18/app/views/templates/kaminari/_first_page.html.haml +9 -0
- data/testing-with-2.1.18/app/views/templates/kaminari/_gap.html.haml +8 -0
- data/testing-with-2.1.18/app/views/templates/kaminari/_last_page.html.haml +9 -0
- data/testing-with-2.1.18/app/views/templates/kaminari/_next_page.html.haml +9 -0
- data/testing-with-2.1.18/app/views/templates/kaminari/_page.html.haml +10 -0
- data/testing-with-2.1.18/app/views/templates/kaminari/_paginator.html.haml +18 -0
- data/testing-with-2.1.18/app/views/templates/kaminari/_prev_page.html.haml +9 -0
- data/testing-with-2.1.18/bin/bundle +3 -0
- data/testing-with-2.1.18/bin/rails +4 -0
- data/testing-with-2.1.18/bin/rake +4 -0
- data/testing-with-2.1.18/bin/setup +29 -0
- data/testing-with-2.1.18/bin/spring +15 -0
- data/testing-with-2.1.18/bin/update +31 -0
- data/testing-with-2.1.18/bin/yarn +11 -0
- data/testing-with-2.1.18/config.ru +4 -0
- data/testing-with-2.1.18/config/application.rb +46 -0
- data/testing-with-2.1.18/config/attachments.yml +24 -0
- data/testing-with-2.1.18/config/boot.rb +7 -0
- data/testing-with-2.1.18/config/circleci/db_config.yml +51 -0
- data/testing-with-2.1.18/config/database.yml +25 -0
- data/testing-with-2.1.18/config/environment.rb +10 -0
- data/testing-with-2.1.18/config/environments/development.rb +61 -0
- data/testing-with-2.1.18/config/environments/production.rb +109 -0
- data/testing-with-2.1.18/config/environments/test.rb +45 -0
- data/testing-with-2.1.18/config/gaAuth/gauth_key.p12 +0 -0
- data/testing-with-2.1.18/config/initializers/assets.rb +14 -0
- data/testing-with-2.1.18/config/initializers/carrierwave.rb +12 -0
- data/testing-with-2.1.18/config/initializers/compression.rb +47 -0
- data/testing-with-2.1.18/config/initializers/cookies_serializer.rb +3 -0
- data/testing-with-2.1.18/config/initializers/date_formats.rb +2 -0
- data/testing-with-2.1.18/config/initializers/devise.rb +259 -0
- data/testing-with-2.1.18/config/initializers/filter_parameter_logging.rb +5 -0
- data/testing-with-2.1.18/config/initializers/inflections.rb +16 -0
- data/testing-with-2.1.18/config/initializers/keppler_configuration.rb +9 -0
- data/testing-with-2.1.18/config/initializers/mime_types.rb +6 -0
- data/testing-with-2.1.18/config/initializers/paginate_kaminari_configuration.rb +12 -0
- data/testing-with-2.1.18/config/initializers/ransack.rb +7 -0
- data/testing-with-2.1.18/config/initializers/rolify.rb +10 -0
- data/testing-with-2.1.18/config/initializers/route_traslator.rb +3 -0
- data/testing-with-2.1.18/config/initializers/session_store.rb +5 -0
- data/testing-with-2.1.18/config/initializers/simple_form.rb +170 -0
- data/testing-with-2.1.18/config/initializers/simple_form_bootstrap.rb +174 -0
- data/testing-with-2.1.18/config/initializers/simple_form_components.rb +61 -0
- data/testing-with-2.1.18/config/initializers/time_formats.rb +2 -0
- data/testing-with-2.1.18/config/initializers/wrap_parameters.rb +15 -0
- data/testing-with-2.1.18/config/jshint.yml +21 -0
- data/testing-with-2.1.18/config/locales/devise.en.yml +61 -0
- data/testing-with-2.1.18/config/locales/devise.es.yml +62 -0
- data/testing-with-2.1.18/config/locales/en.yml +477 -0
- data/testing-with-2.1.18/config/locales/es.yml +510 -0
- data/testing-with-2.1.18/config/locales/routes.en.yml +4 -0
- data/testing-with-2.1.18/config/locales/routes.es.yml +5 -0
- data/testing-with-2.1.18/config/locales/simple_form.en.yml +46 -0
- data/testing-with-2.1.18/config/locales/simple_form.es.yml +96 -0
- data/testing-with-2.1.18/config/locales/social_share_button.es.yml +10 -0
- data/testing-with-2.1.18/config/menu.yml +58 -0
- data/testing-with-2.1.18/config/permissions.yml +39 -0
- data/testing-with-2.1.18/config/puma.rb +56 -0
- data/testing-with-2.1.18/config/roles.yml +2 -0
- data/testing-with-2.1.18/config/routes.rb +191 -0
- data/testing-with-2.1.18/config/settings.yml +30 -0
- data/testing-with-2.1.18/config/sitemap.rb +30 -0
- data/testing-with-2.1.18/config/spring.rb +6 -0
- data/testing-with-2.1.18/db/migrate/20140812203549_devise_create_users.rb +50 -0
- data/testing-with-2.1.18/db/migrate/20140812210925_rolify_create_roles.rb +21 -0
- data/testing-with-2.1.18/db/migrate/20151221173228_create_activities.rb +23 -0
- data/testing-with-2.1.18/db/migrate/20160122201215_create_settings.rb +15 -0
- data/testing-with-2.1.18/db/migrate/20160126141856_create_smtp_settings.rb +15 -0
- data/testing-with-2.1.18/db/migrate/20160128131802_create_scripts.rb +12 -0
- data/testing-with-2.1.18/db/migrate/20160128151351_create_google_analytics_settings.rb +13 -0
- data/testing-with-2.1.18/db/migrate/20160128193740_create_social_accounts.rb +26 -0
- data/testing-with-2.1.18/db/migrate/20160201134918_create_meta_tags.rb +13 -0
- data/testing-with-2.1.18/db/migrate/20160201210520_create_appearances.rb +14 -0
- data/testing-with-2.1.18/db/migrate/20171225023933_create_scaffolds.rb +10 -0
- data/testing-with-2.1.18/db/migrate/20180503174351_create_permissions.rb +11 -0
- data/testing-with-2.1.18/db/migrate/20180717160308_create_keppler_frontend_views.keppler_frontend.rb +17 -0
- data/testing-with-2.1.18/db/migrate/20180730194655_create_keppler_frontend_themes.rb +13 -0
- data/testing-with-2.1.18/db/migrate/20180802184429_create_keppler_capsules_capsules.keppler_capsules.rb +13 -0
- data/testing-with-2.1.18/db/migrate/20180802184430_create_keppler_capsules_capsule_fields.keppler_capsules.rb +12 -0
- data/testing-with-2.1.18/db/migrate/20180806192023_create_keppler_capsules_capsule_validations.keppler_capsules.rb +13 -0
- data/testing-with-2.1.18/db/migrate/20180806203410_create_keppler_frontend_partials.keppler_frontend.rb +13 -0
- data/testing-with-2.1.18/db/migrate/20180807204310_create_keppler_capsules_capsule_associations.keppler_capsules.rb +13 -0
- data/testing-with-2.1.18/db/migrate/20180813160624_create_keppler_languages_languages.keppler_languages.rb +14 -0
- data/testing-with-2.1.18/db/migrate/20180813160625_create_keppler_languages_fields.keppler_languages.rb +14 -0
- data/testing-with-2.1.18/db/migrate/20180818073305_create_active_storage_tables.active_storage.rb +26 -0
- data/testing-with-2.1.18/db/migrate/20180827120841_create_keppler_frontend_callback_functions.keppler_frontend.rb +14 -0
- data/testing-with-2.1.18/db/migrate/20180827154329_create_keppler_frontend_view_callbacks.keppler_frontend.rb +12 -0
- data/testing-with-2.1.18/db/migrate/20180827154647_add_position_to_users_table.rb +5 -0
- data/testing-with-2.1.18/db/migrate/20180830153221_create_keppler_frontend_functions.keppler_frontend.rb +14 -0
- data/testing-with-2.1.18/db/migrate/20180830153222_create_keppler_frontend_parameters.keppler_frontend.rb +13 -0
- data/testing-with-2.1.18/db/migrate/20180904144238_create_seos.rb +11 -0
- data/testing-with-2.1.18/db/seeds.rb +162 -0
- data/testing-with-2.1.18/docs/diagrams/keppler_core/config +0 -0
- data/testing-with-2.1.18/docs/diagrams/keppler_frontend/editor/resources_editor.dia +0 -0
- data/testing-with-2.1.18/docs/diagrams/keppler_frontend/views/create_view.dia +0 -0
- data/testing-with-2.1.18/docs/diagrams/keppler_frontend/views/delete_view.dia +0 -0
- data/testing-with-2.1.18/docs/diagrams/keppler_frontend/views/delete_view.dia.autosave +0 -0
- data/testing-with-2.1.18/lib/generators/install_rocket/USAGE +44 -0
- data/testing-with-2.1.18/lib/generators/install_rocket/install_rocket_generator.rb +107 -0
- data/testing-with-2.1.18/lib/generators/keppler_add_module/USAGE +5 -0
- data/testing-with-2.1.18/lib/generators/keppler_add_module/keppler_add_module_generator.rb +324 -0
- data/testing-with-2.1.18/lib/generators/keppler_add_module/templates/controllers/controller.rb +106 -0
- data/testing-with-2.1.18/lib/generators/keppler_add_module/templates/models/model.rb +29 -0
- data/testing-with-2.1.18/lib/generators/keppler_add_module/templates/policies/policy.rb +11 -0
- data/testing-with-2.1.18/lib/generators/keppler_add_module/templates/views/_description.haml +13 -0
- data/testing-with-2.1.18/lib/generators/keppler_add_module/templates/views/_form.haml +49 -0
- data/testing-with-2.1.18/lib/generators/keppler_add_module/templates/views/_listing.haml +58 -0
- data/testing-with-2.1.18/lib/generators/keppler_add_module/templates/views/edit.haml +1 -0
- data/testing-with-2.1.18/lib/generators/keppler_add_module/templates/views/index.haml +70 -0
- data/testing-with-2.1.18/lib/generators/keppler_add_module/templates/views/new.haml +1 -0
- data/testing-with-2.1.18/lib/generators/keppler_add_module/templates/views/reload.js.haml +5 -0
- data/testing-with-2.1.18/lib/generators/keppler_add_module/templates/views/show.haml +35 -0
- data/testing-with-2.1.18/lib/generators/keppler_delete_module/USAGE +5 -0
- data/testing-with-2.1.18/lib/generators/keppler_delete_module/keppler_delete_module_generator.rb +305 -0
- data/testing-with-2.1.18/lib/generators/keppler_front/keppler_front_generator.rb +139 -0
- data/testing-with-2.1.18/lib/generators/keppler_front/templates/controllers/controller.rb +17 -0
- data/testing-with-2.1.18/lib/generators/keppler_front/templates/views/template.html.haml +225 -0
- data/testing-with-2.1.18/lib/generators/keppler_relation/keppler_relation_generator.rb +219 -0
- data/testing-with-2.1.18/lib/generators/new_rocket/USAGE +44 -0
- data/testing-with-2.1.18/lib/generators/new_rocket/new_rocket_generator.rb +258 -0
- data/testing-with-2.1.18/lib/generators/uninstall_rocket/USAGE +32 -0
- data/testing-with-2.1.18/lib/generators/uninstall_rocket/uninstall_rocket_generator.rb +140 -0
- data/testing-with-2.1.18/lib/keppler_configuration.rb +12 -0
- data/testing-with-2.1.18/lib/plugins/config/locales/en.yml +16 -0
- data/testing-with-2.1.18/lib/plugins/config/locales/es.yml +16 -0
- data/testing-with-2.1.18/lib/plugins/config/menu.yml +16 -0
- data/testing-with-2.1.18/lib/plugins/config/permissions.yml +1 -0
- data/testing-with-2.1.18/lib/plugins/generators/keppler_scaffold/keppler_scaffold_generator.rb +223 -0
- data/testing-with-2.1.18/lib/plugins/generators/keppler_scaffold/templates/controllers/controller.rb +107 -0
- data/testing-with-2.1.18/lib/plugins/generators/keppler_scaffold/templates/models/model.rb +29 -0
- data/testing-with-2.1.18/lib/plugins/generators/keppler_scaffold/templates/policies/policy.rb +14 -0
- data/testing-with-2.1.18/lib/plugins/generators/keppler_scaffold/templates/views/_description.haml +13 -0
- data/testing-with-2.1.18/lib/plugins/generators/keppler_scaffold/templates/views/_form.haml +49 -0
- data/testing-with-2.1.18/lib/plugins/generators/keppler_scaffold/templates/views/_listing.haml +58 -0
- data/testing-with-2.1.18/lib/plugins/generators/keppler_scaffold/templates/views/edit.haml +1 -0
- data/testing-with-2.1.18/lib/plugins/generators/keppler_scaffold/templates/views/index.haml +69 -0
- data/testing-with-2.1.18/lib/plugins/generators/keppler_scaffold/templates/views/new.haml +1 -0
- data/testing-with-2.1.18/lib/plugins/generators/keppler_scaffold/templates/views/reload.js.haml +5 -0
- data/testing-with-2.1.18/lib/plugins/generators/keppler_scaffold/templates/views/show.haml +35 -0
- data/testing-with-2.1.18/lib/plugins/install.rb +151 -0
- data/testing-with-2.1.18/lib/plugins/layouts/application.html.haml +23 -0
- data/testing-with-2.1.18/lib/templates/haml/scaffold/_form.html.haml +10 -0
- metadata +564 -3
- data/installer/core/.sass-cache/c3e12133096533fa0f5c2d91446553934f6099d2/(__TEMPLATE__)c +0 -0
data/testing-with-2.1.18/app/assets/javascripts/admin/bootstrap-file-input/plugins/piexif.min.js
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
!function(){"use strict";function e(e){return JSON.parse(JSON.stringify(e))}function t(e){for(var t=y(e);"ÿà"<=t[1].slice(0,2)&&t[1].slice(0,2)<="ÿï";)t=[t[0]].concat(t.slice(2));return t.join("")}function a(e){return s(">"+p("B",e.length),e)}function i(e){return s(">"+p("H",e.length),e)}function n(e){return s(">"+p("L",e.length),e)}function r(e,t,r){var o,l,m,y,c="",S="";if("Byte"==t)o=e.length,4>=o?S=a(e)+p("\x00",4-o):(S=s(">L",[r]),c=a(e));else if("Short"==t)o=e.length,2>=o?S=i(e)+p("\x00\x00",2-o):(S=s(">L",[r]),c=i(e));else if("Long"==t)o=e.length,1>=o?S=n(e):(S=s(">L",[r]),c=n(e));else if("Ascii"==t)l=e+"\x00",o=l.length,o>4?(S=s(">L",[r]),c=l):S=l+p("\x00",4-o);else if("Rational"==t){if("number"==typeof e[0])o=1,m=e[0],y=e[1],l=s(">L",[m])+s(">L",[y]);else{o=e.length,l="";for(var f=0;o>f;f++)m=e[f][0],y=e[f][1],l+=s(">L",[m])+s(">L",[y])}S=s(">L",[r]),c=l}else if("SRational"==t){if("number"==typeof e[0])o=1,m=e[0],y=e[1],l=s(">l",[m])+s(">l",[y]);else{o=e.length,l="";for(var f=0;o>f;f++)m=e[f][0],y=e[f][1],l+=s(">l",[m])+s(">l",[y])}S=s(">L",[r]),c=l}else"Undefined"==t&&(o=e.length,o>4?(S=s(">L",[r]),c=e):S=e+p("\x00",4-o));var h=s(">L",[o]);return[h,S,c]}function o(e,t,a){var i,n=8,o=Object.keys(e).length,l=s(">H",[o]);i=["0th","1st"].indexOf(t)>-1?2+12*o+4:2+12*o;var m,p="",y="";for(var m in e)if("string"==typeof m&&(m=parseInt(m)),!("0th"==t&&[34665,34853].indexOf(m)>-1||"Exif"==t&&40965==m||"1st"==t&&[513,514].indexOf(m)>-1)){var c=e[m],S=s(">H",[m]),f=u[t][m].type,h=s(">H",[g[f]]);"number"==typeof c&&(c=[c]);var d=n+i+a+y.length,P=r(c,f,d),C=P[0],R=P[1],L=P[2];p+=S+h+C+R,y+=L}return[l+p,y]}function l(e){var t,a;if("ÿØ"==e.slice(0,2))t=y(e),a=c(t),a?this.tiftag=a.slice(10):this.tiftag=null;else if(["II","MM"].indexOf(e.slice(0,2))>-1)this.tiftag=e;else{if("Exif"!=e.slice(0,4))throw"Given file is neither JPEG nor TIFF.";this.tiftag=e.slice(6)}}function s(e,t){if(!(t instanceof Array))throw"'pack' error. Got invalid type argument.";if(e.length-1!=t.length)throw"'pack' error. "+(e.length-1)+" marks, "+t.length+" elements.";var a;if("<"==e[0])a=!0;else{if(">"!=e[0])throw"";a=!1}for(var i="",n=1,r=null,o=null,l=null;o=e[n];){if("b"==o.toLowerCase()){if(r=t[n-1],"b"==o&&0>r&&(r+=256),r>255||0>r)throw"'pack' error.";l=String.fromCharCode(r)}else if("H"==o){if(r=t[n-1],r>65535||0>r)throw"'pack' error.";l=String.fromCharCode(Math.floor(r%65536/256))+String.fromCharCode(r%256),a&&(l=l.split("").reverse().join(""))}else{if("l"!=o.toLowerCase())throw"'pack' error.";if(r=t[n-1],"l"==o&&0>r&&(r+=4294967296),r>4294967295||0>r)throw"'pack' error.";l=String.fromCharCode(Math.floor(r/16777216))+String.fromCharCode(Math.floor(r%16777216/65536))+String.fromCharCode(Math.floor(r%65536/256))+String.fromCharCode(r%256),a&&(l=l.split("").reverse().join(""))}i+=l,n+=1}return i}function m(e,t){if("string"!=typeof t)throw"'unpack' error. Got invalid type argument.";for(var a=0,i=1;i<e.length;i++)if("b"==e[i].toLowerCase())a+=1;else if("h"==e[i].toLowerCase())a+=2;else{if("l"!=e[i].toLowerCase())throw"'unpack' error. Got invalid mark.";a+=4}if(a!=t.length)throw"'unpack' error. Mismatch between symbol and string length. "+a+":"+t.length;var n;if("<"==e[0])n=!0;else{if(">"!=e[0])throw"'unpack' error.";n=!1}for(var r=[],o=0,l=1,s=null,m=null,p=null,y="";m=e[l];){if("b"==m.toLowerCase())p=1,y=t.slice(o,o+p),s=y.charCodeAt(0),"b"==m&&s>=128&&(s-=256);else if("H"==m)p=2,y=t.slice(o,o+p),n&&(y=y.split("").reverse().join("")),s=256*y.charCodeAt(0)+y.charCodeAt(1);else{if("l"!=m.toLowerCase())throw"'unpack' error. "+m;p=4,y=t.slice(o,o+p),n&&(y=y.split("").reverse().join("")),s=16777216*y.charCodeAt(0)+65536*y.charCodeAt(1)+256*y.charCodeAt(2)+y.charCodeAt(3),"l"==m&&s>=2147483648&&(s-=4294967296)}r.push(s),o+=p,l+=1}return r}function p(e,t){for(var a="",i=0;t>i;i++)a+=e;return a}function y(e){if("ÿØ"!=e.slice(0,2))throw"Given data isn't JPEG.";for(var t=2,a=["ÿØ"];;){if("ÿÚ"==e.slice(t,t+2)){a.push(e.slice(t));break}var i=m(">H",e.slice(t+2,t+4))[0],n=t+i+2;if(a.push(e.slice(t,n)),t=n,t>=e.length)throw"Wrong JPEG data."}return a}function c(e){for(var t,a=0;a<e.length;a++)if(t=e[a],"ÿá"==t.slice(0,2)&&"Exif\x00\x00"==t.slice(4,10))return t;return null}function S(e,t){return"ÿà"==e[1].slice(0,2)&&"ÿá"==e[2].slice(0,2)&&"Exif\x00\x00"==e[2].slice(4,10)?t?(e[2]=t,e=["ÿØ"].concat(e.slice(2))):e=null==t?e.slice(0,2).concat(e.slice(3)):e.slice(0).concat(e.slice(2)):"ÿà"==e[1].slice(0,2)?t&&(e[1]=t):"ÿá"==e[1].slice(0,2)&&"Exif\x00\x00"==e[1].slice(4,10)?t?e[1]=t:null==t&&(e=e.slice(0).concat(e.slice(2))):t&&(e=[e[0],t].concat(e.slice(1))),e.join("")}var f={};if(f.version="1.03",f.remove=function(e){var t=!1;if("ÿØ"==e.slice(0,2));else{if("data:image/jpeg;base64,"!=e.slice(0,23)&&"data:image/jpg;base64,"!=e.slice(0,22))throw"Given data is not jpeg.";e=d(e.split(",")[1]),t=!0}var a=y(e);if("ÿá"==a[1].slice(0,2)&&"Exif\x00\x00"==a[1].slice(4,10))a=[a[0]].concat(a.slice(2));else{if("ÿá"!=a[2].slice(0,2)||"Exif\x00\x00"!=a[2].slice(4,10))throw"Exif not found.";a=a.slice(0,2).concat(a.slice(3))}var i=a.join("");return t&&(i="data:image/jpeg;base64,"+h(i)),i},f.insert=function(e,t){var a=!1;if("Exif\x00\x00"!=e.slice(0,6))throw"Given data is not exif.";if("ÿØ"==t.slice(0,2));else{if("data:image/jpeg;base64,"!=t.slice(0,23)&&"data:image/jpg;base64,"!=t.slice(0,22))throw"Given data is not jpeg.";t=d(t.split(",")[1]),a=!0}var i="ÿá"+s(">H",[e.length+2])+e,n=y(t),r=S(n,i);return a&&(r="data:image/jpeg;base64,"+h(r)),r},f.load=function(e){var t;if("string"!=typeof e)throw"'load' gots invalid type argument.";if("ÿØ"==e.slice(0,2))t=e;else if("data:image/jpeg;base64,"==e.slice(0,23)||"data:image/jpg;base64,"==e.slice(0,22))t=d(e.split(",")[1]);else{if("Exif"!=e.slice(0,4))throw"'load' gots invalid file data.";t=e.slice(6)}var a={"0th":{},Exif:{},GPS:{},Interop:{},"1st":{},thumbnail:null},i=new l(t);if(null===i.tiftag)return a;"II"==i.tiftag.slice(0,2)?i.endian_mark="<":i.endian_mark=">";var n=m(i.endian_mark+"L",i.tiftag.slice(4,8))[0];a["0th"]=i.get_ifd(n,"0th");var r=a["0th"].first_ifd_pointer;if(delete a["0th"].first_ifd_pointer,34665 in a["0th"]&&(n=a["0th"][34665],a.Exif=i.get_ifd(n,"Exif")),34853 in a["0th"]&&(n=a["0th"][34853],a.GPS=i.get_ifd(n,"GPS")),40965 in a.Exif&&(n=a.Exif[40965],a.Interop=i.get_ifd(n,"Interop")),"\x00\x00\x00\x00"!=r&&(n=m(i.endian_mark+"L",r)[0],a["1st"]=i.get_ifd(n,"1st"),513 in a["1st"]&&514 in a["1st"])){var o=a["1st"][513]+a["1st"][514],s=i.tiftag.slice(a["1st"][513],o);a.thumbnail=s}return a},f.dump=function(a){var i,n,r,l,m,p=8,y=e(a),c="Exif\x00\x00MM\x00*\x00\x00\x00\b",S=!1,h=!1,d=!1,u=!1;i="0th"in y?y["0th"]:{},"Exif"in y&&Object.keys(y.Exif).length||"Interop"in y&&Object.keys(y.Interop).length?(i[34665]=1,S=!0,n=y.Exif,"Interop"in y&&Object.keys(y.Interop).length?(n[40965]=1,d=!0,r=y.Interop):Object.keys(n).indexOf(f.ExifIFD.InteroperabilityTag.toString())>-1&&delete n[40965]):Object.keys(i).indexOf(f.ImageIFD.ExifTag.toString())>-1&&delete i[34665],"GPS"in y&&Object.keys(y.GPS).length?(i[f.ImageIFD.GPSTag]=1,h=!0,l=y.GPS):Object.keys(i).indexOf(f.ImageIFD.GPSTag.toString())>-1&&delete i[f.ImageIFD.GPSTag],"1st"in y&&"thumbnail"in y&&null!=y.thumbnail&&(u=!0,y["1st"][513]=1,y["1st"][514]=1,m=y["1st"]);var P,C,R,L,x,I=o(i,"0th",0),D=I[0].length+12*S+12*h+4+I[1].length,G="",A=0,v="",b=0,T="",k=0,w="";if(S&&(P=o(n,"Exif",D),A=P[0].length+12*d+P[1].length),h&&(C=o(l,"GPS",D+A),v=C.join(""),b=v.length),d){var F=D+A+b;R=o(r,"Interop",F),T=R.join(""),k=T.length}if(u){var F=D+A+b+k;if(L=o(m,"1st",F),x=t(y.thumbnail),x.length>64e3)throw"Given thumbnail is too large. max 64kB"}var B="",E="",M="",O="\x00\x00\x00\x00";if(S){var N=p+D,U=s(">L",[N]),_=34665,H=s(">H",[_]),j=s(">H",[g.Long]),V=s(">L",[1]);B=H+j+V+U}if(h){var N=p+D+A,U=s(">L",[N]),_=34853,H=s(">H",[_]),j=s(">H",[g.Long]),V=s(">L",[1]);E=H+j+V+U}if(d){var N=p+D+A+b,U=s(">L",[N]),_=40965,H=s(">H",[_]),j=s(">H",[g.Long]),V=s(">L",[1]);M=H+j+V+U}if(u){var N=p+D+A+b+k;O=s(">L",[N]);var J=N+L[0].length+24+4+L[1].length,X="\x00\x00\x00\x00"+s(">L",[J]),z="\x00\x00\x00\x00"+s(">L",[x.length]);w=L[0]+X+z+"\x00\x00\x00\x00"+L[1]+x}var Y=I[0]+B+E+O+I[1];return S&&(G=P[0]+M+P[1]),c+Y+G+v+T+w},l.prototype={get_ifd:function(e,t){var a,i={},n=m(this.endian_mark+"H",this.tiftag.slice(e,e+2))[0],r=e+2;a=["0th","1st"].indexOf(t)>-1?"Image":t;for(var o=0;n>o;o++){e=r+12*o;var l=m(this.endian_mark+"H",this.tiftag.slice(e,e+2))[0],s=m(this.endian_mark+"H",this.tiftag.slice(e+2,e+4))[0],p=m(this.endian_mark+"L",this.tiftag.slice(e+4,e+8))[0],y=this.tiftag.slice(e+8,e+12),c=[s,p,y];l in u[a]&&(i[l]=this.convert_value(c))}return"0th"==t&&(e=r+12*n,i.first_ifd_pointer=this.tiftag.slice(e,e+4)),i},convert_value:function(e){var t,a=null,i=e[0],n=e[1],r=e[2];if(1==i)n>4?(t=m(this.endian_mark+"L",r)[0],a=m(this.endian_mark+p("B",n),this.tiftag.slice(t,t+n))):a=m(this.endian_mark+p("B",n),r.slice(0,n));else if(2==i)n>4?(t=m(this.endian_mark+"L",r)[0],a=this.tiftag.slice(t,t+n-1)):a=r.slice(0,n-1);else if(3==i)n>2?(t=m(this.endian_mark+"L",r)[0],a=m(this.endian_mark+p("H",n),this.tiftag.slice(t,t+2*n))):a=m(this.endian_mark+p("H",n),r.slice(0,2*n));else if(4==i)n>1?(t=m(this.endian_mark+"L",r)[0],a=m(this.endian_mark+p("L",n),this.tiftag.slice(t,t+4*n))):a=m(this.endian_mark+p("L",n),r);else if(5==i)if(t=m(this.endian_mark+"L",r)[0],n>1){a=[];for(var o=0;n>o;o++)a.push([m(this.endian_mark+"L",this.tiftag.slice(t+8*o,t+4+8*o))[0],m(this.endian_mark+"L",this.tiftag.slice(t+4+8*o,t+8+8*o))[0]])}else a=[m(this.endian_mark+"L",this.tiftag.slice(t,t+4))[0],m(this.endian_mark+"L",this.tiftag.slice(t+4,t+8))[0]];else if(7==i)n>4?(t=m(this.endian_mark+"L",r)[0],a=this.tiftag.slice(t,t+n)):a=r.slice(0,n);else{if(10!=i)throw"Exif might be wrong. Got incorrect value type to decode. type:"+i;if(t=m(this.endian_mark+"L",r)[0],n>1){a=[];for(var o=0;n>o;o++)a.push([m(this.endian_mark+"l",this.tiftag.slice(t+8*o,t+4+8*o))[0],m(this.endian_mark+"l",this.tiftag.slice(t+4+8*o,t+8+8*o))[0]])}else a=[m(this.endian_mark+"l",this.tiftag.slice(t,t+4))[0],m(this.endian_mark+"l",this.tiftag.slice(t+4,t+8))[0]]}return a instanceof Array&&1==a.length?a[0]:a}},"undefined"!=typeof window&&"function"==typeof window.btoa)var h=window.btoa;if("undefined"==typeof h)var h=function(e){for(var t,a,i,n,r,o,l,s="",m=0,p="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";m<e.length;)t=e.charCodeAt(m++),a=e.charCodeAt(m++),i=e.charCodeAt(m++),n=t>>2,r=(3&t)<<4|a>>4,o=(15&a)<<2|i>>6,l=63&i,isNaN(a)?o=l=64:isNaN(i)&&(l=64),s=s+p.charAt(n)+p.charAt(r)+p.charAt(o)+p.charAt(l);return s};if("undefined"!=typeof window&&"function"==typeof window.atob)var d=window.atob;if("undefined"==typeof d)var d=function(e){var t,a,i,n,r,o,l,s="",m=0,p="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";for(e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");m<e.length;)n=p.indexOf(e.charAt(m++)),r=p.indexOf(e.charAt(m++)),o=p.indexOf(e.charAt(m++)),l=p.indexOf(e.charAt(m++)),t=n<<2|r>>4,a=(15&r)<<4|o>>2,i=(3&o)<<6|l,s+=String.fromCharCode(t),64!=o&&(s+=String.fromCharCode(a)),64!=l&&(s+=String.fromCharCode(i));return s};var g={Byte:1,Ascii:2,Short:3,Long:4,Rational:5,Undefined:7,SLong:9,SRational:10},u={Image:{11:{name:"ProcessingSoftware",type:"Ascii"},254:{name:"NewSubfileType",type:"Long"},255:{name:"SubfileType",type:"Short"},256:{name:"ImageWidth",type:"Long"},257:{name:"ImageLength",type:"Long"},258:{name:"BitsPerSample",type:"Short"},259:{name:"Compression",type:"Short"},262:{name:"PhotometricInterpretation",type:"Short"},263:{name:"Threshholding",type:"Short"},264:{name:"CellWidth",type:"Short"},265:{name:"CellLength",type:"Short"},266:{name:"FillOrder",type:"Short"},269:{name:"DocumentName",type:"Ascii"},270:{name:"ImageDescription",type:"Ascii"},271:{name:"Make",type:"Ascii"},272:{name:"Model",type:"Ascii"},273:{name:"StripOffsets",type:"Long"},274:{name:"Orientation",type:"Short"},277:{name:"SamplesPerPixel",type:"Short"},278:{name:"RowsPerStrip",type:"Long"},279:{name:"StripByteCounts",type:"Long"},282:{name:"XResolution",type:"Rational"},283:{name:"YResolution",type:"Rational"},284:{name:"PlanarConfiguration",type:"Short"},290:{name:"GrayResponseUnit",type:"Short"},291:{name:"GrayResponseCurve",type:"Short"},292:{name:"T4Options",type:"Long"},293:{name:"T6Options",type:"Long"},296:{name:"ResolutionUnit",type:"Short"},301:{name:"TransferFunction",type:"Short"},305:{name:"Software",type:"Ascii"},306:{name:"DateTime",type:"Ascii"},315:{name:"Artist",type:"Ascii"},316:{name:"HostComputer",type:"Ascii"},317:{name:"Predictor",type:"Short"},318:{name:"WhitePoint",type:"Rational"},319:{name:"PrimaryChromaticities",type:"Rational"},320:{name:"ColorMap",type:"Short"},321:{name:"HalftoneHints",type:"Short"},322:{name:"TileWidth",type:"Short"},323:{name:"TileLength",type:"Short"},324:{name:"TileOffsets",type:"Short"},325:{name:"TileByteCounts",type:"Short"},330:{name:"SubIFDs",type:"Long"},332:{name:"InkSet",type:"Short"},333:{name:"InkNames",type:"Ascii"},334:{name:"NumberOfInks",type:"Short"},336:{name:"DotRange",type:"Byte"},337:{name:"TargetPrinter",type:"Ascii"},338:{name:"ExtraSamples",type:"Short"},339:{name:"SampleFormat",type:"Short"},340:{name:"SMinSampleValue",type:"Short"},341:{name:"SMaxSampleValue",type:"Short"},342:{name:"TransferRange",type:"Short"},343:{name:"ClipPath",type:"Byte"},344:{name:"XClipPathUnits",type:"Long"},345:{name:"YClipPathUnits",type:"Long"},346:{name:"Indexed",type:"Short"},347:{name:"JPEGTables",type:"Undefined"},351:{name:"OPIProxy",type:"Short"},512:{name:"JPEGProc",type:"Long"},513:{name:"JPEGInterchangeFormat",type:"Long"},514:{name:"JPEGInterchangeFormatLength",type:"Long"},515:{name:"JPEGRestartInterval",type:"Short"},517:{name:"JPEGLosslessPredictors",type:"Short"},518:{name:"JPEGPointTransforms",type:"Short"},519:{name:"JPEGQTables",type:"Long"},520:{name:"JPEGDCTables",type:"Long"},521:{name:"JPEGACTables",type:"Long"},529:{name:"YCbCrCoefficients",type:"Rational"},530:{name:"YCbCrSubSampling",type:"Short"},531:{name:"YCbCrPositioning",type:"Short"},532:{name:"ReferenceBlackWhite",type:"Rational"},700:{name:"XMLPacket",type:"Byte"},18246:{name:"Rating",type:"Short"},18249:{name:"RatingPercent",type:"Short"},32781:{name:"ImageID",type:"Ascii"},33421:{name:"CFARepeatPatternDim",type:"Short"},33422:{name:"CFAPattern",type:"Byte"},33423:{name:"BatteryLevel",type:"Rational"},33432:{name:"Copyright",type:"Ascii"},33434:{name:"ExposureTime",type:"Rational"},34377:{name:"ImageResources",type:"Byte"},34665:{name:"ExifTag",type:"Long"},34675:{name:"InterColorProfile",type:"Undefined"},34853:{name:"GPSTag",type:"Long"},34857:{name:"Interlace",type:"Short"},34858:{name:"TimeZoneOffset",type:"Long"},34859:{name:"SelfTimerMode",type:"Short"},37387:{name:"FlashEnergy",type:"Rational"},37388:{name:"SpatialFrequencyResponse",type:"Undefined"},37389:{name:"Noise",type:"Undefined"},37390:{name:"FocalPlaneXResolution",type:"Rational"},37391:{name:"FocalPlaneYResolution",type:"Rational"},37392:{name:"FocalPlaneResolutionUnit",type:"Short"},37393:{name:"ImageNumber",type:"Long"},37394:{name:"SecurityClassification",type:"Ascii"},37395:{name:"ImageHistory",type:"Ascii"},37397:{name:"ExposureIndex",type:"Rational"},37398:{name:"TIFFEPStandardID",type:"Byte"},37399:{name:"SensingMethod",type:"Short"},40091:{name:"XPTitle",type:"Byte"},40092:{name:"XPComment",type:"Byte"},40093:{name:"XPAuthor",type:"Byte"},40094:{name:"XPKeywords",type:"Byte"},40095:{name:"XPSubject",type:"Byte"},50341:{name:"PrintImageMatching",type:"Undefined"},50706:{name:"DNGVersion",type:"Byte"},50707:{name:"DNGBackwardVersion",type:"Byte"},50708:{name:"UniqueCameraModel",type:"Ascii"},50709:{name:"LocalizedCameraModel",type:"Byte"},50710:{name:"CFAPlaneColor",type:"Byte"},50711:{name:"CFALayout",type:"Short"},50712:{name:"LinearizationTable",type:"Short"},50713:{name:"BlackLevelRepeatDim",type:"Short"},50714:{name:"BlackLevel",type:"Rational"},50715:{name:"BlackLevelDeltaH",type:"SRational"},50716:{name:"BlackLevelDeltaV",type:"SRational"},50717:{name:"WhiteLevel",type:"Short"},50718:{name:"DefaultScale",type:"Rational"},50719:{name:"DefaultCropOrigin",type:"Short"},50720:{name:"DefaultCropSize",type:"Short"},50721:{name:"ColorMatrix1",type:"SRational"},50722:{name:"ColorMatrix2",type:"SRational"},50723:{name:"CameraCalibration1",type:"SRational"},50724:{name:"CameraCalibration2",type:"SRational"},50725:{name:"ReductionMatrix1",type:"SRational"},50726:{name:"ReductionMatrix2",type:"SRational"},50727:{name:"AnalogBalance",type:"Rational"},50728:{name:"AsShotNeutral",type:"Short"},50729:{name:"AsShotWhiteXY",type:"Rational"},50730:{name:"BaselineExposure",type:"SRational"},50731:{name:"BaselineNoise",type:"Rational"},50732:{name:"BaselineSharpness",type:"Rational"},50733:{name:"BayerGreenSplit",type:"Long"},50734:{name:"LinearResponseLimit",type:"Rational"},50735:{name:"CameraSerialNumber",type:"Ascii"},50736:{name:"LensInfo",type:"Rational"},50737:{name:"ChromaBlurRadius",type:"Rational"},50738:{name:"AntiAliasStrength",type:"Rational"},50739:{name:"ShadowScale",type:"SRational"},50740:{name:"DNGPrivateData",type:"Byte"},50741:{name:"MakerNoteSafety",type:"Short"},50778:{name:"CalibrationIlluminant1",type:"Short"},50779:{name:"CalibrationIlluminant2",type:"Short"},50780:{name:"BestQualityScale",type:"Rational"},50781:{name:"RawDataUniqueID",type:"Byte"},50827:{name:"OriginalRawFileName",type:"Byte"},50828:{name:"OriginalRawFileData",type:"Undefined"},50829:{name:"ActiveArea",type:"Short"},50830:{name:"MaskedAreas",type:"Short"},50831:{name:"AsShotICCProfile",type:"Undefined"},50832:{name:"AsShotPreProfileMatrix",type:"SRational"},50833:{name:"CurrentICCProfile",type:"Undefined"},50834:{name:"CurrentPreProfileMatrix",type:"SRational"},50879:{name:"ColorimetricReference",type:"Short"},50931:{name:"CameraCalibrationSignature",type:"Byte"},50932:{name:"ProfileCalibrationSignature",type:"Byte"},50934:{name:"AsShotProfileName",type:"Byte"},50935:{name:"NoiseReductionApplied",type:"Rational"},50936:{name:"ProfileName",type:"Byte"},50937:{name:"ProfileHueSatMapDims",type:"Long"},50938:{name:"ProfileHueSatMapData1",type:"Float"},50939:{name:"ProfileHueSatMapData2",type:"Float"},50940:{name:"ProfileToneCurve",type:"Float"},50941:{name:"ProfileEmbedPolicy",type:"Long"},50942:{name:"ProfileCopyright",type:"Byte"},50964:{name:"ForwardMatrix1",type:"SRational"},50965:{name:"ForwardMatrix2",type:"SRational"},50966:{name:"PreviewApplicationName",type:"Byte"},50967:{name:"PreviewApplicationVersion",type:"Byte"},50968:{name:"PreviewSettingsName",type:"Byte"},50969:{name:"PreviewSettingsDigest",type:"Byte"},50970:{name:"PreviewColorSpace",type:"Long"},50971:{name:"PreviewDateTime",type:"Ascii"},50972:{name:"RawImageDigest",type:"Undefined"},50973:{name:"OriginalRawFileDigest",type:"Undefined"},50974:{name:"SubTileBlockSize",type:"Long"},50975:{name:"RowInterleaveFactor",type:"Long"},50981:{name:"ProfileLookTableDims",type:"Long"},50982:{name:"ProfileLookTableData",type:"Float"},51008:{name:"OpcodeList1",type:"Undefined"},51009:{name:"OpcodeList2",type:"Undefined"},51022:{name:"OpcodeList3",type:"Undefined"}},Exif:{33434:{name:"ExposureTime",type:"Rational"},33437:{name:"FNumber",type:"Rational"},34850:{name:"ExposureProgram",type:"Short"},34852:{name:"SpectralSensitivity",type:"Ascii"},34855:{name:"ISOSpeedRatings",type:"Short"},34856:{name:"OECF",type:"Undefined"},34864:{name:"SensitivityType",type:"Short"},34865:{name:"StandardOutputSensitivity",type:"Long"},34866:{name:"RecommendedExposureIndex",type:"Long"},34867:{name:"ISOSpeed",type:"Long"},34868:{name:"ISOSpeedLatitudeyyy",type:"Long"},34869:{name:"ISOSpeedLatitudezzz",type:"Long"},36864:{name:"ExifVersion",type:"Undefined"},36867:{name:"DateTimeOriginal",type:"Ascii"},36868:{name:"DateTimeDigitized",type:"Ascii"},37121:{name:"ComponentsConfiguration",type:"Undefined"},37122:{name:"CompressedBitsPerPixel",type:"Rational"},37377:{name:"ShutterSpeedValue",type:"SRational"},37378:{name:"ApertureValue",type:"Rational"},37379:{name:"BrightnessValue",type:"SRational"},37380:{name:"ExposureBiasValue",type:"SRational"},37381:{name:"MaxApertureValue",type:"Rational"},37382:{name:"SubjectDistance",type:"Rational"},37383:{name:"MeteringMode",type:"Short"},37384:{name:"LightSource",type:"Short"},37385:{name:"Flash",type:"Short"},37386:{name:"FocalLength",type:"Rational"},37396:{name:"SubjectArea",type:"Short"},37500:{name:"MakerNote",type:"Undefined"},37510:{name:"UserComment",type:"Ascii"},37520:{name:"SubSecTime",type:"Ascii"},37521:{name:"SubSecTimeOriginal",type:"Ascii"},37522:{name:"SubSecTimeDigitized",type:"Ascii"},40960:{name:"FlashpixVersion",type:"Undefined"},40961:{name:"ColorSpace",type:"Short"},40962:{name:"PixelXDimension",type:"Long"},40963:{name:"PixelYDimension",type:"Long"},40964:{name:"RelatedSoundFile",type:"Ascii"},40965:{name:"InteroperabilityTag",type:"Long"},41483:{name:"FlashEnergy",type:"Rational"},41484:{name:"SpatialFrequencyResponse",type:"Undefined"},41486:{name:"FocalPlaneXResolution",type:"Rational"},41487:{name:"FocalPlaneYResolution",type:"Rational"},41488:{name:"FocalPlaneResolutionUnit",type:"Short"},41492:{name:"SubjectLocation",type:"Short"},41493:{name:"ExposureIndex",type:"Rational"},41495:{name:"SensingMethod",type:"Short"},41728:{name:"FileSource",type:"Undefined"},41729:{name:"SceneType",type:"Undefined"},41730:{name:"CFAPattern",type:"Undefined"},41985:{name:"CustomRendered",type:"Short"},41986:{name:"ExposureMode",type:"Short"},41987:{name:"WhiteBalance",type:"Short"},41988:{name:"DigitalZoomRatio",type:"Rational"},41989:{name:"FocalLengthIn35mmFilm",type:"Short"},41990:{name:"SceneCaptureType",type:"Short"},41991:{name:"GainControl",type:"Short"},41992:{name:"Contrast",type:"Short"},41993:{name:"Saturation",type:"Short"},41994:{name:"Sharpness",type:"Short"},41995:{name:"DeviceSettingDescription",type:"Undefined"},41996:{name:"SubjectDistanceRange",type:"Short"},42016:{name:"ImageUniqueID",type:"Ascii"},42032:{name:"CameraOwnerName",type:"Ascii"},42033:{name:"BodySerialNumber",type:"Ascii"},42034:{name:"LensSpecification",type:"Rational"},42035:{name:"LensMake",type:"Ascii"},42036:{name:"LensModel",type:"Ascii"},42037:{name:"LensSerialNumber",type:"Ascii"},42240:{name:"Gamma",type:"Rational"}},GPS:{0:{name:"GPSVersionID",type:"Byte"},1:{name:"GPSLatitudeRef",type:"Ascii"},2:{name:"GPSLatitude",type:"Rational"},3:{name:"GPSLongitudeRef",type:"Ascii"},4:{name:"GPSLongitude",type:"Rational"},5:{name:"GPSAltitudeRef",type:"Byte"},6:{name:"GPSAltitude",type:"Rational"},7:{name:"GPSTimeStamp",type:"Rational"},8:{name:"GPSSatellites",type:"Ascii"},9:{name:"GPSStatus",type:"Ascii"},10:{name:"GPSMeasureMode",type:"Ascii"},11:{name:"GPSDOP",type:"Rational"},12:{name:"GPSSpeedRef",type:"Ascii"},13:{name:"GPSSpeed",type:"Rational"},14:{name:"GPSTrackRef",type:"Ascii"},15:{name:"GPSTrack",type:"Rational"},16:{name:"GPSImgDirectionRef",type:"Ascii"},17:{name:"GPSImgDirection",type:"Rational"},18:{name:"GPSMapDatum",type:"Ascii"},19:{name:"GPSDestLatitudeRef",type:"Ascii"},20:{name:"GPSDestLatitude",type:"Rational"},21:{name:"GPSDestLongitudeRef",type:"Ascii"},22:{name:"GPSDestLongitude",type:"Rational"},23:{name:"GPSDestBearingRef",type:"Ascii"},24:{name:"GPSDestBearing",type:"Rational"},25:{name:"GPSDestDistanceRef",type:"Ascii"},26:{name:"GPSDestDistance",type:"Rational"},27:{name:"GPSProcessingMethod",type:"Undefined"},28:{name:"GPSAreaInformation",type:"Undefined"},29:{name:"GPSDateStamp",type:"Ascii"},30:{name:"GPSDifferential",type:"Short"},31:{name:"GPSHPositioningError",type:"Rational"}},Interop:{1:{name:"InteroperabilityIndex",type:"Ascii"}}};u["0th"]=u.Image,u["1st"]=u.Image,f.TAGS=u,f.ImageIFD={ProcessingSoftware:11,NewSubfileType:254,SubfileType:255,ImageWidth:256,ImageLength:257,BitsPerSample:258,Compression:259,PhotometricInterpretation:262,Threshholding:263,CellWidth:264,CellLength:265,FillOrder:266,DocumentName:269,ImageDescription:270,Make:271,Model:272,StripOffsets:273,Orientation:274,SamplesPerPixel:277,RowsPerStrip:278,StripByteCounts:279,XResolution:282,YResolution:283,PlanarConfiguration:284,GrayResponseUnit:290,GrayResponseCurve:291,T4Options:292,T6Options:293,ResolutionUnit:296,TransferFunction:301,Software:305,DateTime:306,Artist:315,HostComputer:316,Predictor:317,WhitePoint:318,PrimaryChromaticities:319,ColorMap:320,HalftoneHints:321,TileWidth:322,TileLength:323,TileOffsets:324,TileByteCounts:325,SubIFDs:330,InkSet:332,InkNames:333,NumberOfInks:334,DotRange:336,TargetPrinter:337,ExtraSamples:338,SampleFormat:339,SMinSampleValue:340,SMaxSampleValue:341,TransferRange:342,ClipPath:343,XClipPathUnits:344,YClipPathUnits:345,Indexed:346,JPEGTables:347,OPIProxy:351,JPEGProc:512,JPEGInterchangeFormat:513,JPEGInterchangeFormatLength:514,JPEGRestartInterval:515,JPEGLosslessPredictors:517,JPEGPointTransforms:518,JPEGQTables:519,JPEGDCTables:520,JPEGACTables:521,YCbCrCoefficients:529,YCbCrSubSampling:530,YCbCrPositioning:531,ReferenceBlackWhite:532,XMLPacket:700,Rating:18246,RatingPercent:18249,ImageID:32781,CFARepeatPatternDim:33421,CFAPattern:33422,BatteryLevel:33423,Copyright:33432,ExposureTime:33434,ImageResources:34377,ExifTag:34665,InterColorProfile:34675,GPSTag:34853,Interlace:34857,TimeZoneOffset:34858,SelfTimerMode:34859,FlashEnergy:37387,SpatialFrequencyResponse:37388,Noise:37389,FocalPlaneXResolution:37390,FocalPlaneYResolution:37391,FocalPlaneResolutionUnit:37392,ImageNumber:37393,SecurityClassification:37394,ImageHistory:37395,ExposureIndex:37397,TIFFEPStandardID:37398,SensingMethod:37399,XPTitle:40091,XPComment:40092,XPAuthor:40093,XPKeywords:40094,XPSubject:40095,PrintImageMatching:50341,DNGVersion:50706,DNGBackwardVersion:50707,UniqueCameraModel:50708,LocalizedCameraModel:50709,CFAPlaneColor:50710,CFALayout:50711,LinearizationTable:50712,BlackLevelRepeatDim:50713,BlackLevel:50714,BlackLevelDeltaH:50715,BlackLevelDeltaV:50716,WhiteLevel:50717,DefaultScale:50718,DefaultCropOrigin:50719,DefaultCropSize:50720,ColorMatrix1:50721,ColorMatrix2:50722,CameraCalibration1:50723,CameraCalibration2:50724,ReductionMatrix1:50725,ReductionMatrix2:50726,AnalogBalance:50727,AsShotNeutral:50728,AsShotWhiteXY:50729,BaselineExposure:50730,BaselineNoise:50731,BaselineSharpness:50732,BayerGreenSplit:50733,LinearResponseLimit:50734,CameraSerialNumber:50735,LensInfo:50736,ChromaBlurRadius:50737,AntiAliasStrength:50738,ShadowScale:50739,DNGPrivateData:50740,MakerNoteSafety:50741,CalibrationIlluminant1:50778,CalibrationIlluminant2:50779,BestQualityScale:50780,RawDataUniqueID:50781,OriginalRawFileName:50827,OriginalRawFileData:50828,ActiveArea:50829,MaskedAreas:50830,AsShotICCProfile:50831,AsShotPreProfileMatrix:50832,CurrentICCProfile:50833,CurrentPreProfileMatrix:50834,ColorimetricReference:50879,CameraCalibrationSignature:50931,ProfileCalibrationSignature:50932,AsShotProfileName:50934,NoiseReductionApplied:50935,ProfileName:50936,ProfileHueSatMapDims:50937,ProfileHueSatMapData1:50938,ProfileHueSatMapData2:50939,ProfileToneCurve:50940,ProfileEmbedPolicy:50941,ProfileCopyright:50942,ForwardMatrix1:50964,ForwardMatrix2:50965,PreviewApplicationName:50966,PreviewApplicationVersion:50967,PreviewSettingsName:50968,PreviewSettingsDigest:50969,PreviewColorSpace:50970,PreviewDateTime:50971,RawImageDigest:50972,OriginalRawFileDigest:50973,SubTileBlockSize:50974,RowInterleaveFactor:50975,ProfileLookTableDims:50981,ProfileLookTableData:50982,OpcodeList1:51008,OpcodeList2:51009,OpcodeList3:51022,NoiseProfile:51041},f.ExifIFD={ExposureTime:33434,FNumber:33437,ExposureProgram:34850,SpectralSensitivity:34852,ISOSpeedRatings:34855,OECF:34856,SensitivityType:34864,StandardOutputSensitivity:34865,RecommendedExposureIndex:34866,ISOSpeed:34867,ISOSpeedLatitudeyyy:34868,ISOSpeedLatitudezzz:34869,ExifVersion:36864,DateTimeOriginal:36867,DateTimeDigitized:36868,ComponentsConfiguration:37121,CompressedBitsPerPixel:37122,ShutterSpeedValue:37377,ApertureValue:37378,BrightnessValue:37379,ExposureBiasValue:37380,MaxApertureValue:37381,SubjectDistance:37382,MeteringMode:37383,LightSource:37384,Flash:37385,FocalLength:37386,SubjectArea:37396,MakerNote:37500,UserComment:37510,SubSecTime:37520,SubSecTimeOriginal:37521,SubSecTimeDigitized:37522,FlashpixVersion:40960,ColorSpace:40961,PixelXDimension:40962,PixelYDimension:40963,RelatedSoundFile:40964,InteroperabilityTag:40965,FlashEnergy:41483,SpatialFrequencyResponse:41484,FocalPlaneXResolution:41486,FocalPlaneYResolution:41487,FocalPlaneResolutionUnit:41488,SubjectLocation:41492,ExposureIndex:41493,SensingMethod:41495,FileSource:41728,SceneType:41729,CFAPattern:41730,CustomRendered:41985,ExposureMode:41986,WhiteBalance:41987,DigitalZoomRatio:41988,FocalLengthIn35mmFilm:41989,SceneCaptureType:41990,GainControl:41991,Contrast:41992,Saturation:41993,Sharpness:41994,DeviceSettingDescription:41995,SubjectDistanceRange:41996,ImageUniqueID:42016,CameraOwnerName:42032,BodySerialNumber:42033,LensSpecification:42034,LensMake:42035,LensModel:42036,LensSerialNumber:42037,Gamma:42240},f.GPSIFD={GPSVersionID:0,GPSLatitudeRef:1,GPSLatitude:2,GPSLongitudeRef:3,GPSLongitude:4,GPSAltitudeRef:5,GPSAltitude:6,GPSTimeStamp:7,GPSSatellites:8,GPSStatus:9,GPSMeasureMode:10,GPSDOP:11,GPSSpeedRef:12,GPSSpeed:13,GPSTrackRef:14,GPSTrack:15,GPSImgDirectionRef:16,GPSImgDirection:17,GPSMapDatum:18,GPSDestLatitudeRef:19,GPSDestLatitude:20,GPSDestLongitudeRef:21,GPSDestLongitude:22,GPSDestBearingRef:23,GPSDestBearing:24,GPSDestDistanceRef:25,GPSDestDistance:26,GPSProcessingMethod:27,GPSAreaInformation:28,GPSDateStamp:29,GPSDifferential:30,GPSHPositioningError:31},f.InteropIFD={InteroperabilityIndex:1},f.GPSHelper={degToDmsRational:function(e){var t=e%1*60,a=t%1*60,i=Math.floor(e),n=Math.floor(t),r=Math.round(100*a);return[[i,1],[n,1],[r,100]]}},"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=f),exports.piexif=f):window.piexif=f}();
|
@@ -0,0 +1,812 @@
|
|
1
|
+
;(function(factory) {
|
2
|
+
'use strict';
|
3
|
+
/* global window: false, define: false, module: false */
|
4
|
+
var root = typeof window === 'undefined' ? null : window;
|
5
|
+
|
6
|
+
if (typeof define === 'function' && define.amd) {
|
7
|
+
define(function(){ return factory(root); });
|
8
|
+
} else if (typeof module !== 'undefined') {
|
9
|
+
module.exports = factory(root);
|
10
|
+
} else {
|
11
|
+
root.DOMPurify = factory(root);
|
12
|
+
}
|
13
|
+
}(function factory(window) {
|
14
|
+
'use strict';
|
15
|
+
|
16
|
+
var DOMPurify = function(window) {
|
17
|
+
return factory(window);
|
18
|
+
};
|
19
|
+
|
20
|
+
/**
|
21
|
+
* Version label, exposed for easier checks
|
22
|
+
* if DOMPurify is up to date or not
|
23
|
+
*/
|
24
|
+
DOMPurify.version = '0.7.4';
|
25
|
+
|
26
|
+
if (!window || !window.document || window.document.nodeType !== 9) {
|
27
|
+
// not running in a browser, provide a factory function
|
28
|
+
// so that you can pass your own Window
|
29
|
+
DOMPurify.isSupported = false;
|
30
|
+
return DOMPurify;
|
31
|
+
}
|
32
|
+
|
33
|
+
var document = window.document;
|
34
|
+
var originalDocument = document;
|
35
|
+
var DocumentFragment = window.DocumentFragment;
|
36
|
+
var HTMLTemplateElement = window.HTMLTemplateElement;
|
37
|
+
var NodeFilter = window.NodeFilter;
|
38
|
+
var NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap;
|
39
|
+
var Text = window.Text;
|
40
|
+
var Comment = window.Comment;
|
41
|
+
var DOMParser = window.DOMParser;
|
42
|
+
|
43
|
+
// As per issue #47, the web-components registry is inherited by a
|
44
|
+
// new document created via createHTMLDocument. As per the spec
|
45
|
+
// (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)
|
46
|
+
// a new empty registry is used when creating a template contents owner
|
47
|
+
// document, so we use that as our parent document to ensure nothing
|
48
|
+
// is inherited.
|
49
|
+
if (typeof HTMLTemplateElement === 'function') {
|
50
|
+
var template = document.createElement('template');
|
51
|
+
if (template.content && template.content.ownerDocument) {
|
52
|
+
document = template.content.ownerDocument;
|
53
|
+
}
|
54
|
+
}
|
55
|
+
var implementation = document.implementation;
|
56
|
+
var createNodeIterator = document.createNodeIterator;
|
57
|
+
var getElementsByTagName = document.getElementsByTagName;
|
58
|
+
var createDocumentFragment = document.createDocumentFragment;
|
59
|
+
var importNode = originalDocument.importNode;
|
60
|
+
|
61
|
+
var hooks = {};
|
62
|
+
|
63
|
+
/**
|
64
|
+
* Expose whether this browser supports running the full DOMPurify.
|
65
|
+
*/
|
66
|
+
DOMPurify.isSupported =
|
67
|
+
typeof implementation.createHTMLDocument !== 'undefined' &&
|
68
|
+
document.documentMode !== 9;
|
69
|
+
|
70
|
+
/* Add properties to a lookup table */
|
71
|
+
var _addToSet = function(set, array) {
|
72
|
+
var l = array.length;
|
73
|
+
while (l--) {
|
74
|
+
if (typeof array[l] === 'string') {
|
75
|
+
array[l] = array[l].toLowerCase();
|
76
|
+
}
|
77
|
+
set[array[l]] = true;
|
78
|
+
}
|
79
|
+
return set;
|
80
|
+
};
|
81
|
+
|
82
|
+
/* Shallow clone an object */
|
83
|
+
var _cloneObj = function(object) {
|
84
|
+
var newObject = {};
|
85
|
+
var property;
|
86
|
+
for (property in object) {
|
87
|
+
if (object.hasOwnProperty(property)) {
|
88
|
+
newObject[property] = object[property];
|
89
|
+
}
|
90
|
+
}
|
91
|
+
return newObject;
|
92
|
+
};
|
93
|
+
|
94
|
+
/**
|
95
|
+
* We consider the elements and attributes below to be safe. Ideally
|
96
|
+
* don't add any new ones but feel free to remove unwanted ones.
|
97
|
+
*/
|
98
|
+
|
99
|
+
/* allowed element names */
|
100
|
+
var ALLOWED_TAGS = null;
|
101
|
+
var DEFAULT_ALLOWED_TAGS = _addToSet({}, [
|
102
|
+
|
103
|
+
// HTML
|
104
|
+
'a','abbr','acronym','address','area','article','aside','audio','b',
|
105
|
+
'bdi','bdo','big','blink','blockquote','body','br','button','canvas',
|
106
|
+
'caption','center','cite','code','col','colgroup','content','data',
|
107
|
+
'datalist','dd','decorator','del','details','dfn','dir','div','dl','dt',
|
108
|
+
'element','em','fieldset','figcaption','figure','font','footer','form',
|
109
|
+
'h1','h2','h3','h4','h5','h6','head','header','hgroup','hr','html','i',
|
110
|
+
'img','input','ins','kbd','label','legend','li','main','map','mark',
|
111
|
+
'marquee','menu','menuitem','meter','nav','nobr','ol','optgroup',
|
112
|
+
'option','output','p','pre','progress','q','rp','rt','ruby','s','samp',
|
113
|
+
'section','select','shadow','small','source','spacer','span','strike',
|
114
|
+
'strong','style','sub','summary','sup','table','tbody','td','template',
|
115
|
+
'textarea','tfoot','th','thead','time','tr','track','tt','u','ul','var',
|
116
|
+
'video','wbr',
|
117
|
+
|
118
|
+
// SVG
|
119
|
+
'svg','altglyph','altglyphdef','altglyphitem','animatecolor',
|
120
|
+
'animatemotion','animatetransform','circle','clippath','defs','desc',
|
121
|
+
'ellipse','filter','font','g','glyph','glyphref','hkern','image','line',
|
122
|
+
'lineargradient','marker','mask','metadata','mpath','path','pattern',
|
123
|
+
'polygon','polyline','radialgradient','rect','stop','switch','symbol',
|
124
|
+
'text','textpath','title','tref','tspan','view','vkern',
|
125
|
+
|
126
|
+
// SVG Filters
|
127
|
+
'feBlend','feColorMatrix','feComponentTransfer','feComposite',
|
128
|
+
'feConvolveMatrix','feDiffuseLighting','feDisplacementMap',
|
129
|
+
'feFlood','feFuncA','feFuncB','feFuncG','feFuncR','feGaussianBlur',
|
130
|
+
'feMerge','feMergeNode','feMorphology','feOffset',
|
131
|
+
'feSpecularLighting','feTile','feTurbulence',
|
132
|
+
|
133
|
+
//MathML
|
134
|
+
'math','menclose','merror','mfenced','mfrac','mglyph','mi','mlabeledtr',
|
135
|
+
'mmuliscripts','mn','mo','mover','mpadded','mphantom','mroot','mrow',
|
136
|
+
'ms','mpspace','msqrt','mystyle','msub','msup','msubsup','mtable','mtd',
|
137
|
+
'mtext','mtr','munder','munderover',
|
138
|
+
|
139
|
+
//Text
|
140
|
+
'#text'
|
141
|
+
]);
|
142
|
+
|
143
|
+
/* Allowed attribute names */
|
144
|
+
var ALLOWED_ATTR = null;
|
145
|
+
var DEFAULT_ALLOWED_ATTR = _addToSet({}, [
|
146
|
+
|
147
|
+
// HTML
|
148
|
+
'accept','action','align','alt','autocomplete','background','bgcolor',
|
149
|
+
'border','cellpadding','cellspacing','checked','cite','class','clear','color',
|
150
|
+
'cols','colspan','coords','datetime','default','dir','disabled',
|
151
|
+
'download','enctype','face','for','headers','height','hidden','high','href',
|
152
|
+
'hreflang','id','ismap','label','lang','list','loop', 'low','max',
|
153
|
+
'maxlength','media','method','min','multiple','name','noshade','novalidate',
|
154
|
+
'nowrap','open','optimum','pattern','placeholder','poster','preload','pubdate',
|
155
|
+
'radiogroup','readonly','rel','required','rev','reversed','rows',
|
156
|
+
'rowspan','spellcheck','scope','selected','shape','size','span',
|
157
|
+
'srclang','start','src','step','style','summary','tabindex','title',
|
158
|
+
'type','usemap','valign','value','width','xmlns',
|
159
|
+
|
160
|
+
// SVG
|
161
|
+
'accent-height','accumulate','additivive','alignment-baseline',
|
162
|
+
'ascent','attributename','attributetype','azimuth','basefrequency',
|
163
|
+
'baseline-shift','begin','bias','by','clip','clip-path','clip-rule',
|
164
|
+
'color','color-interpolation','color-interpolation-filters','color-profile',
|
165
|
+
'color-rendering','cx','cy','d','dx','dy','diffuseconstant','direction',
|
166
|
+
'display','divisor','dur','edgemode','elevation','end','fill','fill-opacity',
|
167
|
+
'fill-rule','filter','flood-color','flood-opacity','font-family','font-size',
|
168
|
+
'font-size-adjust','font-stretch','font-style','font-variant','font-weight',
|
169
|
+
'fx', 'fy','g1','g2','glyph-name','glyphref','gradientunits','gradienttransform',
|
170
|
+
'image-rendering','in','in2','k','k1','k2','k3','k4','kerning','keypoints',
|
171
|
+
'keysplines','keytimes','lengthadjust','letter-spacing','kernelmatrix',
|
172
|
+
'kernelunitlength','lighting-color','local','marker-end','marker-mid',
|
173
|
+
'marker-start','markerheight','markerunits','markerwidth','maskcontentunits',
|
174
|
+
'maskunits','max','mask','mode','min','numoctaves','offset','operator',
|
175
|
+
'opacity','order','orient','orientation','origin','overflow','paint-order',
|
176
|
+
'path','pathlength','patterncontentunits','patterntransform','patternunits',
|
177
|
+
'points','preservealpha','r','rx','ry','radius','refx','refy','repeatcount',
|
178
|
+
'repeatdur','restart','result','rotate','scale','seed','shape-rendering',
|
179
|
+
'specularconstant','specularexponent','spreadmethod','stddeviation','stitchtiles',
|
180
|
+
'stop-color','stop-opacity','stroke-dasharray','stroke-dashoffset','stroke-linecap',
|
181
|
+
'stroke-linejoin','stroke-miterlimit','stroke-opacity','stroke','stroke-width',
|
182
|
+
'surfacescale','targetx','targety','transform','text-anchor','text-decoration',
|
183
|
+
'text-rendering','textlength','u1','u2','unicode','values','viewbox',
|
184
|
+
'visibility','vert-adv-y','vert-origin-x','vert-origin-y','word-spacing',
|
185
|
+
'wrap','writing-mode','xchannelselector','ychannelselector','x','x1','x2',
|
186
|
+
'y','y1','y2','z','zoomandpan',
|
187
|
+
|
188
|
+
// MathML
|
189
|
+
'accent','accentunder','bevelled','close','columnsalign','columnlines',
|
190
|
+
'columnspan','denomalign','depth','display','displaystyle','fence',
|
191
|
+
'frame','largeop','length','linethickness','lspace','lquote',
|
192
|
+
'mathbackground','mathcolor','mathsize','mathvariant','maxsize',
|
193
|
+
'minsize','movablelimits','notation','numalign','open','rowalign',
|
194
|
+
'rowlines','rowspacing','rowspan','rspace','rquote','scriptlevel',
|
195
|
+
'scriptminsize','scriptsizemultiplier','selection','separator',
|
196
|
+
'separators','stretchy','subscriptshift','supscriptshift','symmetric',
|
197
|
+
'voffset',
|
198
|
+
|
199
|
+
// XML
|
200
|
+
'xlink:href','xml:id','xlink:title','xml:space','xmlns:xlink'
|
201
|
+
]);
|
202
|
+
|
203
|
+
/* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */
|
204
|
+
var FORBID_TAGS = null;
|
205
|
+
|
206
|
+
/* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */
|
207
|
+
var FORBID_ATTR = null;
|
208
|
+
|
209
|
+
/* Decide if custom data attributes are okay */
|
210
|
+
var ALLOW_DATA_ATTR = true;
|
211
|
+
|
212
|
+
/* Decide if unknown protocols are okay */
|
213
|
+
var ALLOW_UNKNOWN_PROTOCOLS = false;
|
214
|
+
|
215
|
+
/* Output should be safe for jQuery's $() factory? */
|
216
|
+
var SAFE_FOR_JQUERY = false;
|
217
|
+
|
218
|
+
/* Output should be safe for common template engines.
|
219
|
+
* This means, DOMPurify removes data attributes, mustaches and ERB
|
220
|
+
*/
|
221
|
+
var SAFE_FOR_TEMPLATES = false;
|
222
|
+
|
223
|
+
/* Specify template detection regex for SAFE_FOR_TEMPLATES mode */
|
224
|
+
var MUSTACHE_EXPR = /\{\{[\s\S]*|[\s\S]*\}\}/gm;
|
225
|
+
var ERB_EXPR = /<%[\s\S]*|[\s\S]*%>/gm;
|
226
|
+
|
227
|
+
/* Decide if document with <html>... should be returned */
|
228
|
+
var WHOLE_DOCUMENT = false;
|
229
|
+
|
230
|
+
/* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html string.
|
231
|
+
* If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead
|
232
|
+
*/
|
233
|
+
var RETURN_DOM = false;
|
234
|
+
|
235
|
+
/* Decide if a DOM `DocumentFragment` should be returned, instead of a html string */
|
236
|
+
var RETURN_DOM_FRAGMENT = false;
|
237
|
+
|
238
|
+
/* If `RETURN_DOM` or `RETURN_DOM_FRAGMENT` is enabled, decide if the returned DOM
|
239
|
+
* `Node` is imported into the current `Document`. If this flag is not enabled the
|
240
|
+
* `Node` will belong (its ownerDocument) to a fresh `HTMLDocument`, created by
|
241
|
+
* DOMPurify. */
|
242
|
+
var RETURN_DOM_IMPORT = false;
|
243
|
+
|
244
|
+
/* Output should be free from DOM clobbering attacks? */
|
245
|
+
var SANITIZE_DOM = true;
|
246
|
+
|
247
|
+
/* Keep element content when removing element? */
|
248
|
+
var KEEP_CONTENT = true;
|
249
|
+
|
250
|
+
/* Tags to ignore content of when KEEP_CONTENT is true */
|
251
|
+
var FORBID_CONTENTS = _addToSet({}, [
|
252
|
+
'audio', 'head', 'math', 'script', 'style', 'svg', 'video'
|
253
|
+
]);
|
254
|
+
|
255
|
+
/* Tags that are safe for data: URIs */
|
256
|
+
var DATA_URI_TAGS = _addToSet({}, [
|
257
|
+
'audio', 'video', 'img', 'source'
|
258
|
+
]);
|
259
|
+
|
260
|
+
/* Attributes safe for values like "javascript:" */
|
261
|
+
var URI_SAFE_ATTRIBUTES = _addToSet({}, [
|
262
|
+
'alt','class','for','id','label','name','pattern','placeholder',
|
263
|
+
'summary','title','value','style','xmlns'
|
264
|
+
]);
|
265
|
+
|
266
|
+
/* Keep a reference to config to pass to hooks */
|
267
|
+
var CONFIG = null;
|
268
|
+
|
269
|
+
/* Ideally, do not touch anything below this line */
|
270
|
+
/* ______________________________________________ */
|
271
|
+
|
272
|
+
var formElement = document.createElement('form');
|
273
|
+
|
274
|
+
/**
|
275
|
+
* _parseConfig
|
276
|
+
*
|
277
|
+
* @param optional config literal
|
278
|
+
*/
|
279
|
+
var _parseConfig = function(cfg) {
|
280
|
+
/* Shield configuration object from tampering */
|
281
|
+
if (typeof cfg !== 'object') {
|
282
|
+
cfg = {};
|
283
|
+
}
|
284
|
+
|
285
|
+
/* Set configuration parameters */
|
286
|
+
ALLOWED_TAGS = 'ALLOWED_TAGS' in cfg ?
|
287
|
+
_addToSet({}, cfg.ALLOWED_TAGS) : DEFAULT_ALLOWED_TAGS;
|
288
|
+
ALLOWED_ATTR = 'ALLOWED_ATTR' in cfg ?
|
289
|
+
_addToSet({}, cfg.ALLOWED_ATTR) : DEFAULT_ALLOWED_ATTR;
|
290
|
+
FORBID_TAGS = 'FORBID_TAGS' in cfg ?
|
291
|
+
_addToSet({}, cfg.FORBID_TAGS) : {};
|
292
|
+
FORBID_ATTR = 'FORBID_ATTR' in cfg ?
|
293
|
+
_addToSet({}, cfg.FORBID_ATTR) : {};
|
294
|
+
ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true
|
295
|
+
ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false
|
296
|
+
SAFE_FOR_JQUERY = cfg.SAFE_FOR_JQUERY || false; // Default false
|
297
|
+
SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false
|
298
|
+
WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false
|
299
|
+
RETURN_DOM = cfg.RETURN_DOM || false; // Default false
|
300
|
+
RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false
|
301
|
+
RETURN_DOM_IMPORT = cfg.RETURN_DOM_IMPORT || false; // Default false
|
302
|
+
SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true
|
303
|
+
KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true
|
304
|
+
|
305
|
+
if (SAFE_FOR_TEMPLATES) {
|
306
|
+
ALLOW_DATA_ATTR = false;
|
307
|
+
}
|
308
|
+
|
309
|
+
if (RETURN_DOM_FRAGMENT) {
|
310
|
+
RETURN_DOM = true;
|
311
|
+
}
|
312
|
+
|
313
|
+
/* Merge configuration parameters */
|
314
|
+
if (cfg.ADD_TAGS) {
|
315
|
+
if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {
|
316
|
+
ALLOWED_TAGS = _cloneObj(ALLOWED_TAGS);
|
317
|
+
}
|
318
|
+
_addToSet(ALLOWED_TAGS, cfg.ADD_TAGS);
|
319
|
+
}
|
320
|
+
if (cfg.ADD_ATTR) {
|
321
|
+
if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {
|
322
|
+
ALLOWED_ATTR = _cloneObj(ALLOWED_ATTR);
|
323
|
+
}
|
324
|
+
_addToSet(ALLOWED_ATTR, cfg.ADD_ATTR);
|
325
|
+
}
|
326
|
+
|
327
|
+
/* Add #text in case KEEP_CONTENT is set to true */
|
328
|
+
if (KEEP_CONTENT) { ALLOWED_TAGS['#text'] = true; }
|
329
|
+
|
330
|
+
// Prevent further manipulation of configuration.
|
331
|
+
// Not available in IE8, Safari 5, etc.
|
332
|
+
if (Object && 'freeze' in Object) { Object.freeze(cfg); }
|
333
|
+
|
334
|
+
CONFIG = cfg;
|
335
|
+
};
|
336
|
+
|
337
|
+
/**
|
338
|
+
* _forceRemove
|
339
|
+
*
|
340
|
+
* @param a DOM node
|
341
|
+
*/
|
342
|
+
var _forceRemove = function(node) {
|
343
|
+
try {
|
344
|
+
node.parentNode.removeChild(node);
|
345
|
+
} catch (e) {
|
346
|
+
node.outerHTML = '';
|
347
|
+
}
|
348
|
+
};
|
349
|
+
|
350
|
+
/**
|
351
|
+
* _initDocument
|
352
|
+
*
|
353
|
+
* @param a string of dirty markup
|
354
|
+
* @return a DOM, filled with the dirty markup
|
355
|
+
*/
|
356
|
+
var _initDocument = function(dirty) {
|
357
|
+
/* Create a HTML document using DOMParser */
|
358
|
+
var doc, body;
|
359
|
+
try {
|
360
|
+
doc = new DOMParser().parseFromString(dirty, 'text/html');
|
361
|
+
} catch (e) {}
|
362
|
+
|
363
|
+
/* Some browsers throw, some browsers return null for the code above
|
364
|
+
DOMParser with text/html support is only in very recent browsers. */
|
365
|
+
if (!doc) {
|
366
|
+
doc = implementation.createHTMLDocument('');
|
367
|
+
body = doc.body;
|
368
|
+
body.parentNode.removeChild(body.parentNode.firstElementChild);
|
369
|
+
body.outerHTML = dirty;
|
370
|
+
}
|
371
|
+
|
372
|
+
/* Work on whole document or just its body */
|
373
|
+
if (typeof doc.getElementsByTagName === 'function') {
|
374
|
+
return doc.getElementsByTagName(
|
375
|
+
WHOLE_DOCUMENT ? 'html' : 'body')[0];
|
376
|
+
}
|
377
|
+
return getElementsByTagName.call(doc,
|
378
|
+
WHOLE_DOCUMENT ? 'html' : 'body')[0];
|
379
|
+
};
|
380
|
+
|
381
|
+
/**
|
382
|
+
* _createIterator
|
383
|
+
*
|
384
|
+
* @param document/fragment to create iterator for
|
385
|
+
* @return iterator instance
|
386
|
+
*/
|
387
|
+
var _createIterator = function(root) {
|
388
|
+
return createNodeIterator.call(root.ownerDocument || root,
|
389
|
+
root,
|
390
|
+
NodeFilter.SHOW_ELEMENT
|
391
|
+
| NodeFilter.SHOW_COMMENT
|
392
|
+
| NodeFilter.SHOW_TEXT,
|
393
|
+
function() { return NodeFilter.FILTER_ACCEPT; },
|
394
|
+
false
|
395
|
+
);
|
396
|
+
};
|
397
|
+
|
398
|
+
/**
|
399
|
+
* _isClobbered
|
400
|
+
*
|
401
|
+
* @param element to check for clobbering attacks
|
402
|
+
* @return true if clobbered, false if safe
|
403
|
+
*/
|
404
|
+
var _isClobbered = function(elm) {
|
405
|
+
if (elm instanceof Text || elm instanceof Comment) {
|
406
|
+
return false;
|
407
|
+
}
|
408
|
+
if ( typeof elm.nodeName !== 'string'
|
409
|
+
|| typeof elm.textContent !== 'string'
|
410
|
+
|| typeof elm.removeChild !== 'function'
|
411
|
+
|| !(elm.attributes instanceof NamedNodeMap)
|
412
|
+
|| typeof elm.removeAttribute !== 'function'
|
413
|
+
|| typeof elm.setAttribute !== 'function'
|
414
|
+
) {
|
415
|
+
return true;
|
416
|
+
}
|
417
|
+
return false;
|
418
|
+
};
|
419
|
+
|
420
|
+
/**
|
421
|
+
* _sanitizeElements
|
422
|
+
*
|
423
|
+
* @protect nodeName
|
424
|
+
* @protect textContent
|
425
|
+
* @protect removeChild
|
426
|
+
*
|
427
|
+
* @param node to check for permission to exist
|
428
|
+
* @return true if node was killed, false if left alive
|
429
|
+
*/
|
430
|
+
var _sanitizeElements = function(currentNode) {
|
431
|
+
var tagName, content;
|
432
|
+
/* Execute a hook if present */
|
433
|
+
_executeHook('beforeSanitizeElements', currentNode, null);
|
434
|
+
|
435
|
+
/* Check if element is clobbered or can clobber */
|
436
|
+
if (_isClobbered(currentNode)) {
|
437
|
+
_forceRemove(currentNode);
|
438
|
+
return true;
|
439
|
+
}
|
440
|
+
|
441
|
+
/* Now let's check the element's type and name */
|
442
|
+
tagName = currentNode.nodeName.toLowerCase();
|
443
|
+
|
444
|
+
/* Execute a hook if present */
|
445
|
+
_executeHook('uponSanitizeElement', currentNode, {
|
446
|
+
tagName: tagName
|
447
|
+
});
|
448
|
+
|
449
|
+
/* Remove element if anything forbids its presence */
|
450
|
+
if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {
|
451
|
+
/* Keep content except for black-listed elements */
|
452
|
+
if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]
|
453
|
+
&& typeof currentNode.insertAdjacentHTML === 'function') {
|
454
|
+
try {
|
455
|
+
currentNode.insertAdjacentHTML('AfterEnd', currentNode.innerHTML);
|
456
|
+
} catch (e) {}
|
457
|
+
}
|
458
|
+
_forceRemove(currentNode);
|
459
|
+
return true;
|
460
|
+
}
|
461
|
+
|
462
|
+
/* Convert markup to cover jQuery behavior */
|
463
|
+
if (SAFE_FOR_JQUERY && !currentNode.firstElementChild &&
|
464
|
+
(!currentNode.content || !currentNode.content.firstElementChild)) {
|
465
|
+
currentNode.innerHTML = currentNode.textContent.replace(/</g, '<');
|
466
|
+
}
|
467
|
+
|
468
|
+
/* Sanitize element content to be template-safe */
|
469
|
+
if (SAFE_FOR_TEMPLATES && currentNode.nodeType === 3) {
|
470
|
+
/* Get the element's text content */
|
471
|
+
content = currentNode.textContent;
|
472
|
+
content = content.replace(MUSTACHE_EXPR, ' ');
|
473
|
+
content = content.replace(ERB_EXPR, ' ');
|
474
|
+
currentNode.textContent = content;
|
475
|
+
}
|
476
|
+
|
477
|
+
/* Execute a hook if present */
|
478
|
+
_executeHook('afterSanitizeElements', currentNode, null);
|
479
|
+
|
480
|
+
return false;
|
481
|
+
};
|
482
|
+
|
483
|
+
var DATA_ATTR = /^data-[\w.\u00B7-\uFFFF-]/;
|
484
|
+
var IS_ALLOWED_URI = /^(?:(?:(?:f|ht)tps?|mailto|tel):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i;
|
485
|
+
var IS_SCRIPT_OR_DATA = /^(?:\w+script|data):/i;
|
486
|
+
/* This needs to be extensive thanks to Webkit/Blink's behavior */
|
487
|
+
var ATTR_WHITESPACE = /[\x00-\x20\xA0\u1680\u180E\u2000-\u2029\u205f\u3000]/g;
|
488
|
+
|
489
|
+
/**
|
490
|
+
* _sanitizeAttributes
|
491
|
+
*
|
492
|
+
* @protect attributes
|
493
|
+
* @protect nodeName
|
494
|
+
* @protect removeAttribute
|
495
|
+
* @protect setAttribute
|
496
|
+
*
|
497
|
+
* @param node to sanitize
|
498
|
+
* @return void
|
499
|
+
*/
|
500
|
+
var _sanitizeAttributes = function(currentNode) {
|
501
|
+
var attr, name, value, lcName, idAttr, attributes, hookEvent, l;
|
502
|
+
/* Execute a hook if present */
|
503
|
+
_executeHook('beforeSanitizeAttributes', currentNode, null);
|
504
|
+
|
505
|
+
attributes = currentNode.attributes;
|
506
|
+
|
507
|
+
/* Check if we have attributes; if not we might have a text node */
|
508
|
+
if (!attributes) { return; }
|
509
|
+
|
510
|
+
hookEvent = {
|
511
|
+
attrName: '',
|
512
|
+
attrValue: '',
|
513
|
+
keepAttr: true
|
514
|
+
};
|
515
|
+
l = attributes.length;
|
516
|
+
|
517
|
+
/* Go backwards over all attributes; safely remove bad ones */
|
518
|
+
while (l--) {
|
519
|
+
attr = attributes[l];
|
520
|
+
name = attr.name;
|
521
|
+
value = attr.value;
|
522
|
+
lcName = name.toLowerCase();
|
523
|
+
|
524
|
+
/* Execute a hook if present */
|
525
|
+
hookEvent.attrName = lcName;
|
526
|
+
hookEvent.attrValue = value;
|
527
|
+
hookEvent.keepAttr = true;
|
528
|
+
_executeHook('uponSanitizeAttribute', currentNode, hookEvent );
|
529
|
+
value = hookEvent.attrValue;
|
530
|
+
|
531
|
+
/* Remove attribute */
|
532
|
+
// Safari (iOS + Mac), last tested v8.0.5, crashes if you try to
|
533
|
+
// remove a "name" attribute from an <img> tag that has an "id"
|
534
|
+
// attribute at the time.
|
535
|
+
if (lcName === 'name' &&
|
536
|
+
currentNode.nodeName === 'IMG' && attributes.id) {
|
537
|
+
idAttr = attributes.id;
|
538
|
+
attributes = Array.prototype.slice.apply(attributes);
|
539
|
+
currentNode.removeAttribute('id');
|
540
|
+
currentNode.removeAttribute(name);
|
541
|
+
if (attributes.indexOf(idAttr) > l) {
|
542
|
+
currentNode.setAttribute('id', idAttr.value);
|
543
|
+
}
|
544
|
+
} else {
|
545
|
+
// This avoids a crash in Safari v9.0 with double-ids.
|
546
|
+
// The trick is to first set the id to be empty and then to
|
547
|
+
// remove the attriubute
|
548
|
+
if (name === 'id') {
|
549
|
+
currentNode.setAttribute(name, '');
|
550
|
+
}
|
551
|
+
currentNode.removeAttribute(name);
|
552
|
+
}
|
553
|
+
|
554
|
+
/* Did the hooks approve of the attribute? */
|
555
|
+
if (!hookEvent.keepAttr) {
|
556
|
+
continue;
|
557
|
+
}
|
558
|
+
|
559
|
+
/* Make sure attribute cannot clobber */
|
560
|
+
if (SANITIZE_DOM &&
|
561
|
+
(lcName === 'id' || lcName === 'name') &&
|
562
|
+
(value in window || value in document || value in formElement)) {
|
563
|
+
continue;
|
564
|
+
}
|
565
|
+
|
566
|
+
/* Sanitize attribute content to be template-safe */
|
567
|
+
if (SAFE_FOR_TEMPLATES) {
|
568
|
+
value = value.replace(MUSTACHE_EXPR, ' ');
|
569
|
+
value = value.replace(ERB_EXPR, ' ');
|
570
|
+
}
|
571
|
+
|
572
|
+
if (
|
573
|
+
/* Check the name is permitted */
|
574
|
+
(ALLOWED_ATTR[lcName] && !FORBID_ATTR[lcName] && (
|
575
|
+
/* Check no script, data or unknown possibly unsafe URI
|
576
|
+
unless we know URI values are safe for that attribute */
|
577
|
+
URI_SAFE_ATTRIBUTES[lcName] ||
|
578
|
+
IS_ALLOWED_URI.test(value.replace(ATTR_WHITESPACE,'')) ||
|
579
|
+
/* Keep image data URIs alive if src is allowed */
|
580
|
+
(lcName === 'src' && value.indexOf('data:') === 0 &&
|
581
|
+
DATA_URI_TAGS[currentNode.nodeName.toLowerCase()])
|
582
|
+
)) ||
|
583
|
+
/* Allow potentially valid data-* attributes:
|
584
|
+
* At least one character after "-" (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)
|
585
|
+
* XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)
|
586
|
+
* We don't need to check the value; it's always URI safe.
|
587
|
+
*/
|
588
|
+
(ALLOW_DATA_ATTR && DATA_ATTR.test(lcName)) ||
|
589
|
+
/* Allow unknown protocols:
|
590
|
+
* This provides support for links that are handled by protocol handlers which may be unknown
|
591
|
+
* ahead of time, e.g. fb:, spotify:
|
592
|
+
*/
|
593
|
+
(ALLOW_UNKNOWN_PROTOCOLS && !IS_SCRIPT_OR_DATA.test(value.replace(ATTR_WHITESPACE,'')))
|
594
|
+
) {
|
595
|
+
/* Handle invalid data-* attribute set by try-catching it */
|
596
|
+
try {
|
597
|
+
currentNode.setAttribute(name, value);
|
598
|
+
} catch (e) {}
|
599
|
+
}
|
600
|
+
}
|
601
|
+
|
602
|
+
/* Execute a hook if present */
|
603
|
+
_executeHook('afterSanitizeAttributes', currentNode, null);
|
604
|
+
};
|
605
|
+
|
606
|
+
/**
|
607
|
+
* _sanitizeShadowDOM
|
608
|
+
*
|
609
|
+
* @param fragment to iterate over recursively
|
610
|
+
* @return void
|
611
|
+
*/
|
612
|
+
var _sanitizeShadowDOM = function(fragment) {
|
613
|
+
var shadowNode;
|
614
|
+
var shadowIterator = _createIterator(fragment);
|
615
|
+
|
616
|
+
/* Execute a hook if present */
|
617
|
+
_executeHook('beforeSanitizeShadowDOM', fragment, null);
|
618
|
+
|
619
|
+
while ( (shadowNode = shadowIterator.nextNode()) ) {
|
620
|
+
/* Execute a hook if present */
|
621
|
+
_executeHook('uponSanitizeShadowNode', shadowNode, null);
|
622
|
+
|
623
|
+
/* Sanitize tags and elements */
|
624
|
+
if (_sanitizeElements(shadowNode)) {
|
625
|
+
continue;
|
626
|
+
}
|
627
|
+
|
628
|
+
/* Deep shadow DOM detected */
|
629
|
+
if (shadowNode.content instanceof DocumentFragment) {
|
630
|
+
_sanitizeShadowDOM(shadowNode.content);
|
631
|
+
}
|
632
|
+
|
633
|
+
/* Check attributes, sanitize if necessary */
|
634
|
+
_sanitizeAttributes(shadowNode);
|
635
|
+
}
|
636
|
+
|
637
|
+
/* Execute a hook if present */
|
638
|
+
_executeHook('afterSanitizeShadowDOM', fragment, null);
|
639
|
+
};
|
640
|
+
|
641
|
+
/**
|
642
|
+
* _executeHook
|
643
|
+
* Execute user configurable hooks
|
644
|
+
*
|
645
|
+
* @param {String} entryPoint Name of the hook's entry point
|
646
|
+
* @param {Node} currentNode
|
647
|
+
*/
|
648
|
+
var _executeHook = function(entryPoint, currentNode, data) {
|
649
|
+
if (!hooks[entryPoint]) { return; }
|
650
|
+
|
651
|
+
hooks[entryPoint].forEach(function(hook) {
|
652
|
+
hook.call(DOMPurify, currentNode, data, CONFIG);
|
653
|
+
});
|
654
|
+
};
|
655
|
+
|
656
|
+
/**
|
657
|
+
* sanitize
|
658
|
+
* Public method providing core sanitation functionality
|
659
|
+
*
|
660
|
+
* @param {String} dirty string
|
661
|
+
* @param {Object} configuration object
|
662
|
+
*/
|
663
|
+
DOMPurify.sanitize = function(dirty, cfg) {
|
664
|
+
var body, currentNode, oldNode, nodeIterator, returnNode;
|
665
|
+
/* Make sure we have a string to sanitize.
|
666
|
+
DO NOT return early, as this will return the wrong type if
|
667
|
+
the user has requested a DOM object rather than a string */
|
668
|
+
if (!dirty) {
|
669
|
+
dirty = '';
|
670
|
+
}
|
671
|
+
|
672
|
+
/* Stringify, in case dirty is an object */
|
673
|
+
if (typeof dirty !== 'string') {
|
674
|
+
if (typeof dirty.toString !== 'function') {
|
675
|
+
throw new TypeError('toString is not a function');
|
676
|
+
} else {
|
677
|
+
dirty = dirty.toString();
|
678
|
+
}
|
679
|
+
}
|
680
|
+
|
681
|
+
/* Check we can run. Otherwise fall back or ignore */
|
682
|
+
if (!DOMPurify.isSupported) {
|
683
|
+
if (typeof window.toStaticHTML === 'object'
|
684
|
+
|| typeof window.toStaticHTML === 'function') {
|
685
|
+
return window.toStaticHTML(dirty);
|
686
|
+
}
|
687
|
+
return dirty;
|
688
|
+
}
|
689
|
+
|
690
|
+
/* Assign config vars */
|
691
|
+
_parseConfig(cfg);
|
692
|
+
|
693
|
+
/* Exit directly if we have nothing to do */
|
694
|
+
if (!RETURN_DOM && !WHOLE_DOCUMENT && dirty.indexOf('<') === -1) {
|
695
|
+
return dirty;
|
696
|
+
}
|
697
|
+
|
698
|
+
/* Initialize the document to work on */
|
699
|
+
body = _initDocument(dirty);
|
700
|
+
|
701
|
+
/* Check we have a DOM node from the data */
|
702
|
+
if (!body) {
|
703
|
+
return RETURN_DOM ? null : '';
|
704
|
+
}
|
705
|
+
|
706
|
+
/* Get node iterator */
|
707
|
+
nodeIterator = _createIterator(body);
|
708
|
+
|
709
|
+
/* Now start iterating over the created document */
|
710
|
+
while ( (currentNode = nodeIterator.nextNode()) ) {
|
711
|
+
|
712
|
+
/* Fix IE's strange behavior with manipulated textNodes #89 */
|
713
|
+
if (currentNode.nodeType === 3 && currentNode === oldNode) {
|
714
|
+
continue;
|
715
|
+
}
|
716
|
+
|
717
|
+
/* Sanitize tags and elements */
|
718
|
+
if (_sanitizeElements(currentNode)) {
|
719
|
+
continue;
|
720
|
+
}
|
721
|
+
|
722
|
+
/* Shadow DOM detected, sanitize it */
|
723
|
+
if (currentNode.content instanceof DocumentFragment) {
|
724
|
+
_sanitizeShadowDOM(currentNode.content);
|
725
|
+
}
|
726
|
+
|
727
|
+
/* Check attributes, sanitize if necessary */
|
728
|
+
_sanitizeAttributes(currentNode);
|
729
|
+
|
730
|
+
oldNode = currentNode;
|
731
|
+
}
|
732
|
+
|
733
|
+
/* Return sanitized string or DOM */
|
734
|
+
if (RETURN_DOM) {
|
735
|
+
|
736
|
+
if (RETURN_DOM_FRAGMENT) {
|
737
|
+
returnNode = createDocumentFragment.call(body.ownerDocument);
|
738
|
+
|
739
|
+
while (body.firstChild) {
|
740
|
+
returnNode.appendChild(body.firstChild);
|
741
|
+
}
|
742
|
+
} else {
|
743
|
+
returnNode = body;
|
744
|
+
}
|
745
|
+
|
746
|
+
if (RETURN_DOM_IMPORT) {
|
747
|
+
/* adoptNode() is not used because internal state is not reset
|
748
|
+
(e.g. the past names map of a HTMLFormElement), this is safe
|
749
|
+
in theory but we would rather not risk another attack vector.
|
750
|
+
The state that is cloned by importNode() is explicitly defined
|
751
|
+
by the specs. */
|
752
|
+
returnNode = importNode.call(originalDocument, returnNode, true);
|
753
|
+
}
|
754
|
+
|
755
|
+
return returnNode;
|
756
|
+
}
|
757
|
+
|
758
|
+
return WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;
|
759
|
+
};
|
760
|
+
|
761
|
+
/**
|
762
|
+
* addHook
|
763
|
+
* Public method to add DOMPurify hooks
|
764
|
+
*
|
765
|
+
* @param {String} entryPoint
|
766
|
+
* @param {Function} hookFunction
|
767
|
+
*/
|
768
|
+
DOMPurify.addHook = function(entryPoint, hookFunction) {
|
769
|
+
if (typeof hookFunction !== 'function') { return; }
|
770
|
+
hooks[entryPoint] = hooks[entryPoint] || [];
|
771
|
+
hooks[entryPoint].push(hookFunction);
|
772
|
+
};
|
773
|
+
|
774
|
+
/**
|
775
|
+
* removeHook
|
776
|
+
* Public method to remove a DOMPurify hook at a given entryPoint
|
777
|
+
* (pops it from the stack of hooks if more are present)
|
778
|
+
*
|
779
|
+
* @param {String} entryPoint
|
780
|
+
* @return void
|
781
|
+
*/
|
782
|
+
DOMPurify.removeHook = function(entryPoint) {
|
783
|
+
if (hooks[entryPoint]) {
|
784
|
+
hooks[entryPoint].pop();
|
785
|
+
}
|
786
|
+
};
|
787
|
+
|
788
|
+
/**
|
789
|
+
* removeHooks
|
790
|
+
* Public method to remove all DOMPurify hooks at a given entryPoint
|
791
|
+
*
|
792
|
+
* @param {String} entryPoint
|
793
|
+
* @return void
|
794
|
+
*/
|
795
|
+
DOMPurify.removeHooks = function(entryPoint) {
|
796
|
+
if (hooks[entryPoint]) {
|
797
|
+
hooks[entryPoint] = [];
|
798
|
+
}
|
799
|
+
};
|
800
|
+
|
801
|
+
/**
|
802
|
+
* removeAllHooks
|
803
|
+
* Public method to remove all DOMPurify hooks
|
804
|
+
*
|
805
|
+
* @return void
|
806
|
+
*/
|
807
|
+
DOMPurify.removeAllHooks = function() {
|
808
|
+
hooks = [];
|
809
|
+
};
|
810
|
+
|
811
|
+
return DOMPurify;
|
812
|
+
}));
|