diff options
| author | Lars Magne Ingebrigtsen | 2014-11-27 17:50:05 +0100 |
|---|---|---|
| committer | Lars Magne Ingebrigtsen | 2014-11-27 17:50:05 +0100 |
| commit | 7c449b8f0dc926a12dcb6d3abbdbd6fe8decadc8 (patch) | |
| tree | 2e5e4d71dd79d0ede2e798cc47911ce786926256 | |
| parent | 604ce9124efd295b46e3fbb2d6880302fe55a33f (diff) | |
| download | emacs-7c449b8f0dc926a12dcb6d3abbdbd6fe8decadc8.tar.gz emacs-7c449b8f0dc926a12dcb6d3abbdbd6fe8decadc8.zip | |
Add more sanity checks to the last eww after-change-function patch
| -rw-r--r-- | lisp/net/eww.el | 96 |
1 files changed, 49 insertions, 47 deletions
diff --git a/lisp/net/eww.el b/lisp/net/eww.el index 63a6c0d7af0..a082fe5a1b5 100644 --- a/lisp/net/eww.el +++ b/lisp/net/eww.el | |||
| @@ -953,53 +953,55 @@ appears in a <link> or <a> tag." | |||
| 953 | See URL `https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input'.") | 953 | See URL `https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input'.") |
| 954 | 954 | ||
| 955 | (defun eww-process-text-input (beg end length) | 955 | (defun eww-process-text-input (beg end length) |
| 956 | (let* ((pos (cond | 956 | (when-let (pos (and (< (1+ end) (point-max)) |
| 957 | ((get-text-property (1- end) 'eww-form) | 957 | (> (1- end) (point-min)) |
| 958 | (1- end)) | 958 | (cond |
| 959 | ((get-text-property (1+ end) 'eww-form) | 959 | ((get-text-property (1- end) 'eww-form) |
| 960 | (1+ end)))) | 960 | (1- end)) |
| 961 | (form (get-text-property pos 'eww-form)) | 961 | ((get-text-property (1+ end) 'eww-form) |
| 962 | (properties (text-properties-at pos)) | 962 | (1+ end))))) |
| 963 | (inhibit-read-only t) | 963 | (let* ((form (get-text-property pos 'eww-form)) |
| 964 | (type (plist-get form :type))) | 964 | (properties (text-properties-at pos)) |
| 965 | (when (and form | 965 | (inhibit-read-only t) |
| 966 | (member type eww-text-input-types)) | 966 | (type (plist-get form :type))) |
| 967 | (cond | 967 | (when (and form |
| 968 | ((zerop length) | 968 | (member type eww-text-input-types)) |
| 969 | ;; Delete some space at the end. | 969 | (cond |
| 970 | (save-excursion | 970 | ((zerop length) |
| 971 | (goto-char | 971 | ;; Delete some space at the end. |
| 972 | (if (equal type "textarea") | 972 | (save-excursion |
| 973 | (1- (line-end-position)) | 973 | (goto-char |
| 974 | (eww-end-of-field))) | 974 | (if (equal type "textarea") |
| 975 | (let ((new (- end beg))) | 975 | (1- (line-end-position)) |
| 976 | (while (and (> new 0) | 976 | (eww-end-of-field))) |
| 977 | (eql (following-char) ? )) | 977 | (let ((new (- end beg))) |
| 978 | (delete-region (point) (1+ (point))) | 978 | (while (and (> new 0) |
| 979 | (setq new (1- new)))) | 979 | (eql (following-char) ? )) |
| 980 | (set-text-properties beg end properties))) | 980 | (delete-region (point) (1+ (point))) |
| 981 | ((> length 0) | 981 | (setq new (1- new)))) |
| 982 | ;; Add padding. | 982 | (set-text-properties beg end properties))) |
| 983 | (save-excursion | 983 | ((> length 0) |
| 984 | (goto-char (1- end)) | 984 | ;; Add padding. |
| 985 | (goto-char | 985 | (save-excursion |
| 986 | (if (equal type "textarea") | 986 | (goto-char (1- end)) |
| 987 | (1- (line-end-position)) | 987 | (goto-char |
| 988 | (1+ (eww-end-of-field)))) | 988 | (if (equal type "textarea") |
| 989 | (let ((start (point))) | 989 | (1- (line-end-position)) |
| 990 | (insert (make-string length ? )) | 990 | (1+ (eww-end-of-field)))) |
| 991 | (set-text-properties start (point) properties))))) | 991 | (let ((start (point))) |
| 992 | (let ((value (buffer-substring-no-properties | 992 | (insert (make-string length ? )) |
| 993 | (eww-beginning-of-field) | 993 | (set-text-properties start (point) properties))))) |
| 994 | (eww-end-of-field)))) | 994 | (let ((value (buffer-substring-no-properties |
| 995 | (when (string-match " +\\'" value) | 995 | (eww-beginning-of-field) |
| 996 | (setq value (substring value 0 (match-beginning 0)))) | 996 | (eww-end-of-field)))) |
| 997 | (plist-put form :value value) | 997 | (when (string-match " +\\'" value) |
| 998 | (when (equal type "password") | 998 | (setq value (substring value 0 (match-beginning 0)))) |
| 999 | ;; Display passwords as asterisks. | 999 | (plist-put form :value value) |
| 1000 | (let ((start (eww-beginning-of-field))) | 1000 | (when (equal type "password") |
| 1001 | (put-text-property start (+ start (length value)) | 1001 | ;; Display passwords as asterisks. |
| 1002 | 'display (make-string (length value) ?*)))))))) | 1002 | (let ((start (eww-beginning-of-field))) |
| 1003 | (put-text-property start (+ start (length value)) | ||
| 1004 | 'display (make-string (length value) ?*))))))))) | ||
| 1003 | 1005 | ||
| 1004 | (defun eww-tag-textarea (dom) | 1006 | (defun eww-tag-textarea (dom) |
| 1005 | (let ((start (point)) | 1007 | (let ((start (point)) |