// Init ->
try{
if (typeof window._gf == 'undefined') window._gf = {};
if (typeof window._gf.h == 'undefined') window._gf.h = {};
_gf.h.urlize = function(obj) {
var str = "";
for (var key in obj) {
if (obj[key] == null) continue;
if (str != "") {
str += "&";
}
str += key + "=" + encodeURIComponent(obj[key]);
}
return str;
}
_gf.h.getParameters = function() {
var search = location.search.substring(1);
if (search == null || search == "") return null;
return JSON.parse('{"' + decodeURI(search).replace(/"/g, '\\"').replace(/&/g, '","').replace(/=/g, '":"') + '"}');
}
_gf.h.getAttributes = function($node, pattern) {
var attrs = {};
jQuery.each($node[0].attributes, function(index, attribute) {
var attrName = attribute.name;
if (pattern != null) {
var match = attrName.match(pattern);
if (match == null) return;
attrName = match[1];
}
attrName = attrName.replace('-', '_')
attrs[attrName] = attribute.value;
});
return attrs;
}
String.prototype.format = function () {
var args = [];
for (var _i = 0; _i < (arguments.length - 0); _i++) {
args[_i] = arguments[_i + 0];
}
if (args.length > 0 && Array.isArray(args[0]))
args = args[0];
return this.replace(/{(\d+)}/g, function (match, number) {
return typeof args[number] != 'undefined' ? args[number] : match;
});
};
if (typeof _gf == "undefined" || !_gf.isInitialized) {
console.log('> _gf: Loading Widget dependencies');
_gf.isInitialized = true;
window._gf.depTypes = { style: 'style', script: 'script' };
window._gf.isDev = function() {
return location.host.endsWith('.dev') || location.host.startsWith('localhost') || location.host.endsWith('--glanceapp.netlify.com') ||
_gf.getHost(window._gf.getInjectorHostUrl()).endsWith('.local:8080/') ||
_gf.getHost(window._gf.getInjectorHostUrl()).endsWith('liv-mac:8080/');
}
window._gf.getInjectorHostUrl = function() {
var scripts = document.getElementsByClassName("g-widget-script");
var thisScript = scripts[0]; // scripts[scripts.length-1];
return thisScript.src;
}
window._gf.getHost = function(absUrl) {
var url = absUrl;
var hostname;
//find & remove protocol (http, ftp, etc.) and get hostname
if (url.indexOf("://") > -1) {
hostname = url.split('/')[2];
}
else {
hostname = url.split('/')[0];
}
//find & remove port number
//hostname = hostname.split(':')[0];
//find & remove "?"
hostname = hostname.split('?')[0];
return url.substr(0, url.indexOf("://") + 3) + hostname + '/';
}
window._gf.config = {
//urlPrefix: _gf.isDev() ? '' : _gf.getHost(_gf.getInjectorHostUrl()) //'https://myglanceapp.com/'
urlPrefix: _gf.getHost(window._gf.getInjectorHostUrl())
};
window._gf.config.widgetTypes = {
glance: _gf.config.urlPrefix + '/e/{0}',
grid: _gf.config.urlPrefix + '/views/widgets/grid.html',
grid_sidebar: 'https://widget.myglanceapp.com/generic2', // _gf.config.urlPrefix + '/views/widgets/grid-sidebar.html',
new_grid_sidebar: 'https://widget.myglanceapp.com/generic2',
old_grid_sidebar: 'https://widget.myglanceapp.com/generic2'
}
window._gf.deps = [
//{ src: _gf.config.urlPrefix + '/js/pack_widget.js', check: function() { return typeof _gf.h == "undefined" } },
//{ src: _gf.config.urlPrefix + '/js/helpers.js', check: function() { return typeof _gf.h == "undefined" } },
/*{
//type: _gf.depTypes.script,
src: '//shared.feedox.com/scripts/lib/moment.js',
check: function() { return typeof moment == "undefined" },
async: true
},
{ src: '//shared.feedox.com/scripts/dateformat.js', async: true },
{ src: _gf.config.urlPrefix + '/js/helpers.js', check: function() { return typeof _gf.h == "undefined" } },
{ src: '//shared.feedox.com/scripts/ext2.js', check: function() { return typeof ext2 == "undefined" } },
{ src: '//shared.feedox.com/scripts/bundle/feedox.api.web.0.3.min.js', check: function() { return typeof fd == "undefined" } },
*/
//{ src: '//shared.feedox.com/scripts/bundle/bundle-essentials.min.js' },
//{ src: '//shared.feedox.com/scripts/bundle/bundle-myEssentials.min.js' },
//{ src: '//shared.feedox.com/scripts/lib/crypto/altervista_cryptography.js' },
//{ src: '//shared.feedox.com/scripts/lib/mscorlib.js' },
//{ src: 'https://' + window._gf.site + '/content/js/compiled/fd.js', check: function() { return typeof fd == "undefined" } },
//{ src: 'https://' + window._gf.site + '/content/js/compiled/CompiledJS.js', check: function() { return typeof CompiledJS == "undefined" }) },
{ src: _gf.config.urlPrefix + '/css/glance.widget.injector.min.css', type:_gf.depTypes.style, async: true },
];
window._gf.loadjscssfile = function(filename, filetype) {
var fileref = document.createElement("link")
fileref.setAttribute("rel", "stylesheet")
fileref.setAttribute("type", "text/css")
fileref.setAttribute("href", filename)
document.getElementsByTagName("head")[0].appendChild(fileref)
}
window._gf.injectScriptBasic = function(src, onReady) {
/*
return new Promise((resolve, reject) => {
let script = document.createElement('script');
script.async = true;
script.src = src;
script.addEventListener('load', () => resolve());
script.addEventListener('error', () => reject('Error loading script.'));
script.addEventListener('abort', () => reject('Script loading aborted.'));
document.head.appendChild(script);
});
*/
/*
var fileref = document.createElement('script')
fileref.setAttribute("type", "text/javascript")
fileref.setAttribute("src", filename)
alert('called');
*/
var head= document.getElementsByTagName('head')[0];
var script= document.createElement('script');
script.type= 'text/javascript';
script.onreadystatechange= function () {
if (this.readyState == 'complete') {
if (onReady != null) onReady(src);
}
}
script.onload= onReady;
script.src= src;
head.appendChild(script);
}
window._gf.prepareForInject = function(callback) {
var callbackWrapper = function() {
console.log('> _gf: jQuert is ready');
callback();
}
var preCallback = function() {
console.log('> _gf: simplerRequire is ready');
if (typeof jQuery=='undefined') {
window._gf.injectScriptBasic('//myglanceapp.com/js/lib/jquery.min.js', callbackWrapper);
} else {
callbackWrapper();
}
}
if (typeof simpleRequire == "undefined")
window._gf.injectScriptBasic('//myglanceapp.com/js/lib/simpleRequire.min.js', preCallback);
else
preCallback();
}
window._gf.inject = function(src, type) {
var deferred = new jQuery.Deferred();
if (type == null || type == _gf.depTypes.script) {
if (src.startsWith('//') && _gf.isDev()) { // in case dev and url starts with '//' force it to be https to avoid iOS safari error of CORS
src = 'https' + ':' + src;
}
simpleRequire(src, function() {
console.log('> _gf: inject: \'' + src + '\' successfully injected');
deferred.resolve(src);
}, _gf.isDev())
} else {
_gf.loadjscssfile(src, 'css');
deferred.resolve(src);
}
return deferred.promise();
}
window._gf.whenAllDepsReady = function() {
console.log('> _gf: whenAllDepsReady')
_gf.isInitialized = true;
//var $j = jQuery.noConflict();
//jQuery.noConflict();
jQuery( document ).ready(function( $j ) {
console.log('> _gf: Ready |', new Date());
window._gf.$j = $j;
});
}
window._gf.whenRequireReady = function() {
try{
console.log('> _gf: Script loaded... | ', new Date());
console.log('> _gf: deps=', _gf.deps);
_gf.loadDeps(_gf.deps, function() {
window._gf.whenAllDepsReady();
window._gf.entrypoint();
});
setTimeout(function() {
jQuery(window).trigger('resize');
}, 1000);
}catch(e){
console.log('> _gf: Glance.Widget:whenRequireReady: Error =', e)
}
}
window._gf.loadDeps = function(deps, callback) {
if (deps == null || deps.length == 0) return;
var count = deps.length;
var leftDeps = deps;
var curDep = leftDeps.shift();
while (curDep != null && leftDeps.length > 0 && curDep.check != null) {
console.log('> _gf: loadDeps: dep has check');
if (curDep.check()) {
console.log('> _gf: loadDeps: dep check says we need to inject');
break;
} else {
console.log('> _gf: loadDeps: skipping dep');
curDep = leftDeps.shift();
}
}
var whenInjected = function() {
var left = _gf.loadDeps(leftDeps, callback);
if (left == null || left == 0) {
console.log('> _gf: all sciprts loaded');
if (callback) callback();
};
}
if (curDep.async == true) {
window._gf.inject(curDep.src, curDep.type);
whenInjected();
} else {
window._gf.inject(curDep.src, curDep.type).then(whenInjected);
}
return count;
/*
for(var i=0;i<_gf.deps.length;i++){
var dep = _gf.deps[i];
console.log('> _gf: dep ', dep);
}
*/
}
window._gf.entrypoint = function() {
console.log('> _gf: Entrypoint');
var fn = function() { jQuery("*[class='g-widget-script']").each(function(i, item) {
var item = jQuery(item);
var attr = _gf.h.getAttributes(item, '^gf-(.*)$');
console.log('> _gf: Attributes: ', attr)
var glanceId = attr.glanceid;
var type = attr.type || 'glance';
var t = type.replace(/\-/g, '_');
var params = _gf.h.urlize(attr);
/*
if (t == 'grid_sidebar' && attr['userid'] == null) {
t = 'new_grid_sidebar';
console.log('> _gf: Force switch to new widget: ', t)
}
*/
var getWidgetUrl = _gf.config.widgetTypes[t];
var url = getWidgetUrl.format(glanceId) + '?' + params;
//item.parent().append(jQuery('Injected widget: GlanceId={0}, Type={1}'.format(glanceId, type)));
var i = item.parent().append(jQuery(''.format(url)));
i = i.find('iframe');
jQuery(window).on('resize', function(){
if (i.initialClass == null) i.initialClass = i.attr('class');
i.removeClass();
i.addClass(i.initialClass);
var w = i.parent().width();
if (w < 230) {
i.addClass('_gf-s0');
} else if (w > 230 && w < 250) {
i.addClass('_gf-s1');
} else if (w > 250 && w < 290) {
i.addClass('_gf-s2');
} else if (w > 290 && w < 320) {
i.addClass('_gf-s3');
} else if (w > 320 && w < 340) {
i.addClass('_gf-s4');
} else if (w > 340 && w < 480) {
i.addClass('_gf-s5');
} else if (w > 400) {
i.addClass('_gf-s6');
}
//var w = jQuery('._gf-glance').width();
var ratio = 2.686;
var maxWidth = 388;
var cls = i.initialClass.replace('_gf-glance ', '');
switch(cls) {
case 'grid_sidebar':
ratio = 2.686;
maxWidth = 388;
break;
case 'glance':
ratio = 1.61;
maxWidth = 520;
break;
}
if (w > maxWidth)
jQuery('._gf-glance.' + cls).height(maxWidth * ratio);
else
jQuery('._gf-glance.' + cls).height(w * ratio);
});
jQuery(window).trigger('resize');
/*
jQuery(window).on('resize', function(){
jQuery('iframe:first()').contents().find('html').width(jQuery('iframe:first()').parent().width())
});
setTimeout(function() {
jQuery(window).trigger('resize');
}, 500)
*/
}); }
if ( jQuery.isReady ) {
fn( document, jQuery );
} else {
jQuery( document ).ready(function( $j ) {
fn();
})
}
}
window._gf.prepareForInject(window._gf.whenRequireReady)
}else{
console.log('> _gf: Widget already loaded');
//window._gf.entrypoint();
}
}catch(e){
console.log('> _gf: Glance.Widget: Error while loading', e)
}