Autor Zpráva
Amunak
Profil
Inspiroval jsem se zdejší funkcí zálohování textarey a aplikoval jí na jednom webu. Pokud si dobře vzpomínám, ani jsem se moc neinspiroval zdejším kódem - přišlo mi snazší napsat si vlastní skript než dolovat to co tu je (navíc bez svolení). Ale protože tu s tím už máte zkušenosti, chci se zeptat, jestli je ten kód v pořádku a jestli nevidíte, zda jsem třeba něco nezapomněl. Když jsem se totiž díval na kód co je tady na diskuzi, přišel mi o dost robustnější, složitější. Přesto mi všechno funguje (neimplementoval jsem žádné vymazávání, počítám s tím, že kdo to skutečně chce smazat, prostě text vybere a smaže - i tak by na to stačilo ale přidělat jediné tlačítko, které volá mazací funkci).

živá ukázka (kód)
IdemeNaHavaj
Profil
Nefunguje ti to, napíšem tam blábol, kliknem v chrome na reload (nie na ten odkaz, ale v browsery na reload) a zmaže sa to.
A tu na djpw to nefunguje tiež :)
margin
Profil *
Amunak:
Když jsem se totiž díval na kód co je tady na diskuzi, přišel mi o dost robustnější, složitější.
Zdejší kód nepoužívá cizí knihovny.

IdemeNaHavaj:
Nemám problém, ať udělám reload tak či onak, testováno ve Win XP v prohlížečích:
- Opera 12
- Google Chrome 29, Opera 16
Str4wberry
Profil
Tady na diskusi je kód nejspíš složitější, protože do něj Chamurappi přidal podporu pro starší Explorery.

if(!window.localStorage && document.documentElement.addBehavior) window.localStorage = (function(name)
{
  var prefix = "storage-";
  var link = document.createElement("link");
  link.addBehavior("#default#userData");
  document.documentElement.firstChild.appendChild(link);
  return {
    setItem: function(key, value)
    {
      link.setAttribute(prefix + key, value);
      link.save(name);
    },
    getItem: function(key)
    {
      try { link.load(name); } catch(exc) {}
      return link.getAttribute(prefix + key);
    },
    removeItem: function(key)
    {
      link.removeAttribute(prefix + key);
      link.save(name);
    }
  };
})("localStorage");
Chamurappi
Profil
Reaguji na Amunaka:
Když jsem se totiž díval na kód co je tady na diskuzi, přišel mi o dost robustnější, složitější.
Řeší navíc i následující věci:

1) Selhání při odesílání textu na server.
Tvůj skript zahazuje uloženou zálohu hned při onsubmit, kdežto můj stornuje výchozí odeslání, odešle příspěvek AJAXem a čistí zálohu až v okamžiku, kdy server odpoví, že se zapsání do DB povedlo. I kdybych zanedbal neúmyslná selhání, server může mít k odeslanému příspěvku námitky (provádí se kontrola zakázaných slov, u nepřihlášeného se může ověřovat zadané jméno+heslo). MiniBB není stavěná tak, aby v případě problému vygenerovala znovu celý formulář i s odeslaným textem a dala uživateli možnost nápravy, takže se spolu se zálohováním zajistila i tahle uživatelská přítulnost.

2) Přítomnost stejného formuláře ve více otevřených oknech.
Záloha se ukládá i při onbluru. Jakmile dostane <textarea> focus, provádí se synchronizace s nejnovější podobou zálohy. To mimo jiného vyžaduje, aby měl skript dostatek odvahy na to, aby obsah formuláře vymazal :-) … pokud usoudí, že už byl odeslaný.

3) Správu více uložených textů.
Ukládají se jen hlavní formuláře ve vláknech (nikoliv editace příspěvku, zakládání vláken atd.) i s časem poslední změny a udržuje se i seznam míst, kde rozepsané texty jsou. Momentálně se k ničemu nevyužívá.

4) Spolupráci s ostatními skripty.
Pokud má uživatel zapnuté fixování formuláře, obnovení ze zálohy při načtení stránky ho samo nezapíná. A tak dále…

5) Kompatibilitu se staršími Explorery.
Když není localStorage, používá se behavior: url(#default#userData). Je to ale vlastně obecná záplata na localStorage, nesouvisí přímo se zálohováním.

počítám s tím, že kdo to skutečně chce smazat, prostě text vybere a smaže
Jeden klik je snazší. Mně zdejší mazací křížek napomáhá k tomu, abych si uvědomil, že je text vylovený ze zálohy a že možná někde jinde mám okno, ve kterém jsem ho rozepsal. Sice zde máme tu synchronizaci, která asi stoprocentně funguje, ale stejně nemám rád, když stejná data edituji na dvou místech současně. Na druhou stranu marginovi napomáhá k tomu, aby si rozepsaný text omylem smazal, takže to není ideální.
Amunak
Profil
Na Aragornu odesílání "nemůže selhat" (tak, že by to server odmítl). Bylo by určitě lepší kontrolovat skutečné uložení, a až pak localStorage mazat, ale vyžadovalo by to zvláštní magické schopnosti vyznat se v původním kódu a nějak to tam voperovat. O nějakou synchronizaci se nesnažím - jde mi čistě o krajní zálohu (tedy ne něco, na co by se mělo spoléhat) - když si někdo omylem zavře prohlížeč, nebo se k původnímu textu nedostane klikáním na zpět v prohlížeči. Dříve lidi mohli jen plakat, teď se to většinou povede zachránit.

Správa uložených textů by šla relativně snadno dopsat. Neřeším moc kompatibilitu, spoléhám na novější prohlížeče a s ostatními skripty nespolupracuji :)

Celkově je to tedy hlavně rozdíly v tom, jak se používá Arag., a jak djpw. Snad jsem tedy o nic nepřišel, děkuji za odpovědi.

Chamurappi:
Na druhou stranu marginovi napomáhá k tomu, aby si rozepsaný text omylem smazal, takže to není ideální.
Ano, to jsem četl, a byl to jeden z důvodů (tím druhým byla lenost), proč jsem se rozhodl nic takového nedělat.

IdemeNaHavaj:
Mně to maže obsah jen při F5, a to přijdu maximálně o pět vteřin psaní.
Chamurappi
Profil
Reaguji na Amunaka:
Bylo by určitě lepší kontrolovat skutečné uložení, a až pak localStorage mazat, ale vyžadovalo by to zvláštní magické schopnosti vyznat se v původním kódu a nějak to tam voperovat.
Pokud se po odeslání člověk ocitne na nějaké stránce, která ví, že odesílal, tak může smazání provést ta a celkem snadno. Na DJPW jsme museli předělat celé odesílání, protože po odeslání se přesměrovává na obyčejné zobrazení vlákna.

Dříve lidi mohli jen plakat, teď se to většinou povede zachránit.
To je určitě plus. Škoda, že takhle nefunguje většina webů. (Na druhou stranu skoro nikde jinde nic dlouhého nepíšu, takže mi to nevadí.)


Reaguji na IdemeNaHavaje:
kliknem v chrome na reload (nie na ten odkaz, ale v browsery na reload) a zmaže sa to
Neděláš to moc rychle? Musíš chvíli počkat, Amunak v odkázané ukázce nemá uložení při onbluru.

A tu na djpw to nefunguje tiež :)
Fakt? To je nějaké podezřelé. Znamená to, že ses ještě nesetkal s tím, že by nějaký formulář tady na DJPW obsahoval něco, co jsi dříve rozepsal?

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0