attr-accept
Advanced tools
Comparing version 1.0.1 to 1.0.2
@@ -1,42 +0,1 @@ | ||
/** | ||
* Check if the provided file type should be accepted by the input with accept attribute. | ||
* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input#attr-accept | ||
* | ||
* Borrowed from https://github.com/enyo/dropzone | ||
* | ||
* @param file {File} https://developer.mozilla.org/en-US/docs/Web/API/File | ||
* @param acceptedFiles {string} | ||
* @returns {boolean} | ||
*/ | ||
'use strict'; | ||
exports.__esModule = true; | ||
exports['default'] = function (file, acceptedFiles) { | ||
if (acceptedFiles) { | ||
var _ret = (function () { | ||
var acceptedFilesArray = acceptedFiles.split(','); | ||
var mimeType = file.type; | ||
var baseMimeType = mimeType.replace(/\/.*$/, ''); | ||
return { | ||
v: acceptedFilesArray.some(function (type) { | ||
var validType = type.trim(); | ||
if (validType.charAt(0) === '.') { | ||
return file.name.toLowerCase().indexOf(validType.toLowerCase(), file.name.length - validType.length) !== -1; | ||
} else if (/\/\*$/.test(validType)) { | ||
// This is something like a image/* mime type | ||
return baseMimeType === validType.replace(/\/.*$/, ''); | ||
} | ||
return mimeType === validType; | ||
}) | ||
}; | ||
})(); | ||
if (typeof _ret === 'object') return _ret.v; | ||
} | ||
return true; | ||
}; | ||
module.exports = exports['default']; | ||
exports["react-attr"]=function(t){function n(e){if(r[e])return r[e].exports;var o=r[e]={exports:{},id:e,loaded:!1};return t[e].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=t,n.c=r,n.p="",n(0)}([function(t,n,r){"use strict";n.__esModule=!0,r(8),r(9),n["default"]=function(t,n){if(t&&n){var r=function(){var r=n.split(","),e=t.name||"",o=t.type||"",i=o.replace(/\/.*$/,"");return{v:r.some(function(t){var n=t.trim();return"."===n.charAt(0)?e.toLowerCase().endsWith(n.toLowerCase()):/\/\*$/.test(n)?i===n.replace(/\/.*$/,""):o===n})}}();if("object"==typeof r)return r.v}return!0},t.exports=n["default"]},function(t,n){var r=t.exports={version:"1.2.2"};"number"==typeof __e&&(__e=r)},function(t,n){var r=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=r)},function(t,n,r){var e=r(2),o=r(1),i=r(4),c=r(19),u="prototype",f=function(t,n){return function(){return t.apply(n,arguments)}},s=function(t,n,r){var a,p,l,y,d=t&s.G,h=t&s.P,v=d?e:t&s.S?e[n]||(e[n]={}):(e[n]||{})[u],x=d?o:o[n]||(o[n]={});d&&(r=n);for(a in r)p=!(t&s.F)&&v&&a in v,l=(p?v:r)[a],y=t&s.B&&p?f(l,e):h&&"function"==typeof l?f(Function.call,l):l,v&&!p&&c(v,a,l),x[a]!=l&&i(x,a,y),h&&((x[u]||(x[u]={}))[a]=l)};e.core=o,s.F=1,s.G=2,s.S=4,s.P=8,s.B=16,s.W=32,t.exports=s},function(t,n,r){var e=r(5),o=r(18);t.exports=r(22)?function(t,n,r){return e.setDesc(t,n,o(1,r))}:function(t,n,r){return t[n]=r,t}},function(t,n){var r=Object;t.exports={create:r.create,getProto:r.getPrototypeOf,isEnum:{}.propertyIsEnumerable,getDesc:r.getOwnPropertyDescriptor,setDesc:r.defineProperty,setDescs:r.defineProperties,getKeys:r.keys,getNames:r.getOwnPropertyNames,getSymbols:r.getOwnPropertySymbols,each:[].forEach}},function(t,n){var r=0,e=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++r+e).toString(36))}},function(t,n,r){var e=r(20)("wks"),o=r(2).Symbol;t.exports=function(t){return e[t]||(e[t]=o&&o[t]||(o||r(6))("Symbol."+t))}},function(t,n,r){r(26),t.exports=r(1).Array.some},function(t,n,r){r(25),t.exports=r(1).String.endsWith},function(t,n){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,n){var r={}.toString;t.exports=function(t){return r.call(t).slice(8,-1)}},function(t,n,r){var e=r(10);t.exports=function(t,n,r){if(e(t),void 0===n)return t;switch(r){case 1:return function(r){return t.call(n,r)};case 2:return function(r,e){return t.call(n,r,e)};case 3:return function(r,e,o){return t.call(n,r,e,o)}}return function(){return t.apply(n,arguments)}}},function(t,n){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},function(t,n,r){t.exports=function(t){var n=/./;try{"/./"[t](n)}catch(e){try{return n[r(7)("match")]=!1,!"/./"[t](n)}catch(o){}}return!0}},function(t,n){t.exports=function(t){try{return!!t()}catch(n){return!0}}},function(t,n){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,n,r){var e=r(16),o=r(11),i=r(7)("match");t.exports=function(t){var n;return e(t)&&(void 0!==(n=t[i])?!!n:"RegExp"==o(t))}},function(t,n){t.exports=function(t,n){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:n}}},function(t,n,r){var e=r(2),o=r(4),i=r(6)("src"),c="toString",u=Function[c],f=(""+u).split(c);r(1).inspectSource=function(t){return u.call(t)},(t.exports=function(t,n,r,c){"function"==typeof r&&(o(r,i,t[n]?""+t[n]:f.join(String(n))),"name"in r||(r.name=n)),t===e?t[n]=r:(c||delete t[n],o(t,n,r))})(Function.prototype,c,function(){return"function"==typeof this&&this[i]||u.call(this)})},function(t,n,r){var e=r(2),o="__core-js_shared__",i=e[o]||(e[o]={});t.exports=function(t){return i[t]||(i[t]={})}},function(t,n,r){var e=r(17),o=r(13);t.exports=function(t,n,r){if(e(n))throw TypeError("String#"+r+" doesn't accept regex!");return String(o(t))}},function(t,n,r){t.exports=!r(15)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,n){var r=Math.ceil,e=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?e:r)(t)}},function(t,n,r){var e=r(23),o=Math.min;t.exports=function(t){return t>0?o(e(t),9007199254740991):0}},function(t,n,r){"use strict";var e=r(3),o=r(24),i=r(21),c="endsWith",u=""[c];e(e.P+e.F*r(14)(c),"String",{endsWith:function(t){var n=i(this,t,c),r=arguments,e=r.length>1?r[1]:void 0,f=o(n.length),s=void 0===e?f:Math.min(o(e),f),a=String(t);return u?u.call(n,a,s):n.slice(s-a.length,s)===a}})},function(t,n,r){var e=r(5),o=r(3),i=r(1).Array||Array,c={},u=function(t,n){e.each.call(t.split(","),function(t){void 0==n&&t in i?c[t]=i[t]:t in[]&&(c[t]=r(12)(Function.call,[][t],n))})};u("pop,reverse,shift,keys,values,entries",1),u("indexOf,every,some,forEach,map,filter,find,findIndex,includes",3),u("join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill"),o(o.S,"Array",c)}]); |
{ | ||
"name": "attr-accept", | ||
"version": "1.0.1", | ||
"version": "1.0.2", | ||
"description": "JavaScript implementation of the \"accept\" attribute for HTML5 <input type=\"file\">", | ||
"main": "dist/index.js", | ||
"scripts": { | ||
"build": "babel src --out-dir dist", | ||
"build": "webpack -p", | ||
"prepublish": "npm run check && npm run build", | ||
@@ -35,3 +35,6 @@ "test": "mocha --compilers js:babel/register --recursive", | ||
"babel": "^5.8.23", | ||
"babel-core": "5.8.25", | ||
"babel-eslint": "^4.1.1", | ||
"babel-loader": "5.3.2", | ||
"core-js": "1.2.2", | ||
"eslint": "^1.3.1", | ||
@@ -41,4 +44,8 @@ "eslint-config-airbnb": "0.0.8", | ||
"expect": "^1.9.0", | ||
"mocha": "^2.3.2" | ||
"mocha": "^2.3.2", | ||
"webpack": "1.12.2" | ||
}, | ||
"engines": { | ||
"node": ">=0.10" | ||
} | ||
} |
# attr-accept | ||
JavaScript implementation of the "accept" attribute for HTML5 <input type="file"> | ||
JavaScript implementation of the "accept" attribute for HTML5 `<input type="file">` | ||
[![Build Status](https://travis-ci.org/okonet/attr-accept.svg?branch=master)](https://travis-ci.org/okonet/attr-accept) | ||
See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input#Attributes for more information. | ||
Installation | ||
===== | ||
Install it from npm and include it in your build process (using [Webpack](http://webpack.github.io/), [Browserify](http://browserify.org/), etc). | ||
```sh | ||
npm install --save attr-accept | ||
``` | ||
Usage | ||
===== | ||
```javascript | ||
var accept = require('attr-accept'); | ||
accept({ | ||
name: 'my file.png', | ||
type: 'image/png' | ||
}, 'image/*') // => true | ||
accept({ | ||
name: 'my file.json', | ||
type: 'application/json' | ||
}, 'image/*') // => false | ||
``` |
@@ -5,3 +5,3 @@ /** | ||
* | ||
* Borrowed from https://github.com/enyo/dropzone | ||
* Inspired by https://github.com/enyo/dropzone | ||
* | ||
@@ -13,6 +13,10 @@ * @param file {File} https://developer.mozilla.org/en-US/docs/Web/API/File | ||
import 'core-js/fn/array/some'; | ||
import 'core-js/fn/string/ends-with'; | ||
export default function(file, acceptedFiles) { | ||
if (acceptedFiles) { | ||
if (file && acceptedFiles) { | ||
const acceptedFilesArray = acceptedFiles.split(','); | ||
const mimeType = file.type; | ||
const fileName = file.name || ''; | ||
const mimeType = file.type || ''; | ||
const baseMimeType = mimeType.replace(/\/.*$/, ''); | ||
@@ -23,3 +27,3 @@ | ||
if (validType.charAt(0) === '.') { | ||
return (file.name.toLowerCase().indexOf(validType.toLowerCase(), file.name.length - validType.length) !== -1); | ||
return fileName.toLowerCase().endsWith(validType.toLowerCase()); | ||
} else if (/\/\*$/.test(validType)) { | ||
@@ -26,0 +30,0 @@ // This is something like a image/* mime type |
@@ -9,2 +9,3 @@ /* eslint no-unused-expressions: 0 */ | ||
expect(accept({ | ||
name: 'testfile.png', | ||
type: 'some/type' | ||
@@ -14,16 +15,37 @@ }, undefined)).toBe(true); | ||
it('should not throw and return true if file is empty or null', () => { | ||
expect(() => { | ||
accept({}); | ||
accept({}, 'text/html'); | ||
accept({}, '*.png'); | ||
accept({}, 'image/*'); | ||
accept(null); | ||
accept(null, 'text/html'); | ||
accept(null, '*.png'); | ||
accept(null, 'image/*'); | ||
}).toNotThrow(); | ||
}); | ||
it('should properly validate if called with concrete mime types', () => { | ||
const acceptedMimeTypes = 'text/html,image/jpeg,application/json'; | ||
expect(accept({ | ||
name: 'testfile.png', | ||
type: 'text/html' | ||
}, acceptedMimeTypes)).toBe(true); | ||
expect(accept({ | ||
name: 'testfile.png', | ||
type: 'image/jpeg' | ||
}, acceptedMimeTypes)).toBe(true); | ||
expect(accept({ | ||
name: 'testfile.png', | ||
type: 'application/json' | ||
}, acceptedMimeTypes)).toBe(true); | ||
expect(accept({ | ||
name: 'testfile.png', | ||
type: 'image/bmp' | ||
}, acceptedMimeTypes)).toBe(false); | ||
expect(accept({ | ||
type: 'image/bmp' | ||
}, acceptedMimeTypes)).toBe(false); | ||
}); | ||
@@ -34,14 +56,19 @@ | ||
expect(accept({ | ||
name: 'testfile.png', | ||
type: 'text/html' | ||
}, acceptedMimeTypes)).toBe(true); | ||
expect(accept({ | ||
name: 'testfile.png', | ||
type: 'image/jpeg' | ||
}, acceptedMimeTypes)).toBe(true); | ||
expect(accept({ | ||
name: 'testfile.png', | ||
type: 'application/json' | ||
}, acceptedMimeTypes)).toBe(true); | ||
expect(accept({ | ||
name: 'testfile.png', | ||
type: 'image/bmp' | ||
}, acceptedMimeTypes)).toBe(true); | ||
expect(accept({ | ||
name: 'testfile.png', | ||
type: 'some/type' | ||
@@ -54,14 +81,19 @@ }, acceptedMimeTypes)).toBe(false); | ||
expect(accept({ | ||
name: 'testfile.png', | ||
type: 'text/html' | ||
}, acceptedMimeTypes)).toBe(true); | ||
expect(accept({ | ||
name: 'testfile.png', | ||
type: 'image/jpeg' | ||
}, acceptedMimeTypes)).toBe(true); | ||
expect(accept({ | ||
name: 'testfile.png', | ||
type: 'image/bmp' | ||
}, acceptedMimeTypes)).toBe(false); | ||
expect(accept({ | ||
name: 'testfile.png', | ||
type: 'application/json' | ||
}, acceptedMimeTypes)).toBe(true); | ||
expect(accept({ | ||
name: 'testfile.png', | ||
type: 'some/type' | ||
@@ -74,5 +106,7 @@ }, acceptedMimeTypes)).toBe(false); | ||
expect(accept({ | ||
name: 'testfile.png', | ||
type: 'text/html' | ||
}, acceptedMimeTypes)).toBe(true); | ||
expect(accept({ | ||
name: 'testfile.png', | ||
type: 'image/jpeg' | ||
@@ -105,3 +139,3 @@ }, acceptedMimeTypes)).toBe(true); | ||
expect(accept({ | ||
name: 'some-file file.png', | ||
name: 'some-FILEi File.PNG', | ||
type: 'random/type' | ||
@@ -108,0 +142,0 @@ }, acceptedMimeTypes)).toBe(true); |
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
16108
12
180
28
11