More work on wiki csv forms, a=chris

Chris Pollett [2022-09-09 06:Sep:th]
More work on wiki csv forms, a=chris
Filename
src/css/search.css
src/library/WikiParser.php
diff --git a/src/css/search.css b/src/css/search.css
index 9be5756f4..ea6acbc06 100755
--- a/src/css/search.css
+++ b/src/css/search.css
@@ -4390,6 +4390,34 @@ table.wikitable > caption
 {
     font-weight:bold;
 }
+.csv-form-field
+{
+    margin-bottom: 10px;
+    margin-top: 10px;
+
+}
+.csv-form-field input[type=checkbox]
+{
+    margin: 5px;
+    position: relative;
+    top: -2px;
+}
+.html-ltr .csv-form-field label
+{
+    padding-right: 5px;
+}
+.html-rtl .csv-form-field label
+{
+    padding-left: 5px;
+}
+.csv-star
+{
+    color: gray;
+    font-size: 20pt;
+    padding: 3px;
+    position: relative;
+    top: 5px;
+}
 .rel-type-current
 {
     border:2px solid black;
diff --git a/src/library/WikiParser.php b/src/library/WikiParser.php
index d410c35d9..d9224bf8b 100644
--- a/src/library/WikiParser.php
+++ b/src/library/WikiParser.php
@@ -194,48 +194,78 @@ class WikiParser implements CrawlConstants
             ["/{{username}}/si",
                 "<input type='hidden' name='username' value='[{username}]' />"],
             ["/{{image-captcha\|(.+?)}}/si", "<div class='csv-captcha'>".
-                "<label for='captcha-id'>$1</label> [{image-captcha}]".
-                "<input id='captcha-id' type='text' name='user_captcha_text'/>".
-                "*</div><input type='hidden' name='CSVFORM[user_captcha_text]'.
+                "[{image-captcha}]<br /><input id='captcha-id' ".
+                "type='text' name='user_captcha_text' placeholder='$1'/>".
+                "<span class='csv-star'>*</span></div><input type='hidden' ".
+                "name='CSVFORM[user_captcha_text]'.
                 value='textfield' />"],
             ["/{{textfield\|(.+?)\|(.+?)}}/si",
-                "<label for='$2-id'>$1</label> <input id='$2-id' ".
-                "type='text' name='$2' value='[{csv-$2}]'>".
-                "<input type='hidden' name='CSVFORM[$2]' value='textfield' />"],
+                "<div class='csv-form-field'><label for='$2-id'>$1</label>" .
+                "<input id='$2-id' type='text' name='$2' value='[{csv-$2}]'>" .
+                "<input type='hidden' name='CSVFORM[$2]' value='textfield' />" .
+                "</div>"],
             ["/{{r(?:equired)?-textfield\|(.+?)\|(.+?)}}/si",
-                "<label for='$2-id'>$1</label> <input id='$2-id' ".
-                "type='text' name='$2' value='[{csv-$2}]'>".
+                "<div class='csv-form-field'><label for='$2-id'>$1</label>".
+                "<input id='$2-id' type='text' name='$2' value='[{csv-$2}]'>".
                 "<input type='hidden' name='CSVFORM[$2]' ".
-                "value='textfield' /><span clas='csv-star'>*</span>"],
+                "value='textfield' /><span class='csv-star'>*</span></div>"],
             ["/{{textarea\|(.+?)\|(.+?)}}/si",
-                "<label for='$2-id'>$1</label><br /><textarea id='$2-id' ".
-                "name='$2' class='short-text-area'>[{csv-$2}]</textarea>" .
-                "<input type='hidden' name='CSVFORM[$2]' value='textarea' />"],
+                "<div class='csv-form-field'><label for='$2-id'>$1</label>".
+                "<br /><textarea id='$2-id' name='$2' ".
+                "class='short-text-area'>[{csv-$2}]</textarea>" .
+                "<input type='hidden' name='CSVFORM[$2]' value='textarea' />".
+                "</div>"],
             ['/{{r(?:equired)?-textarea\|(.+?)\|(.+?)}}/si',
-                "<label for='$2-id'>$1</label><textarea id='$2-id' ".
-                "name='$2' class='short-text-area'>[{csv-$2}]</textarea>" .
+                "<div class='csv-form-field'><label for='$2-id'>$1</label>".
+                "<textarea id='$2-id' name='$2' ".
+                "class='short-text-area'>[{csv-$2}]</textarea>" .
                 "<input type='hidden' name='RCSVFORM[$2]' value='textarea' />".
-                "<span clas='csv-star'>*</span>"],
+                "<span class='csv-star'>*</span></div>"],
             ["/{{checkbox\|(.+?)\|(.+?)}}/si",
-                "<label for='$2-id'>$1</label> <input id='$2-id' ".
+                "<div class='csv-form-field'><label for='$2-id'>$1</label>".
+                "<input id='$2-id' type='checkbox' name='$2' ".
+                "[{csv-checked-$2}] /><input type='hidden' ".
+                "name='CSVFORM[$2]' value='checkbox' /></div>"],
+            ["/{{lcheckbox\|(.+?)\|(.+?)}}/si",
+                "<div class='csv-form-field'><input id='$2-id' ".
                 "type='checkbox' name='$2' [{csv-checked-$2}] />".
-                "<input type='hidden' name='CSVFORM[$2]' value='checkbox' />"],
+                "<label for='$2-id'>$1</label><input type='hidden' ".
+                "name='CSVFORM[$2]' value='checkbox' /></div>"],
             ["/{{r(?:equired)?-checkbox\|(.+?)\|(.+?)}}/si",
-                "<label for='$2-id'>$1</label> <input id='$2-id' ".
-                "type='checkbox' name='$2' [{csv-checked-$2}] />".
+                "<div class='csv-form-field'><label for='$2-id'>$1</label>" .
+                "<input id='$2-id' type='checkbox' name='$2' " .
+                "[{csv-checked-$2}] /><input type='hidden' ".
+                "name='RCSVFORM[$2]' value='checkbox' /></div>"],
+            ["/{{r(?:equired)?-lcheckbox\|(.+?)\|(.+?)}}/si",
+                "<input id='$2-id' type='checkbox' name='$2' ".
+                "[{csv-checked-$2}] /><label for='$2-id'>$1</label> ".
                 "<input type='hidden' name='RCSVFORM[$2]' value='checkbox' />"],
             ["/{{radio\|(.+?)\|(.+?)\|(.+?)}}/si",
-                "<label for='$2-$3-id'>$1</label> <input id='$2-$3-id' ".
+                "<div class='csv-form-field'><label for='$2-$3-id'>$1</label>".
+                "<input id='$2-$3-id' type='radio' name='$2' value='$3' ".
+                "[{csv-checked-$2}] /><input type='hidden' name='CSVFORM[$2]' ".
+                "value='radio' /></div>"],
+            ["/{{lradio\|(.+?)\|(.+?)\|(.+?)}}/si",
+                "<div class='csv-form-field'><input id='$2-$3-id' ".
                 "type='radio' name='$2' value='$3' [{csv-checked-$2}] />".
-                "<input type='hidden' name='CSVFORM[$2]' value='radio' />"],
+                "<label for='$2-$3-id'>$1</label><input type='hidden' ".
+                "name='CSVFORM[$2]' value='radio' /></div>"],
             ["/{{r(?:equired)?-radio\|(.+?)\|(.+?)\|(.+?)}}/si",
-                "<label for='$2-$3-id'>$1</label> <input id='$2-$3-id' ".
+                "<div class='csv-form-field'><label for='$2-$3-id'>$1</label>".
+                "<input id='$2-$3-id' type='radio' name='$2' value='$3' ".
+                "[{csv-checked-$2}] /><input type='hidden' ".
+                "name='RCSVFORM[$2]' value='radio' /><span ".
+                "class='csv-star'>*</span></div>"],
+            ["/{{r(?:equired)?-lradio\|(.+?)\|(.+?)\|(.+?)}}/si",
+                "<div class='csv-form-field'><input id='$2-$3-id' ".
                 "type='radio' name='$2' value='$3' [{csv-checked-$2}] />".
-                "<input type='hidden' name='RCSVFORM[$2]' value='radio' />".
-                "<span clas='csv-star'>*</span>"],
+                "<label for='$2-$3-id'>$1</label><input type='hidden' ".
+                "name='RCSVFORM[$2]' value='radio' /><span ".
+                "class='csv-star'>*</span></div>"],
             ["/{{submit\|(.+?)\|(.+?)}}/si",
-                "<input id='$2-id' type='submit' name='$1' value='$2' >".
-                "<input type='hidden' name='CSVFORM[$2]' value='submit' />"],
+                "<div class='csv-form-field'><input id='$2-id' type='submit' ".
+                "name='$1' value='$2' ><input type='hidden' ".
+                "name='CSVFORM[$2]' value='submit' /></div>"],
             ['/'.$not_paragraph.'{{\s*class\s*\=\s*'.
                 "&quot;([$class_or_id]+)&quot;\s+(".$not_braces .")}}/",
                 "$esc<span class=\"$1\" >\t\n$2$esc</span>\t"],
ViewGit