Sandbox91
From Metabolomics.JP
(Difference between revisions)
| (36 intermediate revisions by one user not shown) | |||
| Line 1: | Line 1: | ||
| − | {{#def: | + | <!-- |
| + | {{#get:listpage}} リストページ | ||
| + | {{#get:initset}} 現在セットされている項目。&&区切りの文字列 | ||
| + | {{#get:prevpage}} 飛んできたページ | ||
| + | {{#get:title}} 「species」や「効能」と言ったようなタイトル | ||
| + | --> | ||
| + | {{#def:listpage|{{#if:{{#get:listpage}}|{{#get:listpage}}|Test}}}} <!-- リストページ def. Test --> | ||
| + | |||
{{#lua: | {{#lua: | ||
| − | for line in string.gmatch(stdin, "&&{{#var: | + | --%% 前処理 %%-- |
| − | print(line .. "<br>") | + | local list = {} -- データリスト |
| + | local levs = {} -- 各データのレベル | ||
| + | local flag = {} -- 最下層のアイテムかどうか | ||
| + | local i, j, data, index, leve, prev | ||
| + | i = 0; index = 0; level = 0; prev = 0 | ||
| + | |||
| + | --%% データ整理 %%-- | ||
| + | for line in string.gmatch(stdin, "&&{{#var:listpage}}([^&]+)") do | ||
| + | --%% -の数を調べる %%-- | ||
| + | data = string.gsub(line, "^-+", "", 1) --%% 先頭の-を削除する %%-- | ||
| + | level = string.len(line) - string.len(data) --%% -を削除した文字列と元の文字列の長さを比較する %%-- | ||
| + | |||
| + | --%% データを配列へ格納 %%-- | ||
| + | list[i] = string.gsub(string.gsub(data, "%s*$", ""), "^%s*", "") --%% trimの代わり %%-- | ||
| + | levs[i] = level | ||
| + | flag[i] = 0 | ||
| + | |||
| + | --%% 最下層を調べ、最下層ならflagをセットする %%-- | ||
| + | if(prev < level) then | ||
| + | index = i | ||
| + | elseif(prev > level) then | ||
| + | for j = i-1, index, -1 do | ||
| + | flag[j] = 1 | ||
| + | end | ||
| + | index = i | ||
| + | end | ||
| + | |||
| + | prev = level; | ||
| + | i = i + 1 | ||
| + | |||
| + | -- print(line .. "-" .. string.len(data) .. "-" .. string.len(line) .. "<br>") --%% チェック用 | ||
end | end | ||
| − | |{{# | + | --%% 最後のアイテムを処理する %%-- |
| + | for j = i-1, index, -1 do | ||
| + | flag[j] = 1 | ||
| + | end | ||
| + | |||
| + | --%% 表示処理 %%-- | ||
| + | print('{{#form' .. 'tag:form|action="/wiki/{{#get:prevpage}}" method="post"|') | ||
| + | print('{{#form' .. 'tag:input|type="submit" value="update"}}<br>') | ||
| + | |||
| + | --%% できればここに目次を作成したい %%-- | ||
| + | |||
| + | local maxn, margin, checked; | ||
| + | maxn = table.maxn(list) | ||
| + | for i = 0, maxn do | ||
| + | --%% levelに応じたマージンを設定する %%-- | ||
| + | margin = levs[i] * 24 | ||
| + | print('<span style="margin-left: ' .. margin .. 'px">') | ||
| + | |||
| + | --%% あらかじめセットしてあるデータの場合は、チェックを付けておく - データは&&区切りで渡す %%-- | ||
| + | if(string.match("{{#get:initset}}", "&&" .. list[i] .. "&&", 0) == nil) then | ||
| + | checked = '' | ||
| + | else | ||
| + | checked = ' checked="yes"' | ||
| + | end | ||
| + | |||
| + | --%% 最下層ならチェックボックスを、そうでないならそのまま表示する %%-- | ||
| + | if(flag[i] == 1) then | ||
| + | -- <nowiki>{{#formtag:input|type="checkbox" value="data" name="list" id="data"}}{{#formtag:label|for="data"|data}}</nowiki> | ||
| + | print('{{#form' .. 'tag:input|type="checkbox" value="' .. list[i] .. '" name="list[]" id="' .. list[i] .. '"' .. checked .. '}}{{#form' .. 'tag:label|for="' .. list[i] .. '"|' .. list[i] .. '}}<br>') | ||
| + | else | ||
| + | print(list[i] .. "<br>") | ||
| + | end | ||
| + | |||
| + | print("</span>") | ||
| + | end | ||
| + | print('{{#form' .. 'tag:input|type="hidden" name="listpage" value="{{#var:listpage}}"}}') | ||
| + | print('{{#form' .. 'tag:input|type="hidden" name="title" value="{{#get:title}}"}}') | ||
| + | print('{{#form' .. 'tag:input|type="hidden" name="hookinsert" value="__HOOK_AND_INSERT__"}}') | ||
| + | print('{{#form' .. 'tag:input|type="submit" value="update"}}') | ||
| + | print('}}') | ||
| + | |||
| + | |{{#SearchLine:-|Index|{{#var:listpage}}}} | ||
| + | }} | ||
Latest revision as of 23:20, 28 February 2009