(eww-tag-select): Implement <select>.
authorLars Magne Ingebrigtsen <larsi@gnus.org>
Tue, 11 Jun 2013 16:23:57 +0000 (18:23 +0200)
committerLars Magne Ingebrigtsen <larsi@gnus.org>
Tue, 11 Jun 2013 16:23:57 +0000 (18:23 +0200)
lisp/ChangeLog
lisp/eww.el

index cafd18a..43a7c33 100644 (file)
@@ -2,6 +2,7 @@
 
        * eww.el (eww-convert-widgets): Make widgets from non-tabular layouts
        work, too.
+       (eww-tag-select): Implement <select>.
 
 2013-06-10  Albert Krewinkel  <krewinkel@moltkeplatz.de>
 
index 7f48fce..3e79973 100644 (file)
@@ -88,7 +88,7 @@
          (shr-external-rendering-functions
           '((form . eww-tag-form)
             (input . eww-tag-input)
-            (submit . eww-tag-submit))))
+            (select . eww-tag-select))))
       (shr-insert-document document)
       (eww-convert-widgets))
     (goto-char (point-min))))
     (put-text-property start (point) 'eww-widget widget)
     (insert " ")))
 
+(defun eww-tag-select (cont)
+  (shr-ensure-paragraph)
+  (let ((menu (list 'menu-choice
+                   :name (cdr (assq :name cont))
+                   :eww-form eww-form))
+       (options nil)
+       (start (point)))
+    (dolist (elem cont)
+      (when (eq (car elem) 'option)
+       (when (cdr (assq :selected (cdr elem)))
+         (nconc menu (list :value
+                           (cdr (assq :value (cdr elem))))))
+       (push (list 'item
+                   :value (cdr (assq :value (cdr elem)))
+                   :tag (cdr (assq 'text (cdr elem))))
+             options)))
+    (nconc menu options)
+    (apply 'widget-create menu)
+    (put-text-property start (point) 'eww-widget menu)
+    (shr-ensure-paragraph)))
+
 (defun eww-click-radio (widget &rest ignore)
   (let ((form (plist-get (cdr widget) :eww-form))
        (name (plist-get (cdr widget) :name)))