2
0
Эх сурвалжийг харах

Remove Backbone

* Remove backbone as NPM deps and from docs
* Remove backbone stuff from webpack
JC Brand 5 жил өмнө
parent
commit
29aed314c1

+ 2 - 9
docs/source/dependencies.rst

@@ -73,15 +73,8 @@ Converse relies on the following dependencies:
 * `Strophe.js <http://strophe.im/>`_ maintains the XMPP session, is used to
 * `Strophe.js <http://strophe.im/>`_ maintains the XMPP session, is used to
   build XMPP stanzas, to send them, and to register handlers for received stanzas.
   build XMPP stanzas, to send them, and to register handlers for received stanzas.
 * `lodash <https://lodash.com/>`_ provides very useful utility functions.
 * `lodash <https://lodash.com/>`_ provides very useful utility functions.
-* `Backbone <http://backbonejs.org/>`_ is used to model the data as Models and
-  Collections and to create Views that render the UI.
-* `backbone.overview <http://github.com/jcbrand/backbone.overview>`_ provides
-  ``Backbone.Overview``, which is to Views as Backbone Collection is to Models.
-  It also provides the ``Backbone.OrderedListView`` which is used to show
-  alphabetically sorted lists, such as your contacts roster.
-* `backbone.vdomview <http://github.com/jcbrand/backbone.vdomview>`_ provides
-  ``Backbone.VDOMView`` that uses the `Snabbdom <https://github.com/snabbdom/snabbdom>`_
-  virtual DOM for rendering DOM elements.
+* `Skeletor <https://github.com/skeletorjs/skeletor/>`_, a `Backbone <http://backbonejs.org/>`_ fork
+  which is used to model the data as Models and Collections and to create Views that render the UI.
 * `pluggable.js <https://github.com/jcbrand/pluggable.js>`_ provides the plugin
 * `pluggable.js <https://github.com/jcbrand/pluggable.js>`_ provides the plugin
   architecture for Converse. It registers and initializes plugins and
   architecture for Converse. It registers and initializes plugins and
   allows existing attributes, functions and objects on Converse to be
   allows existing attributes, functions and objects on Converse to be

+ 8 - 8
docs/source/plugin_development.rst

@@ -64,8 +64,8 @@ Each plugin comes in its own file, and Converse's plugin architecture,
 with the ability to "hook in" to the core code and other plugins.
 with the ability to "hook in" to the core code and other plugins.
 
 
 Plugins enable developers to extend and override existing objects,
 Plugins enable developers to extend and override existing objects,
-functions and the `Backbone <http://backbonejs.org/>`_ models and views that make up
-Converse. You can also create new Backbone (or other) models and views.
+functions and the models and views that make up
+Converse. You can also create new models and views.
 
 
 .. note:: **Trying out a plugin in JSFiddle**
 .. note:: **Trying out a plugin in JSFiddle**
 
 
@@ -151,7 +151,7 @@ The globally available ``converse`` object, which exposes the API methods, such
 as ``initialize`` and ``plugins.add``, is a wrapper that encloses and protects
 as ``initialize`` and ``plugins.add``, is a wrapper that encloses and protects
 a sensitive inner object, named ``_converse`` (not the underscore prefix).
 a sensitive inner object, named ``_converse`` (not the underscore prefix).
 
 
-This inner ``_converse`` object contains all the Backbone models and views,
+This inner ``_converse`` object contains all the models and views,
 as well as various other attributes and functions.
 as well as various other attributes and functions.
 
 
 Within a plugin, you will have access to this internal
 Within a plugin, you will have access to this internal
@@ -175,7 +175,7 @@ The code for it could look something like this:
 
 
     // Commonly used utilities and variables can be found under the "env"
     // Commonly used utilities and variables can be found under the "env"
     // namespace of the "converse" global.
     // namespace of the "converse" global.
-    const { Backbone, Promise, Strophe, dayjs, sizzle, _, $build, $iq, $msg, $pres } = converse.env;
+    const { Promise, Strophe, dayjs, sizzle, _, $build, $iq, $msg, $pres } = converse.env;
 
 
 These dependencies are closured so that they don't pollute the global
 These dependencies are closured so that they don't pollute the global
 namespace, that's why you need to access them in such a way inside the module.
 namespace, that's why you need to access them in such a way inside the module.
