Skip to content

Commit

Permalink
bugfix: Stars can now handle disabled localStorage
Browse files Browse the repository at this point in the history
  • Loading branch information
eemeli committed Jun 7, 2014
1 parent a017802 commit 79b9fe0
Show file tree
Hide file tree
Showing 6 changed files with 26 additions and 16 deletions.
5 changes: 3 additions & 2 deletions i18n/en.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions i18n/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
"star_add": "Add the {N, plural, one{new item} other{# new items}} to my selection",
"star_export_link": "<a href=\"{URL}\">Export selection</a> ({N, plural, one{one item} other{# items}})",
"star_hint": "To \"star\" a program item, click on the square next to it. Your selections will be remembered, and shown in this view. You currently don't have any program items selected, so this list is empty.",
"star_no_memory": "For some reason, your <a href=\"http://en.wikipedia.org/wiki/Web_storage\">localStorage</a> is not enabled, so your selection will not be remembered between sessions. {SERVER, select, true{Please login to enable persistent storage.} other{}}",
"filter_sum_id": "Listing {N, plural, one{one item: {TITLE}} other{# items with id {ID}}}",
"filter_sum": "Listing {N, plural, one{one {TAG} item} other{{ALL} # {TAG} items}} {GOT_DAY, select, true{on {DAY}} other{}} {GOT_AREA, select, true{in {AREA}} other{}} {GOT_Q, select, true{matching the query {Q}} other{}}",

Expand Down
5 changes: 3 additions & 2 deletions i18n/fi.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ n:function(d,k,o){if(isNaN(d[k]))throw new Error("MessageFormat: '"+k+"' isn't a
v:function(d,k){i18n.c(d,k);return d[k]},
p:function(d,k,o,l,p){i18n.c(d,k);return d[k] in p?p[d[k]]:(k=i18n.lc[l](d[k]-o),k in p?p[k]:p.other)},
s:function(d,k,p){i18n.c(d,k);return d[k] in p?p[d[k]]:p.other}}
i18n["fi"] = {
i18n["fi"]={
"Scroll up":function(d){return "Palaa ylös"},
"Next":function(d){return "Seuraavaksi"},
"My con":function(d){return "Minun con"},
Expand Down Expand Up @@ -48,6 +48,7 @@ i18n["fi"] = {
"star_add":function(d){return "Lisää "+i18n.p(d,"N",0,"fi",{"one":"uusi valinta","other":i18n.n(d,"N")+" uutta valintaa"})+" valintoihini"},
"star_export_link":function(d){return "<a href=\""+i18n.v(d,"URL")+"\">Vie valinnat</a> ("+i18n.p(d,"N",0,"fi",{"one":"yksi valinta","other":i18n.n(d,"N")+" valintaa"})+")"},
"star_hint":function(d){return "\"Tähdittääksesi\" valinnan, tökkää sen vieressä olevaa neliötä. Valintasi tallennetaan ja näytetään tässä. Et ole vielä valinnut yhtään ohjelmaa, joten lista on tyhjä."},
"star_no_memory":function(d){return "Jostain syystä <a href=\"http://en.wikipedia.org/wiki/Web_storage\">localStorage</a> -välimuisti ei nyt toimi, joten valintasi eivät säily seuraavaan istuntoon. "+i18n.s(d,"SERVER",{"true":"Ole hyvä ja kirjaudu sisään säilyttääksesi valintasi.","other":""})},
"filter_sum_id":function(d){return "Listataan "+i18n.p(d,"N",0,"fi",{"one":"yksi ohjelma: "+i18n.v(d,"TITLE"),"other":i18n.n(d,"N")+" ohjelmaa tunnisteella "+i18n.v(d,"ID")})},
"filter_sum":function(d){return "Listataan "+i18n.p(d,"N",0,"fi",{"one":"yksi "+i18n.v(d,"TAG")+" ohjelma","other":i18n.v(d,"ALL")+" "+i18n.n(d,"N")+" "+i18n.v(d,"TAG")+" ohjelmaa"})+" "+i18n.s(d,"GOT_DAY",{"true":"päivänä "+i18n.v(d,"DAY"),"other":""})+" "+i18n.s(d,"GOT_AREA",{"true":"paikassa "+i18n.v(d,"AREA"),"other":""})+" "+i18n.s(d,"GOT_Q",{"true":"kyselylle "+i18n.v(d,"Q"),"other":""})},
"Votes":function(d){return "Äänet"},
Expand All @@ -72,4 +73,4 @@ i18n["fi"] = {
"ical_hint":function(d){return "Huomaa että oppaassa tekemäsi muutokset saattavat päivittyä muuhun kalenteriohjelmaan vasta jonkin ajan kuluttua."},
"ical_make":function(d){return "Katsellaaksesi valintojasi kalenteriohjelmassasi, voit myös <br class=\"wide-only\">"+i18n.v(d,"A_TAG")+"tehdä sen saataville</a> iCal (.ics) -muodossa."},
"login_why":function(d){return "Vahvistettuasi sähköpostiosoitteesi voit synkronoida valintasi eri päätelaitteiden (mukaanlukien kalenteriohjelmien) kanssa sekä äänestää ja kommentoida ohjelmia. Ulkoisille palveluille ei kirjautumisen jälkeen lähetetä mitään tietoja."}}
})(this);
})(this);
1 change: 1 addition & 0 deletions i18n/fi.json
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
"star_add": "Lisää {N, plural, one{uusi valinta} other{# uutta valintaa}} valintoihini",
"star_export_link": "<a href=\"{URL}\">Vie valinnat</a> ({N, plural, one{yksi valinta} other{# valintaa}})",
"star_hint": "\"Tähdittääksesi\" valinnan, tökkää sen vieressä olevaa neliötä. Valintasi tallennetaan ja näytetään tässä. Et ole vielä valinnut yhtään ohjelmaa, joten lista on tyhjä.",
"star_no_memory": "Jostain syystä <a href=\"http://en.wikipedia.org/wiki/Web_storage\">localStorage</a> -välimuisti ei nyt toimi, joten valintasi eivät säily seuraavaan istuntoon. {SERVER, select, true{Ole hyvä ja kirjaudu sisään säilyttääksesi valintasi.} other{}}",
"filter_sum_id": "Listataan {N, plural, one{yksi ohjelma: {TITLE}} other{# ohjelmaa tunnisteella {ID}}}",
"filter_sum": "Listataan {N, plural, one{yksi {TAG} ohjelma} other{{ALL} # {TAG} ohjelmaa}} {GOT_DAY, select, true{päivänä {DAY}} other{}} {GOT_AREA, select, true{paikassa {AREA}} other{}} {GOT_Q, select, true{kyselylle {Q}} other{}}",

