emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] trunk r112989: lisp/gnus/eww.el (eww-submit): Get submit b


From: Katsumi Yamaoka
Subject: [Emacs-diffs] trunk r112989: lisp/gnus/eww.el (eww-submit): Get submit button logic right when hitting RET on non-submit buttons
Date: Fri, 14 Jun 2013 11:16:31 +0000
User-agent: Bazaar (2.6b2)

------------------------------------------------------------
revno: 112989
revision-id: address@hidden
parent: address@hidden
author: Lars Magne Ingebrigtsen <address@hidden>
committer: Katsumi Yamaoka <address@hidden>
branch nick: trunk
timestamp: Fri 2013-06-14 11:16:26 +0000
message:
  lisp/gnus/eww.el (eww-submit): Get submit button logic right when hitting RET 
on non-submit buttons
  lisp/gnus/shr.el: Remove shr-preliminary-table-render, since that can't 
really be used for anything in practice
modified:
  lisp/gnus/ChangeLog            changelog-20091113204419-o5vbwnq5f7feedwu-1433
  lisp/gnus/eww.el               eww.el-20130610114603-80ap3gwnw4x4m5ix-1
  lisp/gnus/shr.el               shr.el-20101002102929-yfzewk55rsg0mn93-1
=== modified file 'lisp/gnus/ChangeLog'
--- a/lisp/gnus/ChangeLog       2013-06-14 09:48:49 +0000
+++ b/lisp/gnus/ChangeLog       2013-06-14 11:16:26 +0000
@@ -1,3 +1,11 @@
+2013-06-14  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * eww.el (eww-submit): Get submit button logic right when hitting RET
+       on non-submit buttons.
+
+       * shr.el: Remove shr-preliminary-table-render, since that can't really
+       be used for anything in practice.
+
 2013-06-13  Albert Krewinkel  <address@hidden>
 
        * sieve.el: Rebind q to (sieve-bury-buffer), bind Q to

=== modified file 'lisp/gnus/eww.el'
--- a/lisp/gnus/eww.el  2013-06-14 03:26:34 +0000
+++ b/lisp/gnus/eww.el  2013-06-14 11:16:26 +0000
@@ -206,12 +206,12 @@
         (widget
          (cond
           ((equal type "submit")
-           (list
-            'push-button
-            :notify 'eww-submit
-            :name (cdr (assq :name cont))
-            :eww-form eww-form
-            (or (cdr (assq :value cont)) "Submit")))
+           (list 'push-button
+                 :notify 'eww-submit
+                 :name (cdr (assq :name cont))
+                 :value (cdr (assq :value cont))
+                 :eww-form eww-form
+                 (or (cdr (assq :value cont)) "Submit")))
           ((or (equal type "radio")
                (equal type "checkbox"))
            (list 'checkbox
@@ -226,18 +226,17 @@
                  :name (cdr (assq :name cont))
                  :value (cdr (assq :value cont))))
           (t
-           (list
-            'editable-field
-            :size (string-to-number
-                   (or (cdr (assq :size cont))
-                       "40"))
-            :value (or (cdr (assq :value cont)) "")
-            :secret (and (equal type "password") ?*)
-            :action 'eww-submit
-            :name (cdr (assq :name cont))
-            :eww-form eww-form)))))
-    (if (eq (car widget) 'hidden)
-       (nconc eww-form (list widget))
+           (list 'editable-field
+                 :size (string-to-number
+                        (or (cdr (assq :size cont))
+                            "40"))
+                 :value (or (cdr (assq :value cont)) "")
+                 :secret (and (equal type "password") ?*)
+                 :action 'eww-submit
+                 :name (cdr (assq :name cont))
+                 :eww-form eww-form)))))
+    (nconc eww-form (list widget))
+    (unless (eq (car widget) 'hidden)
       (apply 'widget-create widget)
       (put-text-property start (point) 'eww-widget widget))))
 
@@ -282,14 +281,12 @@
 
 (defun eww-submit (widget &rest ignore)
   (let ((form (plist-get (cdr widget) :eww-form))
-       (first-button t)
        values)
     (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))))
+                      (plist-get (overlay-properties overlay) 'button))))
        (when (eq (plist-get (cdr field) :eww-form) form)
          (let ((name (plist-get (cdr field) :name)))
            (when name
@@ -298,19 +295,12 @@
                (when (widget-value field)
                  (push (cons name (plist-get (cdr field) :checkbox-value))
                        values)))
-              ((eq (car field) 'eww-hidden)
-               (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)
+               ;; if it's the first button in the DOM after the field
+               ;; hit ENTER on.
+               (when (and (eq (car widget) 'push-button)
+                          (eq widget field))
                  (push (cons name (widget-value field))
                        values)))
               (t
@@ -322,6 +312,25 @@
        (push (cons (plist-get (cdr elem) :name)
                    (plist-get (cdr elem) :value))
              values)))
+    ;; If we hit ENTER in a non-button field, include the value of the
+    ;; first submit button after it.
+    (unless (eq (car widget) 'push-button)
+      (let ((rest form)
+           (name (plist-get (cdr widget) :name)))
+       (when rest
+         (while (and rest
+                     (or (not (consp (car rest)))
+                         (not (equal name (plist-get (cdar rest) :name)))))
+           (pop rest)))
+       (while rest
+         (let ((elem (pop rest)))
+           (when (and (consp (car rest))
+                      (eq (car elem) 'push-button))
+             (push (cons (plist-get (cdr elem) :name)
+                         (plist-get (cdr elem) :value))
+                   values)
+             (setq rest nil))))))
+    (debug values)
     (let ((shr-base eww-current-url))
       (if (and (stringp (cdr (assq :method form)))
               (equal (downcase (cdr (assq :method form))) "post"))

=== modified file 'lisp/gnus/shr.el'
--- a/lisp/gnus/shr.el  2013-06-14 03:22:26 +0000
+++ b/lisp/gnus/shr.el  2013-06-14 11:16:26 +0000
@@ -115,7 +115,6 @@
 (defvar shr-base nil)
 (defvar shr-ignore-cache nil)
 (defvar shr-external-rendering-functions nil)
-(defvar shr-preliminary-table-render nil)
 
 (defvar shr-map
   (let ((map (make-sparse-keymap)))
@@ -158,6 +157,7 @@
        (shr-state nil)
        (shr-start nil)
        (shr-base nil)
+       (shr-preliminary-table-render 0)
        (shr-width (or shr-width (window-width))))
     (shr-descend (shr-transform-dom dom))
     (shr-remove-trailing-whitespace start (point))))
@@ -1167,7 +1167,6 @@
   (setq cont (or (cdr (assq 'tbody cont))
                 cont))
   (let* ((shr-inhibit-images t)
-        (shr-preliminary-table-render t)
         (shr-table-depth (1+ shr-table-depth))
         (shr-kinsoku-shorten t)
         ;; Find all suggested widths.
@@ -1189,7 +1188,6 @@
             (frame-width))
       (setq truncate-lines t))
     ;; Then render the table again with these new "hard" widths.
-    (setq shr-preliminary-table-render nil)
     (shr-insert-table (shr-make-table cont sketch-widths t) sketch-widths))
   ;; Finally, insert all the images after the table.  The Emacs buffer
   ;; model isn't strong enough to allow us to put the images actually


reply via email to

[Prev in Thread] Current Thread [Next in Thread]