Sandbox91

From Metabolomics.JP
(Difference between revisions)
Jump to: navigation, search
(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:page|Test}}
+
<!--
 +
{{#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:page}}([^%s]+)") do
+
--%% 前処理 %%--
   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
 
   i = i + 1
 +
 +
--  print(line .. "-" .. string.len(data) .. "-" .. string.len(line) .. "<br>") --%% チェック用
 
end
 
end
|{{#searchline:-|Index|{{#var:page}} }} }}
+
--%% 最後のアイテムを処理する %%--
 +
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



Personal tools
Namespaces

Variants
Actions
Navigation
metabolites
Toolbox