Skip to content

Commit 319aa89

Browse files
ngokevindmarcos
authored andcommitted
add general 'asset' property type to later replace 'src' (fixes #1843) (#2003)
1 parent f567b28 commit 319aa89

File tree

2 files changed

+45
-18
lines changed

2 files changed

+45
-18
lines changed

‎src/core/propertyTypes.js‎

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ var propertyTypes = module.exports.propertyTypes = {};
88

99
// Built-in property types.
1010
registerPropertyType('array', [], arrayParse, arrayStringify);
11+
registerPropertyType('asset', '', assetParse);
1112
registerPropertyType('boolean', false, boolParse);
1213
registerPropertyType('color', '#FFF', defaultParse, defaultStringify);
1314
registerPropertyType('int', 0, intParse);
@@ -56,6 +57,27 @@ function arrayStringify (value) {
5657
return value.join(', ');
5758
}
5859

60+
/**
61+
* `src` parser for assets.
62+
*
63+
* @param {string} value - Can either be `url(<value>)` or a selector to an asset.
64+
* @returns {string} Parsed value from `url(<value>)` or src from `<someasset src>`.
65+
*/
66+
function assetParse (value) {
67+
var parsedUrl = value.match(/\url\((.+)\)/);
68+
if (parsedUrl) { return parsedUrl[1]; }
69+
70+
var el = selectorParse(value);
71+
if (el) { return el.getAttribute('src'); }
72+
73+
if (value.charAt(0) !== '#') {
74+
warn('"' + value + '" is not a valid `src` attribute. ' +
75+
'Value must be an ID selector (i.e. "#someElement") or wrapped in `url()`.');
76+
}
77+
78+
return '';
79+
}
80+
5981
function defaultParse (value) {
6082
return value;
6183
}
@@ -105,25 +127,9 @@ function selectorAllStringify (value) {
105127
return defaultStringify(value);
106128
}
107129

108-
/**
109-
* `src` parser for assets.
110-
*
111-
* @param {string} value - Can either be `url(<value>)` or a selector to an asset.
112-
* @returns {string} Parsed value from `url(<value>)` or src from `<someasset src>`.
113-
*/
114130
function srcParse (value) {
115-
var parsedUrl = value.match(/\url\((.+)\)/);
116-
if (parsedUrl) { return parsedUrl[1]; }
117-
118-
var el = selectorParse(value);
119-
if (el) { return el.getAttribute('src'); }
120-
121-
if (value.charAt(0) !== '#') {
122-
warn('"' + value + '" is not a valid `src` attribute. ' +
123-
'Value must be an ID selector (i.e. "#someElement") or wrapped in `url()`.');
124-
}
125-
126-
return '';
131+
warn('`src` property type is deprecated. Use `asset` instead.');
132+
return assetParse(value);
127133
}
128134

129135
function vecParse (value) {

‎tests/core/propertyTypes.test.js‎

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,27 @@ var propertyTypes = PropertyTypes.propertyTypes;
55
var register = PropertyTypes.registerPropertyType;
66

77
suite('propertyTypes', function () {
8+
suite('assetParse', function () {
9+
var parse = propertyTypes.asset.parse;
10+
11+
setup(function () {
12+
var el = this.el = document.createElement('div');
13+
el.setAttribute('id', 'hello');
14+
el.setAttribute('src', 'file2.jpg');
15+
document.body.appendChild(el);
16+
});
17+
18+
teardown(function () {
19+
this.el.parentNode.removeChild(this.el);
20+
});
21+
22+
test('parses src', function () {
23+
assert.equal(parse('url(file.jpg)'), 'file.jpg');
24+
assert.equal(parse('file.jpg'), '');
25+
assert.equal(parse('#hello'), 'file2.jpg');
26+
});
27+
});
28+
829
suite('boolean', function () {
930
var parse = propertyTypes.boolean.parse;
1031
var stringify = propertyTypes.boolean.stringify;

0 commit comments

Comments
 (0)