function()

in public/javascripts/app/models/SnapshotModel.js [25:108]


  function(){

    class SnapshotModel extends BaseModel{
      constructor(systemId, timestamp, snapshotData){
        super();
        this.data = {
          systemId: systemId,
          timestamp: timestamp,
          createdDate: moment(timestamp),
          activeState: false,
          snapshot: snapshotData
        };
      }

      getCreatedDate(){
        return this.get('createdDate').format('HH:mm:ss D MMMM YYYY');
      }

      getHeadline() {
          return this.get("snapshot.preview.fields.headline");
      }

      getStandfirst() {
          return this.get("snapshot.preview.fields.standfirst");
      }

      getTrailText() {
          return this.get("snapshot.preview.fields.trailText");
      }

      getHTMLContent(){
        var content = this.get('snapshot.preview').blocks.map((block) => block.elements);
        content = flatten(content);
        function htmlFromElements(elements) {
            return elements.map((element) => {
                if (element.fields.text) {
                    return element.fields.text;
                }
                if (element.fields.html) {
                    return element.fields.html;
                }
                if (element.fields.items) {
                    // This element is a List element (Key takeaways, Q&A Explainer, Mini profiles)
                    return element.fields.items.map((item) => {
                        return getListItemContent(item, htmlFromElements)
                    }).join('');
                }
                if (element.fields.sections) {
                    // This element is a Timeline element
                    return element.fields.sections.map((section) => {
                        return `${section.title} ${section.events.map(event => getTimelineEventContent(event, htmlFromElements)).join('')}`
                    }).join('');
                }
            }).join('');
        }
        return htmlFromElements(content);
      }

      get(key){
          return lodash_get(this.data, key);
      }

      //https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#toJSON_behavior
      toJSON(){
        var clone = angular.extend({}, this.data);
        //clear decorated data
        delete clone.timestamp;
        delete clone.createdDate;
        delete clone.activeState;
        delete clone.snapshot;
        delete clone.systemId;
        return clone;
      }

      getJSON(){
        return JSON.stringify(this.get('snapshot'), null, 2);
      }
    }


    return {
      getModel: (systemId, timestamp, data) => new SnapshotModel(systemId, timestamp, data)
    };
  }