TokiCLI 0.1.1 → 0.2.0
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/.gitignore +2 -0
- data/CHANGELOG.md +7 -0
- data/README.md +56 -10
- data/TokiCLI.gemspec +5 -2
- data/lib/API/dbapi.rb +104 -67
- data/lib/API/helpers.rb +47 -3
- data/lib/TokiCLI/app.rb +88 -12
- data/lib/TokiCLI/version.rb +1 -1
- data/lib/TokiCLI/view.rb +5 -1
- data/lib/TokiServer/Gemfile +6 -0
- data/lib/TokiServer/README.md +37 -0
- data/lib/TokiServer/bower.json +8 -0
- data/lib/TokiServer/bower_components/fastclick/.bower.json +23 -0
- data/lib/TokiServer/bower_components/fastclick/LICENSE +22 -0
- data/lib/TokiServer/bower_components/fastclick/README.md +133 -0
- data/lib/TokiServer/bower_components/fastclick/bower.json +13 -0
- data/lib/TokiServer/bower_components/fastclick/lib/fastclick.js +790 -0
- data/lib/TokiServer/bower_components/foundation/.bower.json +30 -0
- data/lib/TokiServer/bower_components/foundation/bower.json +20 -0
- data/lib/TokiServer/bower_components/foundation/css/foundation.css +4860 -0
- data/lib/TokiServer/bower_components/foundation/css/normalize.css +320 -0
- data/lib/TokiServer/bower_components/foundation/js/foundation.js +5543 -0
- data/lib/TokiServer/bower_components/foundation/js/foundation.min.js +3 -0
- data/lib/TokiServer/bower_components/foundation/js/foundation/foundation.abide.js +299 -0
- data/lib/TokiServer/bower_components/foundation/js/foundation/foundation.accordion.js +59 -0
- data/lib/TokiServer/bower_components/foundation/js/foundation/foundation.alert.js +43 -0
- data/lib/TokiServer/bower_components/foundation/js/foundation/foundation.clearing.js +534 -0
- data/lib/TokiServer/bower_components/foundation/js/foundation/foundation.dropdown.js +311 -0
- data/lib/TokiServer/bower_components/foundation/js/foundation/foundation.equalizer.js +74 -0
- data/lib/TokiServer/bower_components/foundation/js/foundation/foundation.interchange.js +331 -0
- data/lib/TokiServer/bower_components/foundation/js/foundation/foundation.joyride.js +843 -0
- data/lib/TokiServer/bower_components/foundation/js/foundation/foundation.js +611 -0
- data/lib/TokiServer/bower_components/foundation/js/foundation/foundation.magellan.js +178 -0
- data/lib/TokiServer/bower_components/foundation/js/foundation/foundation.offcanvas.js +108 -0
- data/lib/TokiServer/bower_components/foundation/js/foundation/foundation.orbit.js +610 -0
- data/lib/TokiServer/bower_components/foundation/js/foundation/foundation.reveal.js +437 -0
- data/lib/TokiServer/bower_components/foundation/js/foundation/foundation.slider.js +199 -0
- data/lib/TokiServer/bower_components/foundation/js/foundation/foundation.tab.js +167 -0
- data/lib/TokiServer/bower_components/foundation/js/foundation/foundation.tooltip.js +298 -0
- data/lib/TokiServer/bower_components/foundation/js/foundation/foundation.topbar.js +425 -0
- data/lib/TokiServer/bower_components/foundation/js/vendor/fastclick.js +9 -0
- data/lib/TokiServer/bower_components/foundation/js/vendor/jquery.cookie.js +8 -0
- data/lib/TokiServer/bower_components/foundation/js/vendor/jquery.js +26 -0
- data/lib/TokiServer/bower_components/foundation/js/vendor/modernizr.js +8 -0
- data/lib/TokiServer/bower_components/foundation/js/vendor/placeholder.js +2 -0
- data/lib/TokiServer/bower_components/foundation/scss/foundation.scss +45 -0
- data/lib/TokiServer/bower_components/foundation/scss/foundation/_functions.scss +101 -0
- data/lib/TokiServer/bower_components/foundation/scss/foundation/_settings.scss +1289 -0
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_accordion.scss +53 -0
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_alert-boxes.scss +126 -0
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_block-grid.scss +132 -0
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_breadcrumbs.scss +127 -0
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_button-groups.scss +108 -0
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_buttons.scss +222 -0
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_clearing.scss +247 -0
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_dropdown-buttons.scss +129 -0
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_dropdown.scss +248 -0
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_flex-video.scss +51 -0
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_forms.scss +498 -0
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_global.scss +429 -0
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_grid.scss +260 -0
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_inline-lists.scss +57 -0
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_joyride.scss +220 -0
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_keystrokes.scss +61 -0
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_labels.scss +104 -0
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_magellan.scss +34 -0
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_offcanvas.scss +355 -0
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_orbit.scss +423 -0
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_pagination.scss +150 -0
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_panels.scss +90 -0
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_pricing-tables.scss +150 -0
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_progress-bars.scss +79 -0
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_range-slider.scss +148 -0
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_reveal-new.scss +0 -0
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_reveal.scss +216 -0
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_side-nav.scss +115 -0
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_split-buttons.scss +191 -0
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_sub-nav.scss +125 -0
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_switch.scss +294 -0
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_tables.scss +129 -0
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_tabs.scss +109 -0
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_thumbs.scss +68 -0
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_tooltips.scss +140 -0
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_top-bar.scss +644 -0
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_type.scss +511 -0
- data/lib/TokiServer/bower_components/foundation/scss/foundation/components/_visibility.scss +408 -0
- data/lib/TokiServer/bower_components/foundation/scss/normalize.scss +425 -0
- data/lib/TokiServer/bower_components/jquery-placeholder/.bower.json +17 -0
- data/lib/TokiServer/bower_components/jquery-placeholder/.gitattributes +1 -0
- data/lib/TokiServer/bower_components/jquery-placeholder/.gitignore +1 -0
- data/lib/TokiServer/bower_components/jquery-placeholder/LICENSE-MIT.txt +20 -0
- data/lib/TokiServer/bower_components/jquery-placeholder/README.md +76 -0
- data/lib/TokiServer/bower_components/jquery-placeholder/bower.json +5 -0
- data/lib/TokiServer/bower_components/jquery-placeholder/demo.html +55 -0
- data/lib/TokiServer/bower_components/jquery-placeholder/jquery.placeholder.js +185 -0
- data/lib/TokiServer/bower_components/jquery-placeholder/tests/index.html +32 -0
- data/lib/TokiServer/bower_components/jquery-placeholder/tests/tests.js +134 -0
- data/lib/TokiServer/bower_components/jquery.cookie/.bower.json +28 -0
- data/lib/TokiServer/bower_components/jquery.cookie/jquery.cookie.js +117 -0
- data/lib/TokiServer/bower_components/jquery/.bower.json +37 -0
- data/lib/TokiServer/bower_components/jquery/MIT-LICENSE.txt +21 -0
- data/lib/TokiServer/bower_components/jquery/bower.json +27 -0
- data/lib/TokiServer/bower_components/jquery/dist/jquery.js +9190 -0
- data/lib/TokiServer/bower_components/jquery/dist/jquery.min.js +5 -0
- data/lib/TokiServer/bower_components/jquery/dist/jquery.min.map +1 -0
- data/lib/TokiServer/bower_components/jquery/src/ajax.js +806 -0
- data/lib/TokiServer/bower_components/jquery/src/ajax/jsonp.js +89 -0
- data/lib/TokiServer/bower_components/jquery/src/ajax/load.js +75 -0
- data/lib/TokiServer/bower_components/jquery/src/ajax/parseJSON.js +13 -0
- data/lib/TokiServer/bower_components/jquery/src/ajax/parseXML.js +28 -0
- data/lib/TokiServer/bower_components/jquery/src/ajax/script.js +64 -0
- data/lib/TokiServer/bower_components/jquery/src/ajax/var/nonce.js +5 -0
- data/lib/TokiServer/bower_components/jquery/src/ajax/var/rquery.js +3 -0
- data/lib/TokiServer/bower_components/jquery/src/ajax/xhr.js +135 -0
- data/lib/TokiServer/bower_components/jquery/src/attributes.js +11 -0
- data/lib/TokiServer/bower_components/jquery/src/attributes/attr.js +143 -0
- data/lib/TokiServer/bower_components/jquery/src/attributes/classes.js +158 -0
- data/lib/TokiServer/bower_components/jquery/src/attributes/prop.js +96 -0
- data/lib/TokiServer/bower_components/jquery/src/attributes/support.js +35 -0
- data/lib/TokiServer/bower_components/jquery/src/attributes/val.js +163 -0
- data/lib/TokiServer/bower_components/jquery/src/callbacks.js +205 -0
- data/lib/TokiServer/bower_components/jquery/src/core.js +498 -0
- data/lib/TokiServer/bower_components/jquery/src/core/access.js +60 -0
- data/lib/TokiServer/bower_components/jquery/src/core/init.js +123 -0
- data/lib/TokiServer/bower_components/jquery/src/core/parseHTML.js +39 -0
- data/lib/TokiServer/bower_components/jquery/src/core/ready.js +97 -0
- data/lib/TokiServer/bower_components/jquery/src/core/var/rsingleTag.js +4 -0
- data/lib/TokiServer/bower_components/jquery/src/css.js +451 -0
- data/lib/TokiServer/bower_components/jquery/src/css/addGetHookIf.js +24 -0
- data/lib/TokiServer/bower_components/jquery/src/css/curCSS.js +57 -0
- data/lib/TokiServer/bower_components/jquery/src/css/defaultDisplay.js +70 -0
- data/lib/TokiServer/bower_components/jquery/src/css/hiddenVisibleSelectors.js +15 -0
- data/lib/TokiServer/bower_components/jquery/src/css/support.js +91 -0
- data/lib/TokiServer/bower_components/jquery/src/css/swap.js +28 -0
- data/lib/TokiServer/bower_components/jquery/src/css/var/cssExpand.js +3 -0
- data/lib/TokiServer/bower_components/jquery/src/css/var/getStyles.js +5 -0
- data/lib/TokiServer/bower_components/jquery/src/css/var/isHidden.js +13 -0
- data/lib/TokiServer/bower_components/jquery/src/css/var/rmargin.js +3 -0
- data/lib/TokiServer/bower_components/jquery/src/css/var/rnumnonpx.js +5 -0
- data/lib/TokiServer/bower_components/jquery/src/data.js +179 -0
- data/lib/TokiServer/bower_components/jquery/src/data/Data.js +181 -0
- data/lib/TokiServer/bower_components/jquery/src/data/accepts.js +20 -0
- data/lib/TokiServer/bower_components/jquery/src/data/var/data_priv.js +5 -0
- data/lib/TokiServer/bower_components/jquery/src/data/var/data_user.js +5 -0
- data/lib/TokiServer/bower_components/jquery/src/deferred.js +149 -0
- data/lib/TokiServer/bower_components/jquery/src/deprecated.js +13 -0
- data/lib/TokiServer/bower_components/jquery/src/dimensions.js +50 -0
- data/lib/TokiServer/bower_components/jquery/src/effects.js +649 -0
- data/lib/TokiServer/bower_components/jquery/src/effects/Tween.js +114 -0
- data/lib/TokiServer/bower_components/jquery/src/effects/animatedSelector.js +13 -0
- data/lib/TokiServer/bower_components/jquery/src/event.js +868 -0
- data/lib/TokiServer/bower_components/jquery/src/event/alias.js +39 -0
- data/lib/TokiServer/bower_components/jquery/src/event/support.js +9 -0
- data/lib/TokiServer/bower_components/jquery/src/exports/amd.js +24 -0
- data/lib/TokiServer/bower_components/jquery/src/exports/global.js +32 -0
- data/lib/TokiServer/bower_components/jquery/src/intro.js +44 -0
- data/lib/TokiServer/bower_components/jquery/src/jquery.js +36 -0
- data/lib/TokiServer/bower_components/jquery/src/manipulation.js +582 -0
- data/lib/TokiServer/bower_components/jquery/src/manipulation/_evalUrl.js +18 -0
- data/lib/TokiServer/bower_components/jquery/src/manipulation/support.js +31 -0
- data/lib/TokiServer/bower_components/jquery/src/manipulation/var/rcheckableType.js +3 -0
- data/lib/TokiServer/bower_components/jquery/src/offset.js +204 -0
- data/lib/TokiServer/bower_components/jquery/src/outro.js +1 -0
- data/lib/TokiServer/bower_components/jquery/src/queue.js +142 -0
- data/lib/TokiServer/bower_components/jquery/src/queue/delay.js +22 -0
- data/lib/TokiServer/bower_components/jquery/src/selector-native.js +172 -0
- data/lib/TokiServer/bower_components/jquery/src/selector-sizzle.js +14 -0
- data/lib/TokiServer/bower_components/jquery/src/selector.js +1 -0
- data/lib/TokiServer/bower_components/jquery/src/serialize.js +111 -0
- data/lib/TokiServer/bower_components/jquery/src/sizzle/dist/sizzle.js +2044 -0
- data/lib/TokiServer/bower_components/jquery/src/sizzle/dist/sizzle.min.js +3 -0
- data/lib/TokiServer/bower_components/jquery/src/sizzle/dist/sizzle.min.map +1 -0
- data/lib/TokiServer/bower_components/jquery/src/traversing.js +200 -0
- data/lib/TokiServer/bower_components/jquery/src/traversing/findFilter.js +100 -0
- data/lib/TokiServer/bower_components/jquery/src/traversing/var/rneedsContext.js +6 -0
- data/lib/TokiServer/bower_components/jquery/src/var/arr.js +3 -0
- data/lib/TokiServer/bower_components/jquery/src/var/class2type.js +4 -0
- data/lib/TokiServer/bower_components/jquery/src/var/concat.js +5 -0
- data/lib/TokiServer/bower_components/jquery/src/var/hasOwn.js +5 -0
- data/lib/TokiServer/bower_components/jquery/src/var/indexOf.js +5 -0
- data/lib/TokiServer/bower_components/jquery/src/var/pnum.js +3 -0
- data/lib/TokiServer/bower_components/jquery/src/var/push.js +5 -0
- data/lib/TokiServer/bower_components/jquery/src/var/rnotwhite.js +3 -0
- data/lib/TokiServer/bower_components/jquery/src/var/slice.js +5 -0
- data/lib/TokiServer/bower_components/jquery/src/var/strundefined.js +3 -0
- data/lib/TokiServer/bower_components/jquery/src/var/support.js +4 -0
- data/lib/TokiServer/bower_components/jquery/src/var/toString.js +5 -0
- data/lib/TokiServer/bower_components/jquery/src/wrap.js +78 -0
- data/lib/TokiServer/bower_components/modernizr/.bower.json +14 -0
- data/lib/TokiServer/bower_components/modernizr/.editorconfig +10 -0
- data/lib/TokiServer/bower_components/modernizr/.gitignore +2 -0
- data/lib/TokiServer/bower_components/modernizr/.travis.yml +6 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/a-download.js +8 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/audio-audiodata-api.js +4 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/audio-webaudio-api.js +4 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/battery-api.js +8 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/battery-level.js +11 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/blob-constructor.js +10 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/canvas-todataurl-type.js +28 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/contenteditable.js +9 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/contentsecuritypolicy.js +10 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/contextmenu.js +11 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/cookies.js +15 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/cors.js +3 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/css-backgroundposition-shorthand.js +19 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/css-backgroundposition-xy.js +15 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/css-backgroundrepeat.js +31 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/css-backgroundsizecover.js +10 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/css-boxsizing.js +9 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/css-calc.js +12 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/css-cubicbezierrange.js +8 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/css-displayrunin.js +18 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/css-displaytable.js +27 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/css-filters.js +7 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/css-hyphens.js +205 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/css-lastchild.js +11 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/css-mask.js +12 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/css-mediaqueries.js +3 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/css-objectfit.js +6 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/css-overflow-scrolling.js +9 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/css-pointerevents.js +25 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/css-positionsticky.js +13 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/css-regions.js +55 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/css-remunit.js +19 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/css-resize.js +8 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/css-scrollbars.js +19 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/css-shapes.js +4 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/css-subpixelfont.js +23 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/css-supports.js +6 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/css-userselect.js +10 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/css-vhunit.js +14 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/css-vmaxunit.js +14 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/css-vminunit.js +14 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/css-vwunit.js +14 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/custom-protocol-handler.js +10 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/dart.js +6 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/dataview-api.js +4 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/dom-classlist.js +4 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/dom-createElement-attrs.js +11 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/dom-dataset.js +9 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/dom-microdata.js +4 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/elem-datalist.js +12 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/elem-details.js +25 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/elem-output.js +4 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/elem-progress-meter.js +11 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/elem-ruby.js +53 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/elem-time.js +4 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/elem-track.js +11 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/emoji.js +11 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/es5-strictmode.js +7 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/event-deviceorientation-motion.js +11 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/exif-orientation.js +32 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/file-api.js +12 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/file-filesystem.js +9 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/forms-fileinput.js +13 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/forms-formattribute.js +29 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/forms-inputnumber-l10n.js +32 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/forms-placeholder.js +10 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/forms-speechinput.js +19 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/forms-validation.js +62 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/fullscreen-api.js +10 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/gamepad.js +12 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/getusermedia.js +5 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/ie8compat.js +12 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/iframe-sandbox.js +5 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/iframe-seamless.js +5 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/iframe-srcdoc.js +5 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/img-apng.js +26 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/img-webp.js +20 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/json.js +7 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/lists-reversed.js +6 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/mathml.js +23 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/network-connection.js +22 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/network-eventsource.js +5 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/network-xhr2.js +13 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/notification.js +10 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/performance.js +5 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/pointerlock-api.js +4 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/quota-management-api.js +11 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/requestanimationframe.js +7 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/script-async.js +3 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/script-defer.js +3 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/style-scoped.js +6 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/svg-filters.js +13 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/unicode.js +32 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/url-data-uri.js +26 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/userdata.js +7 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/vibration.js +4 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/web-intents.js +6 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/webgl-extensions.js +42 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/websockets-binary.js +20 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/window-framed.js +8 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/workers-blobworkers.js +66 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/workers-dataworkers.js +34 -0
- data/lib/TokiServer/bower_components/modernizr/feature-detects/workers-sharedworkers.js +3 -0
- data/lib/TokiServer/bower_components/modernizr/grunt.js +69 -0
- data/lib/TokiServer/bower_components/modernizr/media/Modernizr 2 Logo.ai +292 -1
- data/lib/TokiServer/bower_components/modernizr/media/Modernizr 2 Logo.eps +0 -0
- data/lib/TokiServer/bower_components/modernizr/media/Modernizr 2 Logo.pdf +292 -1
- data/lib/TokiServer/bower_components/modernizr/media/Modernizr 2 Logo.png +0 -0
- data/lib/TokiServer/bower_components/modernizr/media/Modernizr 2 Logo.svg +35 -0
- data/lib/TokiServer/bower_components/modernizr/modernizr.js +1406 -0
- data/lib/TokiServer/bower_components/modernizr/readme.md +28 -0
- data/lib/TokiServer/bower_components/modernizr/test/basic.html +65 -0
- data/lib/TokiServer/bower_components/modernizr/test/caniuse.html +1451 -0
- data/lib/TokiServer/bower_components/modernizr/test/caniuse_files/Windsong-webfont.eot +0 -0
- data/lib/TokiServer/bower_components/modernizr/test/caniuse_files/Windsong-webfont.otf +0 -0
- data/lib/TokiServer/bower_components/modernizr/test/caniuse_files/Windsong-webfont.svg +147 -0
- data/lib/TokiServer/bower_components/modernizr/test/caniuse_files/Windsong-webfont.ttf +0 -0
- data/lib/TokiServer/bower_components/modernizr/test/caniuse_files/Windsong-webfont.woff +0 -0
- data/lib/TokiServer/bower_components/modernizr/test/caniuse_files/alpha.png +0 -0
- data/lib/TokiServer/bower_components/modernizr/test/caniuse_files/apng_test.png +0 -0
- data/lib/TokiServer/bower_components/modernizr/test/caniuse_files/before-after.png +0 -0
- data/lib/TokiServer/bower_components/modernizr/test/caniuse_files/form_validation.html +15 -0
- data/lib/TokiServer/bower_components/modernizr/test/caniuse_files/ga.js +43 -0
- data/lib/TokiServer/bower_components/modernizr/test/caniuse_files/green5x5.png +0 -0
- data/lib/TokiServer/bower_components/modernizr/test/caniuse_files/hashchange.html +16 -0
- data/lib/TokiServer/bower_components/modernizr/test/caniuse_files/jquery.min.js +18 -0
- data/lib/TokiServer/bower_components/modernizr/test/caniuse_files/mathml.html +120 -0
- data/lib/TokiServer/bower_components/modernizr/test/caniuse_files/mathml_ref.png +0 -0
- data/lib/TokiServer/bower_components/modernizr/test/caniuse_files/modernizr-1.7.min.js +2 -0
- data/lib/TokiServer/bower_components/modernizr/test/caniuse_files/png_alpha_result.png +0 -0
- data/lib/TokiServer/bower_components/modernizr/test/caniuse_files/pushstate.html +40 -0
- data/lib/TokiServer/bower_components/modernizr/test/caniuse_files/red30x30.png +0 -0
- data/lib/TokiServer/bower_components/modernizr/test/caniuse_files/ruby.png +0 -0
- data/lib/TokiServer/bower_components/modernizr/test/caniuse_files/stroked-text.png +0 -0
- data/lib/TokiServer/bower_components/modernizr/test/caniuse_files/style.css +168 -0
- data/lib/TokiServer/bower_components/modernizr/test/caniuse_files/svg-html-blur.png +0 -0
- data/lib/TokiServer/bower_components/modernizr/test/caniuse_files/svg-img.svg +5 -0
- data/lib/TokiServer/bower_components/modernizr/test/caniuse_files/svg-img.svg.1 +5 -0
- data/lib/TokiServer/bower_components/modernizr/test/caniuse_files/svg_blur.png +0 -0
- data/lib/TokiServer/bower_components/modernizr/test/caniuse_files/table.png +0 -0
- data/lib/TokiServer/bower_components/modernizr/test/caniuse_files/text-shadow1.png +0 -0
- data/lib/TokiServer/bower_components/modernizr/test/caniuse_files/text-shadow2.png +0 -0
- data/lib/TokiServer/bower_components/modernizr/test/caniuse_files/windsong_font.png +0 -0
- data/lib/TokiServer/bower_components/modernizr/test/caniuse_files/xhtml.html +14 -0
- data/lib/TokiServer/bower_components/modernizr/test/index.html +104 -0
- data/lib/TokiServer/bower_components/modernizr/test/js/basic.html +65 -0
- data/lib/TokiServer/bower_components/modernizr/test/js/dumpdata.js +75 -0
- data/lib/TokiServer/bower_components/modernizr/test/js/lib/detect-global.js +153 -0
- data/lib/TokiServer/bower_components/modernizr/test/js/lib/jquery-1.7b2.js +9279 -0
- data/lib/TokiServer/bower_components/modernizr/test/js/lib/jsonselect.js +279 -0
- data/lib/TokiServer/bower_components/modernizr/test/js/lib/polyfills.js +96 -0
- data/lib/TokiServer/bower_components/modernizr/test/js/lib/uaparser.js +215 -0
- data/lib/TokiServer/bower_components/modernizr/test/js/setup.js +44 -0
- data/lib/TokiServer/bower_components/modernizr/test/js/unit-caniuse.js +191 -0
- data/lib/TokiServer/bower_components/modernizr/test/js/unit.js +669 -0
- data/lib/TokiServer/bower_components/modernizr/test/qunit/qunit.css +231 -0
- data/lib/TokiServer/bower_components/modernizr/test/qunit/qunit.js +1932 -0
- data/lib/TokiServer/bower_components/modernizr/test/qunit/run-qunit.js +72 -0
- data/lib/TokiServer/config.rb +25 -0
- data/lib/TokiServer/humans.txt +8 -0
- data/lib/TokiServer/itunesicon.rb +60 -0
- data/lib/TokiServer/js/app.js +3 -0
- data/lib/TokiServer/public/stylesheets/app.css +8094 -0
- data/lib/TokiServer/robots.txt +4 -0
- data/lib/TokiServer/scss/_settings.scss +1240 -0
- data/lib/TokiServer/scss/app.scss +102 -0
- data/lib/TokiServer/tokiserver.rb +377 -0
- data/lib/TokiServer/views/apps_total.erb +28 -0
- data/lib/TokiServer/views/error.erb +25 -0
- data/lib/TokiServer/views/index.erb +191 -0
- data/lib/TokiServer/views/layout.erb +20 -0
- data/lib/TokiServer/views/name_log.erb +50 -0
- data/lib/TokiServer/views/name_split.erb +37 -0
- data/lib/TokiServer/views/name_total.erb +34 -0
- metadata +416 -4
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
%PDF-1.5
|
|
2
|
+
1 0 obj
|
|
3
|
+
<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
|
|
4
|
+
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.0-c060 61.134777, 2010/02/12-17:32:00 ">
|
|
5
|
+
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
|
6
|
+
<rdf:Description rdf:about=""
|
|
7
|
+
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
|
|
8
|
+
xmlns:xmpGImg="http://ns.adobe.com/xap/1.0/g/img/">
|
|
9
|
+
<xmp:CreatorTool>Adobe Illustrator CS5</xmp:CreatorTool>
|
|
10
|
+
<xmp:CreateDate>2011-03-28T13:28:59+11:00</xmp:CreateDate>
|
|
11
|
+
<xmp:MetadataDate>2011-03-28T13:28:59+11:00</xmp:MetadataDate>
|
|
12
|
+
<xmp:ModifyDate>2011-03-28T13:28:59+11:00</xmp:ModifyDate>
|
|
13
|
+
<xmp:Thumbnails>
|
|
14
|
+
<rdf:Alt>
|
|
15
|
+
<rdf:li rdf:parseType="Resource">
|
|
16
|
+
<xmpGImg:width>256</xmpGImg:width>
|
|
17
|
+
<xmpGImg:height>40</xmpGImg:height>
|
|
18
|
+
<xmpGImg:format>JPEG</xmpGImg:format>
|
|
19
|
+
<xmpGImg:image>/9j/4AAQSkZJRgABAgEBLAEsAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABABLAAAAAEA
AQEsAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK
DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f
Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAKAEAAwER
AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA
AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB
UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE
1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ
qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy
obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp
0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo
+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq+TfzF/5TvXf
+YyX/iWZmL6Q+o9k/wCK4/6oTP8AJn/yZWj/APRz/wBQsuOX6S4/b/8Aic/83/dBJ/OU00PnfX3h
do3GpXdGQlT/AH79xhiLiHK0EQdNjBF+iP8AuQitE/M3zvo7L9W1WaWJf90XJ9eMjwpJyKj/AFSM
BxRLVqOx9Nl5wAPeNvueu+Svzz0fVpEstcjXTL1zxScEm2c+5O8Z/wBao98oniIeV7Q9nMmIcWI8
cft/b+NnqAIIBBqDuCOlMqebdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdi
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
1EM2plOBuJr/AHIHV//Z</xmpGImg:image>
|
|
20
|
+
</rdf:li>
|
|
21
|
+
</rdf:Alt>
|
|
22
|
+
</xmp:Thumbnails>
|
|
23
|
+
</rdf:Description>
|
|
24
|
+
<rdf:Description rdf:about=""
|
|
25
|
+
xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/">
|
|
26
|
+
<photoshop:ColorMode>3</photoshop:ColorMode>
|
|
27
|
+
<photoshop:ICCProfile>sRGB IEC61966-2.1</photoshop:ICCProfile>
|
|
28
|
+
<photoshop:TextLayers>
|
|
29
|
+
<rdf:Bag>
|
|
30
|
+
<rdf:li rdf:parseType="Resource">
|
|
31
|
+
<photoshop:LayerName>Modernizr</photoshop:LayerName>
|
|
32
|
+
<photoshop:LayerText>Modernizr</photoshop:LayerText>
|
|
33
|
+
</rdf:li>
|
|
34
|
+
</rdf:Bag>
|
|
35
|
+
</photoshop:TextLayers>
|
|
36
|
+
</rdf:Description>
|
|
37
|
+
<rdf:Description rdf:about=""
|
|
38
|
+
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
|
39
|
+
<dc:format>application/pdf</dc:format>
|
|
40
|
+
<dc:title>
|
|
41
|
+
<rdf:Alt>
|
|
42
|
+
<rdf:li xml:lang="x-default">Modernizr 2 Logo</rdf:li>
|
|
43
|
+
</rdf:Alt>
|
|
44
|
+
</dc:title>
|
|
45
|
+
</rdf:Description>
|
|
46
|
+
<rdf:Description rdf:about=""
|
|
47
|
+
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
|
|
48
|
+
xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#"
|
|
49
|
+
xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#">
|
|
50
|
+
<xmpMM:InstanceID>uuid:d2ad3950-7c02-824a-aed8-40a8f4f3f557</xmpMM:InstanceID>
|
|
51
|
+
<xmpMM:DocumentID>xmp.did:03801174072068118083F1FA8E5E4F1F</xmpMM:DocumentID>
|
|
52
|
+
<xmpMM:OriginalDocumentID>xmp.did:F77F117407206811BB3F9C0632107F53</xmpMM:OriginalDocumentID>
|
|
53
|
+
<xmpMM:RenditionClass>proof:pdf</xmpMM:RenditionClass>
|
|
54
|
+
<xmpMM:History>
|
|
55
|
+
<rdf:Seq>
|
|
56
|
+
<rdf:li rdf:parseType="Resource">
|
|
57
|
+
<stEvt:action>created</stEvt:action>
|
|
58
|
+
<stEvt:instanceID>xmp.iid:F77F117407206811BB3F9C0632107F53</stEvt:instanceID>
|
|
59
|
+
<stEvt:when>2011-03-27T17:17:50-07:00</stEvt:when>
|
|
60
|
+
<stEvt:softwareAgent>Adobe Photoshop CS5 Macintosh</stEvt:softwareAgent>
|
|
61
|
+
</rdf:li>
|
|
62
|
+
<rdf:li rdf:parseType="Resource">
|
|
63
|
+
<stEvt:action>saved</stEvt:action>
|
|
64
|
+
<stEvt:instanceID>xmp.iid:F87F117407206811BB3F9C0632107F53</stEvt:instanceID>
|
|
65
|
+
<stEvt:when>2011-03-27T17:18:53-07:00</stEvt:when>
|
|
66
|
+
<stEvt:softwareAgent>Adobe Photoshop CS5 Macintosh</stEvt:softwareAgent>
|
|
67
|
+
<stEvt:changed>/</stEvt:changed>
|
|
68
|
+
</rdf:li>
|
|
69
|
+
<rdf:li rdf:parseType="Resource">
|
|
70
|
+
<stEvt:action>saved</stEvt:action>
|
|
71
|
+
<stEvt:instanceID>xmp.iid:F97F117407206811BB3F9C0632107F53</stEvt:instanceID>
|
|
72
|
+
<stEvt:when>2011-03-27T18:02:32-07:00</stEvt:when>
|
|
73
|
+
<stEvt:softwareAgent>Adobe Photoshop CS5 Macintosh</stEvt:softwareAgent>
|
|
74
|
+
<stEvt:changed>/</stEvt:changed>
|
|
75
|
+
</rdf:li>
|
|
76
|
+
<rdf:li rdf:parseType="Resource">
|
|
77
|
+
<stEvt:action>saved</stEvt:action>
|
|
78
|
+
<stEvt:instanceID>xmp.iid:FA7F117407206811BB3F9C0632107F53</stEvt:instanceID>
|
|
79
|
+
<stEvt:when>2011-03-27T18:18:57-07:00</stEvt:when>
|
|
80
|
+
<stEvt:softwareAgent>Adobe Photoshop CS5 Macintosh</stEvt:softwareAgent>
|
|
81
|
+
<stEvt:changed>/</stEvt:changed>
|
|
82
|
+
</rdf:li>
|
|
83
|
+
<rdf:li rdf:parseType="Resource">
|
|
84
|
+
<stEvt:action>saved</stEvt:action>
|
|
85
|
+
<stEvt:instanceID>xmp.iid:FB7F117407206811BB3F9C0632107F53</stEvt:instanceID>
|
|
86
|
+
<stEvt:when>2011-03-27T18:25:21-07:00</stEvt:when>
|
|
87
|
+
<stEvt:softwareAgent>Adobe Photoshop CS5 Macintosh</stEvt:softwareAgent>
|
|
88
|
+
<stEvt:changed>/</stEvt:changed>
|
|
89
|
+
</rdf:li>
|
|
90
|
+
<rdf:li rdf:parseType="Resource">
|
|
91
|
+
<stEvt:action>saved</stEvt:action>
|
|
92
|
+
<stEvt:instanceID>xmp.iid:FC7F117407206811BB3F9C0632107F53</stEvt:instanceID>
|
|
93
|
+
<stEvt:when>2011-03-27T18:26:04-07:00</stEvt:when>
|
|
94
|
+
<stEvt:softwareAgent>Adobe Photoshop CS5 Macintosh</stEvt:softwareAgent>
|
|
95
|
+
<stEvt:changed>/</stEvt:changed>
|
|
96
|
+
</rdf:li>
|
|
97
|
+
<rdf:li rdf:parseType="Resource">
|
|
98
|
+
<stEvt:action>saved</stEvt:action>
|
|
99
|
+
<stEvt:instanceID>xmp.iid:FD7F117407206811BB3F9C0632107F53</stEvt:instanceID>
|
|
100
|
+
<stEvt:when>2011-03-27T18:37:06-07:00</stEvt:when>
|
|
101
|
+
<stEvt:softwareAgent>Adobe Photoshop CS5 Macintosh</stEvt:softwareAgent>
|
|
102
|
+
<stEvt:changed>/</stEvt:changed>
|
|
103
|
+
</rdf:li>
|
|
104
|
+
<rdf:li rdf:parseType="Resource">
|
|
105
|
+
<stEvt:action>converted</stEvt:action>
|
|
106
|
+
<stEvt:parameters>from application/vnd.adobe.photoshop to application/pdf</stEvt:parameters>
|
|
107
|
+
</rdf:li>
|
|
108
|
+
<rdf:li rdf:parseType="Resource">
|
|
109
|
+
<stEvt:action>derived</stEvt:action>
|
|
110
|
+
<stEvt:parameters>converted from application/vnd.adobe.photoshop to application/pdf</stEvt:parameters>
|
|
111
|
+
</rdf:li>
|
|
112
|
+
<rdf:li rdf:parseType="Resource">
|
|
113
|
+
<stEvt:action>saved</stEvt:action>
|
|
114
|
+
<stEvt:instanceID>xmp.iid:FE7F117407206811BB3F9C0632107F53</stEvt:instanceID>
|
|
115
|
+
<stEvt:when>2011-03-27T18:37:07-07:00</stEvt:when>
|
|
116
|
+
<stEvt:softwareAgent>Adobe Photoshop CS5 Macintosh</stEvt:softwareAgent>
|
|
117
|
+
<stEvt:changed>/</stEvt:changed>
|
|
118
|
+
</rdf:li>
|
|
119
|
+
<rdf:li rdf:parseType="Resource">
|
|
120
|
+
<stEvt:action>saved</stEvt:action>
|
|
121
|
+
<stEvt:instanceID>xmp.iid:03801174072068118083F1FA8E5E4F1F</stEvt:instanceID>
|
|
122
|
+
<stEvt:when>2011-03-28T13:28:58+11:00</stEvt:when>
|
|
123
|
+
<stEvt:softwareAgent>Adobe Illustrator CS5</stEvt:softwareAgent>
|
|
124
|
+
<stEvt:changed>/</stEvt:changed>
|
|
125
|
+
</rdf:li>
|
|
126
|
+
</rdf:Seq>
|
|
127
|
+
</xmpMM:History>
|
|
128
|
+
<xmpMM:DerivedFrom rdf:parseType="Resource">
|
|
129
|
+
<stRef:instanceID>uuid:edd0f61a-a49d-1d49-acc4-68ea7894e484</stRef:instanceID>
|
|
130
|
+
<stRef:documentID>xmp.did:F77F117407206811BB3F9C0632107F53</stRef:documentID>
|
|
131
|
+
<stRef:originalDocumentID>xmp.did:F77F117407206811BB3F9C0632107F53</stRef:originalDocumentID>
|
|
132
|
+
</xmpMM:DerivedFrom>
|
|
133
|
+
</rdf:Description>
|
|
134
|
+
<rdf:Description rdf:about=""
|
|
135
|
+
xmlns:pdf="http://ns.adobe.com/pdf/1.3/">
|
|
136
|
+
<pdf:Producer>Adobe PDF library 9.90</pdf:Producer>
|
|
137
|
+
</rdf:Description>
|
|
138
|
+
<rdf:Description rdf:about=""
|
|
139
|
+
xmlns:xmpTPg="http://ns.adobe.com/xap/1.0/t/pg/"
|
|
140
|
+
xmlns:stDim="http://ns.adobe.com/xap/1.0/sType/Dimensions#"
|
|
141
|
+
xmlns:xmpG="http://ns.adobe.com/xap/1.0/g/">
|
|
142
|
+
<xmpTPg:NPages>1</xmpTPg:NPages>
|
|
143
|
+
<xmpTPg:HasVisibleTransparency>False</xmpTPg:HasVisibleTransparency>
|
|
144
|
+
<xmpTPg:HasVisibleOverprint>False</xmpTPg:HasVisibleOverprint>
|
|
145
|
+
<xmpTPg:MaxPageSize rdf:parseType="Resource">
|
|
146
|
+
<stDim:w>600.000000</stDim:w>
|
|
147
|
+
<stDim:h>88.799805</stDim:h>
|
|
148
|
+
<stDim:unit>Pixels</stDim:unit>
|
|
149
|
+
</xmpTPg:MaxPageSize>
|
|
150
|
+
<xmpTPg:PlateNames>
|
|
151
|
+
<rdf:Seq>
|
|
152
|
+
<rdf:li>Cyan</rdf:li>
|
|
153
|
+
<rdf:li>Magenta</rdf:li>
|
|
154
|
+
<rdf:li>Yellow</rdf:li>
|
|
155
|
+
</rdf:Seq>
|
|
156
|
+
</xmpTPg:PlateNames>
|
|
157
|
+
<xmpTPg:SwatchGroups>
|
|
158
|
+
<rdf:Seq>
|
|
159
|
+
<rdf:li rdf:parseType="Resource">
|
|
160
|
+
<xmpG:groupName>Default Swatch Group</xmpG:groupName>
|
|
161
|
+
<xmpG:groupType>0</xmpG:groupType>
|
|
162
|
+
</rdf:li>
|
|
163
|
+
</rdf:Seq>
|
|
164
|
+
</xmpTPg:SwatchGroups>
|
|
165
|
+
</rdf:Description>
|
|
166
|
+
<rdf:Description rdf:about=""
|
|
167
|
+
xmlns:illustrator="http://ns.adobe.com/illustrator/1.0/">
|
|
168
|
+
<illustrator:Type>Document</illustrator:Type>
|
|
169
|
+
</rdf:Description>
|
|
170
|
+
</rdf:RDF>
|
|
171
|
+
</x:xmpmeta>
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
<?xpacket end="w"?>
|
|
194
|
+
H��Vˎ$5��W��T�L�}e@�VhŁh1��,���KD�Y���K���|83"�^~~u/�^�}�ë[ī'���߀��cy��q���|s
|
|
195
|
+
,���ך��'���p��k{�}��1����
|
|
196
|
+
���'��8_U}����Kp�o��(/�շ�l'��&�^��h^bv�+.��:ܩ��L�\>� V���H}
|
|
197
|
+
[R�LR���x���y8�n��B%��?˜�����\�� f�i����K���G�DL���&���
|
|
198
|
+
��b�Q|*�6��r���F���Fu|Ek""#b��|edt���%�c�:��Z��&�Ҙᄧ�pT-A�-�O���M7E>۹���C���h=k�^5����I�p_�]�
|
|
199
|
+
A##�y0�-¹b
|
|
200
|
+
�/���-��G�!�N��{�S:� Z��#��r�tg\�f�gL��dW��/�h��A��Gr�Z�
|
|
201
|
+
���+����6�;a3F���@��e������˞��?~�������0�
|
|
202
|
+
8;X.*5o.B]#Xe'qAYk1P*4a@.!l]_ep/*-_RXPW`fG[D6f.h*1a7H@op([&VW*Y^*
|
|
203
|
+
W0WFo2Q9;Fb+MFP43tonNU43q7k''P:'9+35"AmKh.O9'J#%\IT$_Z*W;Z'Oj7LaA
|
|
204
|
+
9^>Zd/+=U[R&s-+Brt<DrD5OMUCQS3iH5`HV"Ec'MamVcE^1X21/>.'Lp'%G5RL>:
|
|
205
|
+
;0"gleOf`E!,b_4ci~>
|
|
206
|
+
8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0
|
|
207
|
+
b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup`
|
|
208
|
+
E1r!/,*0[*9.aFIR2&b-C#s<Xl5FH@[<=!#6V)uDBXnIr.F>oRZ7Dl%MLY\.?d>Mn
|
|
209
|
+
6%Q2oYfNRF$$+ON<+]RUJmC0I<jlL.oXisZ;SYU[/7#<&37rclQKqeJe#,UF7Rgb1
|
|
210
|
+
VNWFKf>nDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j<etJICj7e7nPMb=O6S7UOH<
|
|
211
|
+
PO7r\I.Hu&e0d&E<.')fERr/l+*W,)q^D*ai5<uuLX.7g/>$XKrcYp0n+Xl_nU*O(
|
|
212
|
+
l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~>
|
|
213
|
+
%!PS-Adobe-3.0
|
|
214
|
+
%%BoundingBox: -1 1 584 89
|
|
215
|
+
%AI12_CompressedDatax�ݽ�Z2K�(���*
|
|
216
|
+
M���**N8�����Z����ǾS�S�P=�y���u-o�.��T*���J8ԼN��]1!0l0�$�3K� ~<�ә�E��A.Ͱ���8�V�Di:�
|
|
217
|
+
����*�u�#������?�#Qxq3�
|
|
218
|
+
|.�<C
|
|
219
|
+
���>����,òl*�r��n:���l0�c��|~V��?�h֔�=q:-��ciZ��tF�������p�w�nWC��ә9�������`�?��tE���ϣ�B���>�����<�g3�(�B$.�=��=�+�E��ď� �KT�,�'?���˰�>$��F�����|>Ϥ����?*�`4
|
|
220
|
+
-Y!����|>��ؠ�L.��E����@��<�D�$G��Z��T
|
|
221
|
+
:���o��CQ�
|
|
222
|
+
�uN�?&�54o��ȭ -e�S[�P�S�W��~������p�z��3bxk�?ql�]>���x>Fbp&��ꩲm9�I�o�:�qo8�{cd��'(�Е)A=�ae��ԙ�P���X
|
|
223
|
+
v;�Ψg�hR�����}0IR[[�}z�6-m{��,J���_�4Aĩ��:�%Gߗ����L��h8�E�C�\�|����y<�RQ��4� \ƓcRsϕ����˹L�pyoNA��luF��'t�I�{F�M�C>b�tOk���L�~����;C���G�������Y,�Z��7�:��£�p
|
|
224
|
+
\��Q�6��/u�����wI�a*���Q3��~&]�;���a[�3�������V
|
|
225
|
+
���7�Q�ဖ3�t�������^��V�s9wQ�OQF� (z%dD�#�4"�iRJ�y�U�dK����ȑ���n�#l�"Ƶ�q����k[9��Db��Q����-��ݔ�~v�g���èfj���7���?F�L)�a*���E��H��#��A�Ϥ� �2"�u�a�lO{b`�)���3:���fL8�����D�����2
|
|
226
|
+
˱ͧ�;��x�&�$zC����9{&���D�� Kw�9���oo<�3��s�����ф�?��mNZ��Y��/N#�a��;(y�7��`��W����T�O;Nj�!��,M��6R�F����v��hN��T D$k��k���T�u�D�0���,�"�Q�{?M*L�Ϭ���t�\���$���t6T����Q�chc�� �����>H����
|
|
227
|
+
(tC���.f����D�8�v75
|
|
228
|
+
N;!��yQK�,ؙ��Jz��B1AX�$�5�3�'�0��QPD����3�C
|
|
229
|
+
Q<ȴ��������>����?(�3���ɱ�y�u�xTƖ�F�6�Y{58~������eD3ި�{�`bU��-��ʟ�3�:�B�@_���#��-gb���ً��i���ng�M:�7p���̼* ֫��Y�L�����34��>L�+�Ё<*��:3��s��uC'�a��=�MU��tw7�����ч���;�qQ�zleǎ�i-jG��.nlTx�
|
|
230
|
+
�wd�ر�����(P/�K*�]���ޑO��{t]:>Υ�"��jl?�����I6;��>g�ħv/���R��_�7�b�=_���_�u���þ����]e>CQ��J$���Pl�{7=̇�x��΄b��u(~v_%�3�M�=D0�t��LM��t���:�x��9!�y��<�&ު������l�-�aI����'�'����~��{�TǏ�VEz~dˏՇ����^��>ʎ,�����IR*o���D.�1�hT9������Pt�=Eg�Z�Z*~�>�#�Gx���Ɨ>�@iz�*�[�keS#&9������+|�
|
|
231
|
+
299Mn�c�T6
|
|
232
|
+
�S�(c{��'�4iE� ��=���$dB��)���%c��x��-#=�m4�[9���s��7���,�o��O�/����ڎ��7CB�gb��T�~Z�������X���^T���m�q�m
|
|
233
|
+
<~k��l�� E{{�6���6�y_b�Bw9گ+�E������^��g����g�[�!ʯ����,B{�foC������e�*ﭒ�ζnC{�[�BCoO��G�����m�T�Yߟ�w�J���&���}���b_��Mou�=gٗ��8���y��vG��=dۙv��-�X���4�}'����3���:W�|���^s��k'T�����7?�����N7�ߦ_G7;��G��i3�=�:U,�Hݰ��G!�~�/�5K>~6��N��ߦ�� av��K��������ؾR,>�h��H�&VO�e鵿7 �Y�Y,*��d�a)(I\�09�*Uo�ظ,?Vvx�VKE�W*��1���D��[x�z#�������O~ds�v2|��f�,7��~���ﻚͺ��u���*`��a-��[{̈́j�\��}�VE������HS�t�k�~҄v1
|
|
-
|
|
|
234
|
+
&��$�?h:���B�OY�U�H�wr�8�j�M��V�t�˺�o��A�2Wy��d?�2`������'~6��#���8�GX2��{1�)�������{��)� �K�J\��Г#���*}����2>l�ێ��LJ�J��?W� d3�c���_{��$��Edr}�L�M��|}�wb>�Eg��� ��!qbw{f�=L�9K�+���žsk(�Lw���������a��̋;����[D�C|b@����~f���Q#@h]6���&�Jڪ|�Ϩ�Q:��Qh���6��<�L�����R6|l�v��6<-6
|
|
235
|
+
͙I�n�!��EGe�:�S_>3M�����sv�5a�6x��Ae�trnzЄ'��mp��rp�]��1'ON�۟Go4��ːq�#;s��wR
|
|
236
|
+
��N-���b��P���a�VG�eu���>���ڬ�V����X�T�g��1���U��^�|�U��C�%y���U��ou\/���y�y��h�p���ѬE#&(�g|�p�}���LÉ�dT������<�|��&:1F۾E�V���f�]�0�ݵ�v��e8��v�G%e��r0(�N
|
|
237
|
+
�9�I�Y���70�t�~~�����mG����5R,�<��nU4�-/Z���)a��;����t�.a�[�//;#�/�?$Lے)r?�j�=8mKd��1��5�����fG���e�ü���k��v�_�7�{���Ň�M?*�9����g�
|
|
238
|
+
��ػS��[�����Kt��yq)�b����]Sm۲�28[n��6lu�����R�o�Vo���A�&�.�AGd-�CGQY3��[�ɡsΠӳ�ˡ#��d���K��9gБق���9g�9d�ʡsΠ#��ɡsΠ3f.�C�A'�b���9g�!N^E�s�<9tƀd��7�/�����u��_]���N�n����s9��l��/�T6j����斯Xr��S��bZ�Nj^�9��if0������������aQ�g��9�y|f��Do;���]����r��Ĩ'�M��!k^+(�iI�!t�b�
|
|
239
|
+
"[�A*˜͑����*��ih�Q7��n~CAl�}����clP��f%�%�y�JK �M0�Bf�d�Z^B����ؤB`W�K�7����n�I������Dئ����9�0�r�!$���5�I(�3��i�q�����R1Fw,��F�و�4Oy`���:�#��u�+��!�Ϡy���m�N+zj�HM�1��.1�5���+ͳ�2J�[��<>�q2��G�Ƀ��8"��%��k���ܢ�����-~��O/��K��?� �3:~��%
|
|
240
|
+
���@Dv�>,�g��Ԍ�U��-{���|87[M>�|��9#�?�|8�����z2���|8�AW��
|
|
241
|
+
2���K�9&@q�tK1��_��z_{8��U�H��U��%2�� /�c4�]{c��p�α�P�EH��!���g��v1�"�A��6/��sə�r\��e��ԥ����}�����[���.Ǩ��[���I��x�.��7��Vs0��v�����mw��J�a���oӢ�Y�,W�݆s���g�*B�|Ԕ�����c��[eF��*3R�V�������Tn-���T����Tg��Te�({��hS\5�å�����s@@X�a[Zگ%K"n��T8r��c�W���.�U���RI��GR��+}���� Ze*���t*�C��y/�h�u�T��5XBxK|2H����J��_���_�&S���ȷ�kf��-��<�/v?\�f��$6G8N��"Q��[-��=���%�M�F� ���cPu���o���G�E�\mdC�ϯkT�����������P�kT@�&�}s�A���e)�8m����wVٌ���d�U���\���Eؕ�d�f�%�l�;�nm����d�Hw�ꛖa��>;%��&�HqQm
|
|
242
|
+
��:N��gؽ:%���t�����T�����^��]^HM��P�ij�]�s��n{BK{pJv�`MH���^����w�ե!�8 ���z|'�T�����-��q�����iV�rM`�����7�{jw�.czi-�.�B J��7y7���j�1u�¯�ӆ��;v��h���s��٣�Pj�\�jBu<�{M�u�m�j��\�S{\k�X��|}�U�3vin��_U%9����kn�-�
|
|
243
|
+
��:#^��R���za��gOt"}��t�ŷ�l:;�§�C6��`�[*��.���~��tv>�@x��tv�th��6�Ύs+Ϧ�z�W�MgH��o�tn1��ɦ�;��?{]&��8�r.�dd�l:���Ug��sFV�M��%���{-���Tt�l:��(`p�"�ήK�i�����r�l*�,�Mg7ڝ�+˦����0��.��&gd�l�E)�/�΅b+ʦ�˥�I1�tv�t��%���4Osn���tv�X7a�tv�%خ\i6������`6��<SOFΦ#gH=Zq�_̦��+��X0�� ��J�3�ͦ�qM)E�Z������%y'RvU1���>|c�p[㢉O��¨]��^��v��zu�6���otr�lK0)�(��¹&�{ct�[%�moS�I�lm#흪˹����%�u��r��%���(a��.a�����N-��Ed�>2;�(ղ����Y��Ŵx�*��2w/���a߅[�;��t+�={�2wd'�Н�4%J�;�����zͅ�|�*Y��Yn�+t�@��D-�E�:]a���t5�u�y)\.��s���EB�&������Fs�t��Sj�9Rŵ@=��kV�M���-��&뉓�� ш�PF�x�����|�� ��.��t�h��#�#
|
|
244
|
+
�����¹�K���K �����`(��f�=���Q#���V�
|
|
245
|
+
������c`��=T`7'�~�Kb��z��=��K�T��F��Ft�mOػ���aR����t�ښ5��%_z�\%Ӌ�d�Y,3�v�oWW��֔Ȱ��o�}������2��1����o ��,V��`� 8!C�bUa��$2,q���u�3�D�<�T��ͯl-� P��[�V�Λ6�l�;"�ѶƝ��J���*���'�T�[v�*�9���!?�[���9�v�
|
|
246
|
+
w^o5�=�.�ni��\n��X˭�ڍ�݃�k�5Uҩ�������G5�}�{�0O�,�+g��Z��'��9�w��J?���O��HƜ�d
|
|
247
|
+
1���M���#�ҩGDD~,^��\�oQ�F�!lR��m��+)BPF�V�xb�2�P�Π��U1��)���փ.R�üU�����M�\��,�=IOe�"(z$�3���V�d�mS�+Yi�M�=����g�5���5&�k��ݎ��{֝K4[�G����\/;U���Xcc����e����*L���u�}���2�-�*�-�P��֕���<$֗��UVqo#�TW���Z�z��w���ra��@��bnVK�1J˓�4�Y�v����J�Nuu6rWX�2��;kg���D����
|
|
248
|
+
��p�ꠑ3�yU�ssY�����ȷиf���F������~�Ys�H�����er��.���2,-��m�{<h㤦dqx�M$��t�h���9�ӵ�e�h�=�9�5Q�33Hj�yF�W�����(���b��s�QO.��CB�%]�p»`�W��X+�o�qU�smn��h�=�T�g��@E�SM �l��|dRD�%бF�k���B�U�H��%�)NJJ���md�Y�^s�6�ŭ��*ʷ`E6�E���+-���UXQQ��w��DQ>��������E+�y-ʧz��٢|��P��٢|��W.R��֫�:%��ĺ�����Ȫ~d�U�
|
|
249
|
+
����l�U�d9�|]?�@'�������ٮPle9O�U���-�3��[خ�U&�~+�,9W�3�6�p]?�~���POg[0!�vG^���sU?}�{B�cU?£�T]�t���Qg�xήu���%�r��~Λqf���}sP�Kć��Ut����4�vᙃ�w�7�-�l��&&LN��/{��jlD�� h)P��QI�'�2F�Œ$�_
|
|
250
|
+
Ŝ�ˬW@mqP��D.�1c������悘wN7���Zm���,��$�=��ܱ��^
|
|
251
|
+
v�u~''�,��?�s_,W��*�u¡�v�%�+�Ȧk ��^%$d�]��1h%r��Pt0�%F����,6��H{A��mɗy�����s ¸f��Q�y�R-��oG7;_���S�f#�v�{Pe4��>���HB0yӘ+n
|
|
252
|
+
�x�:�;�9� U�2������uk��W�|��}����.3WoR�}o����Z��� ����[Y �u�՞<R�Y,Lo�c�'4%�l�W�?8�$�J���;�/a��ׅ-����p��fg�{��|1����1�g������<�-4�3���{��Ak�g���v
|
|
253
|
+
ۂ`<̆px�(:FK�1U��ŕx�Ap^(���y@f/.EZN�j�%C���rc$�4��r?��� ���\V�$T�ʦI/��@��R'�xl�a��:v<��\�I�ˎ\O흕b2i?-@�Hӎ���)��[��)�<� G�;2oVo�
|
|
254
|
+
.�.u�vdlr�eu8�Sd�R��=|��==��Z�Uv.���#�|�ޏ#�2!�%�D$�kFID�]c0X5O>��-�d:�_�D�t'+n)�8�ÄC�8�,l���YMjR�)��8;z�^� ��R�����/n�~ ��b�W{���xa�7�ͧZc��=���h���'�W���s-+%���z�! +"��d�p[K|j��<�Y�e(��!S>��m���`4/�ȗǷ$��[�FΤM6�����7Z�71"m��ɀQ���sX�T,�%������n>F[���J����$S��;��F^�jW�8C�ﹲ�cpQDOr��\�z�%ޔ��{!���p�i9�<�v:l�+������!�~���@�,0l�6��#w�Y��8�§'NI�����c���O��'���+1��U���I���O���UO��[�}�7�}�x��x)�og�a5-�'�H�@F|���>3Ջ�0��#P� �w�����dS�Qc��{=ᮧ����_�#�é����RYij���7�Y����ɶkgշ�p^�Ӭe���=�i���GX4m���z�4�_$F
|
|
255
|
+
�&�`DŽ�ϸ����<q��<q�
|
|
256
|
+
;��K턃���NـzE]���禴r�c�{1�˧J"6�'4�S��V���}�7�7X5c�#s��Z�7��q��ʶ6��,����������D��ِ���/9�����]��!���r��������<��B&���E�B|F�x`'�<:��Q\�D�F�Ϭ<����,X&��K�ǹtY��b�O��lWz��-y��!�N��.��k�����N��}�7G�E������K��ʇX���'
|
|
257
|
+
�cB�y�\�C ���Lgw��~��<�&ު����I�"I�c�{���������S?�Z���-?Vn�{G{=<���Ky�p�m�TA��+�����P$�Y��wP�qF�i:�#'���iv�î�f25��l�<�Bgk�!-����6f���!�~���ڎ�V��)"�q���j�S�qFr\
|
|
258
|
+
���7ڻ�.9�����6�^ �}�+FV *�����֒�=%��?
|
|
259
|
+
u�w�I���GZ����[)z�Zn��v�y��w�'��hר|�����X�j��e���?JB�����%�q���j>��h[�Ty>�ɟ�~�>��/>�*��d���{xz
|
|
260
|
+
���}����]�p��z~��կl���τKs���=���Ԯ�/�H�xvR���ar��+,sC�eBݘv���m)��(sUETs�����X �J�ש|w�`����]3U��a��m�!|�nq���},u�aX,�K
|
|
261
|
+
���`"%IQDE�ծ�X�v��C�d����g�w��9�Lo��״v�wisޗ��}j��f/wj>2�"S
|
|
262
|
+
G��ꙸ�jw��J����@N��(�a�;��J2�8�+u^:��O�u"r��$� �r&�H�zC�W6�Ip(`=Y%��(DH%u"��|���Ig�G* ���H� �ț�˂��`�ל-x,�^(�x�v�i�JȀ�P(aVn ���e��$ح�ˬ|�s�C�i�H|)R���@��.3�F��Ї@��r�~�d�0����[�}u;�m�����^A��϶��0HS���������X���[.a�Ne�$g��{����\����T�>���Uˬ
|
|
263
|
+
$X�e�Tz��|�����Y�6|�ɱ�`�$�
|
|
264
|
+
D�iD�5R�Q�O�Q�g�,��i���9~��E�e@��d
|
|
265
|
+
�"����;�A/����s�MF`2�4<� r����r��`3"�#�>)d�0;�}
|
|
266
|
+
���<Fe�{`x��E��v`[>ϡ%�e`��@ppB&�=�1�S6����`0i�:R,��pY��BcP=6��)�@��@ey>�=J )&���+��da��K{D��a$yxk�C�G��J�l�0ߚ�B���2��J�2L:l��.�.�R�6�qiMv�����������%�f�����,$<��bI��&P��Ұ4�,�C�ъŋN�{�Aӓ���`��h�f��3��1x`�|:�&[e� ���#�y؈_���)����<L����$�_�K�\+�Rt�`w�"�����!�EP�����@p�r���@����X��A�g�`��q������9��^N�M�Z ���f�\
|
|
267
|
+
d%�6�py�i�2�"�ʀ&��C�$+lN����. ��H�R��!��
|
|
268
|
+
��) n
|
|
269
|
+
q��J�a��|�V� �F�0��Z�B*�CB]�����y<���PAhL��љu%���&
|
|
270
|
+
`�M�Wk�
|
|
271
|
+
�9R��
|
|
272
|
+
0000000016 00000 n
|
|
273
|
+
0000000144 00000 n
|
|
274
|
+
0000018316 00000 n
|
|
275
|
+
0000000000 00000 f
|
|
276
|
+
0000020771 00000 n
|
|
277
|
+
0000048490 00000 n
|
|
278
|
+
0000018367 00000 n
|
|
279
|
+
0000018703 00000 n
|
|
280
|
+
0000021070 00000 n
|
|
281
|
+
0000020957 00000 n
|
|
282
|
+
0000019852 00000 n
|
|
283
|
+
0000020210 00000 n
|
|
284
|
+
0000020258 00000 n
|
|
285
|
+
0000020841 00000 n
|
|
286
|
+
0000020872 00000 n
|
|
287
|
+
0000021143 00000 n
|
|
288
|
+
0000021317 00000 n
|
|
289
|
+
0000022336 00000 n
|
|
290
|
+
0000027404 00000 n
|
|
291
|
+
0000048513 00000 n
|
|
292
|
+
trailer
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
+
<!-- Generator: Adobe Illustrator 15.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
|
3
|
+
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
|
4
|
+
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
|
5
|
+
width="600px" height="88.8px" viewBox="0 0 600 88.8" enable-background="new 0 0 600 88.8" xml:space="preserve">
|
|
6
|
+
<g>
|
|
7
|
+
<polygon fill-rule="evenodd" clip-rule="evenodd" fill="#D91B77" points="0,86.4 0,57.6 28.8,57.6 28.8,28.8 57.6,28.8 57.6,0
|
|
8
|
+
86.4,0 86.4,86.4 "/>
|
|
9
|
+
<path fill-rule="evenodd" clip-rule="evenodd" fill="#D91B77" d="M93.6,0C141.318,0,180,38.683,180,86.399H93.6V0z"/>
|
|
10
|
+
<path fill="#D91B77" d="M580.505,50.198c-4.061,0-9.504,3.283-11.405,6.652v29.549h-6.479V44.668h6.479v6.653
|
|
11
|
+
c3.37-4.319,8.208-7.603,13.911-7.603v6.653C582.232,50.284,581.455,50.198,580.505,50.198z"/>
|
|
12
|
+
<polygon fill="#D91B77" points="551.648,86.399 519.854,86.399 519.854,81.303 542.836,50.371 519.854,50.371 519.854,44.668
|
|
13
|
+
551.303,44.668 551.303,49.594 528.147,80.697 551.648,80.697 "/>
|
|
14
|
+
<rect x="502.401" y="44.668" fill="#D91B77" width="6.479" height="41.731"/>
|
|
15
|
+
<path fill="#D91B77" d="M505.685,38.707c-2.42,0-4.407-1.901-4.407-4.32c0-2.419,1.987-4.407,4.407-4.407
|
|
16
|
+
c2.419,0,4.319,1.988,4.319,4.407C510.004,36.806,508.104,38.707,505.685,38.707z"/>
|
|
17
|
+
<path fill="#D91B77" d="M482.963,86.399V59.098c0-7.431-3.803-9.678-9.418-9.678c-5.098,0-9.85,3.111-12.355,6.48v30.499h-6.48
|
|
18
|
+
V44.668h6.48v6.048c2.938-3.542,8.64-7.084,14.947-7.084c8.64,0,13.219,4.407,13.219,13.479v29.289H482.963z"/>
|
|
19
|
+
<path fill="#D91B77" d="M444.083,50.198c-4.061,0-9.504,3.283-11.404,6.652v29.549h-6.479V44.668h6.479v6.653
|
|
20
|
+
c3.369-4.319,8.208-7.603,13.911-7.603v6.653C445.812,50.284,445.034,50.198,444.083,50.198z"/>
|
|
21
|
+
<polygon fill="#D91B77" points="258.067,86.399 258.067,37.93 238.541,86.399 235.604,86.399 215.991,37.93 215.991,86.399
|
|
22
|
+
208.819,86.399 208.819,28.771 219.101,28.771 237.072,73.181 254.957,28.771 265.239,28.771 265.239,86.399 "/>
|
|
23
|
+
<path fill="#D91B77" d="M415.746,66.01c0-12.528-7.431-22.378-20.046-22.378c-11.923,0-20.562,9.763-20.562,21.86
|
|
24
|
+
c0,13.047,8.898,21.945,21.341,21.945c6.739,0,12.355-2.333,16.589-6.479l-3.111-4.234c-3.369,3.456-8.121,5.356-12.96,5.356
|
|
25
|
+
c-8.985,0-14.429-6.565-14.946-14.428h33.696V66.01z M381.963,62.812c0.346-6.307,4.752-13.824,13.651-13.824
|
|
26
|
+
c9.504,0,13.651,7.69,13.737,13.824H381.963z"/>
|
|
27
|
+
<path fill="#D91B77" d="M358.117,28.771v22.205c-3.37-4.579-8.468-7.344-14.084-7.344c-10.887,0-18.575,8.554-18.575,21.946
|
|
28
|
+
c0,13.565,7.688,21.859,18.575,21.859c5.876,0,10.974-3.023,14.084-7.258v6.221h6.479V28.771H358.117z M358.117,74.995
|
|
29
|
+
c-2.247,3.628-7.344,6.652-12.442,6.652c-8.467,0-13.478-6.825-13.478-16.07s5.011-16.157,13.478-16.157
|
|
30
|
+
c5.099,0,10.195,3.111,12.442,6.739V74.995z"/>
|
|
31
|
+
<path fill="#D91B77" d="M296.687,43.631c-12.701,0-20.649,9.763-20.649,21.86c0,12.096,7.948,21.945,20.649,21.945
|
|
32
|
+
s20.65-9.85,20.65-21.945C317.337,53.395,309.388,43.631,296.687,43.631z M296.687,81.647c-8.899,0-13.824-7.603-13.824-16.156
|
|
33
|
+
c0-8.468,4.925-16.071,13.824-16.071c8.9,0,13.824,7.604,13.824,16.071C310.511,74.045,305.587,81.647,296.687,81.647z"/>
|
|
34
|
+
</g>
|
|
35
|
+
</svg>
|
|
@@ -0,0 +1,1406 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Modernizr v2.8.2
|
|
3
|
+
* www.modernizr.com
|
|
4
|
+
*
|
|
5
|
+
* Copyright (c) Faruk Ates, Paul Irish, Alex Sexton
|
|
6
|
+
* Available under the BSD and MIT licenses: www.modernizr.com/license/
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/*
|
|
10
|
+
* Modernizr tests which native CSS3 and HTML5 features are available in
|
|
11
|
+
* the current UA and makes the results available to you in two ways:
|
|
12
|
+
* as properties on a global Modernizr object, and as classes on the
|
|
13
|
+
* <html> element. This information allows you to progressively enhance
|
|
14
|
+
* your pages with a granular level of control over the experience.
|
|
15
|
+
*
|
|
16
|
+
* Modernizr has an optional (not included) conditional resource loader
|
|
17
|
+
* called Modernizr.load(), based on Yepnope.js (yepnopejs.com).
|
|
18
|
+
* To get a build that includes Modernizr.load(), as well as choosing
|
|
19
|
+
* which tests to include, go to www.modernizr.com/download/
|
|
20
|
+
*
|
|
21
|
+
* Authors Faruk Ates, Paul Irish, Alex Sexton
|
|
22
|
+
* Contributors Ryan Seddon, Ben Alman
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
window.Modernizr = (function( window, document, undefined ) {
|
|
26
|
+
|
|
27
|
+
var version = '2.8.2',
|
|
28
|
+
|
|
29
|
+
Modernizr = {},
|
|
30
|
+
|
|
31
|
+
/*>>cssclasses*/
|
|
32
|
+
// option for enabling the HTML classes to be added
|
|
33
|
+
enableClasses = true,
|
|
34
|
+
/*>>cssclasses*/
|
|
35
|
+
|
|
36
|
+
docElement = document.documentElement,
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Create our "modernizr" element that we do most feature tests on.
|
|
40
|
+
*/
|
|
41
|
+
mod = 'modernizr',
|
|
42
|
+
modElem = document.createElement(mod),
|
|
43
|
+
mStyle = modElem.style,
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Create the input element for various Web Forms feature tests.
|
|
47
|
+
*/
|
|
48
|
+
inputElem /*>>inputelem*/ = document.createElement('input') /*>>inputelem*/ ,
|
|
49
|
+
|
|
50
|
+
/*>>smile*/
|
|
51
|
+
smile = ':)',
|
|
52
|
+
/*>>smile*/
|
|
53
|
+
|
|
54
|
+
toString = {}.toString,
|
|
55
|
+
|
|
56
|
+
// TODO :: make the prefixes more granular
|
|
57
|
+
/*>>prefixes*/
|
|
58
|
+
// List of property values to set for css tests. See ticket #21
|
|
59
|
+
prefixes = ' -webkit- -moz- -o- -ms- '.split(' '),
|
|
60
|
+
/*>>prefixes*/
|
|
61
|
+
|
|
62
|
+
/*>>domprefixes*/
|
|
63
|
+
// Following spec is to expose vendor-specific style properties as:
|
|
64
|
+
// elem.style.WebkitBorderRadius
|
|
65
|
+
// and the following would be incorrect:
|
|
66
|
+
// elem.style.webkitBorderRadius
|
|
67
|
+
|
|
68
|
+
// Webkit ghosts their properties in lowercase but Opera & Moz do not.
|
|
69
|
+
// Microsoft uses a lowercase `ms` instead of the correct `Ms` in IE8+
|
|
70
|
+
// erik.eae.net/archives/2008/03/10/21.48.10/
|
|
71
|
+
|
|
72
|
+
// More here: github.com/Modernizr/Modernizr/issues/issue/21
|
|
73
|
+
omPrefixes = 'Webkit Moz O ms',
|
|
74
|
+
|
|
75
|
+
cssomPrefixes = omPrefixes.split(' '),
|
|
76
|
+
|
|
77
|
+
domPrefixes = omPrefixes.toLowerCase().split(' '),
|
|
78
|
+
/*>>domprefixes*/
|
|
79
|
+
|
|
80
|
+
/*>>ns*/
|
|
81
|
+
ns = {'svg': 'http://www.w3.org/2000/svg'},
|
|
82
|
+
/*>>ns*/
|
|
83
|
+
|
|
84
|
+
tests = {},
|
|
85
|
+
inputs = {},
|
|
86
|
+
attrs = {},
|
|
87
|
+
|
|
88
|
+
classes = [],
|
|
89
|
+
|
|
90
|
+
slice = classes.slice,
|
|
91
|
+
|
|
92
|
+
featureName, // used in testing loop
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
/*>>teststyles*/
|
|
96
|
+
// Inject element with style element and some CSS rules
|
|
97
|
+
injectElementWithStyles = function( rule, callback, nodes, testnames ) {
|
|
98
|
+
|
|
99
|
+
var style, ret, node, docOverflow,
|
|
100
|
+
div = document.createElement('div'),
|
|
101
|
+
// After page load injecting a fake body doesn't work so check if body exists
|
|
102
|
+
body = document.body,
|
|
103
|
+
// IE6 and 7 won't return offsetWidth or offsetHeight unless it's in the body element, so we fake it.
|
|
104
|
+
fakeBody = body || document.createElement('body');
|
|
105
|
+
|
|
106
|
+
if ( parseInt(nodes, 10) ) {
|
|
107
|
+
// In order not to give false positives we create a node for each test
|
|
108
|
+
// This also allows the method to scale for unspecified uses
|
|
109
|
+
while ( nodes-- ) {
|
|
110
|
+
node = document.createElement('div');
|
|
111
|
+
node.id = testnames ? testnames[nodes] : mod + (nodes + 1);
|
|
112
|
+
div.appendChild(node);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// <style> elements in IE6-9 are considered 'NoScope' elements and therefore will be removed
|
|
117
|
+
// when injected with innerHTML. To get around this you need to prepend the 'NoScope' element
|
|
118
|
+
// with a 'scoped' element, in our case the soft-hyphen entity as it won't mess with our measurements.
|
|
119
|
+
// msdn.microsoft.com/en-us/library/ms533897%28VS.85%29.aspx
|
|
120
|
+
// Documents served as xml will throw if using ­ so use xml friendly encoded version. See issue #277
|
|
121
|
+
style = ['­','<style id="s', mod, '">', rule, '</style>'].join('');
|
|
122
|
+
div.id = mod;
|
|
123
|
+
// IE6 will false positive on some tests due to the style element inside the test div somehow interfering offsetHeight, so insert it into body or fakebody.
|
|
124
|
+
// Opera will act all quirky when injecting elements in documentElement when page is served as xml, needs fakebody too. #270
|
|
125
|
+
(body ? div : fakeBody).innerHTML += style;
|
|
126
|
+
fakeBody.appendChild(div);
|
|
127
|
+
if ( !body ) {
|
|
128
|
+
//avoid crashing IE8, if background image is used
|
|
129
|
+
fakeBody.style.background = '';
|
|
130
|
+
//Safari 5.13/5.1.4 OSX stops loading if ::-webkit-scrollbar is used and scrollbars are visible
|
|
131
|
+
fakeBody.style.overflow = 'hidden';
|
|
132
|
+
docOverflow = docElement.style.overflow;
|
|
133
|
+
docElement.style.overflow = 'hidden';
|
|
134
|
+
docElement.appendChild(fakeBody);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
ret = callback(div, rule);
|
|
138
|
+
// If this is done after page load we don't want to remove the body so check if body exists
|
|
139
|
+
if ( !body ) {
|
|
140
|
+
fakeBody.parentNode.removeChild(fakeBody);
|
|
141
|
+
docElement.style.overflow = docOverflow;
|
|
142
|
+
} else {
|
|
143
|
+
div.parentNode.removeChild(div);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
return !!ret;
|
|
147
|
+
|
|
148
|
+
},
|
|
149
|
+
/*>>teststyles*/
|
|
150
|
+
|
|
151
|
+
/*>>mq*/
|
|
152
|
+
// adapted from matchMedia polyfill
|
|
153
|
+
// by Scott Jehl and Paul Irish
|
|
154
|
+
// gist.github.com/786768
|
|
155
|
+
testMediaQuery = function( mq ) {
|
|
156
|
+
|
|
157
|
+
var matchMedia = window.matchMedia || window.msMatchMedia;
|
|
158
|
+
if ( matchMedia ) {
|
|
159
|
+
return matchMedia(mq) && matchMedia(mq).matches || false;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
var bool;
|
|
163
|
+
|
|
164
|
+
injectElementWithStyles('@media ' + mq + ' { #' + mod + ' { position: absolute; } }', function( node ) {
|
|
165
|
+
bool = (window.getComputedStyle ?
|
|
166
|
+
getComputedStyle(node, null) :
|
|
167
|
+
node.currentStyle)['position'] == 'absolute';
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
return bool;
|
|
171
|
+
|
|
172
|
+
},
|
|
173
|
+
/*>>mq*/
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
/*>>hasevent*/
|
|
177
|
+
//
|
|
178
|
+
// isEventSupported determines if a given element supports the given event
|
|
179
|
+
// kangax.github.com/iseventsupported/
|
|
180
|
+
//
|
|
181
|
+
// The following results are known incorrects:
|
|
182
|
+
// Modernizr.hasEvent("webkitTransitionEnd", elem) // false negative
|
|
183
|
+
// Modernizr.hasEvent("textInput") // in Webkit. github.com/Modernizr/Modernizr/issues/333
|
|
184
|
+
// ...
|
|
185
|
+
isEventSupported = (function() {
|
|
186
|
+
|
|
187
|
+
var TAGNAMES = {
|
|
188
|
+
'select': 'input', 'change': 'input',
|
|
189
|
+
'submit': 'form', 'reset': 'form',
|
|
190
|
+
'error': 'img', 'load': 'img', 'abort': 'img'
|
|
191
|
+
};
|
|
192
|
+
|
|
193
|
+
function isEventSupported( eventName, element ) {
|
|
194
|
+
|
|
195
|
+
element = element || document.createElement(TAGNAMES[eventName] || 'div');
|
|
196
|
+
eventName = 'on' + eventName;
|
|
197
|
+
|
|
198
|
+
// When using `setAttribute`, IE skips "unload", WebKit skips "unload" and "resize", whereas `in` "catches" those
|
|
199
|
+
var isSupported = eventName in element;
|
|
200
|
+
|
|
201
|
+
if ( !isSupported ) {
|
|
202
|
+
// If it has no `setAttribute` (i.e. doesn't implement Node interface), try generic element
|
|
203
|
+
if ( !element.setAttribute ) {
|
|
204
|
+
element = document.createElement('div');
|
|
205
|
+
}
|
|
206
|
+
if ( element.setAttribute && element.removeAttribute ) {
|
|
207
|
+
element.setAttribute(eventName, '');
|
|
208
|
+
isSupported = is(element[eventName], 'function');
|
|
209
|
+
|
|
210
|
+
// If property was created, "remove it" (by setting value to `undefined`)
|
|
211
|
+
if ( !is(element[eventName], 'undefined') ) {
|
|
212
|
+
element[eventName] = undefined;
|
|
213
|
+
}
|
|
214
|
+
element.removeAttribute(eventName);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
element = null;
|
|
219
|
+
return isSupported;
|
|
220
|
+
}
|
|
221
|
+
return isEventSupported;
|
|
222
|
+
})(),
|
|
223
|
+
/*>>hasevent*/
|
|
224
|
+
|
|
225
|
+
// TODO :: Add flag for hasownprop ? didn't last time
|
|
226
|
+
|
|
227
|
+
// hasOwnProperty shim by kangax needed for Safari 2.0 support
|
|
228
|
+
_hasOwnProperty = ({}).hasOwnProperty, hasOwnProp;
|
|
229
|
+
|
|
230
|
+
if ( !is(_hasOwnProperty, 'undefined') && !is(_hasOwnProperty.call, 'undefined') ) {
|
|
231
|
+
hasOwnProp = function (object, property) {
|
|
232
|
+
return _hasOwnProperty.call(object, property);
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
hasOwnProp = function (object, property) { /* yes, this can give false positives/negatives, but most of the time we don't care about those */
|
|
237
|
+
return ((property in object) && is(object.constructor.prototype[property], 'undefined'));
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
// Adapted from ES5-shim https://github.com/kriskowal/es5-shim/blob/master/es5-shim.js
|
|
242
|
+
// es5.github.com/#x15.3.4.5
|
|
243
|
+
|
|
244
|
+
if (!Function.prototype.bind) {
|
|
245
|
+
Function.prototype.bind = function bind(that) {
|
|
246
|
+
|
|
247
|
+
var target = this;
|
|
248
|
+
|
|
249
|
+
if (typeof target != "function") {
|
|
250
|
+
throw new TypeError();
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
var args = slice.call(arguments, 1),
|
|
254
|
+
bound = function () {
|
|
255
|
+
|
|
256
|
+
if (this instanceof bound) {
|
|
257
|
+
|
|
258
|
+
var F = function(){};
|
|
259
|
+
F.prototype = target.prototype;
|
|
260
|
+
var self = new F();
|
|
261
|
+
|
|
262
|
+
var result = target.apply(
|
|
263
|
+
self,
|
|
264
|
+
args.concat(slice.call(arguments))
|
|
265
|
+
);
|
|
266
|
+
if (Object(result) === result) {
|
|
267
|
+
return result;
|
|
268
|
+
}
|
|
269
|
+
return self;
|
|
270
|
+
|
|
271
|
+
} else {
|
|
272
|
+
|
|
273
|
+
return target.apply(
|
|
274
|
+
that,
|
|
275
|
+
args.concat(slice.call(arguments))
|
|
276
|
+
);
|
|
277
|
+
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
};
|
|
281
|
+
|
|
282
|
+
return bound;
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
/**
|
|
287
|
+
* setCss applies given styles to the Modernizr DOM node.
|
|
288
|
+
*/
|
|
289
|
+
function setCss( str ) {
|
|
290
|
+
mStyle.cssText = str;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
/**
|
|
294
|
+
* setCssAll extrapolates all vendor-specific css strings.
|
|
295
|
+
*/
|
|
296
|
+
function setCssAll( str1, str2 ) {
|
|
297
|
+
return setCss(prefixes.join(str1 + ';') + ( str2 || '' ));
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
/**
|
|
301
|
+
* is returns a boolean for if typeof obj is exactly type.
|
|
302
|
+
*/
|
|
303
|
+
function is( obj, type ) {
|
|
304
|
+
return typeof obj === type;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
/**
|
|
308
|
+
* contains returns a boolean for if substr is found within str.
|
|
309
|
+
*/
|
|
310
|
+
function contains( str, substr ) {
|
|
311
|
+
return !!~('' + str).indexOf(substr);
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
/*>>testprop*/
|
|
315
|
+
|
|
316
|
+
// testProps is a generic CSS / DOM property test.
|
|
317
|
+
|
|
318
|
+
// In testing support for a given CSS property, it's legit to test:
|
|
319
|
+
// `elem.style[styleName] !== undefined`
|
|
320
|
+
// If the property is supported it will return an empty string,
|
|
321
|
+
// if unsupported it will return undefined.
|
|
322
|
+
|
|
323
|
+
// We'll take advantage of this quick test and skip setting a style
|
|
324
|
+
// on our modernizr element, but instead just testing undefined vs
|
|
325
|
+
// empty string.
|
|
326
|
+
|
|
327
|
+
// Because the testing of the CSS property names (with "-", as
|
|
328
|
+
// opposed to the camelCase DOM properties) is non-portable and
|
|
329
|
+
// non-standard but works in WebKit and IE (but not Gecko or Opera),
|
|
330
|
+
// we explicitly reject properties with dashes so that authors
|
|
331
|
+
// developing in WebKit or IE first don't end up with
|
|
332
|
+
// browser-specific content by accident.
|
|
333
|
+
|
|
334
|
+
function testProps( props, prefixed ) {
|
|
335
|
+
for ( var i in props ) {
|
|
336
|
+
var prop = props[i];
|
|
337
|
+
if ( !contains(prop, "-") && mStyle[prop] !== undefined ) {
|
|
338
|
+
return prefixed == 'pfx' ? prop : true;
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
return false;
|
|
342
|
+
}
|
|
343
|
+
/*>>testprop*/
|
|
344
|
+
|
|
345
|
+
// TODO :: add testDOMProps
|
|
346
|
+
/**
|
|
347
|
+
* testDOMProps is a generic DOM property test; if a browser supports
|
|
348
|
+
* a certain property, it won't return undefined for it.
|
|
349
|
+
*/
|
|
350
|
+
function testDOMProps( props, obj, elem ) {
|
|
351
|
+
for ( var i in props ) {
|
|
352
|
+
var item = obj[props[i]];
|
|
353
|
+
if ( item !== undefined) {
|
|
354
|
+
|
|
355
|
+
// return the property name as a string
|
|
356
|
+
if (elem === false) return props[i];
|
|
357
|
+
|
|
358
|
+
// let's bind a function
|
|
359
|
+
if (is(item, 'function')){
|
|
360
|
+
// default to autobind unless override
|
|
361
|
+
return item.bind(elem || obj);
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
// return the unbound function or obj or value
|
|
365
|
+
return item;
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
return false;
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
/*>>testallprops*/
|
|
372
|
+
/**
|
|
373
|
+
* testPropsAll tests a list of DOM properties we want to check against.
|
|
374
|
+
* We specify literally ALL possible (known and/or likely) properties on
|
|
375
|
+
* the element including the non-vendor prefixed one, for forward-
|
|
376
|
+
* compatibility.
|
|
377
|
+
*/
|
|
378
|
+
function testPropsAll( prop, prefixed, elem ) {
|
|
379
|
+
|
|
380
|
+
var ucProp = prop.charAt(0).toUpperCase() + prop.slice(1),
|
|
381
|
+
props = (prop + ' ' + cssomPrefixes.join(ucProp + ' ') + ucProp).split(' ');
|
|
382
|
+
|
|
383
|
+
// did they call .prefixed('boxSizing') or are we just testing a prop?
|
|
384
|
+
if(is(prefixed, "string") || is(prefixed, "undefined")) {
|
|
385
|
+
return testProps(props, prefixed);
|
|
386
|
+
|
|
387
|
+
// otherwise, they called .prefixed('requestAnimationFrame', window[, elem])
|
|
388
|
+
} else {
|
|
389
|
+
props = (prop + ' ' + (domPrefixes).join(ucProp + ' ') + ucProp).split(' ');
|
|
390
|
+
return testDOMProps(props, prefixed, elem);
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
/*>>testallprops*/
|
|
394
|
+
|
|
395
|
+
|
|
396
|
+
/**
|
|
397
|
+
* Tests
|
|
398
|
+
* -----
|
|
399
|
+
*/
|
|
400
|
+
|
|
401
|
+
// The *new* flexbox
|
|
402
|
+
// dev.w3.org/csswg/css3-flexbox
|
|
403
|
+
|
|
404
|
+
tests['flexbox'] = function() {
|
|
405
|
+
return testPropsAll('flexWrap');
|
|
406
|
+
};
|
|
407
|
+
|
|
408
|
+
// The *old* flexbox
|
|
409
|
+
// www.w3.org/TR/2009/WD-css3-flexbox-20090723/
|
|
410
|
+
|
|
411
|
+
tests['flexboxlegacy'] = function() {
|
|
412
|
+
return testPropsAll('boxDirection');
|
|
413
|
+
};
|
|
414
|
+
|
|
415
|
+
// On the S60 and BB Storm, getContext exists, but always returns undefined
|
|
416
|
+
// so we actually have to call getContext() to verify
|
|
417
|
+
// github.com/Modernizr/Modernizr/issues/issue/97/
|
|
418
|
+
|
|
419
|
+
tests['canvas'] = function() {
|
|
420
|
+
var elem = document.createElement('canvas');
|
|
421
|
+
return !!(elem.getContext && elem.getContext('2d'));
|
|
422
|
+
};
|
|
423
|
+
|
|
424
|
+
tests['canvastext'] = function() {
|
|
425
|
+
return !!(Modernizr['canvas'] && is(document.createElement('canvas').getContext('2d').fillText, 'function'));
|
|
426
|
+
};
|
|
427
|
+
|
|
428
|
+
// webk.it/70117 is tracking a legit WebGL feature detect proposal
|
|
429
|
+
|
|
430
|
+
// We do a soft detect which may false positive in order to avoid
|
|
431
|
+
// an expensive context creation: bugzil.la/732441
|
|
432
|
+
|
|
433
|
+
tests['webgl'] = function() {
|
|
434
|
+
return !!window.WebGLRenderingContext;
|
|
435
|
+
};
|
|
436
|
+
|
|
437
|
+
/*
|
|
438
|
+
* The Modernizr.touch test only indicates if the browser supports
|
|
439
|
+
* touch events, which does not necessarily reflect a touchscreen
|
|
440
|
+
* device, as evidenced by tablets running Windows 7 or, alas,
|
|
441
|
+
* the Palm Pre / WebOS (touch) phones.
|
|
442
|
+
*
|
|
443
|
+
* Additionally, Chrome (desktop) used to lie about its support on this,
|
|
444
|
+
* but that has since been rectified: crbug.com/36415
|
|
445
|
+
*
|
|
446
|
+
* We also test for Firefox 4 Multitouch Support.
|
|
447
|
+
*
|
|
448
|
+
* For more info, see: modernizr.github.com/Modernizr/touch.html
|
|
449
|
+
*/
|
|
450
|
+
|
|
451
|
+
tests['touch'] = function() {
|
|
452
|
+
var bool;
|
|
453
|
+
|
|
454
|
+
if(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch) {
|
|
455
|
+
bool = true;
|
|
456
|
+
} else {
|
|
457
|
+
injectElementWithStyles(['@media (',prefixes.join('touch-enabled),('),mod,')','{#modernizr{top:9px;position:absolute}}'].join(''), function( node ) {
|
|
458
|
+
bool = node.offsetTop === 9;
|
|
459
|
+
});
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
return bool;
|
|
463
|
+
};
|
|
464
|
+
|
|
465
|
+
|
|
466
|
+
// geolocation is often considered a trivial feature detect...
|
|
467
|
+
// Turns out, it's quite tricky to get right:
|
|
468
|
+
//
|
|
469
|
+
// Using !!navigator.geolocation does two things we don't want. It:
|
|
470
|
+
// 1. Leaks memory in IE9: github.com/Modernizr/Modernizr/issues/513
|
|
471
|
+
// 2. Disables page caching in WebKit: webk.it/43956
|
|
472
|
+
//
|
|
473
|
+
// Meanwhile, in Firefox < 8, an about:config setting could expose
|
|
474
|
+
// a false positive that would throw an exception: bugzil.la/688158
|
|
475
|
+
|
|
476
|
+
tests['geolocation'] = function() {
|
|
477
|
+
return 'geolocation' in navigator;
|
|
478
|
+
};
|
|
479
|
+
|
|
480
|
+
|
|
481
|
+
tests['postmessage'] = function() {
|
|
482
|
+
return !!window.postMessage;
|
|
483
|
+
};
|
|
484
|
+
|
|
485
|
+
|
|
486
|
+
// Chrome incognito mode used to throw an exception when using openDatabase
|
|
487
|
+
// It doesn't anymore.
|
|
488
|
+
tests['websqldatabase'] = function() {
|
|
489
|
+
return !!window.openDatabase;
|
|
490
|
+
};
|
|
491
|
+
|
|
492
|
+
// Vendors had inconsistent prefixing with the experimental Indexed DB:
|
|
493
|
+
// - Webkit's implementation is accessible through webkitIndexedDB
|
|
494
|
+
// - Firefox shipped moz_indexedDB before FF4b9, but since then has been mozIndexedDB
|
|
495
|
+
// For speed, we don't test the legacy (and beta-only) indexedDB
|
|
496
|
+
tests['indexedDB'] = function() {
|
|
497
|
+
return !!testPropsAll("indexedDB", window);
|
|
498
|
+
};
|
|
499
|
+
|
|
500
|
+
// documentMode logic from YUI to filter out IE8 Compat Mode
|
|
501
|
+
// which false positives.
|
|
502
|
+
tests['hashchange'] = function() {
|
|
503
|
+
return isEventSupported('hashchange', window) && (document.documentMode === undefined || document.documentMode > 7);
|
|
504
|
+
};
|
|
505
|
+
|
|
506
|
+
// Per 1.6:
|
|
507
|
+
// This used to be Modernizr.historymanagement but the longer
|
|
508
|
+
// name has been deprecated in favor of a shorter and property-matching one.
|
|
509
|
+
// The old API is still available in 1.6, but as of 2.0 will throw a warning,
|
|
510
|
+
// and in the first release thereafter disappear entirely.
|
|
511
|
+
tests['history'] = function() {
|
|
512
|
+
return !!(window.history && history.pushState);
|
|
513
|
+
};
|
|
514
|
+
|
|
515
|
+
tests['draganddrop'] = function() {
|
|
516
|
+
var div = document.createElement('div');
|
|
517
|
+
return ('draggable' in div) || ('ondragstart' in div && 'ondrop' in div);
|
|
518
|
+
};
|
|
519
|
+
|
|
520
|
+
// FF3.6 was EOL'ed on 4/24/12, but the ESR version of FF10
|
|
521
|
+
// will be supported until FF19 (2/12/13), at which time, ESR becomes FF17.
|
|
522
|
+
// FF10 still uses prefixes, so check for it until then.
|
|
523
|
+
// for more ESR info, see: mozilla.org/en-US/firefox/organizations/faq/
|
|
524
|
+
tests['websockets'] = function() {
|
|
525
|
+
return 'WebSocket' in window || 'MozWebSocket' in window;
|
|
526
|
+
};
|
|
527
|
+
|
|
528
|
+
|
|
529
|
+
// css-tricks.com/rgba-browser-support/
|
|
530
|
+
tests['rgba'] = function() {
|
|
531
|
+
// Set an rgba() color and check the returned value
|
|
532
|
+
|
|
533
|
+
setCss('background-color:rgba(150,255,150,.5)');
|
|
534
|
+
|
|
535
|
+
return contains(mStyle.backgroundColor, 'rgba');
|
|
536
|
+
};
|
|
537
|
+
|
|
538
|
+
tests['hsla'] = function() {
|
|
539
|
+
// Same as rgba(), in fact, browsers re-map hsla() to rgba() internally,
|
|
540
|
+
// except IE9 who retains it as hsla
|
|
541
|
+
|
|
542
|
+
setCss('background-color:hsla(120,40%,100%,.5)');
|
|
543
|
+
|
|
544
|
+
return contains(mStyle.backgroundColor, 'rgba') || contains(mStyle.backgroundColor, 'hsla');
|
|
545
|
+
};
|
|
546
|
+
|
|
547
|
+
tests['multiplebgs'] = function() {
|
|
548
|
+
// Setting multiple images AND a color on the background shorthand property
|
|
549
|
+
// and then querying the style.background property value for the number of
|
|
550
|
+
// occurrences of "url(" is a reliable method for detecting ACTUAL support for this!
|
|
551
|
+
|
|
552
|
+
setCss('background:url(https://),url(https://),red url(https://)');
|
|
553
|
+
|
|
554
|
+
// If the UA supports multiple backgrounds, there should be three occurrences
|
|
555
|
+
// of the string "url(" in the return value for elemStyle.background
|
|
556
|
+
|
|
557
|
+
return (/(url\s*\(.*?){3}/).test(mStyle.background);
|
|
558
|
+
};
|
|
559
|
+
|
|
560
|
+
|
|
561
|
+
|
|
562
|
+
// this will false positive in Opera Mini
|
|
563
|
+
// github.com/Modernizr/Modernizr/issues/396
|
|
564
|
+
|
|
565
|
+
tests['backgroundsize'] = function() {
|
|
566
|
+
return testPropsAll('backgroundSize');
|
|
567
|
+
};
|
|
568
|
+
|
|
569
|
+
tests['borderimage'] = function() {
|
|
570
|
+
return testPropsAll('borderImage');
|
|
571
|
+
};
|
|
572
|
+
|
|
573
|
+
|
|
574
|
+
// Super comprehensive table about all the unique implementations of
|
|
575
|
+
// border-radius: muddledramblings.com/table-of-css3-border-radius-compliance
|
|
576
|
+
|
|
577
|
+
tests['borderradius'] = function() {
|
|
578
|
+
return testPropsAll('borderRadius');
|
|
579
|
+
};
|
|
580
|
+
|
|
581
|
+
// WebOS unfortunately false positives on this test.
|
|
582
|
+
tests['boxshadow'] = function() {
|
|
583
|
+
return testPropsAll('boxShadow');
|
|
584
|
+
};
|
|
585
|
+
|
|
586
|
+
// FF3.0 will false positive on this test
|
|
587
|
+
tests['textshadow'] = function() {
|
|
588
|
+
return document.createElement('div').style.textShadow === '';
|
|
589
|
+
};
|
|
590
|
+
|
|
591
|
+
|
|
592
|
+
tests['opacity'] = function() {
|
|
593
|
+
// Browsers that actually have CSS Opacity implemented have done so
|
|
594
|
+
// according to spec, which means their return values are within the
|
|
595
|
+
// range of [0.0,1.0] - including the leading zero.
|
|
596
|
+
|
|
597
|
+
setCssAll('opacity:.55');
|
|
598
|
+
|
|
599
|
+
// The non-literal . in this regex is intentional:
|
|
600
|
+
// German Chrome returns this value as 0,55
|
|
601
|
+
// github.com/Modernizr/Modernizr/issues/#issue/59/comment/516632
|
|
602
|
+
return (/^0.55$/).test(mStyle.opacity);
|
|
603
|
+
};
|
|
604
|
+
|
|
605
|
+
|
|
606
|
+
// Note, Android < 4 will pass this test, but can only animate
|
|
607
|
+
// a single property at a time
|
|
608
|
+
// goo.gl/v3V4Gp
|
|
609
|
+
tests['cssanimations'] = function() {
|
|
610
|
+
return testPropsAll('animationName');
|
|
611
|
+
};
|
|
612
|
+
|
|
613
|
+
|
|
614
|
+
tests['csscolumns'] = function() {
|
|
615
|
+
return testPropsAll('columnCount');
|
|
616
|
+
};
|
|
617
|
+
|
|
618
|
+
|
|
619
|
+
tests['cssgradients'] = function() {
|
|
620
|
+
/**
|
|
621
|
+
* For CSS Gradients syntax, please see:
|
|
622
|
+
* webkit.org/blog/175/introducing-css-gradients/
|
|
623
|
+
* developer.mozilla.org/en/CSS/-moz-linear-gradient
|
|
624
|
+
* developer.mozilla.org/en/CSS/-moz-radial-gradient
|
|
625
|
+
* dev.w3.org/csswg/css3-images/#gradients-
|
|
626
|
+
*/
|
|
627
|
+
|
|
628
|
+
var str1 = 'background-image:',
|
|
629
|
+
str2 = 'gradient(linear,left top,right bottom,from(#9f9),to(white));',
|
|
630
|
+
str3 = 'linear-gradient(left top,#9f9, white);';
|
|
631
|
+
|
|
632
|
+
setCss(
|
|
633
|
+
// legacy webkit syntax (FIXME: remove when syntax not in use anymore)
|
|
634
|
+
(str1 + '-webkit- '.split(' ').join(str2 + str1) +
|
|
635
|
+
// standard syntax // trailing 'background-image:'
|
|
636
|
+
prefixes.join(str3 + str1)).slice(0, -str1.length)
|
|
637
|
+
);
|
|
638
|
+
|
|
639
|
+
return contains(mStyle.backgroundImage, 'gradient');
|
|
640
|
+
};
|
|
641
|
+
|
|
642
|
+
|
|
643
|
+
tests['cssreflections'] = function() {
|
|
644
|
+
return testPropsAll('boxReflect');
|
|
645
|
+
};
|
|
646
|
+
|
|
647
|
+
|
|
648
|
+
tests['csstransforms'] = function() {
|
|
649
|
+
return !!testPropsAll('transform');
|
|
650
|
+
};
|
|
651
|
+
|
|
652
|
+
|
|
653
|
+
tests['csstransforms3d'] = function() {
|
|
654
|
+
|
|
655
|
+
var ret = !!testPropsAll('perspective');
|
|
656
|
+
|
|
657
|
+
// Webkit's 3D transforms are passed off to the browser's own graphics renderer.
|
|
658
|
+
// It works fine in Safari on Leopard and Snow Leopard, but not in Chrome in
|
|
659
|
+
// some conditions. As a result, Webkit typically recognizes the syntax but
|
|
660
|
+
// will sometimes throw a false positive, thus we must do a more thorough check:
|
|
661
|
+
if ( ret && 'webkitPerspective' in docElement.style ) {
|
|
662
|
+
|
|
663
|
+
// Webkit allows this media query to succeed only if the feature is enabled.
|
|
664
|
+
// `@media (transform-3d),(-webkit-transform-3d){ ... }`
|
|
665
|
+
injectElementWithStyles('@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}', function( node, rule ) {
|
|
666
|
+
ret = node.offsetLeft === 9 && node.offsetHeight === 3;
|
|
667
|
+
});
|
|
668
|
+
}
|
|
669
|
+
return ret;
|
|
670
|
+
};
|
|
671
|
+
|
|
672
|
+
|
|
673
|
+
tests['csstransitions'] = function() {
|
|
674
|
+
return testPropsAll('transition');
|
|
675
|
+
};
|
|
676
|
+
|
|
677
|
+
|
|
678
|
+
/*>>fontface*/
|
|
679
|
+
// @font-face detection routine by Diego Perini
|
|
680
|
+
// javascript.nwbox.com/CSSSupport/
|
|
681
|
+
|
|
682
|
+
// false positives:
|
|
683
|
+
// WebOS github.com/Modernizr/Modernizr/issues/342
|
|
684
|
+
// WP7 github.com/Modernizr/Modernizr/issues/538
|
|
685
|
+
tests['fontface'] = function() {
|
|
686
|
+
var bool;
|
|
687
|
+
|
|
688
|
+
injectElementWithStyles('@font-face {font-family:"font";src:url("https://")}', function( node, rule ) {
|
|
689
|
+
var style = document.getElementById('smodernizr'),
|
|
690
|
+
sheet = style.sheet || style.styleSheet,
|
|
691
|
+
cssText = sheet ? (sheet.cssRules && sheet.cssRules[0] ? sheet.cssRules[0].cssText : sheet.cssText || '') : '';
|
|
692
|
+
|
|
693
|
+
bool = /src/i.test(cssText) && cssText.indexOf(rule.split(' ')[0]) === 0;
|
|
694
|
+
});
|
|
695
|
+
|
|
696
|
+
return bool;
|
|
697
|
+
};
|
|
698
|
+
/*>>fontface*/
|
|
699
|
+
|
|
700
|
+
// CSS generated content detection
|
|
701
|
+
tests['generatedcontent'] = function() {
|
|
702
|
+
var bool;
|
|
703
|
+
|
|
704
|
+
injectElementWithStyles(['#',mod,'{font:0/0 a}#',mod,':after{content:"',smile,'";visibility:hidden;font:3px/1 a}'].join(''), function( node ) {
|
|
705
|
+
bool = node.offsetHeight >= 3;
|
|
706
|
+
});
|
|
707
|
+
|
|
708
|
+
return bool;
|
|
709
|
+
};
|
|
710
|
+
|
|
711
|
+
|
|
712
|
+
|
|
713
|
+
// These tests evaluate support of the video/audio elements, as well as
|
|
714
|
+
// testing what types of content they support.
|
|
715
|
+
//
|
|
716
|
+
// We're using the Boolean constructor here, so that we can extend the value
|
|
717
|
+
// e.g. Modernizr.video // true
|
|
718
|
+
// Modernizr.video.ogg // 'probably'
|
|
719
|
+
//
|
|
720
|
+
// Codec values from : github.com/NielsLeenheer/html5test/blob/9106a8/index.html#L845
|
|
721
|
+
// thx to NielsLeenheer and zcorpan
|
|
722
|
+
|
|
723
|
+
// Note: in some older browsers, "no" was a return value instead of empty string.
|
|
724
|
+
// It was live in FF3.5.0 and 3.5.1, but fixed in 3.5.2
|
|
725
|
+
// It was also live in Safari 4.0.0 - 4.0.4, but fixed in 4.0.5
|
|
726
|
+
|
|
727
|
+
tests['video'] = function() {
|
|
728
|
+
var elem = document.createElement('video'),
|
|
729
|
+
bool = false;
|
|
730
|
+
|
|
731
|
+
// IE9 Running on Windows Server SKU can cause an exception to be thrown, bug #224
|
|
732
|
+
try {
|
|
733
|
+
if ( bool = !!elem.canPlayType ) {
|
|
734
|
+
bool = new Boolean(bool);
|
|
735
|
+
bool.ogg = elem.canPlayType('video/ogg; codecs="theora"') .replace(/^no$/,'');
|
|
736
|
+
|
|
737
|
+
// Without QuickTime, this value will be `undefined`. github.com/Modernizr/Modernizr/issues/546
|
|
738
|
+
bool.h264 = elem.canPlayType('video/mp4; codecs="avc1.42E01E"') .replace(/^no$/,'');
|
|
739
|
+
|
|
740
|
+
bool.webm = elem.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,'');
|
|
741
|
+
}
|
|
742
|
+
|
|
743
|
+
} catch(e) { }
|
|
744
|
+
|
|
745
|
+
return bool;
|
|
746
|
+
};
|
|
747
|
+
|
|
748
|
+
tests['audio'] = function() {
|
|
749
|
+
var elem = document.createElement('audio'),
|
|
750
|
+
bool = false;
|
|
751
|
+
|
|
752
|
+
try {
|
|
753
|
+
if ( bool = !!elem.canPlayType ) {
|
|
754
|
+
bool = new Boolean(bool);
|
|
755
|
+
bool.ogg = elem.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,'');
|
|
756
|
+
bool.mp3 = elem.canPlayType('audio/mpeg;') .replace(/^no$/,'');
|
|
757
|
+
|
|
758
|
+
// Mimetypes accepted:
|
|
759
|
+
// developer.mozilla.org/En/Media_formats_supported_by_the_audio_and_video_elements
|
|
760
|
+
// bit.ly/iphoneoscodecs
|
|
761
|
+
bool.wav = elem.canPlayType('audio/wav; codecs="1"') .replace(/^no$/,'');
|
|
762
|
+
bool.m4a = ( elem.canPlayType('audio/x-m4a;') ||
|
|
763
|
+
elem.canPlayType('audio/aac;')) .replace(/^no$/,'');
|
|
764
|
+
}
|
|
765
|
+
} catch(e) { }
|
|
766
|
+
|
|
767
|
+
return bool;
|
|
768
|
+
};
|
|
769
|
+
|
|
770
|
+
|
|
771
|
+
// In FF4, if disabled, window.localStorage should === null.
|
|
772
|
+
|
|
773
|
+
// Normally, we could not test that directly and need to do a
|
|
774
|
+
// `('localStorage' in window) && ` test first because otherwise Firefox will
|
|
775
|
+
// throw bugzil.la/365772 if cookies are disabled
|
|
776
|
+
|
|
777
|
+
// Also in iOS5 Private Browsing mode, attempting to use localStorage.setItem
|
|
778
|
+
// will throw the exception:
|
|
779
|
+
// QUOTA_EXCEEDED_ERRROR DOM Exception 22.
|
|
780
|
+
// Peculiarly, getItem and removeItem calls do not throw.
|
|
781
|
+
|
|
782
|
+
// Because we are forced to try/catch this, we'll go aggressive.
|
|
783
|
+
|
|
784
|
+
// Just FWIW: IE8 Compat mode supports these features completely:
|
|
785
|
+
// www.quirksmode.org/dom/html5.html
|
|
786
|
+
// But IE8 doesn't support either with local files
|
|
787
|
+
|
|
788
|
+
tests['localstorage'] = function() {
|
|
789
|
+
try {
|
|
790
|
+
localStorage.setItem(mod, mod);
|
|
791
|
+
localStorage.removeItem(mod);
|
|
792
|
+
return true;
|
|
793
|
+
} catch(e) {
|
|
794
|
+
return false;
|
|
795
|
+
}
|
|
796
|
+
};
|
|
797
|
+
|
|
798
|
+
tests['sessionstorage'] = function() {
|
|
799
|
+
try {
|
|
800
|
+
sessionStorage.setItem(mod, mod);
|
|
801
|
+
sessionStorage.removeItem(mod);
|
|
802
|
+
return true;
|
|
803
|
+
} catch(e) {
|
|
804
|
+
return false;
|
|
805
|
+
}
|
|
806
|
+
};
|
|
807
|
+
|
|
808
|
+
|
|
809
|
+
tests['webworkers'] = function() {
|
|
810
|
+
return !!window.Worker;
|
|
811
|
+
};
|
|
812
|
+
|
|
813
|
+
|
|
814
|
+
tests['applicationcache'] = function() {
|
|
815
|
+
return !!window.applicationCache;
|
|
816
|
+
};
|
|
817
|
+
|
|
818
|
+
|
|
819
|
+
// Thanks to Erik Dahlstrom
|
|
820
|
+
tests['svg'] = function() {
|
|
821
|
+
return !!document.createElementNS && !!document.createElementNS(ns.svg, 'svg').createSVGRect;
|
|
822
|
+
};
|
|
823
|
+
|
|
824
|
+
// specifically for SVG inline in HTML, not within XHTML
|
|
825
|
+
// test page: paulirish.com/demo/inline-svg
|
|
826
|
+
tests['inlinesvg'] = function() {
|
|
827
|
+
var div = document.createElement('div');
|
|
828
|
+
div.innerHTML = '<svg/>';
|
|
829
|
+
return (div.firstChild && div.firstChild.namespaceURI) == ns.svg;
|
|
830
|
+
};
|
|
831
|
+
|
|
832
|
+
// SVG SMIL animation
|
|
833
|
+
tests['smil'] = function() {
|
|
834
|
+
return !!document.createElementNS && /SVGAnimate/.test(toString.call(document.createElementNS(ns.svg, 'animate')));
|
|
835
|
+
};
|
|
836
|
+
|
|
837
|
+
// This test is only for clip paths in SVG proper, not clip paths on HTML content
|
|
838
|
+
// demo: srufaculty.sru.edu/david.dailey/svg/newstuff/clipPath4.svg
|
|
839
|
+
|
|
840
|
+
// However read the comments to dig into applying SVG clippaths to HTML content here:
|
|
841
|
+
// github.com/Modernizr/Modernizr/issues/213#issuecomment-1149491
|
|
842
|
+
tests['svgclippaths'] = function() {
|
|
843
|
+
return !!document.createElementNS && /SVGClipPath/.test(toString.call(document.createElementNS(ns.svg, 'clipPath')));
|
|
844
|
+
};
|
|
845
|
+
|
|
846
|
+
/*>>webforms*/
|
|
847
|
+
// input features and input types go directly onto the ret object, bypassing the tests loop.
|
|
848
|
+
// Hold this guy to execute in a moment.
|
|
849
|
+
function webforms() {
|
|
850
|
+
/*>>input*/
|
|
851
|
+
// Run through HTML5's new input attributes to see if the UA understands any.
|
|
852
|
+
// We're using f which is the <input> element created early on
|
|
853
|
+
// Mike Taylr has created a comprehensive resource for testing these attributes
|
|
854
|
+
// when applied to all input types:
|
|
855
|
+
// miketaylr.com/code/input-type-attr.html
|
|
856
|
+
// spec: www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary
|
|
857
|
+
|
|
858
|
+
// Only input placeholder is tested while textarea's placeholder is not.
|
|
859
|
+
// Currently Safari 4 and Opera 11 have support only for the input placeholder
|
|
860
|
+
// Both tests are available in feature-detects/forms-placeholder.js
|
|
861
|
+
Modernizr['input'] = (function( props ) {
|
|
862
|
+
for ( var i = 0, len = props.length; i < len; i++ ) {
|
|
863
|
+
attrs[ props[i] ] = !!(props[i] in inputElem);
|
|
864
|
+
}
|
|
865
|
+
if (attrs.list){
|
|
866
|
+
// safari false positive's on datalist: webk.it/74252
|
|
867
|
+
// see also github.com/Modernizr/Modernizr/issues/146
|
|
868
|
+
attrs.list = !!(document.createElement('datalist') && window.HTMLDataListElement);
|
|
869
|
+
}
|
|
870
|
+
return attrs;
|
|
871
|
+
})('autocomplete autofocus list placeholder max min multiple pattern required step'.split(' '));
|
|
872
|
+
/*>>input*/
|
|
873
|
+
|
|
874
|
+
/*>>inputtypes*/
|
|
875
|
+
// Run through HTML5's new input types to see if the UA understands any.
|
|
876
|
+
// This is put behind the tests runloop because it doesn't return a
|
|
877
|
+
// true/false like all the other tests; instead, it returns an object
|
|
878
|
+
// containing each input type with its corresponding true/false value
|
|
879
|
+
|
|
880
|
+
// Big thanks to @miketaylr for the html5 forms expertise. miketaylr.com/
|
|
881
|
+
Modernizr['inputtypes'] = (function(props) {
|
|
882
|
+
|
|
883
|
+
for ( var i = 0, bool, inputElemType, defaultView, len = props.length; i < len; i++ ) {
|
|
884
|
+
|
|
885
|
+
inputElem.setAttribute('type', inputElemType = props[i]);
|
|
886
|
+
bool = inputElem.type !== 'text';
|
|
887
|
+
|
|
888
|
+
// We first check to see if the type we give it sticks..
|
|
889
|
+
// If the type does, we feed it a textual value, which shouldn't be valid.
|
|
890
|
+
// If the value doesn't stick, we know there's input sanitization which infers a custom UI
|
|
891
|
+
if ( bool ) {
|
|
892
|
+
|
|
893
|
+
inputElem.value = smile;
|
|
894
|
+
inputElem.style.cssText = 'position:absolute;visibility:hidden;';
|
|
895
|
+
|
|
896
|
+
if ( /^range$/.test(inputElemType) && inputElem.style.WebkitAppearance !== undefined ) {
|
|
897
|
+
|
|
898
|
+
docElement.appendChild(inputElem);
|
|
899
|
+
defaultView = document.defaultView;
|
|
900
|
+
|
|
901
|
+
// Safari 2-4 allows the smiley as a value, despite making a slider
|
|
902
|
+
bool = defaultView.getComputedStyle &&
|
|
903
|
+
defaultView.getComputedStyle(inputElem, null).WebkitAppearance !== 'textfield' &&
|
|
904
|
+
// Mobile android web browser has false positive, so must
|
|
905
|
+
// check the height to see if the widget is actually there.
|
|
906
|
+
(inputElem.offsetHeight !== 0);
|
|
907
|
+
|
|
908
|
+
docElement.removeChild(inputElem);
|
|
909
|
+
|
|
910
|
+
} else if ( /^(search|tel)$/.test(inputElemType) ){
|
|
911
|
+
// Spec doesn't define any special parsing or detectable UI
|
|
912
|
+
// behaviors so we pass these through as true
|
|
913
|
+
|
|
914
|
+
// Interestingly, opera fails the earlier test, so it doesn't
|
|
915
|
+
// even make it here.
|
|
916
|
+
|
|
917
|
+
} else if ( /^(url|email)$/.test(inputElemType) ) {
|
|
918
|
+
// Real url and email support comes with prebaked validation.
|
|
919
|
+
bool = inputElem.checkValidity && inputElem.checkValidity() === false;
|
|
920
|
+
|
|
921
|
+
} else {
|
|
922
|
+
// If the upgraded input compontent rejects the :) text, we got a winner
|
|
923
|
+
bool = inputElem.value != smile;
|
|
924
|
+
}
|
|
925
|
+
}
|
|
926
|
+
|
|
927
|
+
inputs[ props[i] ] = !!bool;
|
|
928
|
+
}
|
|
929
|
+
return inputs;
|
|
930
|
+
})('search tel url email datetime date month week time datetime-local number range color'.split(' '));
|
|
931
|
+
/*>>inputtypes*/
|
|
932
|
+
}
|
|
933
|
+
/*>>webforms*/
|
|
934
|
+
|
|
935
|
+
|
|
936
|
+
// End of test definitions
|
|
937
|
+
// -----------------------
|
|
938
|
+
|
|
939
|
+
|
|
940
|
+
|
|
941
|
+
// Run through all tests and detect their support in the current UA.
|
|
942
|
+
// todo: hypothetically we could be doing an array of tests and use a basic loop here.
|
|
943
|
+
for ( var feature in tests ) {
|
|
944
|
+
if ( hasOwnProp(tests, feature) ) {
|
|
945
|
+
// run the test, throw the return value into the Modernizr,
|
|
946
|
+
// then based on that boolean, define an appropriate className
|
|
947
|
+
// and push it into an array of classes we'll join later.
|
|
948
|
+
featureName = feature.toLowerCase();
|
|
949
|
+
Modernizr[featureName] = tests[feature]();
|
|
950
|
+
|
|
951
|
+
classes.push((Modernizr[featureName] ? '' : 'no-') + featureName);
|
|
952
|
+
}
|
|
953
|
+
}
|
|
954
|
+
|
|
955
|
+
/*>>webforms*/
|
|
956
|
+
// input tests need to run.
|
|
957
|
+
Modernizr.input || webforms();
|
|
958
|
+
/*>>webforms*/
|
|
959
|
+
|
|
960
|
+
|
|
961
|
+
/**
|
|
962
|
+
* addTest allows the user to define their own feature tests
|
|
963
|
+
* the result will be added onto the Modernizr object,
|
|
964
|
+
* as well as an appropriate className set on the html element
|
|
965
|
+
*
|
|
966
|
+
* @param feature - String naming the feature
|
|
967
|
+
* @param test - Function returning true if feature is supported, false if not
|
|
968
|
+
*/
|
|
969
|
+
Modernizr.addTest = function ( feature, test ) {
|
|
970
|
+
if ( typeof feature == 'object' ) {
|
|
971
|
+
for ( var key in feature ) {
|
|
972
|
+
if ( hasOwnProp( feature, key ) ) {
|
|
973
|
+
Modernizr.addTest( key, feature[ key ] );
|
|
974
|
+
}
|
|
975
|
+
}
|
|
976
|
+
} else {
|
|
977
|
+
|
|
978
|
+
feature = feature.toLowerCase();
|
|
979
|
+
|
|
980
|
+
if ( Modernizr[feature] !== undefined ) {
|
|
981
|
+
// we're going to quit if you're trying to overwrite an existing test
|
|
982
|
+
// if we were to allow it, we'd do this:
|
|
983
|
+
// var re = new RegExp("\\b(no-)?" + feature + "\\b");
|
|
984
|
+
// docElement.className = docElement.className.replace( re, '' );
|
|
985
|
+
// but, no rly, stuff 'em.
|
|
986
|
+
return Modernizr;
|
|
987
|
+
}
|
|
988
|
+
|
|
989
|
+
test = typeof test == 'function' ? test() : test;
|
|
990
|
+
|
|
991
|
+
if (typeof enableClasses !== "undefined" && enableClasses) {
|
|
992
|
+
docElement.className += ' ' + (test ? '' : 'no-') + feature;
|
|
993
|
+
}
|
|
994
|
+
Modernizr[feature] = test;
|
|
995
|
+
|
|
996
|
+
}
|
|
997
|
+
|
|
998
|
+
return Modernizr; // allow chaining.
|
|
999
|
+
};
|
|
1000
|
+
|
|
1001
|
+
|
|
1002
|
+
// Reset modElem.cssText to nothing to reduce memory footprint.
|
|
1003
|
+
setCss('');
|
|
1004
|
+
modElem = inputElem = null;
|
|
1005
|
+
|
|
1006
|
+
/*>>shiv*/
|
|
1007
|
+
/**
|
|
1008
|
+
* @preserve HTML5 Shiv prev3.7.1 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
|
|
1009
|
+
*/
|
|
1010
|
+
;(function(window, document) {
|
|
1011
|
+
/*jshint evil:true */
|
|
1012
|
+
/** version */
|
|
1013
|
+
var version = '3.7.0';
|
|
1014
|
+
|
|
1015
|
+
/** Preset options */
|
|
1016
|
+
var options = window.html5 || {};
|
|
1017
|
+
|
|
1018
|
+
/** Used to skip problem elements */
|
|
1019
|
+
var reSkip = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i;
|
|
1020
|
+
|
|
1021
|
+
/** Not all elements can be cloned in IE **/
|
|
1022
|
+
var saveClones = /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i;
|
|
1023
|
+
|
|
1024
|
+
/** Detect whether the browser supports default html5 styles */
|
|
1025
|
+
var supportsHtml5Styles;
|
|
1026
|
+
|
|
1027
|
+
/** Name of the expando, to work with multiple documents or to re-shiv one document */
|
|
1028
|
+
var expando = '_html5shiv';
|
|
1029
|
+
|
|
1030
|
+
/** The id for the the documents expando */
|
|
1031
|
+
var expanID = 0;
|
|
1032
|
+
|
|
1033
|
+
/** Cached data for each document */
|
|
1034
|
+
var expandoData = {};
|
|
1035
|
+
|
|
1036
|
+
/** Detect whether the browser supports unknown elements */
|
|
1037
|
+
var supportsUnknownElements;
|
|
1038
|
+
|
|
1039
|
+
(function() {
|
|
1040
|
+
try {
|
|
1041
|
+
var a = document.createElement('a');
|
|
1042
|
+
a.innerHTML = '<xyz></xyz>';
|
|
1043
|
+
//if the hidden property is implemented we can assume, that the browser supports basic HTML5 Styles
|
|
1044
|
+
supportsHtml5Styles = ('hidden' in a);
|
|
1045
|
+
|
|
1046
|
+
supportsUnknownElements = a.childNodes.length == 1 || (function() {
|
|
1047
|
+
// assign a false positive if unable to shiv
|
|
1048
|
+
(document.createElement)('a');
|
|
1049
|
+
var frag = document.createDocumentFragment();
|
|
1050
|
+
return (
|
|
1051
|
+
typeof frag.cloneNode == 'undefined' ||
|
|
1052
|
+
typeof frag.createDocumentFragment == 'undefined' ||
|
|
1053
|
+
typeof frag.createElement == 'undefined'
|
|
1054
|
+
);
|
|
1055
|
+
}());
|
|
1056
|
+
} catch(e) {
|
|
1057
|
+
// assign a false positive if detection fails => unable to shiv
|
|
1058
|
+
supportsHtml5Styles = true;
|
|
1059
|
+
supportsUnknownElements = true;
|
|
1060
|
+
}
|
|
1061
|
+
|
|
1062
|
+
}());
|
|
1063
|
+
|
|
1064
|
+
/*--------------------------------------------------------------------------*/
|
|
1065
|
+
|
|
1066
|
+
/**
|
|
1067
|
+
* Creates a style sheet with the given CSS text and adds it to the document.
|
|
1068
|
+
* @private
|
|
1069
|
+
* @param {Document} ownerDocument The document.
|
|
1070
|
+
* @param {String} cssText The CSS text.
|
|
1071
|
+
* @returns {StyleSheet} The style element.
|
|
1072
|
+
*/
|
|
1073
|
+
function addStyleSheet(ownerDocument, cssText) {
|
|
1074
|
+
var p = ownerDocument.createElement('p'),
|
|
1075
|
+
parent = ownerDocument.getElementsByTagName('head')[0] || ownerDocument.documentElement;
|
|
1076
|
+
|
|
1077
|
+
p.innerHTML = 'x<style>' + cssText + '</style>';
|
|
1078
|
+
return parent.insertBefore(p.lastChild, parent.firstChild);
|
|
1079
|
+
}
|
|
1080
|
+
|
|
1081
|
+
/**
|
|
1082
|
+
* Returns the value of `html5.elements` as an array.
|
|
1083
|
+
* @private
|
|
1084
|
+
* @returns {Array} An array of shived element node names.
|
|
1085
|
+
*/
|
|
1086
|
+
function getElements() {
|
|
1087
|
+
var elements = html5.elements;
|
|
1088
|
+
return typeof elements == 'string' ? elements.split(' ') : elements;
|
|
1089
|
+
}
|
|
1090
|
+
|
|
1091
|
+
/**
|
|
1092
|
+
* Returns the data associated to the given document
|
|
1093
|
+
* @private
|
|
1094
|
+
* @param {Document} ownerDocument The document.
|
|
1095
|
+
* @returns {Object} An object of data.
|
|
1096
|
+
*/
|
|
1097
|
+
function getExpandoData(ownerDocument) {
|
|
1098
|
+
var data = expandoData[ownerDocument[expando]];
|
|
1099
|
+
if (!data) {
|
|
1100
|
+
data = {};
|
|
1101
|
+
expanID++;
|
|
1102
|
+
ownerDocument[expando] = expanID;
|
|
1103
|
+
expandoData[expanID] = data;
|
|
1104
|
+
}
|
|
1105
|
+
return data;
|
|
1106
|
+
}
|
|
1107
|
+
|
|
1108
|
+
/**
|
|
1109
|
+
* returns a shived element for the given nodeName and document
|
|
1110
|
+
* @memberOf html5
|
|
1111
|
+
* @param {String} nodeName name of the element
|
|
1112
|
+
* @param {Document} ownerDocument The context document.
|
|
1113
|
+
* @returns {Object} The shived element.
|
|
1114
|
+
*/
|
|
1115
|
+
function createElement(nodeName, ownerDocument, data){
|
|
1116
|
+
if (!ownerDocument) {
|
|
1117
|
+
ownerDocument = document;
|
|
1118
|
+
}
|
|
1119
|
+
if(supportsUnknownElements){
|
|
1120
|
+
return ownerDocument.createElement(nodeName);
|
|
1121
|
+
}
|
|
1122
|
+
if (!data) {
|
|
1123
|
+
data = getExpandoData(ownerDocument);
|
|
1124
|
+
}
|
|
1125
|
+
var node;
|
|
1126
|
+
|
|
1127
|
+
if (data.cache[nodeName]) {
|
|
1128
|
+
node = data.cache[nodeName].cloneNode();
|
|
1129
|
+
} else if (saveClones.test(nodeName)) {
|
|
1130
|
+
node = (data.cache[nodeName] = data.createElem(nodeName)).cloneNode();
|
|
1131
|
+
} else {
|
|
1132
|
+
node = data.createElem(nodeName);
|
|
1133
|
+
}
|
|
1134
|
+
|
|
1135
|
+
// Avoid adding some elements to fragments in IE < 9 because
|
|
1136
|
+
// * Attributes like `name` or `type` cannot be set/changed once an element
|
|
1137
|
+
// is inserted into a document/fragment
|
|
1138
|
+
// * Link elements with `src` attributes that are inaccessible, as with
|
|
1139
|
+
// a 403 response, will cause the tab/window to crash
|
|
1140
|
+
// * Script elements appended to fragments will execute when their `src`
|
|
1141
|
+
// or `text` property is set
|
|
1142
|
+
return node.canHaveChildren && !reSkip.test(nodeName) && !node.tagUrn ? data.frag.appendChild(node) : node;
|
|
1143
|
+
}
|
|
1144
|
+
|
|
1145
|
+
/**
|
|
1146
|
+
* returns a shived DocumentFragment for the given document
|
|
1147
|
+
* @memberOf html5
|
|
1148
|
+
* @param {Document} ownerDocument The context document.
|
|
1149
|
+
* @returns {Object} The shived DocumentFragment.
|
|
1150
|
+
*/
|
|
1151
|
+
function createDocumentFragment(ownerDocument, data){
|
|
1152
|
+
if (!ownerDocument) {
|
|
1153
|
+
ownerDocument = document;
|
|
1154
|
+
}
|
|
1155
|
+
if(supportsUnknownElements){
|
|
1156
|
+
return ownerDocument.createDocumentFragment();
|
|
1157
|
+
}
|
|
1158
|
+
data = data || getExpandoData(ownerDocument);
|
|
1159
|
+
var clone = data.frag.cloneNode(),
|
|
1160
|
+
i = 0,
|
|
1161
|
+
elems = getElements(),
|
|
1162
|
+
l = elems.length;
|
|
1163
|
+
for(;i<l;i++){
|
|
1164
|
+
clone.createElement(elems[i]);
|
|
1165
|
+
}
|
|
1166
|
+
return clone;
|
|
1167
|
+
}
|
|
1168
|
+
|
|
1169
|
+
/**
|
|
1170
|
+
* Shivs the `createElement` and `createDocumentFragment` methods of the document.
|
|
1171
|
+
* @private
|
|
1172
|
+
* @param {Document|DocumentFragment} ownerDocument The document.
|
|
1173
|
+
* @param {Object} data of the document.
|
|
1174
|
+
*/
|
|
1175
|
+
function shivMethods(ownerDocument, data) {
|
|
1176
|
+
if (!data.cache) {
|
|
1177
|
+
data.cache = {};
|
|
1178
|
+
data.createElem = ownerDocument.createElement;
|
|
1179
|
+
data.createFrag = ownerDocument.createDocumentFragment;
|
|
1180
|
+
data.frag = data.createFrag();
|
|
1181
|
+
}
|
|
1182
|
+
|
|
1183
|
+
|
|
1184
|
+
ownerDocument.createElement = function(nodeName) {
|
|
1185
|
+
//abort shiv
|
|
1186
|
+
if (!html5.shivMethods) {
|
|
1187
|
+
return data.createElem(nodeName);
|
|
1188
|
+
}
|
|
1189
|
+
return createElement(nodeName, ownerDocument, data);
|
|
1190
|
+
};
|
|
1191
|
+
|
|
1192
|
+
ownerDocument.createDocumentFragment = Function('h,f', 'return function(){' +
|
|
1193
|
+
'var n=f.cloneNode(),c=n.createElement;' +
|
|
1194
|
+
'h.shivMethods&&(' +
|
|
1195
|
+
// unroll the `createElement` calls
|
|
1196
|
+
getElements().join().replace(/[\w\-]+/g, function(nodeName) {
|
|
1197
|
+
data.createElem(nodeName);
|
|
1198
|
+
data.frag.createElement(nodeName);
|
|
1199
|
+
return 'c("' + nodeName + '")';
|
|
1200
|
+
}) +
|
|
1201
|
+
');return n}'
|
|
1202
|
+
)(html5, data.frag);
|
|
1203
|
+
}
|
|
1204
|
+
|
|
1205
|
+
/*--------------------------------------------------------------------------*/
|
|
1206
|
+
|
|
1207
|
+
/**
|
|
1208
|
+
* Shivs the given document.
|
|
1209
|
+
* @memberOf html5
|
|
1210
|
+
* @param {Document} ownerDocument The document to shiv.
|
|
1211
|
+
* @returns {Document} The shived document.
|
|
1212
|
+
*/
|
|
1213
|
+
function shivDocument(ownerDocument) {
|
|
1214
|
+
if (!ownerDocument) {
|
|
1215
|
+
ownerDocument = document;
|
|
1216
|
+
}
|
|
1217
|
+
var data = getExpandoData(ownerDocument);
|
|
1218
|
+
|
|
1219
|
+
if (html5.shivCSS && !supportsHtml5Styles && !data.hasCSS) {
|
|
1220
|
+
data.hasCSS = !!addStyleSheet(ownerDocument,
|
|
1221
|
+
// corrects block display not defined in IE6/7/8/9
|
|
1222
|
+
'article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}' +
|
|
1223
|
+
// adds styling not present in IE6/7/8/9
|
|
1224
|
+
'mark{background:#FF0;color:#000}' +
|
|
1225
|
+
// hides non-rendered elements
|
|
1226
|
+
'template{display:none}'
|
|
1227
|
+
);
|
|
1228
|
+
}
|
|
1229
|
+
if (!supportsUnknownElements) {
|
|
1230
|
+
shivMethods(ownerDocument, data);
|
|
1231
|
+
}
|
|
1232
|
+
return ownerDocument;
|
|
1233
|
+
}
|
|
1234
|
+
|
|
1235
|
+
/*--------------------------------------------------------------------------*/
|
|
1236
|
+
|
|
1237
|
+
/**
|
|
1238
|
+
* The `html5` object is exposed so that more elements can be shived and
|
|
1239
|
+
* existing shiving can be detected on iframes.
|
|
1240
|
+
* @type Object
|
|
1241
|
+
* @example
|
|
1242
|
+
*
|
|
1243
|
+
* // options can be changed before the script is included
|
|
1244
|
+
* html5 = { 'elements': 'mark section', 'shivCSS': false, 'shivMethods': false };
|
|
1245
|
+
*/
|
|
1246
|
+
var html5 = {
|
|
1247
|
+
|
|
1248
|
+
/**
|
|
1249
|
+
* An array or space separated string of node names of the elements to shiv.
|
|
1250
|
+
* @memberOf html5
|
|
1251
|
+
* @type Array|String
|
|
1252
|
+
*/
|
|
1253
|
+
'elements': options.elements || 'abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video',
|
|
1254
|
+
|
|
1255
|
+
/**
|
|
1256
|
+
* current version of html5shiv
|
|
1257
|
+
*/
|
|
1258
|
+
'version': version,
|
|
1259
|
+
|
|
1260
|
+
/**
|
|
1261
|
+
* A flag to indicate that the HTML5 style sheet should be inserted.
|
|
1262
|
+
* @memberOf html5
|
|
1263
|
+
* @type Boolean
|
|
1264
|
+
*/
|
|
1265
|
+
'shivCSS': (options.shivCSS !== false),
|
|
1266
|
+
|
|
1267
|
+
/**
|
|
1268
|
+
* Is equal to true if a browser supports creating unknown/HTML5 elements
|
|
1269
|
+
* @memberOf html5
|
|
1270
|
+
* @type boolean
|
|
1271
|
+
*/
|
|
1272
|
+
'supportsUnknownElements': supportsUnknownElements,
|
|
1273
|
+
|
|
1274
|
+
/**
|
|
1275
|
+
* A flag to indicate that the document's `createElement` and `createDocumentFragment`
|
|
1276
|
+
* methods should be overwritten.
|
|
1277
|
+
* @memberOf html5
|
|
1278
|
+
* @type Boolean
|
|
1279
|
+
*/
|
|
1280
|
+
'shivMethods': (options.shivMethods !== false),
|
|
1281
|
+
|
|
1282
|
+
/**
|
|
1283
|
+
* A string to describe the type of `html5` object ("default" or "default print").
|
|
1284
|
+
* @memberOf html5
|
|
1285
|
+
* @type String
|
|
1286
|
+
*/
|
|
1287
|
+
'type': 'default',
|
|
1288
|
+
|
|
1289
|
+
// shivs the document according to the specified `html5` object options
|
|
1290
|
+
'shivDocument': shivDocument,
|
|
1291
|
+
|
|
1292
|
+
//creates a shived element
|
|
1293
|
+
createElement: createElement,
|
|
1294
|
+
|
|
1295
|
+
//creates a shived documentFragment
|
|
1296
|
+
createDocumentFragment: createDocumentFragment
|
|
1297
|
+
};
|
|
1298
|
+
|
|
1299
|
+
/*--------------------------------------------------------------------------*/
|
|
1300
|
+
|
|
1301
|
+
// expose html5
|
|
1302
|
+
window.html5 = html5;
|
|
1303
|
+
|
|
1304
|
+
// shiv the document
|
|
1305
|
+
shivDocument(document);
|
|
1306
|
+
|
|
1307
|
+
}(this, document));
|
|
1308
|
+
/*>>shiv*/
|
|
1309
|
+
|
|
1310
|
+
// Assign private properties to the return object with prefix
|
|
1311
|
+
Modernizr._version = version;
|
|
1312
|
+
|
|
1313
|
+
// expose these for the plugin API. Look in the source for how to join() them against your input
|
|
1314
|
+
/*>>prefixes*/
|
|
1315
|
+
Modernizr._prefixes = prefixes;
|
|
1316
|
+
/*>>prefixes*/
|
|
1317
|
+
/*>>domprefixes*/
|
|
1318
|
+
Modernizr._domPrefixes = domPrefixes;
|
|
1319
|
+
Modernizr._cssomPrefixes = cssomPrefixes;
|
|
1320
|
+
/*>>domprefixes*/
|
|
1321
|
+
|
|
1322
|
+
/*>>mq*/
|
|
1323
|
+
// Modernizr.mq tests a given media query, live against the current state of the window
|
|
1324
|
+
// A few important notes:
|
|
1325
|
+
// * If a browser does not support media queries at all (eg. oldIE) the mq() will always return false
|
|
1326
|
+
// * A max-width or orientation query will be evaluated against the current state, which may change later.
|
|
1327
|
+
// * You must specify values. Eg. If you are testing support for the min-width media query use:
|
|
1328
|
+
// Modernizr.mq('(min-width:0)')
|
|
1329
|
+
// usage:
|
|
1330
|
+
// Modernizr.mq('only screen and (max-width:768)')
|
|
1331
|
+
Modernizr.mq = testMediaQuery;
|
|
1332
|
+
/*>>mq*/
|
|
1333
|
+
|
|
1334
|
+
/*>>hasevent*/
|
|
1335
|
+
// Modernizr.hasEvent() detects support for a given event, with an optional element to test on
|
|
1336
|
+
// Modernizr.hasEvent('gesturestart', elem)
|
|
1337
|
+
Modernizr.hasEvent = isEventSupported;
|
|
1338
|
+
/*>>hasevent*/
|
|
1339
|
+
|
|
1340
|
+
/*>>testprop*/
|
|
1341
|
+
// Modernizr.testProp() investigates whether a given style property is recognized
|
|
1342
|
+
// Note that the property names must be provided in the camelCase variant.
|
|
1343
|
+
// Modernizr.testProp('pointerEvents')
|
|
1344
|
+
Modernizr.testProp = function(prop){
|
|
1345
|
+
return testProps([prop]);
|
|
1346
|
+
};
|
|
1347
|
+
/*>>testprop*/
|
|
1348
|
+
|
|
1349
|
+
/*>>testallprops*/
|
|
1350
|
+
// Modernizr.testAllProps() investigates whether a given style property,
|
|
1351
|
+
// or any of its vendor-prefixed variants, is recognized
|
|
1352
|
+
// Note that the property names must be provided in the camelCase variant.
|
|
1353
|
+
// Modernizr.testAllProps('boxSizing')
|
|
1354
|
+
Modernizr.testAllProps = testPropsAll;
|
|
1355
|
+
/*>>testallprops*/
|
|
1356
|
+
|
|
1357
|
+
|
|
1358
|
+
/*>>teststyles*/
|
|
1359
|
+
// Modernizr.testStyles() allows you to add custom styles to the document and test an element afterwards
|
|
1360
|
+
// Modernizr.testStyles('#modernizr { position:absolute }', function(elem, rule){ ... })
|
|
1361
|
+
Modernizr.testStyles = injectElementWithStyles;
|
|
1362
|
+
/*>>teststyles*/
|
|
1363
|
+
|
|
1364
|
+
|
|
1365
|
+
/*>>prefixed*/
|
|
1366
|
+
// Modernizr.prefixed() returns the prefixed or nonprefixed property name variant of your input
|
|
1367
|
+
// Modernizr.prefixed('boxSizing') // 'MozBoxSizing'
|
|
1368
|
+
|
|
1369
|
+
// Properties must be passed as dom-style camelcase, rather than `box-sizing` hypentated style.
|
|
1370
|
+
// Return values will also be the camelCase variant, if you need to translate that to hypenated style use:
|
|
1371
|
+
//
|
|
1372
|
+
// str.replace(/([A-Z])/g, function(str,m1){ return '-' + m1.toLowerCase(); }).replace(/^ms-/,'-ms-');
|
|
1373
|
+
|
|
1374
|
+
// If you're trying to ascertain which transition end event to bind to, you might do something like...
|
|
1375
|
+
//
|
|
1376
|
+
// var transEndEventNames = {
|
|
1377
|
+
// 'WebkitTransition' : 'webkitTransitionEnd',
|
|
1378
|
+
// 'MozTransition' : 'transitionend',
|
|
1379
|
+
// 'OTransition' : 'oTransitionEnd',
|
|
1380
|
+
// 'msTransition' : 'MSTransitionEnd',
|
|
1381
|
+
// 'transition' : 'transitionend'
|
|
1382
|
+
// },
|
|
1383
|
+
// transEndEventName = transEndEventNames[ Modernizr.prefixed('transition') ];
|
|
1384
|
+
|
|
1385
|
+
Modernizr.prefixed = function(prop, obj, elem){
|
|
1386
|
+
if(!obj) {
|
|
1387
|
+
return testPropsAll(prop, 'pfx');
|
|
1388
|
+
} else {
|
|
1389
|
+
// Testing DOM property e.g. Modernizr.prefixed('requestAnimationFrame', window) // 'mozRequestAnimationFrame'
|
|
1390
|
+
return testPropsAll(prop, obj, elem);
|
|
1391
|
+
}
|
|
1392
|
+
};
|
|
1393
|
+
/*>>prefixed*/
|
|
1394
|
+
|
|
1395
|
+
|
|
1396
|
+
/*>>cssclasses*/
|
|
1397
|
+
// Remove "no-js" class from <html> element, if it exists:
|
|
1398
|
+
docElement.className = docElement.className.replace(/(^|\s)no-js(\s|$)/, '$1$2') +
|
|
1399
|
+
|
|
1400
|
+
// Add the new classes to the <html> element.
|
|
1401
|
+
(enableClasses ? ' js ' + classes.join(' ') : '');
|
|
1402
|
+
/*>>cssclasses*/
|
|
1403
|
+
|
|
1404
|
+
return Modernizr;
|
|
1405
|
+
|
|
1406
|
+
})(this, this.document);
|