@@ -216,7 +216,7 @@ The following code snippet provides an example of two different overrides:
             // Your custom code can come here ...
             // Your custom code can come here ...
         },
         },
 
 
-        /* On the XMPPStatus Backbone model is a method sendPresence.
+        /* On the XMPPStatus model is a method sendPresence.
          * We can override is as follows:
          * We can override is as follows:
          */
          */
         XMPPStatus: {
         XMPPStatus: {
@@ -471,7 +471,7 @@ generated by `generator-conversejs <https://github.com/jcbrand/generator-convers
 
 
     // Commonly used utilities and variables can be found under the "env"
     // Commonly used utilities and variables can be found under the "env"
     // namespace of the "converse" global.
     // namespace of the "converse" global.
-    const { Backbone, Promise, Strophe, dayjs, sizzle, _, $build, $iq, $msg, $pres } = converse.env;
+    const { Promise, Strophe, dayjs, sizzle, _, $build, $iq, $msg, $pres } = converse.env;
 
 
     // The following line registers your plugin.
     // The following line registers your plugin.
     converse.plugins.add("myplugin", {
     converse.plugins.add("myplugin", {
@@ -551,7 +551,7 @@ generated by `generator-conversejs <https://github.com/jcbrand/generator-convers
              */
              */
         },
         },
 
 
-        /* If you want to override some function or a Backbone model or
+        /* If you want to override some function or a model or
          * view defined elsewhere in Converse, then you do that under
          * view defined elsewhere in Converse, then you do that under
          * the "overrides" namespace.
          * the "overrides" namespace.
          */
          */
