1/** 2 * Created by Sara on 16-Nov-18. 3 */ 4VNP.Areas.Newsstand.module.EditorialCategories = new function () { 5 6 var self = this; 7 var editorialCategories; 8 var $selectEditorialCategories = $(".vc_select_editorial_categories"); 9 var $slider = $(".vc_slider"); 10 var sliderEditorial; 11 var sliderIssues; 12 var titles; 13 self.singleCategory = false; 14 15 var editorialCategoriesService = function(params) { 16 17 if( params === null || typeof params === "undefined" ) params = ""; 18 19 var xhrObj = { 20 url: VNP.baseUrl + "/webservice/getLatestEditorial.jsp", 21 data: $.param(params), 22 dataType: "json" 23 24 }; 25 26 return $.ajax(xhrObj); 27 }; 28 29 /* load categories and render slider and select */ 30 var loadCategories = function() { 31 32 var params = ""; 33 34 /* check if exists a single category and title selected */ 35 if( $slider.data("editorialCategory") && $slider.data("nameTitle") ){ 36 37 self.singleCategory = true; 38 params = { 39 "publication_category" : $slider.data("editorialCategory"), 40 "testata" : $slider.data("nameTitle") 41 }; 42 43 } 44 45 editorialCategoriesService(params).done(function(data){ 46 setEditorialCategories(data); 47 render(); 48 }); 49 50 51 }; 52 53 54 var getEditorialCategories = function() { 55 return editorialCategories; 56 }; 57 58 59 var setEditorialCategories = function(cateogories) { 60 editorialCategories = cateogories; 61 }; 62 63 64 var setTitles = function( data ){ 65 titles = data; 66 }; 67 68 69 var getTitles = function(){ 70 return titles; 71 }; 72 73 74 var getIssues = function(){ 75 76 var edCat = getEditorialCategories(); 77 return edCat.issues; 78 79 }; 80 81 82 var getTitlesById = function( editorialCategoryId ) { 83 84 if( typeof editorialCategoryId !== "number" && typeof parseInt( editorialCategoryId ) !== "number" ) return; 85 86 var edCat = getEditorialCategories(); 87 88 var titles = $.map(edCat, function(value, index) { 89 90 if( value.id == editorialCategoryId ) { 91 92 return value.titles; 93 94 } 95 96 }); 97 98 return titles; 99 100 }; 101 102 103 var renderEditorialCategoriesSelect = function(element){ 104 105 var edCat = getEditorialCategories(); 106 var categories = edCat; 107 108 if( categories.length > 0 ){ 109 110 element.empty(); 111 112 // render the select 113 $.each(categories, function(index, value){ 114 element.append("<option value='" + value.id + "'>" + value.name + "</option>"); 115 }); 116 117 } 118 119 }; 120 121 122 var renderTitlesSelect = function(element){ 123 124 var edCat = getEditorialCategories(); 125 var categories = edCat; 126 var selected = ""; 127 128 editorialCategoriesService().done(function (data) { 129 130 var idCat = $selectEditorialCategories.data("editorialCategory"); 131 132 // get the publication category to list titles available 133 categories = $.map(data, function (value, index) { 134 135 if (value.id == idCat) { 136 $(".vc_editorial_category_selected").html(value.name); 137 return value.titles; 138 } 139 140 }); 141 142 // render the select 143 if (categories.length > 0) { 144 145 element.empty(); 146 147 $.each(categories, function (index, value) { 148 149 // set the default value 150 if( value.titleDirectory == $(element).data("nameTitle") ) selected = "selected"; 151 else selected = ""; 152 153 element.append("<option " + selected + " value='" + value.titleDirectory + "'>" + value.titleName + "</option>"); 154 155 }); 156 157 } 158 159 }); 160 161 }; 162 163 164 var renderSelect = function(element) { 165 166 /* render titles select */ 167 if( self.singleCategory ){ 168 169 renderTitlesSelect(element); 170 171 } else { 172 173 renderEditorialCategoriesSelect(element) 174 175 } 176 }; 177 178 179 var renderSliderIssues = function(selector){ 180 181 var issues = getIssues(); 182 var slides = []; 183 184 if( issues.length > 0 ) { 185 186 for( var i = 0; i < issues.length; i++ ) { 187 188 var title = selector.data("name-title"); 189 var clone = selector.find(".vc_thumb").clone(); 190 var link = VNP.baseUrl + "/pageflip/" + VNP.Areas.Reader.getReader() + "/" + issues[i].titleDirectory + "/" + issues[i].issue; 191 192 clone.find(".vc_thumb_img").attr("data-src", issues[i].firstPage); 193 clone.find(".vc_thumb_img").attr("alt", issues[i].titleDirectory); 194 clone.find(".vc_link").attr("href", link); 195 clone.find(".vc_link").attr("title", issues[i].titleDirectory); 196 clone.find(".vc_thumb_title_link").text(issues[i].titleDirectory); 197 //add the cloned element to the container 198 slides.push(clone.html()); 199 200 } 201 202 var sliderOptions = selector.data(); 203 sliderOptions.virtual = {cache : false }; 204 205 // for multiple instance, save into array to update on change select 206 if (typeof sliderIssues == "undefined") { 207 sliderIssues = new Swiper( selector, sliderOptions); 208 } 209 210 sliderIssues.virtual.slides = []; 211 sliderIssues.update(); 212 sliderIssues.virtual.slides = slides;
213 sliderIssues.virtual.update(); 214 215 } 216 217 }; 218 219 var renderSlider = function(selector, idEdCat) { 220 221 var titles = getTitlesById(idEdCat); 222 var slides = []; 223 224 if( titles.length > 0 ) { 225 226 for( var i = 0; i < titles.length; i++ ) { 227 228 var title = selector.data("name-title"); 229 var clone = selector.find(".vc_thumb").clone(); 230 var link = VNP.baseUrl + "/newsstand/editorial/" + titles[i].publication_category + "/title/" + titles[i].titleDirectory; 231 232 var thumb = VNP.baseUrl + "/upload/app/" + titles[i].publication_category + "_" + titles[i].titleName.replace(/ /g, '_') + ".jpg"; 233 234 clone.find(".vc_thumb_img").attr("data-src", thumb); 235 clone.find(".vc_thumb_img").attr("alt", titles[i].titleName); 236 clone.find(".vc_link").attr("href", link); 237 clone.find(".vc_link").attr("title", titles[i].titleName); 238 clone.find(".vc_thumb_title_link").text(titles[i].titleName); 239 //add the cloned element to the container 240 slides.push(clone.html()); 241 242 } 243 244 var sliderOptions = selector.data(); 245 sliderOptions.virtual = {cache : false }; 246 247 // for multiple instance, save into array to update on change select 248 if (typeof sliderEditorial == "undefined") { 249 sliderEditorial = new Swiper( selector, sliderOptions); 250 } 251 252 sliderEditorial.virtual.slides = []; 253 sliderEditorial.update(); 254 sliderEditorial.virtual.slides = slides;
255 sliderEditorial.virtual.update(); 256 257 } 258 259 }; 260 261 var updateSlider = function(idEdCat) { 262 263 if(self.singleCategory){ 264 265 var idCat = $selectEditorialCategories.data("editorialCategory"); 266 location.href = VNP.baseUrl + "/newsstand/editorial/" + idCat + "/title/" + $selectEditorialCategories.val(); 267 268 } else { 269 270 renderSlider( $(".vc_slider"), idEdCat); 271 272 } 273 274 }; 275 276 var render = function() { 277 278 var idEdCat = $selectEditorialCategories.val(); 279 280 if( $selectEditorialCategories.length > 0 ) { 281 282 renderSelect($selectEditorialCategories, self.singleCategory); 283 } 284 285 /* render issues or editorial categories */ 286 if( self.singleCategory ){ 287 288 idEdCat = $selectEditorialCategories.data("editorialCategory"); 289 renderSliderIssues( $slider, idEdCat); 290 291 } else { 292 293 renderSlider( $slider, $selectEditorialCategories.val()); 294 295 } 296 297 }; 298 299 300 return { 301 //render : render, 302 load: loadCategories, 303 updateSlider: updateSlider 304 } 305 306}
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.