From unknown Sat Aug 16 21:12:46 2025 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Mailer: MIME-tools 5.509 (Entity 5.509) Content-Type: text/plain; charset=utf-8 From: bug#16199 <16199@debbugs.gnu.org> To: bug#16199 <16199@debbugs.gnu.org> Subject: Status: 24.3.50; [PATCH 2/2] eww: Does not support file upload. Reply-To: bug#16199 <16199@debbugs.gnu.org> Date: Sun, 17 Aug 2025 04:12:46 +0000 retitle 16199 24.3.50; [PATCH 2/2] eww: Does not support file upload. reassign 16199 emacs submitter 16199 Kenjiro NAKAYAMA severity 16199 normal tag 16199 fixed patch thanks From debbugs-submit-bounces@debbugs.gnu.org Fri Dec 20 04:31:24 2013 Received: (at submit) by debbugs.gnu.org; 20 Dec 2013 09:31:24 +0000 Received: from localhost ([127.0.0.1]:59514 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1VtwQV-00014x-Kz for submit@debbugs.gnu.org; Fri, 20 Dec 2013 04:31:24 -0500 Received: from eggs.gnu.org ([208.118.235.92]:45911) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1VtwQT-00014n-BJ for submit@debbugs.gnu.org; Fri, 20 Dec 2013 04:31:21 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VtwQN-0003dx-Kv for submit@debbugs.gnu.org; Fri, 20 Dec 2013 04:31:21 -0500 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=0.8 required=5.0 tests=BAYES_50,FREEMAIL_FROM, T_DKIM_INVALID autolearn=disabled version=3.3.2 Received: from lists.gnu.org ([208.118.235.17]:60457) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VtwQN-0003dr-Ip for submit@debbugs.gnu.org; Fri, 20 Dec 2013 04:31:15 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47484) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VtwQI-0007Ey-69 for bug-gnu-emacs@gnu.org; Fri, 20 Dec 2013 04:31:15 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VtwQB-0003YD-Hm for bug-gnu-emacs@gnu.org; Fri, 20 Dec 2013 04:31:10 -0500 Received: from mail-pa0-x234.google.com ([2607:f8b0:400e:c03::234]:35359) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VtwQB-0003Y5-3b for bug-gnu-emacs@gnu.org; Fri, 20 Dec 2013 04:31:03 -0500 Received: by mail-pa0-f52.google.com with SMTP id ld10so2411070pab.11 for ; Fri, 20 Dec 2013 01:31:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=user-agent:from:to:subject:date:message-id:mime-version :content-type; bh=AIU4or9WGg6NrVuf3hqqnEu2Dxuz6cy5swfqS7idpCk=; b=XM01vFhAOi2oh7ZVpEOT90VPpEB91wkjoK4QGpV2BP/dIj0SYOid7SA71MW3C/gcRr UbUBRATvL8jLO2HT2L2/ZVHwp+AqZ9ycYbKV7guKvX8oQR2eC2s3sOLgrPlK6iuX7+kX hqVAtUOTnpt1BfDlz+GluT1BKeQPe1T1OAUvK2TavSt322rQR649dwYY6EYg7RAIXinE 6Tnnubqi92ToDy1PZv9SGyIXnihGDklMrrprhMEKsRe4dn+YgAlq3EtJoQ0T3sWxldpY UuPdaOe64CLG5ZcDvIN8XXo2bnQBP8hZaarq+GtWh5abE3PdYXtD5YMFtulMqvloOYH6 BdSA== X-Received: by 10.68.130.130 with SMTP id oe2mr7232045pbb.135.1387531862214; Fri, 20 Dec 2013 01:31:02 -0800 (PST) Received: from dhcp-193-97.nrt.redhat.com (nat-pool-nrt-t1.redhat.com. [66.187.238.10]) by mx.google.com with ESMTPSA id nl7sm13018397pbc.6.2013.12.20.01.30.59 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 20 Dec 2013 01:31:01 -0800 (PST) User-agent: mu4e 0.9.9.6pre2; emacs 24.3.50.1 From: Kenjiro NAKAYAMA To: bug-gnu-emacs@gnu.org Subject: 24.3.50; [PATCH 2/2] eww: Does not support file upload. Date: Fri, 20 Dec 2013 18:30:57 +0900 Message-ID: <87eh57zx66.fsf@dhcp-193-97.nrt.redhat.com> MIME-Version: 1.0 Content-Type: text/plain X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-Received-From: 208.118.235.17 X-Spam-Score: -4.0 (----) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -4.0 (----) Signed-off-by: Kenjiro NAKAYAMA diff --git a/lisp/net/eww.el b/lisp/net/eww.el index bff5cd8..22a9023 100644 --- a/lisp/net/eww.el +++ b/lisp/net/eww.el @@ -91,6 +91,15 @@ See also `eww-form-checkbox-selected-symbol'." :version "24.4" :group 'eww) +(defface eww-form-file + '((((type x w32 ns) (class color)) ; Like default mode line + :box (:line-width 2 :style released-button) + :background "#808080" :foreground "black")) + "Face for eww buffer buttons." + :version "24.4" + :group 'eww + :type "Browse") + (defface eww-form-checkbox '((((type x w32 ns) (class color)) ; Like default mode line :box (:line-width 2 :style released-button) @@ -565,6 +574,12 @@ appears in a or tag." (define-key map [(control c) (control c)] 'eww-submit) map)) +(defvar eww-submit-file + (let ((map (make-sparse-keymap))) + (define-key map "\r" 'eww-select-file) + (define-key map [(control c) (control c)] 'eww-submit) + map)) + (defvar eww-checkbox-map (let ((map (make-sparse-keymap))) (define-key map [space] 'eww-toggle-checkbox) @@ -675,6 +690,37 @@ appears in a or tag." (put-text-property start (point) 'keymap eww-checkbox-map) (insert " "))) +(defun eww-form-file (cont) + (let ((start (point)) + (value (cdr (assq :value cont))) + ) + (setq value + (if (zerop (length value)) + " No file selected" + value)) + (insert "Browse") + (add-face-text-property start (point) 'eww-form-file) + (insert value) + (put-text-property start (point) 'eww-form + (list :eww-form eww-form + :value (cdr (assq :value cont)) + :type (downcase (cdr (assq :type cont))) + :name (cdr (assq :name cont)))) + (put-text-property start (point) 'keymap eww-submit-file) + (insert " "))) + +(defun eww-select-file () + "Change the value of the upload file menu under point." + (interactive) + (let* ((input (get-text-property (point) 'eww-form)) + ) + (let ((filename + (let ((insert-default-directory t)) + (read-file-name "filename: "))) + ) + (eww-update-field filename (length "Browse")) + (plist-put input :filename filename)))) + (defun eww-form-text (cont) (let ((start (point)) (type (downcase (or (cdr (assq :type cont)) @@ -787,6 +833,8 @@ See URL `https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input'.") ((or (equal type "checkbox") (equal type "radio")) (eww-form-checkbox cont)) + ((equal type "file") + (eww-form-file cont)) ((equal type "submit") (eww-form-submit cont)) ((equal type "hidden") @@ -845,6 +893,8 @@ See URL `https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input'.") (put-text-property start (point) 'eww-form menu) (add-face-text-property start (point) 'eww-form-select) (put-text-property start (point) 'keymap eww-select-map) + (unless (= start (point)) + (put-text-property start (1+ start) 'help-echo "select field")) (shr-ensure-paragraph)))) (defun eww-select-display (select) @@ -877,14 +927,18 @@ See URL `https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input'.") (goto-char (eww-update-field display)))) -(defun eww-update-field (string) +(defun eww-update-field (string &optional offset) + (if (not offset) (setq offset 0)) (let ((properties (text-properties-at (point))) - (start (eww-beginning-of-field)) - (end (1+ (eww-end-of-field)))) - (delete-region start end) + (start (+ (eww-beginning-of-field) offset)) + (current-end (1+ (eww-end-of-field))) + (new-end (1+ (+ (eww-beginning-of-field) (length string))))) + (delete-region start current-end) + (forward-char offset) (insert string - (make-string (- (- end start) (length string)) ? )) - (set-text-properties start end properties) + (make-string (- (- (+ new-end offset) start) (length string)) ? )) + + (if (= 0 offset) (set-text-properties start new-end properties)) start)) (defun eww-toggle-checkbox () @@ -952,8 +1006,8 @@ See URL `https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input'.") (form (plist-get this-input :eww-form)) values next-submit) (dolist (elem (sort (eww-inputs form) - (lambda (o1 o2) - (< (car o1) (car o2))))) + (lambda (o1 o2) + (< (car o1) (car o2))))) (let* ((input (cdr elem)) (input-start (car elem)) (name (plist-get input :name))) @@ -963,6 +1017,13 @@ See URL `https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input'.") (when (plist-get input :checked) (push (cons name (plist-get input :value)) values))) + ((equal (plist-get input :type) "file") + (push (cons "file" (list (cons "filedata" (with-temp-buffer (insert-file-contents + (plist-get input :filename)) + (buffer-string))) + (cons "name" (plist-get input :name)) + (cons "filename" (plist-get input :filename)))) + values)) ((equal (plist-get input :type) "submit") ;; We want the values from buttons if we hit a button if ;; we hit enter on it, or if it's the first button after @@ -985,12 +1046,31 @@ See URL `https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input'.") values))) (if (and (stringp (cdr (assq :method form))) (equal (downcase (cdr (assq :method form))) "post")) - (let ((url-request-method "POST") - (url-request-extra-headers - '(("Content-Type" . "application/x-www-form-urlencoded"))) - (url-request-data (mm-url-encode-www-form-urlencoded values))) - (eww-browse-url (shr-expand-url (cdr (assq :action form)) - eww-current-url))) + (let ((mtype)) + (dolist (x values mtype) + (if (equal (car x) "file") + (progn + (setq mtype "multipart/form-data") + ))) + (cond ((equal mtype "multipart/form-data") + (let ((boundary (mml-compute-boundary '())) + ) + (let ((url-request-method "POST") + (url-request-extra-headers + (list (cons "Content-Type" (concat "multipart/form-data; boundary=" boundary))) + ) + (url-request-data (mm-url-encode-multipart-form-data values boundary))) + (eww-browse-url (shr-expand-url (cdr (assq :action form)) + eww-current-url)))) + ) + (t + (let ((url-request-method "POST") + (url-request-extra-headers + '(("Content-Type" . "application/x-www-form-urlencoded"))) + (url-request-data (mm-url-encode-www-form-urlencoded values))) + (eww-browse-url (shr-expand-url (cdr (assq :action form)) + eww-current-url))) + ))) (eww-browse-url (concat (if (cdr (assq :action form)) -- 1.8.3.1 From debbugs-submit-bounces@debbugs.gnu.org Tue Dec 24 02:40:01 2013 Received: (at control) by debbugs.gnu.org; 24 Dec 2013 07:40:01 +0000 Received: from localhost ([127.0.0.1]:37556 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1VvMat-0000Zh-Sq for submit@debbugs.gnu.org; Tue, 24 Dec 2013 02:40:00 -0500 Received: from hermes.netfonds.no ([80.91.224.195]:35521) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1VvMaq-0000ZX-CT for control@debbugs.gnu.org; Tue, 24 Dec 2013 02:39:56 -0500 Received: from 77.18.245.69.tmi.telenormobil.no ([77.18.245.69] helo=building.gnus.org) by hermes.netfonds.no with esmtpsa (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.72) (envelope-from ) id 1VvMac-0007Vm-N6 for control@debbugs.gnu.org; Tue, 24 Dec 2013 08:39:42 +0100 Date: Tue, 24 Dec 2013 08:33:50 +0100 Message-Id: <87eh52zorl.fsf@building.gnus.org> To: control@debbugs.gnu.org From: Lars Ingebrigtsen Subject: control message for bug #16199 X-MailScanner-ID: 1VvMac-0007Vm-N6 X-Netfonds-MailScanner: Found to be clean X-Netfonds-MailScanner-From: larsi@gnus.org MailScanner-NULL-Check: 1388475583.14646@zjLc1Adh+HPCYzurq6rQBw X-Spam-Status: No X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: control X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 0.0 (/) tags 16199 pending From debbugs-submit-bounces@debbugs.gnu.org Tue Dec 24 23:32:05 2013 Received: (at 16199) by debbugs.gnu.org; 25 Dec 2013 04:32:05 +0000 Received: from localhost ([127.0.0.1]:40209 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1Vvg8a-0003Zz-Nl for submit@debbugs.gnu.org; Tue, 24 Dec 2013 23:32:05 -0500 Received: from mail-pd0-f170.google.com ([209.85.192.170]:61503) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1Vvg8X-0003Zb-OU for 16199@debbugs.gnu.org; Tue, 24 Dec 2013 23:32:03 -0500 Received: by mail-pd0-f170.google.com with SMTP id g10so6876874pdj.15 for <16199@debbugs.gnu.org>; Tue, 24 Dec 2013 20:32:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=references:user-agent:from:to:cc:subject:in-reply-to:date :message-id:mime-version:content-type:content-transfer-encoding; bh=idDwSebHXOF9ifTkCBTZBomZ8Z5AQFa5kW4WPmSECrE=; b=XaECnWEUEIhjeWup6RhfJvUw1pb8CBedOdtxnEGKZx7LVUEvSB+HSc+ic3e1yS0dxa 2u6HruiR92znTBGuj/OnIFAQpD2IjrKDoCaI/IwIN0cjqr0OREt8iPYeGhfhYVHzatsq yl99VownoeR8xG9ABmHcDiHAvmE0fBlr9Zlpals4Mfe0OP987uA4dnnoLpBCrnRECbUm Ul92LknwDW7XSqOpa6nNdVNdhYD0Z3sPtkvys3G/b0Hj6LAWZTFL5cuWVOuIPoOgzGam pveYgwEAKQZAROgb8ZwNidsp86OXzdzmn+erK+vzXJoJ5vpIbhjkAKjUa/nLEziCfokP pJsQ== X-Received: by 10.67.5.131 with SMTP id cm3mr36294692pad.92.1387945921022; Tue, 24 Dec 2013 20:32:01 -0800 (PST) Received: from dhcp-193-97.nrt.redhat.com (nat-pool-nrt-u1.redhat.com. [66.187.238.11]) by mx.google.com with ESMTPSA id iu7sm45303338pbc.45.2013.12.24.20.31.58 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 24 Dec 2013 20:31:59 -0800 (PST) References: <87eh57zx66.fsf@dhcp-193-97.nrt.redhat.com> User-agent: mu4e 0.9.9.6pre2; emacs 24.3.50.2 From: Kenjiro NAKAYAMA To: Kenjiro NAKAYAMA Subject: Re: bug#16199: 24.3.50; [PATCH 2/2] eww: Does not support file upload. In-reply-to: <87eh57zx66.fsf@dhcp-193-97.nrt.redhat.com> Date: Wed, 25 Dec 2013 13:31:55 +0900 Message-ID: <87mwjp7dqc.fsf@dhcp-193-97.nrt.redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 16199 Cc: 16199@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 0.0 (/) diff --git a/lisp/net/eww.el b/lisp/net/eww.el index 02c93a0..80eba2f 100644 --- a/lisp/net/eww.el +++ b/lisp/net/eww.el @@ -91,6 +91,15 @@ See also `eww-form-checkbox-selected-symbol'." :version "24.4" :group 'eww) +(defface eww-form-file + '((((type x w32 ns) (class color)) ; Like default mode line + :box (:line-width 2 :style released-button) + :background "#808080" :foreground "black")) + "Face for eww buffer buttons." + :version "24.4" + :group 'eww + :type "Browse") + (defface eww-form-checkbox '((((type x w32 ns) (class color)) ; Like default mode line :box (:line-width 2 :style released-button) @@ -568,6 +577,12 @@ appears in a or tag." (define-key map [(control c) (control c)] 'eww-submit) map)) +(defvar eww-submit-file + (let ((map (make-sparse-keymap))) + (define-key map "\r" 'eww-select-file) + (define-key map [(control c) (control c)] 'eww-submit) + map)) + (defvar eww-checkbox-map (let ((map (make-sparse-keymap))) (define-key map " " 'eww-toggle-checkbox) @@ -678,6 +693,34 @@ appears in a or tag." (put-text-property start (point) 'keymap eww-checkbox-map) (insert " "))) +(defun eww-form-file (cont) + (let ((start (point)) + (value (cdr (assq :value cont)))) + (setq value + (if (zerop (length value)) + " No file selected" + value)) + (insert "Browse") + (add-face-text-property start (point) 'eww-form-file) + (insert value) + (put-text-property start (point) 'eww-form + (list :eww-form eww-form + :value (cdr (assq :value cont)) ;; value を interactive に + :type (downcase (cdr (assq :type cont))) + :name (cdr (assq :name cont)))) + (put-text-property start (point) 'keymap eww-submit-file) + (insert " "))) + +(defun eww-select-file () + "Change the value of the upload file menu under point." + (interactive) + (let* ((input (get-text-property (point) 'eww-form))) + (let ((filename + (let ((insert-default-directory t)) + (read-file-name "filename: ")))) + (eww-update-field filename (length "Browse")) + (plist-put input :filename filename)))) + (defun eww-form-text (cont) (let ((start (point)) (type (downcase (or (cdr (assq :type cont)) @@ -794,6 +837,8 @@ See URL `https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input'.") ((or (equal type "checkbox") (equal type "radio")) (eww-form-checkbox cont)) + ((equal type "file") + (eww-form-file cont)) ((equal type "submit") (eww-form-submit cont)) ((equal type "hidden") @@ -886,14 +931,17 @@ See URL `https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input'.") (goto-char (eww-update-field display)))) -(defun eww-update-field (string) +(defun eww-update-field (string &optional offset) + (if (not offset) (setq offset 0)) (let ((properties (text-properties-at (point))) - (start (eww-beginning-of-field)) - (end (1+ (eww-end-of-field)))) - (delete-region start end) + (start (+ (eww-beginning-of-field) offset)) + (current-end (1+ (eww-end-of-field))) + (new-end (1+ (+ (eww-beginning-of-field) (length string))))) + (delete-region start current-end) + (forward-char offset) (insert string - (make-string (- (- end start) (length string)) ? )) - (set-text-properties start end properties) + (make-string (- (- (+ new-end offset) start) (length string)) ? )) + (if (= 0 offset) (set-text-properties start new-end properties)) start)) (defun eww-toggle-checkbox () @@ -961,8 +1009,8 @@ See URL `https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input'.") (form (plist-get this-input :eww-form)) values next-submit) (dolist (elem (sort (eww-inputs form) - (lambda (o1 o2) - (< (car o1) (car o2))))) + (lambda (o1 o2) + (< (car o1) (car o2))))) (let* ((input (cdr elem)) (input-start (car elem)) (name (plist-get input :name))) @@ -972,6 +1020,13 @@ See URL `https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input'.") (when (plist-get input :checked) (push (cons name (plist-get input :value)) values))) + ((equal (plist-get input :type) "file") + (push (cons "file" (list (cons "filedata" (with-temp-buffer (insert-file-contents + (plist-get input :filename)) + (buffer-string))) + (cons "name" (plist-get input :name)) + (cons "filename" (plist-get input :filename)))) + values)) ((equal (plist-get input :type) "submit") ;; We want the values from buttons if we hit a button if ;; we hit enter on it, or if it's the first button after @@ -994,12 +1049,26 @@ See URL `https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input'.") values))) (if (and (stringp (cdr (assq :method form))) (equal (downcase (cdr (assq :method form))) "post")) - (let ((url-request-method "POST") - (url-request-extra-headers - '(("Content-Type" . "application/x-www-form-urlencoded"))) - (url-request-data (mm-url-encode-www-form-urlencoded values))) - (eww-browse-url (shr-expand-url (cdr (assq :action form)) - eww-current-url))) + (let ((mtype)) + (dolist (x values mtype) + (if (equal (car x) "file") + (progn + (setq mtype "multipart/form-data")))) + (cond ((equal mtype "multipart/form-data") + (let ((boundary (mml-compute-boundary '()))) + (let ((url-request-method "POST") + (url-request-extra-headers + (list (cons "Content-Type" (concat "multipart/form-data; boundary=" boundary)))) + (url-request-data (mm-url-encode-multipart-form-data values boundary))) + (eww-browse-url (shr-expand-url (cdr (assq :action form)) + eww-current-url))))) + (t + (let ((url-request-method "POST") + (url-request-extra-headers + '(("Content-Type" . "application/x-www-form-urlencoded"))) + (url-request-data (mm-url-encode-www-form-urlencoded values))) + (eww-browse-url (shr-expand-url (cdr (assq :action form)) + eww-current-url)))))) (eww-browse-url (concat (if (cdr (assq :action form)) --- 1.8.3.1 --- [2/2] --- Regards, Kenjiro nakayamakenjiro@gmail.com writes: > Signed-off-by: Kenjiro NAKAYAMA > > diff --git a/lisp/net/eww.el b/lisp/net/eww.el > index bff5cd8..22a9023 100644 > --- a/lisp/net/eww.el > +++ b/lisp/net/eww.el > @@ -91,6 +91,15 @@ See also `eww-form-checkbox-selected-symbol'." > :version "24.4" > :group 'eww) > > +(defface eww-form-file > + '((((type x w32 ns) (class color)) ; Like default mode line > + :box (:line-width 2 :style released-button) > + :background "#808080" :foreground "black")) > + "Face for eww buffer buttons." > + :version "24.4" > + :group 'eww > + :type "Browse") > + > (defface eww-form-checkbox > '((((type x w32 ns) (class color)) ; Like default mode line > :box (:line-width 2 :style released-button) > @@ -565,6 +574,12 @@ appears in a or tag." > (define-key map [(control c) (control c)] 'eww-submit) > map)) > > +(defvar eww-submit-file > + (let ((map (make-sparse-keymap))) > + (define-key map "\r" 'eww-select-file) > + (define-key map [(control c) (control c)] 'eww-submit) > + map)) > + > (defvar eww-checkbox-map > (let ((map (make-sparse-keymap))) > (define-key map [space] 'eww-toggle-checkbox) > @@ -675,6 +690,37 @@ appears in a or tag." > (put-text-property start (point) 'keymap eww-checkbox-map) > (insert " "))) > > +(defun eww-form-file (cont) > + (let ((start (point)) > + (value (cdr (assq :value cont))) > + ) > + (setq value > + (if (zerop (length value)) > + " No file selected" > + value)) > + (insert "Browse") > + (add-face-text-property start (point) 'eww-form-file) > + (insert value) > + (put-text-property start (point) 'eww-form > + (list :eww-form eww-form > + :value (cdr (assq :value cont)) > + :type (downcase (cdr (assq :type cont))) > + :name (cdr (assq :name cont)))) > + (put-text-property start (point) 'keymap eww-submit-file) > + (insert " "))) > + > +(defun eww-select-file () > + "Change the value of the upload file menu under point." > + (interactive) > + (let* ((input (get-text-property (point) 'eww-form)) > + ) > + (let ((filename > + (let ((insert-default-directory t)) > + (read-file-name "filename: "))) > + ) > + (eww-update-field filename (length "Browse")) > + (plist-put input :filename filename)))) > + > (defun eww-form-text (cont) > (let ((start (point)) > (type (downcase (or (cdr (assq :type cont)) > @@ -787,6 +833,8 @@ See URL `https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input'.") > ((or (equal type "checkbox") > (equal type "radio")) > (eww-form-checkbox cont)) > + ((equal type "file") > + (eww-form-file cont)) > ((equal type "submit") > (eww-form-submit cont)) > ((equal type "hidden") > @@ -845,6 +893,8 @@ See URL `https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input'.") > (put-text-property start (point) 'eww-form menu) > (add-face-text-property start (point) 'eww-form-select) > (put-text-property start (point) 'keymap eww-select-map) > + (unless (= start (point)) > + (put-text-property start (1+ start) 'help-echo "select field")) > (shr-ensure-paragraph)))) > > (defun eww-select-display (select) > @@ -877,14 +927,18 @@ See URL `https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input'.") > (goto-char > (eww-update-field display)))) > > -(defun eww-update-field (string) > +(defun eww-update-field (string &optional offset) > + (if (not offset) (setq offset 0)) > (let ((properties (text-properties-at (point))) > - (start (eww-beginning-of-field)) > - (end (1+ (eww-end-of-field)))) > - (delete-region start end) > + (start (+ (eww-beginning-of-field) offset)) > + (current-end (1+ (eww-end-of-field))) > + (new-end (1+ (+ (eww-beginning-of-field) (length string))))) > + (delete-region start current-end) > + (forward-char offset) > (insert string > - (make-string (- (- end start) (length string)) ? )) > - (set-text-properties start end properties) > + (make-string (- (- (+ new-end offset) start) (length string)) ? )) > + > + (if (= 0 offset) (set-text-properties start new-end properties)) > start)) > > (defun eww-toggle-checkbox () > @@ -952,8 +1006,8 @@ See URL `https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input'.") > (form (plist-get this-input :eww-form)) > values next-submit) > (dolist (elem (sort (eww-inputs form) > - (lambda (o1 o2) > - (< (car o1) (car o2))))) > + (lambda (o1 o2) > + (< (car o1) (car o2))))) > (let* ((input (cdr elem)) > (input-start (car elem)) > (name (plist-get input :name))) > @@ -963,6 +1017,13 @@ See URL `https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input'.") > (when (plist-get input :checked) > (push (cons name (plist-get input :value)) > values))) > + ((equal (plist-get input :type) "file") > + (push (cons "file" (list (cons "filedata" (with-temp-buffer (insert-file-contents > + (plist-get input :filename)) > + (buffer-string))) > + (cons "name" (plist-get input :name)) > + (cons "filename" (plist-get input :filename)))) > + values)) > ((equal (plist-get input :type) "submit") > ;; We want the values from buttons if we hit a button if > ;; we hit enter on it, or if it's the first button after > @@ -985,12 +1046,31 @@ See URL `https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input'.") > values))) > (if (and (stringp (cdr (assq :method form))) > (equal (downcase (cdr (assq :method form))) "post")) > - (let ((url-request-method "POST") > - (url-request-extra-headers > - '(("Content-Type" . "application/x-www-form-urlencoded"))) > - (url-request-data (mm-url-encode-www-form-urlencoded values))) > - (eww-browse-url (shr-expand-url (cdr (assq :action form)) > - eww-current-url))) > + (let ((mtype)) > + (dolist (x values mtype) > + (if (equal (car x) "file") > + (progn > + (setq mtype "multipart/form-data") > + ))) > + (cond ((equal mtype "multipart/form-data") > + (let ((boundary (mml-compute-boundary '())) > + ) > + (let ((url-request-method "POST") > + (url-request-extra-headers > + (list (cons "Content-Type" (concat "multipart/form-data; boundary=" boundary))) > + ) > + (url-request-data (mm-url-encode-multipart-form-data values boundary))) > + (eww-browse-url (shr-expand-url (cdr (assq :action form)) > + eww-current-url)))) > + ) > + (t > + (let ((url-request-method "POST") > + (url-request-extra-headers > + '(("Content-Type" . "application/x-www-form-urlencoded"))) > + (url-request-data (mm-url-encode-www-form-urlencoded values))) > + (eww-browse-url (shr-expand-url (cdr (assq :action form)) > + eww-current-url))) > + ))) > (eww-browse-url > (concat > (if (cdr (assq :action form)) From debbugs-submit-bounces@debbugs.gnu.org Mon Nov 10 16:35:22 2014 Received: (at 16199) by debbugs.gnu.org; 10 Nov 2014 21:35:22 +0000 Received: from localhost ([127.0.0.1]:56406 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XnwcH-00042X-7E for submit@debbugs.gnu.org; Mon, 10 Nov 2014 16:35:22 -0500 Received: from hermes.netfonds.no ([80.91.224.195]:40693) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XnwcE-00042D-6J for 16199@debbugs.gnu.org; Mon, 10 Nov 2014 16:35:14 -0500 Received: from cm-84.215.51.58.getinternet.no ([84.215.51.58] helo=stories.gnus.org) by hermes.netfonds.no with esmtpsa (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.72) (envelope-from ) id 1Xnwbt-0001ky-4b; Mon, 10 Nov 2014 22:34:53 +0100 From: Lars Magne Ingebrigtsen To: Kenjiro NAKAYAMA Subject: Re: bug#16199: 24.3.50; [PATCH 2/2] eww: Does not support file upload. References: <87eh57zx66.fsf@dhcp-193-97.nrt.redhat.com> <87mwjp7dqc.fsf@dhcp-193-97.nrt.redhat.com> X-Now-Playing: The Cure's _Kiss Me, Kiss Me, Kiss Me_ X-Hashcash: 1:23:141110:nakayamakenjiro@gmail.com::bR3/A+RtW/e5nauy:0000000000000000000000000000000000007iWl X-Hashcash: 1:23:141110:16199@debbugs.gnu.org::SStPK0Vat/XM0JSi:0000000000000000000000000000000000000000nWC/ Date: Mon, 10 Nov 2014 22:34:52 +0100 In-Reply-To: <87mwjp7dqc.fsf@dhcp-193-97.nrt.redhat.com> (Kenjiro NAKAYAMA's message of "Wed, 25 Dec 2013 13:31:55 +0900") Message-ID: User-Agent: Gnus/5.130012 (Ma Gnus v0.12) Emacs/25.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-MailScanner-ID: 1Xnwbt-0001ky-4b X-Netfonds-MailScanner: Found to be clean X-Netfonds-MailScanner-From: larsi@gnus.org MailScanner-NULL-Check: 1416260093.3213@ATKdKUWMGC84H6lHI0v2dA X-Spam-Status: No X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 16199 Cc: 16199@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 0.0 (/) Kenjiro NAKAYAMA writes: > diff --git a/lisp/net/eww.el b/lisp/net/eww.el > index 02c93a0..80eba2f 100644 Thanks; applied. -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no From debbugs-submit-bounces@debbugs.gnu.org Mon Nov 10 16:35:15 2014 Received: (at control) by debbugs.gnu.org; 10 Nov 2014 21:35:15 +0000 Received: from localhost ([127.0.0.1]:56404 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XnwcE-00042M-Up for submit@debbugs.gnu.org; Mon, 10 Nov 2014 16:35:15 -0500 Received: from hermes.netfonds.no ([80.91.224.195]:40692) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1XnwcD-000426-Ic for control@debbugs.gnu.org; Mon, 10 Nov 2014 16:35:13 -0500 Received: from cm-84.215.51.58.getinternet.no ([84.215.51.58] helo=stories.gnus.org) by hermes.netfonds.no with esmtpsa (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.72) (envelope-from ) id 1Xnwbv-0001lD-EW for control@debbugs.gnu.org; Mon, 10 Nov 2014 22:34:55 +0100 Date: Mon, 10 Nov 2014 22:34:54 +0100 Message-Id: To: control@debbugs.gnu.org From: Lars Magne Ingebrigtsen Subject: control message for bug #16199 X-MailScanner-ID: 1Xnwbv-0001lD-EW X-Netfonds-MailScanner: Found to be clean X-Netfonds-MailScanner-From: larsi@gnus.org MailScanner-NULL-Check: 1416260096.35755@o3UiEoYfnJTv+4DP5vGdDQ X-Spam-Status: No X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: control X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 0.0 (/) tags 16199 fixed close 16199 25.1 From unknown Sat Aug 16 21:12:46 2025 Received: (at fakecontrol) by fakecontrolmessage; To: internal_control@debbugs.gnu.org From: Debbugs Internal Request Subject: Internal Control Message-Id: bug archived. Date: Tue, 09 Dec 2014 12:24:05 +0000 User-Agent: Fakemail v42.6.9 # This is a fake control message. # # The action: # bug archived. thanks # This fakemail brought to you by your local debbugs # administrator