@@ -577,7 +577,7 @@ generated by `generator-conversejs <https://github.com/jcbrand/generator-convers
                 // Your custom code can come here ...
                 // Your custom code can come here ...
             },
             },
 
 
-            /* Override Converse's XMPPStatus Backbone model so that we can override the
+            /* Override Converse's XMPPStatus model so that we can override the
              * function that sends out the presence stanza.
              * function that sends out the presence stanza.
              */
              */
             XMPPStatus: {
             XMPPStatus: {

+ 1 - 1
docs/source/security.rst

@@ -71,7 +71,7 @@ Other considerations
 Locally cached data
 Locally cached data
 -------------------
 -------------------
 
 
-Besides the "hot" data stored in Backbone models and collections, which are all
+Besides the "hot" data stored in models and collections, which are all
 encapsulated in the private ``_converse`` object, there is also the cached data
 encapsulated in the private ``_converse`` object, there is also the cached data
 stored in the browser's ``sessionStorage`` and ``localStorage`` stores.
 stored in the browser's ``sessionStorage`` and ``localStorage`` stores.
 
 

+ 2 - 48
package-lock.json

@@ -3018,41 +3018,6 @@
 				"object.assign": "^4.1.0"
 				"object.assign": "^4.1.0"
 			}
 			}
 		},
 		},
-		"backbone": {
-			"version": "1.4.0",
-			"resolved": "https://registry.npmjs.org/backbone/-/backbone-1.4.0.tgz",
-			"integrity": "sha512-RLmDrRXkVdouTg38jcgHhyQ/2zjg7a8E6sz2zxfz21Hh17xDJYUHBZimVIt5fUyS8vbfpeSmTL3gUjTEvUV3qQ==",
-			"requires": {
-				"underscore": ">=1.8.3"
-			}
-		},
-		"backbone.browserStorage": {
-			"version": "github:conversejs/backbone.browserStorage#674ba3aa0e4d0f0b0dcac48fcc7dea531012828f",
-			"from": "github:conversejs/backbone.browserStorage#674ba3aa0e4d0f0b0dcac48fcc7dea531012828f"
-		},
-		"backbone.nativeview": {
-			"version": "github:conversejs/Backbone.NativeView#5997c8197ca594e6b8469447f28310c78bd1d95e",
-			"from": "github:conversejs/Backbone.NativeView#5997c8197ca594e6b8469447f28310c78bd1d95e",
-			"dev": true
-		},
-		"backbone.overview": {
-			"version": "1.0.3",
-			"resolved": "https://registry.npmjs.org/backbone.overview/-/backbone.overview-1.0.3.tgz",
-			"integrity": "sha512-szVfJNctVoZRiW3V5qA2WqvLY6SoWdLtR88C4qrKejD35cNIvE0xFGVQ0GO1pyaTuMsJakdQq+MUYnjoZLq0Zw==",
-			"dev": true,
-			"requires": {
-				"lodash": "^4.17.14"
-			}
-		},
-		"backbone.vdomview": {
-			"version": "1.0.1",
-			"resolved": "https://registry.npmjs.org/backbone.vdomview/-/backbone.vdomview-1.0.1.tgz",
-			"integrity": "sha512-KBrzWTa3Cyd/PVq4kxcnaF653z9W5zQkP4FYGdgDa2Du4TDbMwbjaGTJa302y34oX1iOvO/BmBrLgYM+RF3F8Q==",
-			"dev": true,
-			"requires": {
-				"backbone": "^1.3.3"
-			}
-		},
 		"balanced-match": {
 		"balanced-match": {
 			"version": "1.0.0",
 			"version": "1.0.0",
 			"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
 			"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
@@ -16094,8 +16059,8 @@
 			"dev": true
 			"dev": true
 		},
 		},
 		"skeletor.js": {
 		"skeletor.js": {
-			"version": "github:skeletorjs/skeletor#9a4487496bd2810b2f0847acbca136333cf9cfb0",
-			"from": "github:skeletorjs/skeletor#9a4487496bd2810b2f0847acbca136333cf9cfb0",
+			"version": "github:skeletorjs/skeletor#5a95708a5fdec9029fc493c1df4bca337803f124",
+			"from": "github:skeletorjs/skeletor#5a95708a5fdec9029fc493c1df4bca337803f124",
 			"requires": {
 			"requires": {
 				"lodash": "^4.17.14"
 				"lodash": "^4.17.14"
 			}
 			}
@@ -16139,12 +16104,6 @@
 			"integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==",
 			"integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==",
 			"dev": true
 			"dev": true
 		},
 		},
-		"snabbdom": {
-			"version": "0.7.3",
-			"resolved": "https://registry.npmjs.org/snabbdom/-/snabbdom-0.7.3.tgz",
-			"integrity": "sha512-XNh90GQiV36hWdfSL46fIVrSSvmBuZlWk3++qaEgBeQWQJCqTphcbjTODPv8/vyZHJaB3VhePsWfGxi/zBxXyw==",
-			"dev": true
-		},
 		"snapdragon": {
 		"snapdragon": {
 			"version": "0.8.2",
 			"version": "0.8.2",
 			"resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
 			"resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
@@ -17318,11 +17277,6 @@
 			"integrity": "sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0=",
 			"integrity": "sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0=",
 			"dev": true
 			"dev": true
 		},
 		},
-		"underscore": {
-			"version": "1.8.3",
-			"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
-			"integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI="
-		},
 		"unicode-canonical-property-names-ecmascript": {
 		"unicode-canonical-property-names-ecmascript": {
 			"version": "1.0.4",
 			"version": "1.0.4",
 			"resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
 			"resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz",

+ 0 - 4
package.json

@@ -64,9 +64,6 @@
     "autoprefixer": "^9.6.1",
     "autoprefixer": "^9.6.1",
     "babel-eslint": "^10.0.3",
     "babel-eslint": "^10.0.3",
     "babel-loader": "^8.0.6",
     "babel-loader": "^8.0.6",
-    "backbone.nativeview": "conversejs/Backbone.NativeView#5997c8197ca594e6b8469447f28310c78bd1d95e",
-    "backbone.overview": "1.0.3",
-    "backbone.vdomview": "^1.0.1",
     "bootstrap": "^4.3.1",
     "bootstrap": "^4.3.1",
     "bootstrap.native": "^2.0.26",
     "bootstrap.native": "^2.0.26",
     "bootstrap.native-loader": "2.0.0",
     "bootstrap.native-loader": "2.0.0",
@@ -104,7 +101,6 @@
     "sass-loader": "^7.1.0",
     "sass-loader": "^7.1.0",
     "sinon": "^7.3.2",
     "sinon": "^7.3.2",
     "sizzle": "^2.3.4",
     "sizzle": "^2.3.4",
-    "snabbdom": "^0.7.3",
     "style-loader": "^0.23.1",
     "style-loader": "^0.23.1",
     "uglify-es": "^3.3.9",
     "uglify-es": "^3.3.9",
     "uglify-js": "^3.7.4",
     "uglify-js": "^3.7.4",

+ 3 - 3
src/converse-bookmark-views.js

@@ -6,7 +6,7 @@
  */
  */
 import "@converse/headless/converse-muc";
 import "@converse/headless/converse-muc";
 import { Model } from 'skeletor.js/src/model.js';
 import { Model } from 'skeletor.js/src/model.js';
-import { HTMLView } from 'skeletor.js/src/htmlview.js';
+import { View } from 'skeletor.js/src/view.js';
 import { __ } from '@converse/headless/i18n';
 import { __ } from '@converse/headless/i18n';
 import converse from "@converse/headless/converse-core";
 import converse from "@converse/headless/converse-core";
 import tpl_bookmarks_list from "templates/bookmarks_list.js"
 import tpl_bookmarks_list from "templates/bookmarks_list.js"
@@ -160,7 +160,7 @@ converse.plugins.add('converse-bookmark-views', {
         Object.assign(_converse.ChatRoomView.prototype, bookmarkableChatRoomView);
         Object.assign(_converse.ChatRoomView.prototype, bookmarkableChatRoomView);
 
 
 
 
-        _converse.MUCBookmarkForm = HTMLView.extend({
+        _converse.MUCBookmarkForm = View.extend({
             className: 'muc-bookmark-form chatroom-form-container',
             className: 'muc-bookmark-form chatroom-form-container',
 
 
             initialize (attrs) {
             initialize (attrs) {
@@ -195,7 +195,7 @@ converse.plugins.add('converse-bookmark-views', {
         });
         });
 
 
 
 
-        _converse.BookmarksView = HTMLView.extend({
+        _converse.BookmarksView = View.extend({
             tagName: 'span',
             tagName: 'span',
 
 
             initialize () {
             initialize () {

+ 0 - 2
src/converse-chatboxviews.js

@@ -4,7 +4,6 @@
  * @license Mozilla Public License (MPLv2)
  * @license Mozilla Public License (MPLv2)
  */
  */
 import "@converse/headless/converse-chatboxes";
 import "@converse/headless/converse-chatboxes";
-import { HTMLView } from 'skeletor.js/src/htmlview.js';
 import { Overview } from "skeletor.js/src/overview";
 import { Overview } from "skeletor.js/src/overview";
 import { View } from "skeletor.js/src/view";
 import { View } from "skeletor.js/src/view";
 import { result } from "lodash";
 import { result } from "lodash";
@@ -62,7 +61,6 @@ converse.plugins.add('converse-chatboxviews', {
         });
         });
 
 
         _converse.ViewWithAvatar = View.extend(AvatarMixin);
         _converse.ViewWithAvatar = View.extend(AvatarMixin);
-        _converse.HTMLViewWithAvatar = HTMLView.extend(AvatarMixin);
 
 
 
 
         _converse.ChatBoxViews = Overview.extend({
         _converse.ChatBoxViews = Overview.extend({

+ 1 - 2
src/converse-controlbox.js

@@ -8,7 +8,6 @@ import "formdata-polyfill";
 import { get } from "lodash";
 import { get } from "lodash";
 import { Model } from 'skeletor.js/src/model.js';
 import { Model } from 'skeletor.js/src/model.js';
 import { View } from "skeletor.js/src/view";
 import { View } from "skeletor.js/src/view";
-import { HTMLView } from "skeletor.js/src/htmlview";
 import bootstrap from "bootstrap.native";
 import bootstrap from "bootstrap.native";
 import converse from "@converse/headless/converse-core";
 import converse from "@converse/headless/converse-core";
 import log from "@converse/headless/log";
 import log from "@converse/headless/log";
@@ -362,7 +361,7 @@ converse.plugins.add('converse-controlbox', {
             }
             }
         });
         });
 
 
-        _converse.LoginPanel = HTMLView.extend({
+        _converse.LoginPanel = View.extend({
             tagName: 'div',
             tagName: 'div',
             id: "converse-login-panel",
             id: "converse-login-panel",
             className: 'controlbox-pane fade-in row no-gutters',
             className: 'controlbox-pane fade-in row no-gutters',

+ 3 - 3
src/converse-emoji-views.js

@@ -4,7 +4,7 @@
  * @license Mozilla Public License (MPLv2)
  * @license Mozilla Public License (MPLv2)
  */
  */
 import "@converse/headless/converse-emoji";
 import "@converse/headless/converse-emoji";
-import { HTMLView } from "skeletor.js/src/htmlview";
+import { View } from "skeletor.js/src/view";
 import { debounce, find, get } from "lodash";
 import { debounce, find, get } from "lodash";
 import DOMNavigator from "./dom-navigator";
 import DOMNavigator from "./dom-navigator";
 import bootstrap from "bootstrap.native";
 import bootstrap from "bootstrap.native";
@@ -126,7 +126,7 @@ converse.plugins.add('converse-emoji-views', {
         Object.assign(_converse.ChatBoxView.prototype, emoji_aware_chat_view);
         Object.assign(_converse.ChatBoxView.prototype, emoji_aware_chat_view);
 
 
 
 
-        _converse.EmojiPickerView = HTMLView.extend({
+        _converse.EmojiPickerView = View.extend({
             className: 'emoji-picker dropdown-menu toolbar-menu',
             className: 'emoji-picker dropdown-menu toolbar-menu',
 
 
             initialize (config) {
             initialize (config) {
@@ -177,7 +177,7 @@ converse.plugins.add('converse-emoji-views', {
             remove () {
             remove () {
                 const body = document.querySelector('body');
                 const body = document.querySelector('body');
                 body.removeEventListener('keydown', this.onGlobalKeyDown);
                 body.removeEventListener('keydown', this.onGlobalKeyDown);
-                HTMLView.prototype.remove.call(this);
+                View.prototype.remove.call(this);
             },
             },
 
 
             initArrowNavigation () {
             initArrowNavigation () {

+ 2 - 2
src/converse-modal.js

@@ -3,7 +3,7 @@
  * @copyright The Converse.js contributors
  * @copyright The Converse.js contributors
  * @license Mozilla Public License (MPLv2)
  * @license Mozilla Public License (MPLv2)
  */
  */
-import { HTMLView } from 'skeletor.js/src/htmlview.js';
+import { View } from 'skeletor.js/src/view.js';
 import { Model } from 'skeletor.js/src/model.js';
 import { Model } from 'skeletor.js/src/model.js';
 import { isString } from "lodash";
 import { isString } from "lodash";
 import { render } from 'lit-html';
 import { render } from 'lit-html';
@@ -24,7 +24,7 @@ converse.plugins.add('converse-modal', {
         const { _converse } = this;
         const { _converse } = this;
         const { __ } = _converse;
         const { __ } = _converse;
 
 
-        _converse.BootstrapModal = HTMLView.extend({
+        _converse.BootstrapModal = View.extend({
             className: "modal",
             className: "modal",
             events: {
             events: {
                 'click  .nav-item .nav-link': 'switchTab'
                 'click  .nav-item .nav-link': 'switchTab'

+ 4 - 5
src/converse-muc-views.js

@@ -8,9 +8,8 @@ import "converse-modal";
 import "formdata-polyfill";
 import "formdata-polyfill";
 import "@converse/headless/utils/muc";
 import "@converse/headless/utils/muc";
 import { get, head, isString, isUndefined } from "lodash";
 import { get, head, isString, isUndefined } from "lodash";
-import { HTMLView } from 'skeletor.js/src/htmlview.js';
+import { View } from 'skeletor.js/src/view.js';
 import { Model } from 'skeletor.js/src/model.js';
 import { Model } from 'skeletor.js/src/model.js';
-import { View } from "skeletor.js/src/view";
 import { __ } from '@converse/headless/i18n';
 import { __ } from '@converse/headless/i18n';
 import converse from "@converse/headless/converse-core";
 import converse from "@converse/headless/converse-core";
 import log from "@converse/headless/log";
 import log from "@converse/headless/log";
@@ -2040,7 +2039,7 @@ converse.plugins.add('converse-muc-views', {
         });
         });
 
 
 
 
-        _converse.MUCConfigForm = HTMLView.extend({
+        _converse.MUCConfigForm = View.extend({
             className: 'chatroom-form-container muc-config-form',
             className: 'chatroom-form-container muc-config-form',
 
 
             initialize (attrs) {
             initialize (attrs) {
@@ -2095,7 +2094,7 @@ converse.plugins.add('converse-muc-views', {
         });
         });
 
 
 
 
-        _converse.MUCPasswordForm = HTMLView.extend({
+        _converse.MUCPasswordForm = View.extend({
             className: 'chatroom-form-container muc-password-form',
             className: 'chatroom-form-container muc-password-form',
 
 
             initialize (attrs) {
             initialize (attrs) {
@@ -2167,7 +2166,7 @@ converse.plugins.add('converse-muc-views', {
         });
         });
 
 
 
 
-        _converse.MUCSidebar = HTMLView.extend({
+        _converse.MUCSidebar = View.extend({
             tagName: 'div',
             tagName: 'div',
             className: 'occupants col-md-3 col-4',
             className: 'occupants col-md-3 col-4',
 
 

+ 2 - 2
src/converse-oauth.js

@@ -4,7 +4,7 @@
  * @license Mozilla Public License (MPLv2)
  * @license Mozilla Public License (MPLv2)
  */
  */
 import { Collection } from "skeletor.js/src/collection";
 import { Collection } from "skeletor.js/src/collection";
-import { HTMLView } from 'skeletor.js/src/htmlview.js';
+import { View } from 'skeletor.js/src/view.js';
 import { Model } from 'skeletor.js/src/model.js';
 import { Model } from 'skeletor.js/src/model.js';
 import converse from "@converse/headless/converse-core";
 import converse from "@converse/headless/converse-core";
 import hello from "hellojs";
 import hello from "hellojs";
@@ -90,7 +90,7 @@ converse.plugins.add("converse-oauth", {
         _converse.oauth_providers = new _converse.OAuthProviders();
         _converse.oauth_providers = new _converse.OAuthProviders();
 
 
 
 
-        _converse.OAuthProvidersView = HTMLView.extend({
+        _converse.OAuthProvidersView = View.extend({
             toHTML () {
             toHTML () {
                 return tpl_oauth_providers(
                 return tpl_oauth_providers(
                     Object.assign({
                     Object.assign({

+ 1 - 1
src/converse-profile.js

@@ -195,7 +195,7 @@ converse.plugins.add('converse-profile', {
             }
             }
         });
         });
 
 
-        _converse.XMPPStatusView = _converse.HTMLViewWithAvatar.extend({
+        _converse.XMPPStatusView = _converse.ViewWithAvatar.extend({
             tagName: "div",
             tagName: "div",
             events: {
             events: {
                 "click a.show-profile": "showProfileModal",
                 "click a.show-profile": "showProfileModal",

+ 2 - 2
src/converse-roomslist.js

@@ -8,7 +8,7 @@
  */
  */
 import "@converse/headless/converse-muc";
 import "@converse/headless/converse-muc";
 import { Model } from 'skeletor.js/src/model.js';
 import { Model } from 'skeletor.js/src/model.js';
-import { HTMLView } from 'skeletor.js/src/htmlview.js';
+import { View } from 'skeletor.js/src/view.js';
 import { __ } from '@converse/headless/i18n';
 import { __ } from '@converse/headless/i18n';
 import converse from "@converse/headless/converse-core";
 import converse from "@converse/headless/converse-core";
 import tpl_rooms_list from "templates/rooms_list.js";
 import tpl_rooms_list from "templates/rooms_list.js";
@@ -50,7 +50,7 @@ converse.plugins.add('converse-roomslist', {
         });
         });
 
 
 
 
-        _converse.RoomsListView = HTMLView.extend({
+        _converse.RoomsListView = View.extend({
             tagName: 'span',
             tagName: 'span',
 
 
             initialize () {
             initialize () {

+ 2 - 2
src/converse-rosterview.js

@@ -8,7 +8,7 @@ import "@converse/headless/converse-roster";
 import "converse-modal";
 import "converse-modal";
 import "formdata-polyfill";
 import "formdata-polyfill";
 import { compact, debounce, has, isString, uniq, without } from "lodash";
 import { compact, debounce, has, isString, uniq, without } from "lodash";
-import { HTMLView } from 'skeletor.js/src/htmlview.js';
+import { View } from 'skeletor.js/src/view.js';
 import { Model } from 'skeletor.js/src/model.js';
 import { Model } from 'skeletor.js/src/model.js';
 import { OrderedListView } from "skeletor.js/src/overview";
 import { OrderedListView } from "skeletor.js/src/overview";
 import SHA1 from 'strophe.js/src/sha1';
 import SHA1 from 'strophe.js/src/sha1';
@@ -201,7 +201,7 @@ converse.plugins.add('converse-rosterview', {
             },
             },
         });
         });
 
 
-        _converse.RosterFilterView = HTMLView.extend({
+        _converse.RosterFilterView = View.extend({
             tagName: 'span',
             tagName: 'span',
 
 
             initialize () {
             initialize () {

+ 1 - 4
src/headless/converse-core.js

@@ -13,7 +13,6 @@ import 'strophe.js/src/websocket';
 import './polyfill';
 import './polyfill';
 import * as strophe from 'strophe.js/src/core';
 import * as strophe from 'strophe.js/src/core';
 import _ from './lodash.noconflict';
 import _ from './lodash.noconflict';
-import Backbone from 'backbone';
 import Storage from 'skeletor.js/src/storage.js';
 import Storage from 'skeletor.js/src/storage.js';
 import advancedFormat from 'dayjs/plugin/advancedFormat';
 import advancedFormat from 'dayjs/plugin/advancedFormat';
 import dayjs from 'dayjs';
 import dayjs from 'dayjs';
@@ -29,7 +28,6 @@ const $iq = strophe.default.$iq;
 const $msg = strophe.default.$msg;
 const $msg = strophe.default.$msg;
 const $pres = strophe.default.$pres;
 const $pres = strophe.default.$pres;
 
 
-Backbone = Backbone.noConflict();
 
 
 dayjs.extend(advancedFormat);
 dayjs.extend(advancedFormat);
 
 
@@ -1780,7 +1778,6 @@ Object.assign(window.converse, {
      * @property {function} converse.env.$iq       - Creates a Strophe.Builder with an <iq/> element as the root.
      * @property {function} converse.env.$iq       - Creates a Strophe.Builder with an <iq/> element as the root.
      * @property {function} converse.env.$msg      - Creates a Strophe.Builder with an <message/> element as the root.
      * @property {function} converse.env.$msg      - Creates a Strophe.Builder with an <message/> element as the root.
      * @property {function} converse.env.$pres     - Creates a Strophe.Builder with an <presence/> element as the root.
      * @property {function} converse.env.$pres     - Creates a Strophe.Builder with an <presence/> element as the root.
-     * @property {object} converse.env.Backbone    - The [Backbone](http://backbonejs.org) object used by Converse to create models and views.
      * @property {function} converse.env.Promise   - The Promise implementation used by Converse.
      * @property {function} converse.env.Promise   - The Promise implementation used by Converse.
      * @property {function} converse.env.Strophe   - The [Strophe](http://strophe.im/strophejs) XMPP library used by Converse.
      * @property {function} converse.env.Strophe   - The [Strophe](http://strophe.im/strophejs) XMPP library used by Converse.
      * @property {object} converse.env._           - The instance of [lodash](http://lodash.com) used by Converse.
      * @property {object} converse.env._           - The instance of [lodash](http://lodash.com) used by Converse.
@@ -1789,7 +1786,7 @@ Object.assign(window.converse, {
      * @property {function} converse.env.sizzle    - [Sizzle](https://sizzlejs.com) CSS selector engine.
      * @property {function} converse.env.sizzle    - [Sizzle](https://sizzlejs.com) CSS selector engine.
      * @property {object} converse.env.utils       - Module containing common utility methods used by Converse.
      * @property {object} converse.env.utils       - Module containing common utility methods used by Converse.
      */
      */
-    'env': { $build, $iq, $msg, $pres, Backbone, Model, Collection, Promise, Strophe, _, dayjs, log, sizzle, stanza_utils, u, 'utils': u }
+    'env': { $build, $iq, $msg, $pres, Model, Collection, Promise, Strophe, _, dayjs, log, sizzle, stanza_utils, u, 'utils': u }
 });
 });
 
 
 /**
 /**

+ 1 - 3
src/headless/package.json

@@ -26,9 +26,7 @@
   },
   },
   "gitHead": "9641dcdc820e029b05930479c242d2b707bbe8e2",
   "gitHead": "9641dcdc820e029b05930479c242d2b707bbe8e2",
   "devDependencies": {
   "devDependencies": {
-    "skeletor.js": "skeletorjs/skeletor#9a4487496bd2810b2f0847acbca136333cf9cfb0",
-    "backbone": "1.4",
-    "backbone.browserStorage": "conversejs/backbone.browserStorage#674ba3aa0e4d0f0b0dcac48fcc7dea531012828f",
+    "skeletor.js": "skeletorjs/skeletor#5a95708a5fdec9029fc493c1df4bca337803f124",
     "filesize": "^4.1.2",
     "filesize": "^4.1.2",
     "jed": "1.1.1",
     "jed": "1.1.1",
     "localforage": "^1.7.3",
     "localforage": "^1.7.3",

+ 1 - 15
webpack.common.js

@@ -15,10 +15,6 @@ module.exports = {
     },
     },
     module: {
     module: {
         rules: [
         rules: [
-        {
-            test: path.resolve(__dirname, "node_modules/backbone.vdomview/backbone.vdomview"),
-            use: 'imports-loader?backbone.nativeview'
-        },
         {
         {
             test: path.resolve(__dirname, "node_modules/xss/dist/xss"),
             test: path.resolve(__dirname, "node_modules/xss/dist/xss"),
             use: "exports-loader?filterXSS,filterCSS"
             use: "exports-loader?filterXSS,filterCSS"
@@ -122,17 +118,7 @@ module.exports = {
             "IPv6":                     path.resolve(__dirname, "node_modules/urijs/src/IPv6"),
             "IPv6":                     path.resolve(__dirname, "node_modules/urijs/src/IPv6"),
             "SecondLevelDomains":       path.resolve(__dirname, "node_modules/urijs/src/SecondLevelDomains"),
             "SecondLevelDomains":       path.resolve(__dirname, "node_modules/urijs/src/SecondLevelDomains"),
             "formdata-polyfill":        path.resolve(__dirname, "node_modules/formdata-polyfill/FormData"),
             "formdata-polyfill":        path.resolve(__dirname, "node_modules/formdata-polyfill/FormData"),
-            "jquery":                   path.resolve(__dirname, "src/jquery-stub"),
-            "punycode":                 path.resolve(__dirname, "node_modules/urijs/src/punycode"),
-            "snabbdom":                 path.resolve(__dirname, "node_modules/snabbdom/dist/snabbdom"),
-            "snabbdom-attributes":      path.resolve(__dirname, "node_modules/snabbdom/dist/snabbdom-attributes"),
-            "snabbdom-class":           path.resolve(__dirname, "node_modules/snabbdom/dist/snabbdom-class"),
-            "snabbdom-dataset":         path.resolve(__dirname, "node_modules/snabbdom/dist/snabbdom-dataset"),
-            "snabbdom-eventlisteners":  path.resolve(__dirname, "node_modules/snabbdom/dist/snabbdom-eventlisteners"),
-            "snabbdom-props":           path.resolve(__dirname, "node_modules/snabbdom/dist/snabbdom-props"),
-            "snabbdom-style":           path.resolve(__dirname, "node_modules/snabbdom/dist/snabbdom-style"),
-            "tovnode":                  path.resolve(__dirname, "node_modules/snabbdom/dist/tovnode"),
-            "underscore":               path.resolve(__dirname, "src/underscore-shim")
+            "punycode":                 path.resolve(__dirname, "node_modules/urijs/src/punycode")
         }
         }
     }
     }
 }
 }