mh-two-thousand-and-two
2024-04-12 7fc6dbf547b8899d949b67cdec36b96a7d1701c7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
'use strict';
 
var UrlHelper = require( './url' );
var regexp    = require( './regexp' );
 
/**
 * UrlsHelper constructor
 * @constructor
 * @param {String} rule CSS rule with many url() blocks.
 */
var UrlsHelper = function( rule ) {
    var exports = {};
 
    if ( !rule.match( regexp.URLS ) ) {
        return false;
    }
 
    if ( ! ( this instanceof UrlsHelper ) ) {
        return new UrlsHelper( rule );
    }
 
    this._originalRule = rule;
    this._helpers = [];
    this.URIS = [];
 
    rule.match( regexp.URLS ).forEach( function( url ) {
        var urlHelper = new UrlHelper( url );
 
        this._helpers.push( urlHelper );
        this.URIS.push( urlHelper.URI );
    }, this );
 
    exports.URIS            = this.URIS;
    exports.getOriginalURIS = this.getOriginalURIS.bind( this );
    exports.getModifiedRule = this.getModifiedRule.bind( this );
    exports.getOriginalRule = this.getOriginalRule.bind( this );
 
    return exports;
};
 
/**
 * Returns modified rule.
 * @returns {String} Modified rule.
 */
UrlsHelper.prototype.getModifiedRule = function() {
    var rule = this._originalRule;
 
    this._helpers.forEach( function ( uri ) {
        rule = rule.replace( uri.getOriginalRule(), uri.getModifiedRule() );
    } );
 
    return rule;
};
 
/**
 * Returns original rule.
 * @returns {String} Original rule.
 */
UrlsHelper.prototype.getOriginalRule = function() {
    return this._originalRule;
};
 
/**
 * Returns array of original URIs.
 * @returns {String} Original URIs array.
 */
UrlsHelper.prototype.getOriginalURIS = function () {
    return this._helpers.map( function( helper ) {
        return helper.getOriginalURI();
    } );
};
 
module.exports = UrlsHelper;