/* ------------------------------------------------------------------------
Project: The Social
Required: jquery, gelesocial.js
Copyright: 2011 - Gruppo editoriale L'Espresso spa
Developers:
M. ViganĂ², F. Zanchetta, G. Bottini, L. Convalle,
E. Sabellico, E. Matteoli, L. "saibal" Forti
------------------------------------------------------------------------- */
/**
* TODO
*
*/
(function($) {
$.bookmark = function(){version: '0.1'};
$.bookmark.BUTTON_ID_ADD = 'bookmark-add';
$.bookmark.BUTTON_ID_DELETE = 'bookmark-delete';
$.bookmark.BUTTON_CONTAINER_ID = 'bookmark-container';
$.bookmark.BUTTON_LABEL_ADD = 'Lo leggo dopo';
$.bookmark.BUTTON_LABEL_DELETE = 'Cancella dai preferiti';
$.bookmark.BUTTON_ADD_TEMPLATE = ''+$.bookmark.BUTTON_LABEL_ADD+''
$.bookmark.BUTTON_DELETE_TEMPLATE = ''+$.bookmark.BUTTON_LABEL_DELETE+''
$.bookmark.ARTICLES_MAX_LIMIT = 30;
$.bookmark.COOKIE_NAME = 'bookmark-elements';
$.bookmark.SUMMARY_MAX_LENGHT = 140;
$.bookmark.FILED_OG_TITLE = 'og:title';
$.bookmark.FILED_OG_URL = 'og:url';
$.bookmark.FILED_OG_IMAGE = 'og:image';
$.bookmark.FILED_OG_DESCRIPTION = 'og:description';
$.bookmark.FILED_PUB_DATE = 'datait';
$.bookmark.FILED_AUTHOR = 'firma';
$.bookmark.FILED_AUTHOR_DEFAULT = '';
$.bookmark.FILED_TIMESTAMP = 'timestamp';
$.bookmark.ACTION_MSG_ADD_NEW = 'L\'articolo e\' stato aggiunto con successo';
$.bookmark.ACTION_MSG_ADD_ERROR = 'Si e\' verificato un errore nel salvataggio dell\'articolo';
$.bookmark.ACTION_MSG_LIMIT_MAX = 'Hai raggiunto il limite massimo di articoli salvati. Prima di aggiungere un nuovo articolo e\' necessario cancellarne qualcuno dal tuo archivio';
$.bookmark.ACTION_MSG_ALREADY_EXIST = 'L\'articolo e\' gia\' presente nel tuo archivio';
$.bookmark.ACTION_MSG_DELETE = 'L\'articolo e\' stato cancellato con successo';
$.bookmark.ACTION_MSG_DELETE_ERROR = 'Si e\' verificato un errore nella cancellazione dell\'articolo';
$.bookmark.ACTION_MSG_ALREADY_DELETE = 'L\'articolo e\' gia\' stato cancellato dal tuo archivio';
$.bookmark.ACTION_MSG_CONFIRM_DELETE = "Sei sicuro di voler cancellare l'articolo?";
$.bookmark.CUSTOM_PAGE_UL_ID = 'box_archive';
$.bookmark.CUSTOM_PAGE_UL_CLASS = 'box archive';
$.bookmark.CUSTOM_PAGE_HTML_CONTAINER = '
';
$.bookmark.CUSTOM_PAGE_MAX_ITEMS = 5;
$.bookmark.CUSTOM_PAGE_PATTERN_PRINT = 'print-';
$.bookmark.CUSTOM_PAGE_CLASS_PRINT = 'print';
$.bookmark.CUSTOM_PAGE_PATTERN_DELETE = 'delete-';
$.bookmark.CUSTOM_PAGE_CLASS_DELETE = 'delete';
$.bookmark.CUSTOM_PAGE_POPUP_ID = 'bookmark-popup';
$.bookmark.CUSTOM_PAGE_POPUP_CLOSE_ID = 'bookmark-popup-close';
$.bookmark.CUSTOM_PAGE_POPUP_CLOSE_CLASS= 'chiudi';
$.bookmark.CUSTOM_PAGE_POPUP_WIDTH = 800;
$.bookmark.CUSTOM_PAGE_POPUP_HEIGHT = 700;
$.bookmark.CUSTOM_PAGE_POPUP_URL = RenderSocial.BASEURL_SOCIAL+"print.php?u=";
$.bookmark.CUSTOM_PAGE_ARTICLES_LIST_ID = 'bookmark-list';
$.bookmark.STATUS_BAR_ARTICLES_LIST_MAX = 3;
$.bookmark.STATUS_BAR_EMPTY_ARTICLES = "Qui troverai la lista degli ultimi articoli che hai deciso di salvare";
$.bookmark.ARTICLE_CONTENT_WS_URL = "content.json";
$.bookmark.SHARE_CONTAINER_CLASS = 'content-share';
$.bookmark.SHARE_OVERLAY_EFFECT_TIME = 1000;
$.bookmark.SHARE_OVERLAY_CLASS = 'gs-share-bookmark-container';
$.bookmark.TABLE_SORTER_ID = 'myTable';
$.bookmark.TABLE_SORTER_WIDGET = 'zebra';
$.bookmark.MONTHS = new Array('gennaio','febbraio','marzo','aprile','maggio','giugno', 'luglio','agosto','settembre','ottobre','novembre','dicembre');
$(function(){
if($.tablesorter){
$.tablesorter.addParser({
id: 'gs_date',
is: function(s) {
// return false so this parser is not auto detected
return false;
},
format: function(s) {
var ret = "1970-01-01";
s = s.toLowerCase();
s = s.split(" ");
if(s.length < 3) return ret;
var month = $.bookmark.MONTHS.indexOf(s[1]) + 1;
if(month>0){
if(month<10) month = "0" + month;
ret = s[2] + "-" + month + "-" + s[0];
}
return ret;
},
type: 'text'
});
}
});
/*
* DEFAULT SETTINGS
* */
var settings = {
debug : true //consol log debug
};
$.fn.bookmark = function() {
$.bookmark.log("init");
var node = $(this);
var url = $("meta[property=\""+$.bookmark.FILED_OG_URL+"\"]").attr("content");
var articles = $.bookmark.cookie.getBoxCookie();
if(!$.bookmark.utils.isNull(url) && !$.bookmark.utils.isNull(articles)){
//check if article is already present on bookmark!
if($.bookmark.articlesAlreadyExists(articles, url)){
$.bookmark.log("articolo presente");
$.bookmark.setLabelDelete(url);
}else{
$.bookmark.log("articolo nuovo");
$.bookmark.setLabelAdd();
}
}
}
/*
* Check if an article is already present in user's bookmark via
* */
$.bookmark.articlesAlreadyExists = function(articles,url) {
var ret = false;
if(!$.bookmark.utils.isNull(articles) && !$.bookmark.utils.isObjectNull(articles.values)){
$.each(articles.values,function(i,e){
if(!ret && e[$.bookmark.FILED_OG_URL]==url)
ret = true;
});
}
return ret;
}
$.bookmark.setLabelDelete = function(url) {
$("#"+$.bookmark.BUTTON_CONTAINER_ID).html($.bookmark.BUTTON_DELETE_TEMPLATE);
$("#"+$.bookmark.BUTTON_CONTAINER_ID).addClass("cancel");
$("#"+$.bookmark.BUTTON_ID_DELETE).click(function(){
$.bookmark.deleteItem(url);
});
}
$.bookmark.setLabelAdd = function(click) {
$("#"+$.bookmark.BUTTON_CONTAINER_ID).html($.bookmark.BUTTON_ADD_TEMPLATE);
$("#"+$.bookmark.BUTTON_CONTAINER_ID).removeClass("cancel");
if(click===undefined){
click = function(){
$.bookmark.addItem();
}
}
$("#"+$.bookmark.BUTTON_ID_ADD).click(click);
}
/*
* Add an article into user's bookmark via
* */
$.bookmark.addItem = function() {
$.bookmark.log("add function");
try{
var articles = $.bookmark.cookie.getBoxCookie(true);
var tot = (!$.bookmark.utils.isNull(articles) && !$.bookmark.utils.isObjectNull(articles.values)) ? articles.values.length : 0;
if(tot < $.bookmark.ARTICLES_MAX_LIMIT){
$.bookmark.log("tot articoli salvati:"+tot);
var title = $("meta[property=\""+$.bookmark.FILED_OG_TITLE+"\"]").attr("content");
var url = $("meta[property=\""+$.bookmark.FILED_OG_URL+"\"]").attr("content");
var image = $("meta[property=\""+$.bookmark.FILED_OG_IMAGE+"\"]").attr("content");
var desc = $("meta[property=\""+$.bookmark.FILED_OG_DESCRIPTION+"\"]").attr("content");
var date = $("meta[name=\""+$.bookmark.FILED_PUB_DATE+"\"]").attr("content");
var author = $("meta[name=\""+$.bookmark.FILED_AUTHOR+"\"]").attr("content");
var ts = $.bookmark.utils.timestamp();
title = title.replace(' - Repubblica.it', '');
author = (!$.bookmark.utils.isEmptyString(author)) ? author.replace("di ","") : $.bookmark.FILED_AUTHOR_DEFAULT;
author = $.bookmark.utils.ucwords(author.toLowerCase());
$.bookmark.log("articolo url:"+url);
//if user open two browser's tab
if(!$.bookmark.articlesAlreadyExists(articles, url)){
$.bookmark.log("articolo da salvare non presente");
var article = {};
article[$.bookmark.FILED_OG_TITLE] = title;
article[$.bookmark.FILED_OG_URL] = url;
article[$.bookmark.FILED_OG_IMAGE] = image;
article[$.bookmark.FILED_OG_DESCRIPTION] = desc;
article[$.bookmark.FILED_AUTHOR] = author;
article[$.bookmark.FILED_PUB_DATE] = date;
article[$.bookmark.FILED_TIMESTAMP] = ts;
articles.values.push(article);
//va testato e valutare l'ipostesi di mettere un throw dentro la setcookie
$.bookmark.cookie.setBoxCookie(articles);
//$.bookmark.alerting($.bookmark.ACTION_MSG_ADD_NEW);
}else{
//$.bookmark.alerting($.bookmark.ACTION_MSG_ALREADY_EXIST);
}
$.bookmark.setLabelDelete(url);
}else{
$.bookmark.alerting($.bookmark.ACTION_MSG_LIMIT_MAX);
}
}catch(e){
$.bookmark.alerting($.bookmark.ACTION_MSG_ADD_ERROR);
}
}
/*
* Remove an article from user's bookmark via
* */
$.bookmark.deleteItem = function(url) {
$.bookmark.log("delete function");
try{
var articles = $.bookmark.cookie.getBoxCookie(true);
if($.bookmark.articlesAlreadyExists(articles, url)){
var articlesMerged = new Array();
$.each(articles.values,function(i,e){
if(e[$.bookmark.FILED_OG_URL]!=url)
articlesMerged.push(e);
});
$.bookmark.log("merged");
$.bookmark.debug(articlesMerged);
$.bookmark.debug(articlesMerged);
var ret = {"values":articlesMerged};
$.bookmark.cookie.setBoxCookie(ret);
//$.bookmark.alerting($.bookmark.ACTION_MSG_DELETE);
}else{
//$.bookmark.alerting($.bookmark.ACTION_MSG_ALREADY_DELETE);
}
$.bookmark.setLabelAdd();
}catch(e){
$.bookmark.alerting($.bookmark.ACTION_MSG_DELETE_ERROR);
}
}
/*---------------------- Class Toolbar
-------------------------------------------*/
$.bookmark.statusbar = {};
$.bookmark.statusbar.getListArticles = function() {
var articles = $.bookmark.cookie.getBoxCookie(true);
var length = articles.values.length;
var htmlBox = "Lo leggo dopo
";
if(length > 0){
htmlBox += "";
}else
htmlBox += $.bookmark.STATUS_BAR_EMPTY_ARTICLES;
return htmlBox;
}
/*---------------------- Class Custom Page
-------------------------------------------*/
$.bookmark.custompage = {};
$.bookmark.custompage.renderBoxArticles = function(limit) {
$.bookmark.log("custompage render funcion");
$("#"+RenderSocial.CUSTOM_CENTER_DIV_ID).append($.bookmark.CUSTOM_PAGE_HTML_CONTAINER);
$.bookmark.custompage.renderListArticles();
}
$.bookmark.custompage.renderBoxListArticles = function(limit) {
$.bookmark.log("custompage render funcion");
$("#"+RenderSocial.CUSTOM_CENTER_DIV_ID).html($.bookmark.CUSTOM_PAGE_HTML_CONTAINER);
$.bookmark.custompage.renderListArticles();
}
$.bookmark.custompage.getLinksShare = function(index, title, url) {
urlEncoded = encodeURIComponent(url);
titleEncoded = encodeURIComponent(title);
var html = '';
html += '
Condividi';
html += '
';
html += '
';
html += '
';
return html;
}
$.bookmark.custompage.renderListArticles = function() {
var CUSTOM_PAGE_UL_ID = $('#'+$.bookmark.CUSTOM_PAGE_UL_ID);
CUSTOM_PAGE_UL_ID.empty();
CUSTOM_PAGE_UL_ID.append($('- Lo leggo dopo
'));
var articles = $.bookmark.cookie.getBoxCookie();
var length = articles.values.length;
if(length > 0){
var limit = (!$.bookmark.utils.isNull(bmPrintAll) && bmPrintAll) ? length : $.bookmark.CUSTOM_PAGE_MAX_ITEMS;
var html = '';
html += 'Sono presenti '+articles.values.length+' articoli salvati su un massimo di '+$.bookmark.ARTICLES_MAX_LIMIT+'';
html += '';
CUSTOM_PAGE_UL_ID.append($(html));
var html = '';
html = '';
html += 'Utility |
';
html += '';
html += '';
html += '
';
html += '';
var table = $(html);
CUSTOM_PAGE_UL_ID.append(table);
var tbody = table.find("tbody");
var sorted = articles.values.sort($.bookmark.utils.sort);
var css = 'odd';
var renderShares = function(container, url, title, desc, image){
id = $.bookmark.SHARE_OVERLAY_CLASS + "-" + Math.floor((Math.random()*1000000000));
container.attr("id", id);
var conf = {
containerID: id
,gsUrl: url
,gsTitle: title
,gsDescription: desc
,gsImage: image
,gsOrderButtons: ["twitter-tweet", "google-plusone", "facebook-like"]
};
if(window.gsPlugins) window.gsPlugins.showShareBarUI(conf);
}
$.each(sorted,function(i,e){
if(i < limit){
var title = e[$.bookmark.FILED_OG_TITLE];
var url = e[$.bookmark.FILED_OG_URL];
var image = e[$.bookmark.FILED_OG_IMAGE];
var desc = e[$.bookmark.FILED_OG_DESCRIPTION].substring(0,$.bookmark.SUMMARY_MAX_LENGHT)+"...";
var author = e[$.bookmark.FILED_AUTHOR];
var dp = e[$.bookmark.FILED_PUB_DATE];
var ts = parseInt(e[$.bookmark.FILED_TIMESTAMP]);
var dt = new Date(ts);
var day = (dt.getDate()<10) ? "0"+dt.getDate() : dt.getDate();
//var month = (dt.getMonth()<10) ? "0"+dt.getMonth() : dt.getMonth();
var months = $.bookmark.MONTHS;
var month = months[dt.getMonth()];
var ds = day+' '+month+' '+dt.getFullYear();
var share = $.bookmark.custompage.getLinksShare(i, title,url);
css = (i%2) ? 'even' : 'odd';
var html = '';
html += ''+title+' '+desc+' | ';
html += ''+ds+' | ';
html += ''+share;
html += 'Stampa';
html += 'Cancella';;
html += ' | ';
html += '
';
var row = $(html);
tbody.append(row);
var container = row.find('.'+$.bookmark.SHARE_OVERLAY_CLASS);
renderShares(container, url, title, desc, image);
var shareclick1 = function(){
container.removeClass("initial");
container.fadeToggle($.bookmark.SHARE_OVERLAY_EFFECT_TIME);
}
row.find('.'+$.bookmark.SHARE_CONTAINER_CLASS).click(shareclick1);
}
});
if($.bookmark.utils.isNull(bmPrintAll) || !bmPrintAll)
CUSTOM_PAGE_UL_ID.append($('Vedi tutti'));
//print action
$("."+$.bookmark.CUSTOM_PAGE_CLASS_PRINT).click(function(){
var index = $(this).attr("id").replace($.bookmark.CUSTOM_PAGE_PATTERN_PRINT,'');
var art = sorted[index];
var url = art[$.bookmark.FILED_OG_URL];
$.bookmark.custompage.getContent(url);
});
//delete action
$("."+$.bookmark.CUSTOM_PAGE_CLASS_DELETE).click(function(){
var index = $(this).attr("id").replace($.bookmark.CUSTOM_PAGE_PATTERN_DELETE,'');
var art = sorted[index];
$.bookmark.custompage.deleteConfirm(art[$.bookmark.FILED_OG_URL]);
});
//table sorter code
$("#"+$.bookmark.TABLE_SORTER_ID).tablesorter({
sortList: [[1,1]],
widgets: [$.bookmark.TABLE_SORTER_WIDGET],
headers: {
1: {sorter: 'gs_date'},
2: {sorter: false}
}
});
}else{
var html = 'Nessun articolo salvato. Per salvare una notizia clicca sul tasto presente nella pagina dell\'articolo: Lo leggo dopo
';
CUSTOM_PAGE_UL_ID.append($(html));
}
$.neodata.utils.fixLayoutBox();
}
$.bookmark.custompage.deleteConfirm = function(url) {
GeleSocial.confirm($.bookmark.ACTION_MSG_CONFIRM_DELETE, function(answer){
if (answer){
$.bookmark.deleteItem(url);
$.bookmark.custompage.renderListArticles();
}
});
}
$.bookmark.custompage.getContent = function(url) {
$.bookmark.debug("custompage.getContent function");
GeleSocial.openModal($.bookmark.CUSTOM_PAGE_POPUP_URL+url,null,$.bookmark.CUSTOM_PAGE_POPUP_WIDTH,$.bookmark.CUSTOM_PAGE_POPUP_HEIGHT);
}
$.bookmark.custompage.renderDetailArticle = function() {
}
/*---------------------- Class Render
-------------------------------------------*/
$.bookmark.render = {};
$.bookmark.render = function(parameters, func) {
if(!$.bookmark.utils.isNull(func) && !$.bookmark.utils.isNull(parameters) && $.isFunction(func))
func(parameters);
}
/*---------------------- Class Alerting
-------------------------------------------*/
$.bookmark.alerting = {};
$.bookmark.alerting = function(msg){
GeleSocial.alert(msg);
}
/*---------------------- Class Cookie
-------------------------------------------*/
$.bookmark.cookie = {}
$.bookmark.cookie.getBoxCookie = function(force){
force = (!$.bookmark.utils.isNull(force)) ? force : false;
var cookie = GeleSocial.getBoxCookie($.bookmark.COOKIE_NAME, force);
var ret = {"values":new Array()};
$.bookmark.debug(cookie);
if(!$.bookmark.utils.isNull(cookie) && !$.bookmark.utils.isNull(cookie.values)){
var v = cookie.values;
if(v){
var json = window.JSON.parse(unescape(v));
ret = {"values":json};
}
}
return ret;
}
$.bookmark.cookie.setBoxCookie = function(v){
$.bookmark.log("setBoxCookie function");
var ret = new Array();
$.bookmark.debug(v);
if(!$.bookmark.utils.isNull(v) && !$.bookmark.utils.isNull(v.values) && !$.bookmark.utils.isObjectNull(v.values)){
$.bookmark.log("setCookieValueIntoString");
ret = v.values;
}
$.bookmark.debug(ret);
GeleSocial.setBoxCookie($.bookmark.COOKIE_NAME, {"values" : escape(JSON.stringify(ret))});
//aggiungere controllo di ritorno se redis non ha salvato
}
/*---------------------- Class Log
-------------------------------------------*/
$.bookmark.log = function(obj) {
if(window.console) window.console.log("bookmark: "+obj);
}
$.bookmark.debug = function(obj) {
if(settings.debug && typeof window.console!='undefined'
&& typeof window.console.debug!='undefined' && typeof window.console.debug!='undefined') {
$.bookmark.log("");
console.debug(obj);
}
}
/*---------------------- Class Utils
-------------------------------------------*/
$.bookmark.utils = {}
$.bookmark.utils.isNull = function(v) {
return !(!typeof(v)!='undefined' && v!=null && v!="null");
}
$.bookmark.utils.isObjectNull = function(v) {
return $.bookmark.utils.getObjectLength(v)==0;
}
$.bookmark.utils.getObjectLength = function(obj) {
var size=0, key;
for(key in obj) {
size++;
}
return size;
}
$.bookmark.utils.isEmptyString = function(v) {
return GeleSocial.utils.isEmptyString(v);
}
$.bookmark.utils.stripslashesSingleQuote = function(v) {
return v.replace(/\\\'/g,'\'');
}
$.bookmark.utils.stripslashesQuote = function(v) {
return v.replace(/\\\"/g,'\"');
}
$.bookmark.utils.trim = function(v) {
return v.replace(/^\s+|\s+$/g,"");
}
$.bookmark.utils.timestamp = function(){
var d =new Date();
return d.getTime();
}
$.bookmark.utils.ucwords = function(str){
return (str + '').replace(/^([a-z])|\s+([a-z])/g, function ($1) {
return $1.toUpperCase();
});
}
$.bookmark.utils.sort = function(a,b){
return a[$.bookmark.FILED_TIMESTAMP] > b[$.bookmark.FILED_TIMESTAMP] ? -1 : 1;
}
})(jQuery);