| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- app.views.Resizer = class Resizer extends app.View {
- static className = "_resizer";
- static events = {
- dragstart: "onDragStart",
- dragend: "onDragEnd",
- };
- static MIN = 260;
- static MAX = 600;
- static isSupported() {
- return "ondragstart" in document.createElement("div") && !app.isMobile();
- }
- init() {
- this.el.setAttribute("draggable", "true");
- this.appendTo($("._app"));
- }
- resize(value, save) {
- value -= app.el.offsetLeft;
- if (!(value > 0)) {
- return;
- }
- value = Math.min(Math.max(Math.round(value), Resizer.MIN), Resizer.MAX);
- const newSize = `${value}px`;
- document.documentElement.style.setProperty("--sidebarWidth", newSize);
- if (save) {
- app.settings.setSize(value);
- }
- }
- onDragStart(event) {
- event.dataTransfer.effectAllowed = "link";
- event.dataTransfer.setData("Text", "");
- this.onDrag = this.onDrag.bind(this);
- $.on(window, "dragover", this.onDrag);
- }
- onDrag(event) {
- const value = event.pageX;
- if (!(value > 0)) {
- return;
- }
- this.lastDragValue = value;
- if (this.lastDrag && this.lastDrag > Date.now() - 50) {
- return;
- }
- this.lastDrag = Date.now();
- this.resize(value, false);
- }
- onDragEnd(event) {
- $.off(window, "dragover", this.onDrag);
- let value = event.pageX || event.screenX - window.screenX;
- if (
- this.lastDragValue &&
- !(this.lastDragValue - 5 < value && value < this.lastDragValue + 5)
- ) {
- // https://github.com/freeCodeCamp/devdocs/issues/265
- value = this.lastDragValue;
- }
- this.resize(value, true);
- }
- };
|