/*! * JavaScript Cookie v2.0.4 * https://github.com/js-cookie/js-cookie * * Copyright 2006, 2015 Klaus Hartl & Fagner Brack * Released under the MIT license */ (function (factory) { if (typeof define === 'function' && define.amd) { define(factory); } else if (typeof exports === 'object') { module.exports = factory(); } else { /*var _OldCookies = window.Cookies; var api = window.Cookies = factory(); api.noConflict = function () { window.Cookies = _OldCookies; return api; };*/ window.FF_Cookie = factory(); } }(function () { function extend () { var i = 0; var result = {}; for (; i < arguments.length; i++) { var attributes = arguments[ i ]; for (var key in attributes) { result[key] = attributes[key]; } } return result; } function init (converter) { function api (key, value, attributes) { var result; // Write if (arguments.length > 1) { attributes = extend({ path: '/' }, api.defaults, attributes); if (typeof attributes.expires === 'number') { var expires = new Date(); expires.setMilliseconds(expires.getMilliseconds() + attributes.expires * 864e+5); attributes.expires = expires; } try { result = JSON.stringify(value); if (/^[\{\[]/.test(result)) { value = result; } } catch (e) {} if (!converter.write) { value = encodeURIComponent(String(value)) .replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent); } else { value = converter.write(value, key); } key = encodeURIComponent(String(key)); key = key.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent); key = key.replace(/[\(\)]/g, escape); return (document.cookie = [ key, '=', value, attributes.expires && '; expires=' + attributes.expires.toUTCString(), // use expires attribute, max-age is not supported by IE attributes.path && '; path=' + attributes.path, attributes.domain && '; domain=' + attributes.domain, attributes.secure ? '; secure' : '' ].join('')); } // Read if (!key) { result = {}; } // To prevent the for loop in the first place assign an empty array // in case there are no cookies at all. Also prevents odd result when // calling "get()" var cookies = document.cookie ? document.cookie.split('; ') : []; var rdecode = /(%[0-9A-Z]{2})+/g; var i = 0; for (; i < cookies.length; i++) { var parts = cookies[i].split('='); var name = parts[0].replace(rdecode, decodeURIComponent); var cookie = parts.slice(1).join('='); if (cookie.charAt(0) === '"') { cookie = cookie.slice(1, -1); } try { cookie = converter.read ? converter.read(cookie, name) : converter(cookie, name) || cookie.replace(rdecode, decodeURIComponent); if (this.json) { try { cookie = JSON.parse(cookie); } catch (e) {} } if (key === name) { result = cookie; break; } if (!key) { result[name] = cookie; } } catch (e) {} } return result; } api.get = api.set = api; api.getJSON = function () { return api.apply({ json: true }, [].slice.call(arguments)); }; api.defaults = {}; api.remove = function (key, attributes) { api(key, '', extend(attributes, { expires: -1 })); }; api.withConverter = init; return api; } return init(function () {}); })); // Newsticker functionality (function($, Cookie){ "use strict"; if (!$) return; var processed = false; var template = '
<%= icon %>

<%= title %> <%= text %>

<%= cta %>
'; var TickerModel = Backbone.Model.extend({ "date": 0, "title": "", "text": "", "type": "news", "url": "" }); var TickerView = Backbone.View.extend({ tagName: 'div', className: 'ffticker', template: _.template(template), initialize: function() { // console.log('initialize TickerView') this.model.view = this; this.render(); }, render: function() { // console.log('render campaign view') var self = this; var $name = $('#ff_company_name'); var data = { icon: self.model.get('type') ? '
' : '', title: ($name.length ? 'Hi' + ($name.val() ? ' ' + $name.val() : '') + '! ' : '' ) + self.model.get('title') + ':', text: self.model.get('text'), cta: self.model.get('url') ? '' + (self.model.get('cta') ? self.model.get('cta') : 'Learn more') + '' : '' } self.model.get('type') && this.$el.addClass('ffticker--' + self.model.get('type')); this.$el.html(this.template(data)); }, events: { "click .ffticker__close": "destroy" }, destroy: function () { this.$el.parent().removeClass('ffticker--transition-in').css({'paddingTop' : ''}); $(document).trigger('ticker-destroyed', this.model) } }); var TickerController = (function () { var view; var model; var cookieJSON = Cookie.getJSON('ff_news') || {seen: '', destroyed: ''}; var sessionCookie = Cookie.get('ff_news_session'); var seen, destroyed; function init () { var defer = $.Deferred(); if ( /*Cookie.get( 'ff_first_time' ) &&*/ ( ! sessionCookie ) || ( sessionCookie && /*sessionCookie !== 'no_data' &&*/ sessionCookie !== 'seen' && location.href.indexOf('page=flow-flow') !== -1 ) ) { setEvents(); var passthrough, s, f, curr; var cloudStreamsLength; var layouts = { 'masonry': 0, 'grid': 0, 'justified': 0, 'list': 0, 'carousel': 0 } var types = { 'instagram': 0, 'facebook': 0, 'twitter': 0, 'youtube': 0, 'pinterest': 0, 'flickr': 0, 'tumblr': 0, 'vimeo': 0, 'wordpress': 0, 'rss': 0, 'soundcloud': 0, } //if (!sessionCookie) Cookie.set('ff_news_session', 'no_data'); if ( window.FlowFlowApp ) { $( document ).on( 'feeds-loaded', function ( event, feeds ) { try { s = ''; cloudStreamsLength = 0; for (var i = 0, len = FlowFlowApp.Model.StreamRow.collection.models.length; i < len; i++) { curr = FlowFlowApp.Model.StreamRow.collection.models[ i ]; layouts[ curr.get('layout') ] += 1; if ( curr.get('cloud') == 'yep' ) { cloudStreamsLength++; } } s = 'cloud:' + cloudStreamsLength + ';'; for (var layout in layouts) { if ( layouts[ layout ] ) s += layout + ':' + layouts[ layout ] + ';' } s = s.replace( /\;$/, '' ); // f = ''; for (var feed in feeds) { types[ feeds[ feed ].type ] += 1; } for (var type in types) { if ( types[ type ] ) f += type + ':' + types[ type ] + ';' } f = f.replace( /\;$/, '' ); } catch (e) { console.log( e.message ) } passthrough = 'host=' + location.host + '&' + 'ver=' + window.plugin_ver + '&' + 's=' + s + '&' + 'f=' + f; doStuff( passthrough ); }) } else { doStuff() } } else { defer.reject('only one time in session'); } function doStuff( passthrough ) { return makeRequest( passthrough ).done( function (news) { if ( news && $.isArray( news ) ) { var latest = news && news[0], found; if (!latest) return; Cookie.set('ff_news_session', latest.id); if (isSuitableToShow(latest.id)) { model = new TickerModel(latest); view = new TickerView({model: model}); defer.resolve(view); } else { defer.reject('not suitable'); } } }).fail(function (error) { // console.log(error.statusText); defer.reject('request failed'); }); } return defer.promise(); } function makeRequest ( passthrough ) { console.log('REQUESTING NOTIFICATIONS') var defer = $.ajax({ type: 'GET', url: 'https://flow.looks-awesome.com/service/news', data: { passthrough: passthrough }, dataType: 'jsonp', crossDomain: true }) return defer.promise(); } function tryToAddNotification (id) { var found; var $item; var str; seen = cookieJSON.seen.toString().split('+'); id = parseInt(id) ? id : parseInt(Cookie.get('ff_news_session')); if (isNaN(id)) return; found = _.find( seen, function (num) {return num === id.toString()}); if ( ! found ) { $item = $('#toplevel_page_flow-flow'); str = '1'; $item.find('.wp-menu-name').append(str); $item.find('.wp-submenu li:eq(2)').prepend(str) } } function isSuitableToShow (id) { var found; if (cookieJSON) { destroyed = cookieJSON.destroyed.toString().split('+'); found = _.find(destroyed, function (num) {return num === id.toString()}); if (found) { cookieJSON.destroyed = id.toString() + '+' + cookieJSON.destroyed; Cookie.set('ff_news', cookieJSON, { expires: 356 }); return false } } return true; } function getView () { return view; } function setEvents () { $(document).on('ticker-destroyed', function(event, model){ var found; // should be in place by the moment but just in case if (cookieJSON) { destroyed = cookieJSON.destroyed.toString().split('+'); found = _.find(destroyed, function (num) {return num === model.id.toString()}); if (!found) { cookieJSON.destroyed = model.id.toString() + '+' + cookieJSON.destroyed; Cookie.set('ff_news', cookieJSON, { expires: 356 }); } } //Cookie.set('ff_news', {seen: latest.id}); }) } // showing popup in Flow admin on resolved init() only function injectView (view) { var $form = $('#flow_flow_form'); var height; var seen, found; if ($form.length) { $form.prepend(view.$el); height = view.$el.outerHeight() + 40; $form.css({'paddingTop' : height+'px'}); setTimeout(function(){ view.$el.parent().addClass('ffticker--transition-in'); }, 0) // set news cookie seen = cookieJSON.seen.toString().split('+'); found = _.find( seen, function (num) {return num === view.model.id.toString()}) ; if (!found) { cookieJSON.seen = view.model.id.toString() + '+' + cookieJSON.seen; } Cookie.set('ff_news', cookieJSON, { expires: 356 }); Cookie.set('ff_news_session', 'seen'); } } return { init: init, getView: getView, injectView: injectView, tryToAddNotification: tryToAddNotification } })(); $( document ).one('html_ready', doStuff) $( function () { doStuff(); }); function doStuff() { if (processed) return false; processed = true; TickerController.init() .then( TickerController.injectView ) .always( TickerController.tryToAddNotification ) .fail( function (msg) { //console.log(msg) }); } })(window.jQuery, window.FF_Cookie)