init
This commit is contained in:
92
node_modules/postcss-helpers/lib/url.js
generated
vendored
Normal file
92
node_modules/postcss-helpers/lib/url.js
generated
vendored
Normal file
@@ -0,0 +1,92 @@
|
||||
'use strict';
|
||||
|
||||
// using URLjs because I don't want to think about all this:
|
||||
// http://blog.lunatech.com/2009/02/03/what-every-web-developer-must-know-about-url-encoding
|
||||
var URI = require( 'urijs' );
|
||||
var regexp = require( './regexp' );
|
||||
|
||||
/**
|
||||
* UrlHelper constructor
|
||||
* @constructor
|
||||
* @param {String} rule CSS rule with url().
|
||||
*/
|
||||
var UrlHelper = function ( rule ) {
|
||||
var exports = {};
|
||||
|
||||
if ( ! ( this instanceof UrlHelper ) ) {
|
||||
return new UrlHelper( rule );
|
||||
}
|
||||
|
||||
this._originalURI = this._extractURI( rule );
|
||||
|
||||
if ( !this._originalURI && this._originalURI !== '') { return false; }
|
||||
|
||||
this._originalRule = rule;
|
||||
|
||||
this.URI = URI( this._originalURI );
|
||||
|
||||
exports.URI = this.URI;
|
||||
exports.getOriginalURI = this.getOriginalURI.bind( this );
|
||||
exports.getModifiedRule = this.getModifiedRule.bind( this );
|
||||
exports.getOriginalRule = this.getOriginalRule.bind( this );
|
||||
|
||||
return exports;
|
||||
};
|
||||
|
||||
/**
|
||||
* Extracts URI from rule.
|
||||
* @private
|
||||
* @param {String} rule String to test.
|
||||
* @returns {String|undefined} Returns URI value or undefined.
|
||||
*/
|
||||
UrlHelper.prototype._extractURI = function( rule ) {
|
||||
if ( rule.match( regexp.URLS ) ) {
|
||||
return rule.match( regexp.URLS )[ 0 ]
|
||||
.replace( /^url\s?\(/, '' )
|
||||
.replace( /\)$/, '' )
|
||||
.trim()
|
||||
.replace( /^("|\')/, '' )
|
||||
.replace( /("|\')$/, '' );
|
||||
}
|
||||
|
||||
return '';
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns original URI.
|
||||
* @returns {String} Original URI.
|
||||
*/
|
||||
UrlHelper.prototype.getOriginalURI = function () {
|
||||
return this._originalURI;
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns modified rule.
|
||||
* @returns {String} Modified rule.
|
||||
*/
|
||||
UrlHelper.prototype.getModifiedRule = function () {
|
||||
var modifiedURI = this.URI.toString();
|
||||
var originalHasIEFix = this._originalURI.match( /\?#iefix/ );
|
||||
var modifiedShouldHaveIEFix = modifiedURI.match( /[^?]#iefix/ );
|
||||
|
||||
// TODO Remove VERY ugly ?#iefix exeption handling, urijs normalizing it and removing "?"
|
||||
if ( originalHasIEFix && modifiedShouldHaveIEFix ) {
|
||||
modifiedURI = modifiedURI.replace( '#iefix', '?#iefix' );
|
||||
}
|
||||
|
||||
if (this._originalRule.match(/url\(\s*\)/) && modifiedURI) {
|
||||
return "url('" + modifiedURI + "')";
|
||||
}
|
||||
|
||||
return this._originalRule.replace( this._originalURI, modifiedURI );
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns original rule.
|
||||
* @returns {String} Original rule.
|
||||
*/
|
||||
UrlHelper.prototype.getOriginalRule = function () {
|
||||
return this._originalRule;
|
||||
};
|
||||
|
||||
module.exports = UrlHelper;
|
||||
Reference in New Issue
Block a user