loopGenerator

loop generator function

by gopi1410

HTML

<body>
  <p id="out">
  </p>
</body>

JavaScript

// TYPE DOBBY
var ad1 = {type:1, content: [{id:1, url:"https://via.placeholder.com/150", duration: 15}, {id:2, url:"https://via.placeholder.com/150", duration: 15}]};

// TYPE RETAILER
var ad2 = {type:2, content: [{id:3, url:"https://via.placeholder.com/150", duration: 10}, {id:4, url:"https://via.placeholder.com/150", duration: 10}, {id:5, url:"https://via.placeholder.com/150", duration: 10}]};
var ad3 = {type:2, content: [{id:6, url:"https://via.placeholder.com/150", duration: 25}]};

// TYPE ADVERTISER
var ad4 = {type:3, content: [{id:7, url:"https://via.placeholder.com/150", duration: 40}, {id:8, url:"https://via.placeholder.com/150", duration: 15}, {id:9, url:"https://via.placeholder.com/150", duration: 30}]};
var ad5 = {type:3, content: [{id:10, url:"https://via.placeholder.com/150", duration: 30}]};

// CONSTANTS FROM CONFIG
const SLOT_TIME = 5;
const TOTAL_SLOTS = 35;
const STORE_SLOTS = 5;
const DOBBY_SLOTS = 5;

// MASTER LIST WHICH COMES AS JSON LIKE THIS FROM API SERVER
var ad_list = [ad1, ad2, ad3, ad4, ad5];

document.getElementById("out").innerHTML = generator(ad_list);

function generator(ad_list) {
	let dobby = ad_list.filter(function(item) {
  	return item.type == 1;
  });
  let retailer = ad_list.filter(function(item) {
    return item.type == 2;
  });
  let advertiser = ad_list.filter(function(item) {
  	return item.type == 3;
	});

	let dobContent = [].concat.apply([], dobby.map(ad => ad.content));
  let retContent = [].concat.apply([], retailer.map(ad => ad.content));
  let advContent = [].concat.apply([], advertiser.map(ad => ad.content));
  
  let dobSlots = calculateSlots(dobContent);
  let retSlots = calculateSlots(retContent);
  let advSlots = calculateSlots(advContent);
  
  /* console.log(dobContent);
  console.log(retContent);
  console.log(advContent); */
  
  let allowedAdvSlots = TOTAL_SLOTS - STORE_SLOTS - DOBBY_SLOTS;
  if (advSlots > allowedAdvSlots) {
  	// TODO raise a flag, but continue
    console.log("consistency error: ad...