2013-06-10 Lars Magne Ingebrigtsen <larsi@gnus.org>
+ * 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.
+
* eww.el (eww-submit): Make form submission work.
(eww-tag-input): Implement submit buttons.
(eww-click-radio): Implement radio and checkboxes.
+ (eww-submit): Handle hidden elements.
* shr.el (shr-descend): Allow other packages to override (or provide)
rendering of elements.
:checkbox-value (cdr (assq :value cont))
:eww-form eww-form
(cdr (assq :checked cont))))
+ ((equal type "hidden")
+ (list 'hidden
+ :name (cdr (assq :name cont))
+ :value (cdr (assq :value cont))))
(t
(list
'editable-field
:action 'eww-submit
:name (cdr (assq :name cont))
:eww-form eww-form)))))
- (apply 'widget-create widget)
+ (if (eq (car widget) 'hidden)
+ (when shr-final-table-render
+ (nconc eww-form (list widget)))
+ (apply 'widget-create widget))
(put-text-property start (point) 'eww-widget widget)))
(defun eww-click-radio (widget &rest ignore)
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) 'button)
+ (getf (overlay-properties overlay) 'eww-hidden))))
(when (eq (getf (cdr field) :eww-form) form)
(let ((name (getf (cdr field) :name)))
(when name
(when (widget-value field)
(push (cons name (getf (cdr field) :checkbox-value))
values)))
+ ((eq (car field) 'eww-hidden)
+ (push (cons name (getf (cdr field) :value))
+ values))
(t
(push (cons name (widget-value field))
values))))))))
- (debug values)
+ (dolist (elem form)
+ (when (and (consp elem)
+ (eq (car elem) 'hidden))
+ (push (cons (getf (cdr elem) :name)
+ (getf (cdr elem) :value))
+ values)))
(let ((shr-base eww-current-url))
(if (and (stringp (getf form :method))
(equal (downcase (getf form :method)) "post"))
(defun eww-fix-widget-keymap ()
(dolist (overlay (overlays-in (point-min) (point-max)))
- (when (or (getf (overlay-properties overlay) 'field)
- (getf (overlay-properties overlay) 'button))
+ (when (getf (overlay-properties overlay) 'button)
(overlay-put overlay 'local-map widget-keymap))))
(provide 'eww)
(defvar shr-base nil)
(defvar shr-ignore-cache nil)
(defvar shr-external-rendering-functions nil)
+(defvar shr-final-table-render nil)
(defvar shr-map
(let ((map (make-sparse-keymap)))
(frame-width))
(setq truncate-lines t))
;; Then render the table again with these new "hard" widths.
- (shr-insert-table (shr-make-table cont sketch-widths t) sketch-widths))
+ (let ((shr-final-table-render t))
+ (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
;; into the tables.