PageSourceSearch

https://www.mysubaru.com/js/subaru/jquery.fill.js

js mysubaru.com collected 2026-10-02 15:10:14 UTC 4,669 bytes, 163 lines download raw bytes

1// Handle array passed in [ partially coded, might need to double check possibilities
2//   First if check in resolve is probably key
3//   http://stackoverflow.com/questions/7545641/javascript-multidimensional-array
4//   
5//   waypoints[3][4][2].test[1].prop
6//   
7//   <span class=whatever data-fill="${testing}"></span> -- Fills innerHtml
8//   <img class=whatever data-fill="${testing}" />       -- Fills src
9//   <span class=whatever data-fill-class="${testing}" />       -- Fills src
10//   
11// Handle data that are objects
12// Handle elements that are arrays
13// // 
14// Future : Look at using eval
15// Future : return promise? What is an error? // Future return a list of errors or issues. 
16// -- Use extend if need to pass multiple data
17// -- Use empty to clear out data first
18//
19// ${[formatters]:fieldName}
20// ${trim;lower;round,2:obj.array[1].field}
21// Option to add new html right below existing html? We'll see
22//
23// options:
24//   onResolveItem : return true or false based on if data elements should be resolved
25//   onCustomData( obj, index ) : return object that will be merged with current data options for fill
26//   onCompleteItem( $elem, data ) ; return completed built element from template with data used to build element
27//   
28//   [lookForClasses]
29//   [lookForText]
30//   [lookForForm]
31//   [classToRemove]
32
33
34(function ($) {
35  
36  var defaultOptions = { emptyOnNotFound : true, dataAttribute : "fill" };
37
38  $.fn.fillElem = function ( data, _options) {
39
40    var options = $.extend({}, defaultOptions, _options);    
41
42    this.each(function () {
43      var _fill = $(this).data( options.dataAttribute );
44      if (_fill) {
45        $(this).html(subValues(_fill, data, options));
46      }
47    });
48
49  };
50
51  $.fn.fillElem.format = [];
52  
53  $.fn.fillElem.format[ 'trim' ] = function (val) {
54    return val.toString().trim();
55  };
56  $.fn.fillElem.format[ 'lower' ] = function (val) {
57    return val.toString().toLowerCase();
58  };
59  
60  $.fn.fillHtml = function ($temp, dataOrArray, _options) {
61
62    var options = $.extend({}, defaultOptions, _options);
63
64    var outerHtml = $temp.prop('outerHTML');
65
66    if ($.isArray(dataOrArray))
67      for (var i in dataOrArray) {
68        var html = subValues(outerHtml, dataOrArray[ i ], options, i);
69        var $elem = $($.parseHTML(html));
70
71        if (options.onCompleteItem)
72          options.onCompleteItem($elem, dataOrArray[ i ]);
73
74        this.append($elem);
75      }
76    else {
77
78      var html = subValues(outerHtml, dataOrArray, options, i);
79      var $elem = $($.parseHTML(html));
80
81      if (options.onCompleteItem)
82        options.onCompleteItem($elem, dataOrArray);
83
84      this.append($elem);
85    }
86
87  };
88
89  // Different object formats:
90  // data.parts[ 4 ].obj[ 5 ]
91
92  // Might need to resolve the object if it is the last value, otherwise recursively call function
93
94  function resolveObject(sel, $obj) {
95
96    // Handle if object selector
97    if (sel == "")
98      return $obj;
99    else if (sel.indexOf(".") >= 0) {
100      var first = sel.substring(0, sel.indexOf("."));
101      var rest = sel.substring(sel.indexOf(".") + 1);
102      return resolveObject(rest, $obj[ first ]);
103
104      // Handle named array, points[ 5 ]
105    } else if (sel.indexOf("[") >= 0) {
106      var parts = sel.split(/[/[/]/);
107
108      var elem = $obj[ parts[ 1 ].trim() ];
109      var rest = sel.substring(sel.indexOf("]") + 1);
110      return resolveObject(rest, elem);
111
112    } else {
113      return $obj[ sel ];
114    }
115
116  }
117
118  function subValues(templateString, _data, options, index) {
119
120    var data = _data;
121    if ( options.onCustomData)
122      data = $.extend({}, _data, options.onCustomData(_data, index));
123
124    if ( options.onResolveData)
125      if (!options.onResolveData(data))
126        return "";
127
128    var regex = new RegExp( "\\$_\\{[\\w:_\\-\\[\\]\\.]*\\}", "g" );
129    var result = templateString.replace( regex, function (pattern) {
130      
131      var expr = pattern.substring( "$_{".length, pattern.length - 1);
132      var parts = expr.split(":");
133
134      var sel = parts[ parts.length - 1 ];
135      var fmt = parts.length > 1 ? parts[ 0 ] : null;
136
137      var raw = resolveObject(sel, data);
138      
139      var _result;
140      
141      if( raw ) {
142        if (fmt && $.fn.fillElem.format[ fmt ])
143          _result = $.fn.fillElem.format[ fmt ](raw);
144        else
145          _result = raw;
146      } else {
147        if( options.emptyOnNotFound )
148          _result = "";
149        else
150          _result = pattern;
151      }
152
153      return _result;
154
155    });
156    
157    
158    return result;
159
160
161  }
162
163}(jQuery));

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.