branch: elpa/jabber
commit e75325c38f3f63f8c58e7856fa9e89a147a0986a
Author: Thanos Apollo <[email protected]>
Commit: Thanos Apollo <[email protected]>

    xdata: Separate form parsing
---
 lisp/jabber-disco.el    | 10 +++++-----
 lisp/jabber-register.el |  5 +++--
 lisp/jabber-widget.el   | 13 ++-----------
 lisp/jabber-xdata.el    | 38 ++++++++++++++++++++++++++++++++++++++
 4 files changed, 48 insertions(+), 18 deletions(-)

diff --git a/lisp/jabber-disco.el b/lisp/jabber-disco.el
index 800f675795..799ec5de8d 100644
--- a/lisp/jabber-disco.el
+++ b/lisp/jabber-disco.el
@@ -31,6 +31,7 @@
 (require 'cl-lib)
 (require 'jabber-iq)
 (require 'jabber-xml)
+(require 'jabber-xdata)
 
 ;; Global reference declarations
 
@@ -131,7 +132,6 @@ nil, access is always granted.")
 
 (declare-function jabber-send-current-presence "jabber-presence.el"
                   (&optional jc))
-(declare-function jabber-widget-xdata-formtype "jabber-widget.el" (x))
 (defvar jabber-presence-element-functions nil) ; jabber-presence.el
 
 ;;
@@ -337,8 +337,8 @@ Return the concatenated sorted feature entries."
 FORMS is a list of <x> XML nodes (already filtered for FORM_TYPE).
 Return the concatenated sorted form entries."
   (let ((sorted (sort forms (lambda (a b)
-                              (string< (jabber-widget-xdata-formtype a)
-                                       (jabber-widget-xdata-formtype b))))))
+                              (string< (jabber-xdata-form-type a)
+                                       (jabber-xdata-form-type b))))))
     (mapconcat
      (lambda (form)
        (let ((fields (sort (jabber-xml-get-children form 'field)
@@ -346,7 +346,7 @@ Return the concatenated sorted form entries."
                              (string< (jabber-xml-get-attribute a 'var)
                                       (jabber-xml-get-attribute b 'var))))))
          (concat
-          (jabber-widget-xdata-formtype form) "<"
+          (jabber-xdata-form-type form) "<"
           (mapconcat
            (lambda (field)
              (if (string= (jabber-xml-get-attribute field 'var) "FORM_TYPE")
@@ -370,7 +370,7 @@ Return the concatenated sorted form entries."
         (forms (cl-remove-if-not
                 (lambda (x)
                   (and (string= (jabber-xml-get-xmlns x) jabber-xdata-xmlns)
-                       (jabber-widget-xdata-formtype x)))
+                       (jabber-xdata-form-type x)))
                 (jabber-xml-get-children query 'x)))
         (s (encode-coding-string
             (concat (jabber-caps--identity-string identities)
diff --git a/lisp/jabber-register.el b/lisp/jabber-register.el
index ce296c6198..79bbf26d13 100644
--- a/lisp/jabber-register.el
+++ b/lisp/jabber-register.el
@@ -29,6 +29,7 @@
 
 (require 'jabber-iq)
 (require 'jabber-widget)
+(require 'jabber-xdata)
 
 ;; Global reference declarations
 
@@ -103,7 +104,7 @@ obtained from `xml-parse-region'."
        ;; for sure how to put a default username in it.
        (jabber-widget-render-xdata-form x
                                         (if (and register-account
-                                                 (string= 
(jabber-widget-xdata-formtype x) jabber-register-xmlns))
+                                                 (string= 
(jabber-xdata-form-type x) jabber-register-xmlns))
                                             (list (cons "username" username))
                                           nil))))
     (if (not have-xdata)
@@ -173,4 +174,4 @@ obtained from `xml-parse-region'."
 
 (provide 'jabber-register)
 
-;;; jabber-register.el ends here
\ No newline at end of file
+;;; jabber-register.el ends here
diff --git a/lisp/jabber-widget.el b/lisp/jabber-widget.el
index 636d224441..057bd77833 100644
--- a/lisp/jabber-widget.el
+++ b/lisp/jabber-widget.el
@@ -31,6 +31,7 @@
 (require 'wid-edit)
 (require 'jabber-util)
 (require 'jabber-disco)
+(require 'jabber-xdata)
 
 (defvar jabber-widget-alist nil
   "Alist of widgets currently used.")
@@ -354,16 +355,6 @@ Return a list of strings, each of which to be included as 
cdata in a
       (indent-to 30)
       (insert (apply #'concat values) "\n"))))
 
-(defun jabber-widget-xdata-formtype (x)
-  "Return the form type of the xdata form in X, by XEP-0068.
-Return nil if no form type is specified."
-  (catch 'found-formtype
-    (dolist (field (jabber-xml-get-children x 'field))
-      (when (and (string= (jabber-xml-get-attribute field 'var) "FORM_TYPE")
-                (string= (jabber-xml-get-attribute field 'type) "hidden"))
-       (throw 'found-formtype (car (jabber-xml-node-children
-                                    (car (jabber-xml-get-children field 
'value)))))))))
-
 (provide 'jabber-widget)
 
-;;; jabber-widget.el ends here
\ No newline at end of file
+;;; jabber-widget.el ends here
diff --git a/lisp/jabber-xdata.el b/lisp/jabber-xdata.el
new file mode 100644
index 0000000000..1c320184d2
--- /dev/null
+++ b/lisp/jabber-xdata.el
@@ -0,0 +1,38 @@
+;;; jabber-xdata.el --- XMPP data form helpers  -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2026  Thanos Apollo
+
+;; Maintainer: Thanos Apollo <[email protected]>
+
+;; This file is a part of jabber.el.
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2 of the License, or
+;; (at your option) any later version.
+
+;;; Commentary:
+
+;; Parse XMPP data forms without depending on widget rendering.
+
+;;; Code:
+
+(require 'jabber-xml)
+
+(defun jabber-xdata-form-type (x)
+  "Return the form type of the XData form X.
+Return nil when X has no XEP-0068 FORM_TYPE field."
+  (catch 'form-type
+    (dolist (field (jabber-xml-get-children x 'field))
+      (when (and (string= (jabber-xml-get-attribute field 'var) "FORM_TYPE")
+                 (string= (jabber-xml-get-attribute field 'type) "hidden"))
+        (throw 'form-type
+               (car (jabber-xml-node-children
+                     (car (jabber-xml-get-children field 'value)))))))))
+
+(define-obsolete-function-alias 'jabber-widget-xdata-formtype
+  #'jabber-xdata-form-type "0.11.0")
+
+(provide 'jabber-xdata)
+
+;;; jabber-xdata.el ends here

Reply via email to