src/js/libs/jquery.touchsplitter.js
changeset 1076 510fd2a482f4
parent 1075 92cb33eb7a75
child 1077 48cdc013fc07
--- a/src/js/libs/jquery.touchsplitter.js	Sat Oct 19 01:34:55 2024 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,444 +0,0 @@
-// Generated by CoffeeScript 1.9.3
-
-/*
- * Touch Splitter JQuery was created by Cole Lawrence(github:ZombieHippie)
- * This work is licensed under the Creative Commons Attribution-ShareAlike 3.0
- * Unported License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/.
- */
-
-(function() {
-  var bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
-
-  (function(mod) {
-    if (typeof exports === "object" && typeof module === "object") {
-      return mod(require("jquery"));
-    } else if (typeof define === "function" && define.amd) {
-      return define(["jquery"], mod);
-    } else {
-      return mod(jQuery);
-    }
-  })(function(jQuery) {
-    var $, TouchSplitter;
-    $ = jQuery;
-    $.fn.touchSplit = function(options) {
-      if (options == null) {
-        options = {};
-      }
-      if (this[0].touchSplitter != null) {
-        throw "Cannot make a splitter here! '" + this.selector + "' already has a splitter! Use $('" + this.selector + "')[0].touchSplitter.destroy(<optional side to remove>) to remove it!";
-      }
-      if (this.children().length !== 2 && this.children().length !== 0) {
-        throw "Cannot make a splitter here! Incorrect number of div children in '" + this.selector + "'";
-      }
-      return this[0].touchSplitter = new TouchSplitter(this, options);
-    };
-    return TouchSplitter = (function() {
-      function TouchSplitter(element, options) {
-        var barThick, firstdiv, inners, match, splitterHTML, testCalc, testEm, thickness, units;
-        this.element = element;
-        this.resize = bind(this.resize, this);
-        this.onResize = bind(this.onResize, this);
-        this.onResizeWindow = bind(this.onResizeWindow, this);
-        this.getSecond = bind(this.getSecond, this);
-        this.getFirst = bind(this.getFirst, this);
-        this.stopDragging = bind(this.stopDragging, this);
-        this.drag = bind(this.drag, this);
-        this.startDragging = bind(this.startDragging, this);
-        this.onTouchEnd = bind(this.onTouchEnd, this);
-        this.onTouchMove = bind(this.onTouchMove, this);
-        this.onTouchStart = bind(this.onTouchStart, this);
-        this.onMouseDown = bind(this.onMouseDown, this);
-        this.setPercentages = bind(this.setPercentages, this);
-        this.setDock = bind(this.setDock, this);
-        this.moveBar = bind(this.moveBar, this);
-        this.on = bind(this.on, this);
-        this.toggleDock = bind(this.toggleDock, this);
-        this.setRatios = bind(this.setRatios, this);
-        this.destroy = bind(this.destroy, this);
-        this.element.addClass('TouchSplitter');
-        this.support = {};
-        testEm = $('<div class="test-em"></div>');
-        testEm.appendTo(this.element);
-        barThick = testEm.width();
-        testEm.remove();
-        testCalc = $('<div class="test-calc"></div>');
-        testCalc.appendTo(this.element);
-        this.support.calc = true;
-        testCalc.remove();
-        if (options.orientation != null) {
-          if (options.orientation === "vertical") {
-            this.horizontal = false;
-          } else if (options.orientation === "horizontal") {
-
-          } else {
-            console.log("Touch Splitter ERROR: orientation cannot be:'" + options.orientation + "' defaulted to 'horizontal'");
-          }
-        }
-        if (this.horizontal !== false) {
-          this.horizontal = true;
-        }
-        this.element.addClass(this.horizontal ? "h-ts" : "v-ts");
-        this.firstMin = options.leftMin || options.topMin || options.firstMin || 0;
-        this.firstMax = options.leftMax || options.topMax || options.firstMax || false;
-        this.secondMin = options.rightMin || options.bottomMin || options.secondMin || 0;
-        this.secondMax = options.rightMax || options.bottomMax || options.secondMax || false;
-        if (this.firstMax && this.secondMax) {
-          console.log("Touch Splitter ERROR: cannot set max bounds of both first and second sections!");
-          this.secondMax = false;
-        }
-        if (options.dock != null) {
-          if (/both|left|top|first|right|bottom|second/i.test(options.dock)) {
-            this.docks = (function() {
-              switch (false) {
-                case !/both/i.test(options.dock):
-                  return {
-                    first: true,
-                    second: true,
-                    name: "both"
-                  };
-                case !/left|top|first/i.test(options.dock):
-                  return {
-                    first: true,
-                    second: false,
-                    name: "first"
-                  };
-                case !/right|bottom|second/i.test(options.dock):
-                  return {
-                    first: false,
-                    second: true,
-                    name: "second"
-                  };
-              }
-            })();
-          }
-        }
-        if (this.docks) {
-          this.element.addClass('docks-' + this.docks.name);
-        } else {
-          this.docks = {
-            first: false,
-            second: false,
-            name: false
-          };
-        }
-        if (options.thickness != null) {
-          thickness = options.thickness;
-          units = "px";
-          if (typeof thickness === 'string') {
-            if (match = thickness.match(/^([\d\.]+)([a-zA-Z]+)$/)) {
-              thickness = match[1];
-              units = match[2];
-            }
-            thickness = parseFloat(thickness);
-          }
-          if (!thickness) {
-            throw "Unable to parse given thickness: " + options.thickness;
-          } else {
-            thickness = (function() {
-              switch (units) {
-                case "px":
-                  return barThick = thickness;
-                case "em":
-                  return barThick *= thickness;
-                default:
-                  throw "Invalid unit used in given thickness: " + units;
-              }
-            })();
-          }
-        }
-        firstdiv = this.element.find(">div:first");
-        splitterHTML = "<div class=\"splitter-bar\">" + (this.docks.name && this.docks.name.match(/first|second/) ? '<div></div>' : '') + "</div>";
-        if (firstdiv.length === 0) {
-          inners = this.element.html();
-          this.element.html("<div></div> " + splitterHTML + " <div></div>");
-          this.element.find(">div:first").html(inners);
-        } else {
-          firstdiv.after(splitterHTML);
-        }
-        this.barThicknessPx = barThick / 2;
-        this.barThickness = .04;
-        this.barPosition = options.barPosition || 0.5;
-        this.dragging = false;
-        this.initMouse = 0;
-        this.initBarPosition = 0;
-        this.resize();
-        this.element.on('resize', this.onResize);
-        $(window).on('resize', this.onResizeWindow);
-        $(window).on('mouseup', this.stopDragging);
-        $(window).on('mousemove', this.drag);
-        this.element.find('>.splitter-bar').on('mousedown', this.onMouseDown);
-        this.element.find('>.splitter-bar').bind('touchstart', this.onTouchStart);
-        this.element.on('touchmove', this.onTouchMove);
-        this.element.on('touchend', this.onTouchEnd);
-        this.element.on('touchleave', this.onTouchEnd);
-        this.element.on('touchcancel', this.onTouchEnd);
-      }
-
-      TouchSplitter.prototype.destroy = function(side) {
-        var toRemove;
-        this.element.off('resize');
-        $(window).off('resize');
-        $(window).off('mouseup');
-        $(window).off('mousemove');
-        this.element.find('>.splitter-bar').off('mousedown');
-        this.element.find('>.splitter-bar').off('touchstart');
-        this.element.off('touchmove');
-        this.element.off('touchend');
-        this.element.off('touchleave');
-        this.element.off('touchcancel');
-        this.element.find('>.splitter-bar').remove();
-        this.element.removeClass('TouchSplitter h-ts v-ts docks-first docks-second docks-both');
-        if (side != null) {
-          toRemove = (function() {
-            switch (side) {
-              case 'left':
-              case 'top':
-                return '>div:first';
-              case 'right':
-              case 'bottom':
-                return '>div:last';
-              case 'both':
-                return '>div';
-            }
-          })();
-          this.element.find(toRemove).remove();
-        }
-        this.element.children().css({
-          width: "",
-          height: ""
-        });
-        return delete this.element[0].touchSplitter;
-      };
-
-      TouchSplitter.prototype.setRatios = function() {
-        var conv, ref, val;
-        this.splitDistance = this.horizontal ? this.element.width() : this.element.height();
-        ref = {
-          firstMin: this.firstMin,
-          firstMax: this.firstMax,
-          secondMin: this.secondMin,
-          secondMax: this.secondMax
-        };
-        for (conv in ref) {
-          val = ref[conv];
-          if (val) {
-            this[conv + 'Ratio'] = val / this.splitDistance;
-          }
-        }
-        return this.moveBar();
-      };
-
-      TouchSplitter.prototype.toggleDock = function() {
-        this.element.toggleClass('docked');
-        if (this.docked) {
-          return this.setDock(false);
-        } else {
-          return this.setDock(this.docks.name);
-        }
-      };
-
-      TouchSplitter.prototype.on = function(eventName, fn) {
-        return this.element.on(eventName, fn);
-      };
-
-      TouchSplitter.prototype.moveBar = function(newX) {
-        var cursorPos, cursorPos2;
-        cursorPos = this.barPosition;
-        if (newX != null) {
-          cursorPos = this.initBarPosition + (newX - this.initMouse) / this.splitDistance;
-        }
-        cursorPos2 = 1 - cursorPos;
-        if (this.docks.name) {
-          switch (this.docked) {
-            case 'first':
-              if (cursorPos > this.firstMinRatio / 2) {
-                this.setDock(false);
-              }
-              break;
-            case 'second':
-              if (cursorPos2 > this.secondMinRatio / 2) {
-                this.setDock(false);
-              }
-              break;
-            default:
-              if (this.docks.first && cursorPos < this.firstMinRatio / 2) {
-                this.setDock('first');
-              }
-              if (this.docks.second && cursorPos2 < this.secondMinRatio / 2) {
-                this.setDock('second');
-              }
-          }
-        }
-        if (!this.docked) {
-          this.barPosition = (function() {
-            switch (false) {
-              case !(this.firstMaxRatio && cursorPos > this.firstMaxRatio):
-                return this.firstMaxRatio;
-              case !(cursorPos < this.firstMinRatio):
-                return this.firstMinRatio;
-              case !(this.secondMaxRatio && cursorPos2 > this.secondMaxRatio):
-                return 1 - this.secondMaxRatio;
-              case !(cursorPos2 < this.secondMinRatio):
-                return 1 - this.secondMinRatio;
-              default:
-                return cursorPos;
-            }
-          }).call(this);
-          return this.setPercentages();
-        }
-      };
-
-      TouchSplitter.prototype.setDock = function(val, lastpos) {
-        if (lastpos == null) {
-          lastpos = this.barPosition;
-        }
-        this.docked = val;
-        this.barPosition = this.lastPosition;
-        this.lastPosition = lastpos;
-        return this.setPercentages();
-      };
-
-      TouchSplitter.prototype.setPercentages = function() {
-        var attr, first, firstCss, pos, second, secondCss, shave;
-        switch (this.docked) {
-          case 'first':
-            this.barPosition = 0;
-            break;
-          case 'second':
-            this.barPosition = 1;
-        }
-        pos = this.barPosition;
-        firstCss = secondCss = "";
-        if (!this.support.calc) {
-          if (pos < this.barThickness) {
-            pos = this.barThickness;
-          }
-          if (pos > 1 - this.barThickness) {
-            pos = 1 - this.barThickness;
-          }
-          first = pos - this.barThickness;
-          second = 1 - pos - this.barThickness;
-          firstCss = (100 * first - this.barThickness) + "%";
-          secondCss = (100 * second - this.barThickness) + "%";
-        } else {
-          shave = this.barThicknessPx;
-          if (this.docked) {
-            shave *= 2;
-          }
-          pos *= 100;
-          firstCss = "calc(" + pos + "% - " + shave + "px)";
-          secondCss = "calc(" + (100 - pos) + "% - " + shave + "px)";
-        }
-        attr = this.horizontal ? "width" : "height";
-        this.getFirst().css(attr, firstCss);
-        return this.getSecond().css(attr, secondCss);
-      };
-
-      TouchSplitter.prototype.onMouseDown = function(event) {
-        event.preventDefault();
-        this.initMouse = this.horizontal ? event.clientX : event.clientY;
-        return this.startDragging(event);
-      };
-
-      TouchSplitter.prototype.onTouchStart = function(event) {
-        var orig;
-        orig = event.originalEvent;
-        this.initMouse = this.horizontal ? orig.changedTouches[0].pageX : orig.changedTouches[0].pageY;
-        return this.startDragging(event);
-      };
-
-      TouchSplitter.prototype.onTouchMove = function(event) {
-        var orig, page;
-        if (!this.dragging) {
-          return;
-        }
-        event.preventDefault();
-        orig = event.originalEvent;
-        page = this.horizontal ? orig.changedTouches[0].pageX : orig.changedTouches[0].pageY;
-        return this.moveBar(page);
-      };
-
-      TouchSplitter.prototype.onTouchEnd = function(event) {
-        return this.stopDragging(event);
-      };
-
-      TouchSplitter.prototype.startDragging = function(event) {
-        this.initBarPosition = this.barPosition;
-        this.isToggler = !!event.target.parentNode.className.match(/\bsplitter-bar\b/);
-        this.dragging = true;
-        return this.element.trigger("dragstart");
-      };
-
-      TouchSplitter.prototype.drag = function(event) {
-        var client, whichM;
-        if (!this.dragging) {
-          return;
-        }
-        whichM = typeof event.buttons !== 'undefined' ? event.buttons : event.which;
-        if (whichM === 0) {
-          this.stopDragging();
-        }
-        client = this.horizontal ? event.clientX : event.clientY;
-        return this.moveBar(client);
-      };
-
-      TouchSplitter.prototype.stopDragging = function(event) {
-        if (this.dragging) {
-          this.dragging = false;
-          this.element.trigger("dragstop");
-          if (this.isToggler) {
-            return setTimeout((function(_this) {
-              return function() {
-                if ((_this.barPosition - _this.initBarPosition) === 0) {
-                  return _this.toggleDock();
-                }
-              };
-            })(this), 0);
-          }
-        }
-      };
-
-      TouchSplitter.prototype.getFirst = function() {
-        return this.element.find('>div:first');
-      };
-
-      TouchSplitter.prototype.getSecond = function() {
-        return this.element.find('>div:last');
-      };
-
-      TouchSplitter.prototype.onResizeWindow = function(event) {
-        return this.resize();
-      };
-
-      TouchSplitter.prototype.onResize = function(event) {
-        if (event != null) {
-          event.stopPropagation();
-          if (!$(event.target).is(this.element)) {
-            return;
-          }
-        }
-        return this.resize();
-      };
-
-      TouchSplitter.prototype.resize = function() {
-        var attr;
-        this.setRatios();
-        attr = this.horizontal ? "width" : "height";
-        if (!this.support.calc) {
-          this.barThickness = this.barThicknessPx / this.splitDistance;
-          if (this.barThickness > 1) {
-            this.barThickness = 1;
-          }
-          this.element.find('>.splitter-bar').css(attr, this.barThickness * 200 + '%');
-        } else {
-          this.barThickness = 0;
-        }
-        return this.setPercentages();
-      };
-
-      return TouchSplitter;
-
-    })();
-  });
-
-}).call(this);