PageSourceSearch

https://www.afaindia.com/js/google-places.js

js afaindia.com collected 2026-10-10 00:45:09 UTC 10,044 bytes, 284 lines download raw bytes

1/* https://github.com/peledies/google-places */
2(function($) {
3
4    var namespace = 'googlePlaces';
5
6    $.googlePlaces = function(element, options) {
7
8        var defaults = {
9              placeId: 'ChIJq6qqqs4DDTkRM_BBa03yyhQ' // placeId provided by google api documentation
10            , render: ['reviews','rating']
11            , min_rating: 0
12            , max_rows: 0
13			, map_plug_id: 'map-plug'
14            , rotateTime: false
15            , shorten_names: true
16            , schema:{
17                  displayElement: '#schema', 
18                 type: 'Store',
19                //beforeText: 'Google Users Have Rated', 
20                //middleText: 'based on', 
21                //afterText: 'ratings and reviews'
22            }
23          
24        };
25        var plugin = this;
26
27        plugin.settings = {}
28
29        var $element = $(element),
30             element = element;
31
32        plugin.init = function() {
33          plugin.settings = $.extend({}, defaults, options);
34          plugin.settings.schema = $.extend({}, defaults.schema, options.schema);
35          $element.html("<div id='" + plugin.settings.map_plug_id + "'></div>"); // create a plug for google to load data into
36          initialize_place(function(place){
37            plugin.place_data = place;
38
39            // Trigger event before render
40            $element.trigger('beforeRender.' + namespace);
41
42      //      if(plugin.settings.render.indexOf('rating') > -1){
43       //       renderRating(plugin.place_data.rating);
44			 // alert(plugin.place_data.rating)
45        //    }
46            // render specified sections
47            if(plugin.settings.render.indexOf('reviews') > -1){
48              renderReviews(plugin.place_data.reviews);
49              if(!!plugin.settings.rotateTime) {
50                  initRotation();
51              }
52            }
53            // render schema markup
54            addSchemaMarkup(
55                capture_element(plugin.settings.schema.displayElement)
56              , plugin.place_data
57            );
58
59            // Trigger event after render
60            $element.trigger('afterRender.' + namespace);
61
62          });
63        }
64
65        var capture_element = function(element){
66          if(element instanceof jQuery){
67            return element;
68          }else if(typeof element == 'string'){
69            try{
70              var ele = $(element);
71              if( ele.length ){
72                return ele;
73              }else{
74                throw 'Element [' + element + '] couldnt be found in the DOM. Skipping '+element+' markup generation.';
75              }
76            }catch(e){
77              console.warn(e);
78            }
79          }
80        }
81
82        var initialize_place = function(c){
83          var map = new google.maps.Map(document.getElementById(plugin.settings.map_plug_id));
84
85          var request = {
86            placeId: plugin.settings.placeId
87          };
88
89          var service = new google.maps.places.PlacesService(map);
90
91          service.getDetails(request, function(place, status) {
92            if (status == google.maps.places.PlacesServiceStatus.OK) {
93              c(place);
94            }
95          });
96        }
97
98        var sort_by_date = function(ray) {
99          ray.sort(function(a, b){
100            var keyA = new Date(a.time),
101            keyB = new Date(b.time);
102            // Compare the 2 dates
103            if(keyA < keyB) return -1;
104            if(keyA > keyB) return 1;
105            return 0;
106          });
107          return ray;
108        }
109
110        var filter_minimum_rating = function(reviews){
111          for (var i = reviews.length -1; i >= 0; i--) {
112            if(reviews[i].rating < plugin.settings.min_rating){
113              reviews.splice(i,1);
114            }
115          }
116          return reviews;
117        }
118
119       
120		
121
122        var shorten_name = function(name) {
123          if (name.split(" ").length > 1) {
124            var xname = "";
125            xname = name.split(" ");
126            return xname[0] + " " + xname[1][0] + ".";
127          }
128        }
129
130        var renderReviews = function(reviews){
131		
132          reviews = sort_by_date(reviews);
133          reviews = filter_minimum_rating(reviews);
134          var html = "";
135          var row_count = (plugin.settings.max_rows > 0)? plugin.settings.max_rows - 1 : reviews.length - 1;
136          // make sure the row_count is not greater than available records
137          row_count = (row_count > reviews.length-1)? reviews.length -1 : row_count;
138          for (var i = row_count; i >= 0; i--) {
139            var stars = renderStars(reviews[i].rating);
140			var starsvelue = reviews[i].rating;
141            var date = convertTime(reviews[i].time);
142			var photo = reviews[i].profile_photo_url;
143            if(plugin.settings.shorten_names == true) {
144              var name = shorten_name(reviews[i].author_name);
145            } else {
146              var name = reviews[i].author_name + "</span><span class='review-sep'><small>"+date+"</small></span>";
147            };
148            html = html+"<div class='review-item item col-md-12'><blockquote class='testimonial'><p>"+reviews[i].text+"</p></blockquote><div class='testimonial-arrow-down'></div><div class='testimonial-author'><div class='img-thumbnail img-thumbnail-small'><img src="+photo+" class='review-img'></div><p><strong>"+name+" </strong> "+stars+"</p></div></div>"
149												
150												
151												
152												
153          };
154          $element.append(html);
155        }
156
157
158		
159        var initRotation = function() {
160            var $reviewEls = $element.children('.review-item');
161            var currentIdx = $reviewEls.length > 0 ? 0 : false;
162            $reviewEls.hide();
163            if(currentIdx !== false) {
164                $($reviewEls[currentIdx]).show();
165                setInterval(function(){
166                    if(++currentIdx >= $reviewEls.length) {
167                        currentIdx = 0;
168                    }
169                    $reviewEls.hide();
170                    $($reviewEls[currentIdx]).fadeIn('slow');
171                }, plugin.settings.rotateTime);
172            }
173        }
174
175        var renderStars = function(rating){
176          var stars = "<div class='review-stars'><ul>";
177
178          // fill in gold stars
179          for (var i = 0; i < rating; i++) {
180            stars = stars+"<li><i class='star'></i></li>";
181          };
182
183          // fill in empty stars
184          if(rating < 5){
185            for (var i = 0; i < (5 - rating); i++) {
186              stars = stars+"<li><i class='star inactive'></i></li>";
187            };
188          }
189          stars = stars+"</ul></div>";
190          return stars;
191        }
192
193        var renderAverageStars = function(rating){
194            var stars = "<div class='review-stars'><ul><li><i>"+rating+"&nbsp;</i></li>";
195            var activeStars = parseInt(rating);
196            var inactiveStars = 5 - activeStars;
197            var width = (rating - activeStars) * 100 + '%';
198
199            // fill in gold stars
200            for (var i = 0; i < activeStars; i++) {
201              stars += "<li><i class='star'></i></li>";
202            };
203
204            // fill in empty stars
205            if(inactiveStars > 0){
206              for (var i = 0; i < inactiveStars; i++) {
207                  if (i === 0) {
208                      stars += "<li style='position: relative;'><i class='star inactive'></i><i class='star' style='position: absolute;top: 0;left: 0;overflow: hidden;width: "+width+"'></i></li>";
209                  } else {
210                      stars += "<li><i class='star inactive'></i></li>";
211                  }
212              };
213            }
214            stars += "</ul></div>";
215            return stars;
216        }
217
218        var convertTime = function(UNIX_timestamp){
219          var a = new Date(UNIX_timestamp * 1000);
220          var months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
221          var time = months[a.getMonth()] + ' ' + a.getDate() + ', ' + a.getFullYear();
222          return time;
223        }
224		
225		
226 //var renderRating = function(rating){
227    //        var html = "";
228			
229        //    var star = renderAverageStars(rating);
230	 
231       //     html = rating ;
232        //    $element.append(html);
233      //  }
234 
235        var addSchemaMarkup = function(element, placeData) {
236			
237          var reviews = placeData.reviews;
238		  var avgrate = placeData.rating;
239          var lastIndex = reviews.length - 1;
240          var reviewPointTotal = 0;
241          var schema = plugin.settings.schema;
242          for (var i = lastIndex; i >= 0; i--) {
243            reviewPointTotal += reviews[i].rating;
244          };
245          // Set totals and averages - may be used later.
246          var averageReview = reviewPointTotal / ( reviews.length );
247          if(element instanceof jQuery){
248            element.append( '<span itemscope="" itemtype="http://schema.org/' + schema.type + '">'
249            +  '<meta itemprop="url" content="' + location.origin + '">'
250         //   +  schema.beforeText + ' <span itemprop="name">' + placeData.name + '</span> '
251            +  '<span itemprop="aggregateRating" itemscope="" itemtype="http://schema.org/AggregateRating">'
252            +    '<span itemprop="ratingValue">' + avgrate + '</span><div class="top-rating" data-rate-value="'+ avgrate +'" ></div> '
253          //  +  schema.middleText + ' <span itemprop="ratingCount">' + reviews.length + '</span> '
254           // +  schema.afterText
255            +  '</span>'
256            +'</span>');
257          }
258		  $('#schema').attr("data-rate-value", avgrate );
259			$("#schema").rateYo({
260				readOnly: true, 
261				 rating    : avgrate,
262				  starWidth: "25px"
263            });
264        }
265
266        plugin.init();
267		
268		$("#map-plug").remove();	
269		//$(".review-list").owlCarousel({ "items":1, nestedItemSelector: 'review-item' })
270
271    }
272
273    $.fn.googlePlaces = function(options) {
274
275        return this.each(function() {
276            if (undefined == $(this).data(namespace)) {
277                var plugin = new $.googlePlaces(this, options);
278                $(this).data(namespace, plugin);
279            }
280        });
281
282    }
283
284})(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.