Sandbox91
From Metabolomics.JP
(Difference between revisions)
(New page: {{#def:page|Test}} {{#lua: for line in string.gmatch(stdin, "&&{{#var:page}}([^%s]+)") do print(line .. "<br>") i = i + 1 end |{{#searchline:-|Index|{{#var:page}} }} }}) |
|||
(37 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: | + | --%% 前処理 %%-- |
− | + | 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 | 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