[gnus git] branch master updated: m0-7-56-gd54fa59 =1= * eww.el (eww-submit): Get submit button logic right.

Lars Magne Ingebrigtsen <[email protected]>
Newsgroups gmane.emacs.gnus.cvs
Message-ID <[email protected]>
       via  d54fa592ab919f897f6d0505b70beb90153e561f (commit)
      from  cdcf29eb1e925d1aa29f8d393a5a81441448dcfb (commit)


- Log -----------------------------------------------------------------
commit d54fa592ab919f897f6d0505b70beb90153e561f
Author: Lars Magne Ingebrigtsen <[email protected]>
Date:   Mon Jun 10 23:36:05 2013 +0200

    * eww.el (eww-submit): Get submit button logic right.

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index e90dfc9..3f0250e 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,5 +1,7 @@
 2013-06-10  Lars Magne Ingebrigtsen  <[email protected]>
 
+	* eww.el (eww-submit): Get submit button logic right.
+
 	* shr.el (shr-final-table-render): New variable to signal when we're
 	doing the final table rendering so that we can collect more data at
 	that point.
diff --git a/lisp/eww.el b/lisp/eww.el
index 4fbe89c..1a07224 100644
--- a/lisp/eww.el
+++ b/lisp/eww.el
@@ -222,56 +222,71 @@
     (put-text-property start (point) 'eww-widget widget)))
 
 (defun eww-click-radio (widget &rest ignore)
-  (let ((form (getf (cdr widget) :eww-form))
-	(name (getf (cdr widget) :name)))
+  (let ((form (plist-get (cdr widget) :eww-form))
+	(name (plist-get (cdr widget) :name)))
     (if (widget-value widget)
 	;; Switch all the other radio buttons off.
 	(dolist (overlay (overlays-in (point-min) (point-max)))
-	  (let ((field (getf (overlay-properties overlay) 'button)))
-	    (when (and (eq (getf (cdr field) :eww-form) form)
-		       (equal name (getf (cdr field) :name)))
+	  (let ((field (plist-get (overlay-properties overlay) 'button)))
+	    (when (and (eq (plist-get (cdr field) :eww-form) form)
+		       (equal name (plist-get (cdr field) :name)))
 	      (unless (eq field widget)
 		(widget-value-set field nil)))))
       (widget-value-set widget t))
     (eww-fix-widget-keymap)))
 
 (defun eww-submit (widget &rest ignore)
-  (let ((form (getf (cdr widget) :eww-form))
+  (let ((form (plist-get (cdr widget) :eww-form))
+	(first-button t)
 	values)
-    (dolist (overlay (overlays-in (point-min) (point-max)))
-      (let ((field (or (getf (overlay-properties overlay) 'field)
-		       (getf (overlay-properties overlay) 'button)
-		       (getf (overlay-properties overlay) 'eww-hidden))))
-	(when (eq (getf (cdr field) :eww-form) form)
-	  (let ((name (getf (cdr field) :name)))
+    (dolist (overlay (sort (overlays-in (point-min) (point-max))
+			   (lambda (o1 o2)
+			     (< (overlay-start o1) (overlay-start o2)))))
+      (let ((field (or (plist-get (overlay-properties overlay) 'field)
+		       (plist-get (overlay-properties overlay) 'button)
+		       (plist-get (overlay-properties overlay) 'eww-hidden))))
+	(when (eq (plist-get (cdr field) :eww-form) form)
+	  (let ((name (plist-get (cdr field) :name)))
 	    (when name
 	      (cond
 	       ((eq (car field) 'checkbox)
 		(when (widget-value field)
-		  (push (cons name (getf (cdr field) :checkbox-value))
+		  (push (cons name (plist-get (cdr field) :checkbox-value))
 			values)))
 	       ((eq (car field) 'eww-hidden)
-		(push (cons name (getf (cdr field) :value))
+		(push (cons name (plist-get (cdr field) :value))
 		      values))
+	       ((eq (car field) 'push-button)
+		;; We want the values from buttons if we hit a button,
+		;; or we're submitting something and this is the first
+		;; button displayed.
+		(when (or (and (eq (car widget) 'push-button)
+			       (eq widget field))
+			  (and (not (eq (car widget) 'push-button))
+			       (eq (car field) 'push-button)
+			       first-button))
+		  (setq first-button nil)
+		  (push (cons name (widget-value field))
+			values)))
 	       (t
 		(push (cons name (widget-value field))
 		      values))))))))
     (dolist (elem form)
       (when (and (consp elem)
 		 (eq (car elem) 'hidden))
-	(push (cons (getf (cdr elem) :name)
-		    (getf (cdr elem) :value))
+	(push (cons (plist-get (cdr elem) :name)
+		    (plist-get (cdr elem) :value))
 	      values)))
     (let ((shr-base eww-current-url))
-      (if (and (stringp (getf form :method))
-	       (equal (downcase (getf form :method)) "post"))
+      (if (and (stringp (plist-get form :method))
+	       (equal (downcase (plist-get form :method)) "post"))
 	  (let ((url-request-method "POST")
 		(url-request-data (mm-url-encode-www-form-urlencoded values)))
-	    (eww-browse-url (shr-expand-url (getf form :action))))
+	    (eww-browse-url (shr-expand-url (plist-get form :action))))
 	(eww-browse-url
 	 (shr-expand-url
 	  (concat
-	   (getf form :action)
+	   (cdr (assq :action form))
 	   "?"
 	   (mm-url-encode-www-form-urlencoded values))))))))
 
@@ -281,14 +296,18 @@
     (while (setq start (next-single-property-change start 'eww-widget))
       (setq widget (get-text-property start 'eww-widget))
       (goto-char start)
-      (delete-region start (next-single-property-change start 'eww-widget))
+      (let ((end (next-single-property-change start 'eww-widget)))
+	(dolist (overlay (overlays-in start end))
+	  (when (plist-get (overlay-properties overlay) 'button)
+	    (delete-overlay overlay)))
+	(delete-region start end))
       (apply 'widget-create widget))
     (widget-setup)
     (eww-fix-widget-keymap)))
 
 (defun eww-fix-widget-keymap ()
   (dolist (overlay (overlays-in (point-min) (point-max)))
-    (when (getf (overlay-properties overlay) 'button)
+    (when (plist-get (overlay-properties overlay) 'button)
       (overlay-put overlay 'local-map widget-keymap))))
 
 (provide 'eww)

-----------------------------------------------------------------------
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we listed those
revisions in full, above.

Summary of changes:
 lisp/ChangeLog |    2 +
 lisp/eww.el    |   63 ++++++++++++++++++++++++++++++++++++-------------------
 2 files changed, 43 insertions(+), 22 deletions(-)

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Gnus Project".

The branch, master has been updated


hooks/post-receive
-- 
Gnus Project
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.