Skip to content

Commit 193871a

Browse files
committed
Get rid of jQuery use
Most people are no longer fluent in jQuery, so it makes more sense to just use native DOM/JS APIs.
1 parent 7dacddf commit 193871a

File tree

1 file changed

+26
-27
lines changed

1 file changed

+26
-27
lines changed

js/src/_base/Renderable.js

+26-27
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
var _ = require('underscore');
22
var widgets = require('@jupyter-widgets/base');
3-
var $ = require('jquery');
43
var Promise = require('bluebird');
54

65
var pkgName = require('../../package.json').name;
@@ -52,6 +51,7 @@ class RenderableModel extends widgets.DOMWidgetModel {
5251

5352
initialize(attributes, options) {
5453
widgets.DOMWidgetModel.prototype.initialize.apply(this, arguments);
54+
this.boundTick = this.tick.bind(this);
5555

5656
this.createPropertiesArrays();
5757
ThreeModel.prototype.setupListeners.call(this);
@@ -132,10 +132,10 @@ class RenderableModel extends widgets.DOMWidgetModel {
132132
var canvas;
133133
if (view.isFrozen) {
134134
canvas = document.createElement('canvas');
135-
canvas.width = view.$frozenRenderer.width();
136-
canvas.height = view.$frozenRenderer.height();
135+
canvas.width = view.frozenRenderer.width;
136+
canvas.height = view.frozenRenderer.height;
137137
var ctx = canvas.getContext('2d');
138-
ctx.drawImage(view.$frozenRenderer[0], 0, 0);
138+
ctx.drawImage(view.frozenRenderer, 0, 0);
139139
} else {
140140
canvas = view.renderer.domElement;
141141
}
@@ -191,7 +191,7 @@ class RenderableView extends widgets.DOMWidgetView {
191191
remove() {
192192
super.remove();
193193

194-
this.$el.empty();
194+
this.el.replaceChildren();
195195
if (!this.isFrozen) {
196196
this.teardownViewer();
197197
}
@@ -226,8 +226,8 @@ class RenderableView extends widgets.DOMWidgetView {
226226
if (this.renderer) {
227227
candidates.push(this.renderer.domElement);
228228
}
229-
if (this.$frozenRenderer) {
230-
candidates.push(this.$frozenRenderer[0]);
229+
if (this.frozenRenderer) {
230+
candidates.push(this.frozenRenderer);
231231
}
232232
if (candidates.indexOf(event.target) !== -1) {
233233
event.preventDefault();
@@ -274,7 +274,8 @@ class RenderableView extends widgets.DOMWidgetView {
274274
var height = this.model.get('_height');
275275
if (this.isFrozen) {
276276
// Set size of frozen element
277-
this.$frozenRenderer.width(width).height(height);
277+
this.frozenRenderer.width = width;
278+
this.frozenRenderer.height = height;
278279
} else {
279280
this.renderer.setSize(width, height);
280281
}
@@ -395,9 +396,9 @@ class RenderableView extends widgets.DOMWidgetView {
395396

396397
this.isFrozen = false;
397398

398-
if(this.$frozenRenderer) {
399-
this.$frozenRenderer.off('mouseenter');
400-
this.$frozenRenderer = null;
399+
if(this.frozenRenderer) {
400+
this.frozenRenderer.removeEventListener('mouseenter', this.boundTick);
401+
this.frozenRenderer = null;
401402
}
402403

403404
this.acquireRenderer();
@@ -420,10 +421,9 @@ class RenderableView extends widgets.DOMWidgetView {
420421
config,
421422
this.onRendererReclaimed.bind(this));
422423

423-
this.$renderer = $(this.renderer.domElement);
424-
this.$el.empty().append(this.$renderer);
424+
this.el.replaceChildren(this.renderer);
425425

426-
this.$el.css('display', 'block');
426+
this.el.style.display = 'block';
427427

428428
this.updateSize();
429429

@@ -442,49 +442,48 @@ class RenderableView extends widgets.DOMWidgetView {
442442

443443
this.debug('ThreeView.freeze(id=' + this.renderer.poolId + ')');
444444

445-
this.$el.empty().append('<img src="' + this.renderer.domElement.toDataURL() + '" />');
445+
const frozen = document.createElement('img');
446+
frozen.src = this.renderer.domElement.toDataURL();
447+
this.el.replaceChildren(frozen);
446448

447449
this.teardownViewer();
448-
this.$frozenRenderer = this.$el.find('img');
450+
this.frozenRenderer = frozen;
449451

450452
// Ensure the image gets set the right size:
451453
this.updateSize();
452454

453455
if (this.controls) {
454-
this.$frozenRenderer.on('mouseenter', _.bind(function() {
455-
this.debug('frozenRenderer.mouseenter');
456-
this.tick(); // renderer will be acquired by renderScene
457-
}, this));
456+
this.frozenRenderer.addEventListener('mouseenter', this.boundTick);
458457
}
459458

460459
}
461460

462-
teardownViewer() {
461+
onFrozenMouseEnter() {
462+
this.debug('frozenRenderer.mouseenter');
463+
this.tick(); // renderer will be acquired by renderScene
464+
}
463465

464-
this.$renderer.off('mouseenter');
465-
this.$renderer.off('mouseleave');
466+
teardownViewer() {
466467

467468
this.isFrozen = true;
468469
RendererPool.release(this.renderer);
469470

470-
this.$renderer = null;
471471
this.renderer = null;
472472

473473
if (this.controls) {
474474
this.disableControls();
475475
}
476476

477-
this.$el.css('margin-bottom', 'auto');
477+
this.el.style.marginBottom = 'auto';
478478

479479
}
480480

481481
enableControls() {
482482
this.debug('Enable controls');
483-
this.boundTick = this.tick.bind(this);
484483
var that = this;
485484
this.controls.forEach(function(control) {
486485
control.enabled = true;
487-
control.connectEvents(that.$renderer[0]);
486+
control.connectEvents(that.renderer);
488487
control.addEventListener('change', that.boundTick);
489488
});
490489
}

0 commit comments

Comments
 (0)