Skip to content
Advertisement

How can I create dynamic components with Google App Scripts for Google Sites?

I am trying to create dynamic app script components that can be added into my site with dynamic data for each instance of the script. I tried doing parameters, but I am not sure if that’s the best way to approach this. For example, I want to create an image script that be loaded with dynamic links, and inserted into google sites. I only want one image script can be loaded multiple times into the page with dynamic urls. How should I handle this? Can this be done? Thanks.

Advertisement

Answer

This version creates scrolling images display or a slide show. And it creates the image tags in an otherwise empty div. You can add as many images to column A of your spreadsheet and the script will do the rest.

image.html:

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
  <div id="myimages"></div>
  <div id="slideshow" style="display:none;">
    <img id="slide" src="" width="450"/>
  </div>
  <input type="button" value="Start Slide Show" onClick="startShow();" />
  <input type="button" value="Stop Show" onClick="stopShow();" />
  <div id="resp" style="display:none;">
    <h1>Response</h1>
    <p>Your data has been received.</p>
  </div>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <script>
      var nextslide=0;
      var myslides='';
      var mytimer;
      $(function() {
        google.script.run
          .withSuccessHandler(setURL)
          .getURL();
      });
      function setURL(urlA)
      {
        for(var i=0;i<urlA.length;i++)
        {
          var s='img' + Number(i+1);
          var s1= '#img' + Number(i+1);
          $('#myimages').append('<img id="' + s + '" src="' + urlA[i] + '" />');
          $(s1).attr('height','450');
        }
        myslides=urlA;
      }
      
      function startShow()
      {
        $('#myimages').css('display','none');
        $('#slideshow').css('display','block');
        showSlide();
      }
       
      function showSlide()
      {
        document.getElementById('slide').src=myslides[nextslide];
        if(++nextslide > myslides.length-1)
        {
            nextslide=0;
        }
        mytimer=window.setTimeout(showSlide,5000);
      }
     
       function stopShow()
       {
         window.clearTimeout(mytimer);
         $('#myimages').css('display','block');
        $('#slideshow').css('display','none');
         
       }
       
      function loadTxt(from,to)
      {
          document.getElementById(to).value = document.getElementById(from).value;
      }
      
     console.log('My Code');
   </script>
  </body>
</html>

Code.gs

function doGet()
{
  var html = HtmlService.createHtmlOutputFromFile('image');
  return html.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL)
  
}

function getData(a)
{
  var ts = Utilities.formatDate(new Date(), "GMT-6", "yyyy-MM-dd' 'HH:mm:ss");
  a.push(ts);
  var ss=SpreadsheetApp.openById('SS_ID')
  ss.getSheetByName('Form Data').appendRow(a);
  return true;
}

function getURL()
{
  var ss=SpreadsheetApp.openById('SS_ID');
  var sht=ss.getSheetByName('imgURLs');
  var rng=sht.getDataRange();
  var rngA=rng.getValues();
  var urlA=[];
  for(var i=1;i<rngA.length;i++)
  {
    urlA.push(rngA[i][0]);
  }
  return urlA;
}
User contributions licensed under: CC BY-SA
5 People found this is helpful
Advertisement