Textwellに「ファイル保存」を実装する ShotSaver

とはいえ、「ファイル」概念を持たないのがTextwellの魅力。


Textwell 1.1.7
分類: 仕事効率化,ユーティリティ
価格: \300 (Sociomedia)

ClipPadを使いながら思いました。「行単位でクリップするアクションがあるなら、文章全体もあっていいじゃないか」と。テキストのスナップショットを撮る。公式にもSnapアクションはありますが、ヒストリーと混在して不便です。せめて、絞り込みの手段がないと。それで自前のスナップショット・アクションを作りました。「今」を保管していきます。

<title>wait...</title>
<script>
  location="https://dl.dropboxusercontent.com/u/56343898/ss.html";
</script>

登録リンクはこちら→ http://tinyurl.com/lmzfqcq



中身はClipPadの使い回し。アクションを起動したとき、何か文章が書いてあれば、それを保存します。ファイル名をつける必要もない。ネット上のサーバーを呼び出すので、少し時間は掛かりますが、繋がれば即終了。本体内のlocalStorageにデータを保管します。



何も文章がなければ、スナップショットのリストが表示されます。二本指でスワイプして、本文をクリアしてから起動。スナップショットの日付とタイトルが並ぶ。タイトルはテキストの一行目で、これをタップすると読み込みます。「ファイル」みたいでしょ?



左端の赤帯をタップすると削除します。選ばれているスナップショットは日付の色が微妙にどす黒くなります。また、全体をクリアするときは二本指スワイプで。


localStorageがどれくらい文章を溜めておけるのか、よく分かりません。5MBが目安のようです。全体で5MBなので、長い文章を溜めるには不向きです。作業中の文章に限定し、完成版はDropboxや他のアプリに転送したほうが良いでしょう。Textwellの基本は「下書きアプリ」。スナップショットを意識して残す用途でShotSaverをお使いください。
Dropbox側のss.htmlは下記の通り。ご自分のDropboxにアップして使ってもらえると、アクセスが分散するので助かります。配色をカスタマイズするのも面白いですよ。

<meta name=viewport content=initial-scale=1>
<title>ShotSaver</title>
<style>
  table {
    width:100%;
    table-layout:fixed;
    word-wrap:break-word;
    white-space:pre;
  }
  td {
   color:black;
   background:#eee;
   font-size:medium;
   padding:10px;
  }
  td.num {
   color:white;
   background:darkred;
   width:60;
  }
  hr {
    border:0;
  }
</style>
<body id=wine></body>
<script>
cb=new Array();
document.ontouchmove=Clear;

function main(){
  t=localStorage.shot || "";
  s=T.text;
  if(s){
    d=new Date();
    day=Zero(d.getFullYear())+"/"+Zero(d.getMonth()+1)+"/"+Zero(d.getDate())+"\n";
    localStorage.shot=day+s+"\t"+t;
    T("done");
  }else{
    cb=t.split("\t");
    Disp();
    T.translucent(false);
  }
}

function Disp(){
  link="<hr>";
  for (i=0; i<cb.length-1; i++){
    s=cb[i].split("\n");
    link+="<table><td class=num onclick=Remove("+i+")>"+s[0]+"</td><td onclick=Paste("+i+")>"+s[1]+"</td></table><hr>\n";
  }
  wine.innerHTML=link;
}

function Paste(x){
   text=cb[x].substr(9);
   T("replace",{text:text});
}

  function Remove(x){
    if(confirm("Shotを削除します。")){
      cb.splice(x,1);
      localStorage.shot=cb.join("\t");
      Disp(x)
    }
  }

function Zero(x){
  return ("00"+x).slice(-2);
}

function Clear(e){
  if(e.touches.length>1){
    if(confirm("Shotを全部クリアします。")){
      localStorage.shot="";
      T("done");
    }
  }
}

location="textwell:///webdelegate?init=main";
</script>