Hatena::Let

"Hatena::Let" でひとこと

8 fans

書き込むには、ログインまたはユーザー登録を行ってください。 初めての方へ

unarist

Hatena::Let

backurlが修正されない代わりにhatelaboのログイン画面が新しくなってる・・・。
unarist

Hatena::Let

結論としては、何故かbackurlに https://let.hatelabo.jp を指定しているLet側が悪かった。
userscript: https://gist.github.com/unarist/5912a1d60239961059b63ffc3b9c6a89

でも https://let.hatelabo.jp/xxx から http://hatelabo.jp/xxx にリダイレクトするのもちょっと変だと思う。
unarist

Hatena::Let

Hatena::Let、というかはてラボのログインページ、backurlのオリジン部分を無視するのいいかげんどうにかならんのか。どうもならんだろうな。

* let.hatelabo.jpからログインするとhatelabo.jpへ
* let.hatelabo.jp/user/xxxxからログインするとhatelabo.jp/user/xxxxへ (404)
unarist

Hatena::Let

返信先のろまんば
最初と最後の行を捨てればいいってのは賢いですねえ。今度うちのUserScriptでも真似しようかな。
noromanba

Hatena::Let

返信先のろまんば
hredoc これだ、懐かしい
siteinfo regexp demo - Hatena::Let
function commentToText(commentFunc) {
return commentFunc.toString().replace(/^.*?\r?\n/, '').replace(/\r?\n.*?$/, '');
}
> https://github.com/to/tombloo/blob/d040ea4/xpi/chrome/content/library/01_utility.js#L2489
noromanba

Hatena::Let

返信先unarist
シンプルで良いですね
# ダルいので常に mail 使ってます
noromanba

Hatena::Let

返信先unarist
Function#toString() でオレオレテンプレートは、昔どっかで見ましたが思い出せず
noromanba

Hatena::Let

返信先unarist
記事初めて見ましたが、皆欲しいのは単なる heredoc でテンプレートは難読リスク重いのでよくわかります。toString、広く知られたのが Tombloo 辺りで、以前Letでも拝借しました。この辺相当歴史古いので記事準備してます。E4X以前とかあまり解説無いし。
``はタグ関数で綺麗にやれるなら良いと思います。
unarist

Hatena::Let

Template literals の件、割とあっさり決着がついた。

http://let.hatelabo.jp/unarist/let/hJme5PqDlpFI

× `<div class="${LET_ID}" onclick="alert('test')"></div>`
○ `'<div class="${LET_ID}" onclick="alert(\'test\')"></div>'`.slice(1, -1)

JavaScript::Squish の実装が緩いおかげで改行も通ります。

// そしてさっきからreCAPTCHAに答えてもちっとも投稿できないので
// メール投稿を使ってみることにした。こっちならいけるっぽい。
unarist

Hatena::Let

と思ったけどコメント消されるから駄目なんだった。

他にpackerを回避する方法というと、やっぱり文字列リテラルぐらいなんだよなあ。どちらかの引用符とバッククォートを入れ替えてfunction内に書いて、toString()で取り出して、入れ替えなおして、評価・・・なんて。
unarist

Hatena::Let

返信先のろまんば
どちらもわかりにくいバグになりかねないし、HTMLとCSSには基本的にTemplate literals使わないほうが安心ってことになってしまうよなあ、という感想です。それより細かく使い分けるとややこしいですし。
// ただの文章でもアポストロフィとしてシングルクォート使うとはまるのだけど

Function.prototype.toString() を使ったヒアドキュメント(http://qiita.com/ampersand/items/c6c773ba7ae9115856d0)を愛用していたので、そこに簡単なテンプレート機能を足せないかなーと思ったりしました。
noromanba

Hatena::Let

返信先のろまんば
一方 `` って普通の ES2015 でも出てくると身構えるので、まぁこの仕様のまんまでいいか、という思いもある
noromanba

Hatena::Let

`css`の問題、packer回避のマジックコメントとかアノテーションの類い欲しい
noromanba

Hatena::Let

返信先unarist
なるほど結構複雑!ありがとうございます。そのうち書き直しときます。
しかしこれスマートに回避できるのだろうか…
unarist

Hatena::Let

http://let.hatelabo.jp/noromanba/let/hJme5KCympQW
> malfunction multi style due to Hatena::Let packer was remove all spaces
> i.e. `.klass div {} .klass pre {}` -> `.klassdiv{}.klasspre{}`

リテラルの時点で英数字の間にあるスペースは1文字に切り詰められるだけで、なくなりはしません。

`.klass div {} .klass pre {}` -> `.klass div{}.klass pre{}`

問題になるのは記号(具体的には !%&()*+,-/:;<=>?[]\{|}~)の前後です。

プレースホルダの前後: ${LET_ID} div -> ${LET_ID}div
記号で始まるセレクタを単独で使う時: div .klass ::before -> div.klass::before
符号付きの値: 10px -10px -> 10px-10px

タグセレクタの連続や 1px solid gray みたいなのは大丈夫です。

別の問題として、Template literals 内で文字列リテラルや正規表現リテラルを開きっぱなしにすると、以降のコードのリテラル内判定がひっくり返る。開きっぱなしでコードが終わると、開いてからのコードは出力されない(というSquishの仕様)。大抵ペアで使う引用符はともかく、閉じタグのスラッシュは単独で使うから危ない。

ちなみに、スラッシュ(英数字および )._$\ に続くもの以外)で始まりスラッシュ(エスケープされたもの以外)で終わる範囲が正規表現リテラルとして扱われるようです。

例 ... (続きを読む)
unarist

Hatena::Let

Let内に書かれた他のLetへのリンクをクリックするとdiffを表示するUserScriptを書き始めた。
https://gist.github.com/unarist/e7ee9237764cc5cd2a3b4a531db8b5ee
jsdiffなるライブラリを使ってみたけど、やっぱりGitHubみたいに行比較しつつ行内の差分をハイライトして、side by sideで表示したいなーとか思うと、この記事みたいにdiff2html使うのがいいかなーとか思案中。
http://www.axlight.com/mt/sundayhacking/2014/12/githubdiffjavascript.html
unarist

Hatena::Let

うへー。.packed.js や @javascript_url の変換は Template literals を解釈しない=文字列ではなくJSコードの一部のように扱うので、記号の前後の空白文字を取り除いてしまうのね。CSSセレクタとかclass属性とかが死ぬ。
# このサイトがES2015に対応しているといつから(ry
noromanba
noromanba

Hatena::Let

Ten.JSDeferred のサンプル。spam野郎のおかげで お^Hごみくじになりました。
Hatena::Let::Omikuji - Hatena::Let
そのうち Promise で書き換え…ないなこれは。cho45 さん defer の概念ありがとう。
noromanba
▼はてなハイクの今月のスポンサー

規約違反を通報

非表示設定

表示内容を選択