Sha256: 1e79f3398f563519813c7e674f75c153bf60409ccc14a601f38670c372d5f313

Contents?: true

Size: 1.76 KB

Versions: 6

Compression:

Stored size: 1.76 KB

Contents

pageflow.Visited = function(entryId, pages, events, cookies) {
  var cookieName = '_pageflow_visited';

  var unvisitedPages = [];

  function init() {
    if (!cookies.hasItem(cookieName)) {
      storeVisitedPageIds(getAllIds());
    }
    else {
      var visitedIds = getVisitedPageIds();
      unvisitedPages = _.difference(getAllIds(), visitedIds);
    }

    events.on('page:change', function (page) {
      var id = page.getPermaId();
      var ids = getVisitedPageIds();

      if (ids.indexOf(id) < 0) {
        ids.push(id);
      }

      storeVisitedPageIds(ids);
    });
  }

  function migrateLegacyCookie() {
    var legacyCookieName = '_pageflow_' + entryId + '_visited';

    if (cookies.hasItem(legacyCookieName)) {
      var ids = getCookieIds(legacyCookieName);
      storeVisitedPageIds(_.uniq(ids));

      cookies.removeItem(legacyCookieName);
    }
  }

  function getAllIds() {
    return pages.map(function(page) {
      return page.perma_id;
    });
  }

  function storeVisitedPageIds(ids) {
    cookies.setItem(cookieName, ids, Infinity, location.pathname);
  }

  function getVisitedPageIds() {
    return getCookieIds(cookieName);
  }

  function getCookieIds(name) {
    if (cookies.hasItem(name) && !!cookies.getItem(name)) {
      return cookies.getItem(name).split(',').map(function(id) {
        return parseInt(id, 10);
      });
    }
    return [];
  }

  return {
    init: function() {
      migrateLegacyCookie();
      init();
    },

    getUnvisitedPages: function() {
      return unvisitedPages;
    }
  };
};

pageflow.Visited.setup = function() {
  pageflow.visited = new pageflow.Visited(
    pageflow.entryId,
    pageflow.pages,
    pageflow.events,
    pageflow.cookies
  );

  if (pageflow.Visited.enabled) {
    pageflow.visited.init();
  }
};

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
pageflow-13.0.0.beta5 app/assets/javascripts/pageflow/visited.js
pageflow-13.0.0.beta4 app/assets/javascripts/pageflow/visited.js
pageflow-13.0.0.beta3 app/assets/javascripts/pageflow/visited.js
pageflow-13.0.0.beta2 app/assets/javascripts/pageflow/visited.js
pageflow-13.0.0.beta1 app/assets/javascripts/pageflow/visited.js
pageflow-12.2.0 app/assets/javascripts/pageflow/visited.js