Expand Down
12 changes: 6 additions & 6 deletions src/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -653,14 +653,15 @@ function show_star_view(opt) {
set.sort();
var set_len = set.length;

var html = stars.persistent() ? '' : '<p>' + i18n_txt('star_no_memory', {'SERVER': !!server});
var star_list = stars.list();
star_list.sort();
var stars_len = star_list.length;
if (stars_len || set_len) {
var set_link = '#star/set:' + star_list.join(',');
if (set_len) {
if (arrays_equal(set, star_list)) {
view.innerHTML = '<p>' + i18n_txt('star_export_this', {'THIS':set_link})
html += '<p>' + i18n_txt('star_export_this', {'THIS':set_link})
+ '<p>' + i18n_txt('star_export_share', {
'SHORT':link_to_short_url(location.href), 'QR':link_to_qr_code(location.href)
});
Expand All @@ -669,7 +670,7 @@ function show_star_view(opt) {
var n_same = array_overlap(set, star_list);
var n_new = set_len - n_same;
var n_bad = set_raw.length - set_len;
var html = '<p>' + i18n_txt('star_import_this', {'THIS':location.href})
html += '<p>' + i18n_txt('star_import_this', {'THIS':location.href})
+ '<p>' + i18n_txt('star_import_diff', { 'PREV':stars_len, 'NEW':n_new, 'SAME':n_same });
if (n_bad) html += ' ' + i18n_txt('star_import_bad', {'BAD':n_bad});
if (!stars_len || (n_same != stars_len)) {
Expand All @@ -684,13 +685,11 @@ function show_star_view(opt) {
}
if (n_new) html += '<p>&raquo; <a href="#star" id="star_set_add">' + i18n_txt('star_add', {'N':n_new}) + '</a>';
}
view.innerHTML = html;

var el_set = EL('star_set_set'); if (el_set) el_set.onclick = function() { stars.set(set); return true; };
var el_add = EL('star_set_add'); if (el_add) el_add.onclick = function() { stars.add(set); return true; };
}
} else {
view.innerHTML = '<p id="star_links">&raquo; ' + i18n_txt('star_export_link', { 'URL':set_link, 'N':stars_len });
html += '<p id="star_links">&raquo; ' + i18n_txt('star_export_link', { 'URL':set_link, 'N':stars_len });
}
var ls = program.filter(function(it) { return (star_list.indexOf(it.id) >= 0) || (set.indexOf(it.id) >= 0); });
item_show_list(ls);
Expand All @@ -703,9 +702,10 @@ function show_star_view(opt) {
}
}
} else {
view.innerHTML = '<p>' + i18n_txt('star_hint');
html += '<p>' + i18n_txt('star_hint');
EL("prog_ls").innerHTML = '';
}
view.innerHTML = html;
}


Expand Down
18 changes: 12 additions & 6 deletions src/stars.js
Original file line number Diff line number Diff line change
@@ -1,28 +1,34 @@
"use strict";

function Stars(id, opt) {
this.name = 'konopas.' + id + '.stars';

opt = opt || {};
this.store = opt.store || localStorage;
this.name = 'konopas.' + id + '.stars';
this.store = opt.store || localStorage || sessionStorage || (new (function() {
var data = {};
this.getItem = function(k) { return data[k]; };
this.setItem = function(k, v) { data[k] = v; };
})());
this.tag = opt.tag || 'has_star';

this.server = false;
this.data = this.read();
}

Stars.prototype.read = function() {
return JSON.parse(this.store.getItem(this.name) || '{}');
return JSON.parse(this.store && this.store.getItem(this.name) || '{}');
}

Stars.prototype.write = function() {
try {
this.store.setItem(this.name, JSON.stringify(this.data));
if (this.store) this.store.setItem(this.name, JSON.stringify(this.data));
} catch (e) {
if ((e.code != DOMException.QUOTA_EXCEEDED_ERR) || (this.store.length != 0)) { throw e; }
}
}

Stars.prototype.persistent = function() {
return this.store && ((this.store == localStorage) || this.server && this.server.connected);
}

Stars.prototype.list = function() {
var list = [];
if (this.data) for (var id in this.data) {
Expand Down

0 comments on commit 79b9fe0

Please sign in to comment.