Sfoglia il codice sorgente

Adding verron:autosize (meteor-autoresize)

Martin Filser 3 anni fa
parent
commit
47446315ad

+ 1 - 1
.meteor/packages

@@ -64,7 +64,7 @@ mquandalle:jquery-ui-drag-drop-sort
 mquandalle:mousetrap-bindglobal
 peerlibrary:blaze-components@=0.15.1
 templates:tabs
-verron:autosize
+meteor-autosize
 simple:json-routes
 rajit:bootstrap3-datepicker
 shell-server@0.5.0

+ 1 - 1
.meteor/versions

@@ -219,7 +219,7 @@ url@1.3.2
 useraccounts:core@1.14.2
 useraccounts:flow-routing@1.14.2
 useraccounts:unstyled@1.14.2
-verron:autosize@3.0.8
+meteor-autosize@3.0.8
 webapp@1.10.1
 webapp-hashing@1.1.0
 wekan-accounts-cas@0.1.0

+ 20 - 0
packages/meteor-autosize/LICENSE

@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 v3rron
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 44 - 0
packages/meteor-autosize/README.md

@@ -0,0 +1,44 @@
+meteor-autosize
+======================
+
+Ever wondered how to make autoresizable Facebook-style textarea inputs? Autosize is a small, stand-alone script to automatically adjust (resize) textarea height to fit text.
+Repackaged for Meteor.
+
+<img src="./img/ScreenShot1.png" alt="screenshot1" width="360"/>
+<img src="./img/ScreenShot2.png" alt="screenshot2" width="360"/>
+
+## Installation
+
+`meteor add verron:autosize`
+
+## Example
+
+````javascript
+// from a NodeList
+autosize(document.querySelectorAll('textarea'));
+
+// from a single Node
+autosize(document.querySelector('textarea'));
+
+// from a jQuery collection
+autosize($('textarea'));
+````
+
+#### Browser compatibility
+
+Chrome | Firefox | IE | Safari | iOS Safari | Android | Opera Mini | Windows Phone IE
+------ | --------|----|--------|------------|---------|------------|------------------
+yes    | yes     | 9  | yes    | yes        | 4       | ?          | 8.1
+
+
+#### Documentation and Demo
+
+http://www.jacklmoore.com/autosize/
+
+#### Original package
+
+https://github.com/jackmoore/autosize/
+
+#### Author
+
+The Meteor repackage was created by Spendflow, updated by Kelly Copley (@copleykj) for the new 0.9.0 packaging system and updated to v3 (pure javascript version) by Ronen Verdi ([@v3rron](https://github.com/v3rron)).

BIN
packages/meteor-autosize/img/ScreenShot1.png


BIN
packages/meteor-autosize/img/ScreenShot2.png


+ 214 - 0
packages/meteor-autosize/lib/autosize.js

@@ -0,0 +1,214 @@
+/*!
+  Autosize 3.0.8
+  license: MIT
+  http://www.jacklmoore.com/autosize
+*/
+(function (global, factory) {
+  if (typeof define === 'function' && define.amd) {
+    define(['exports', 'module'], factory);
+  } else if (typeof exports !== 'undefined' && typeof module !== 'undefined') {
+    factory(exports, module);
+  } else {
+    var mod = {
+      exports: {}
+    };
+    factory(mod.exports, mod);
+    global.autosize = mod.exports;
+  }
+})(this, function (exports, module) {
+  'use strict';
+
+  function assign(ta) {
+    var _ref = arguments[1] === undefined ? {} : arguments[1];
+
+    var _ref$setOverflowX = _ref.setOverflowX;
+    var setOverflowX = _ref$setOverflowX === undefined ? true : _ref$setOverflowX;
+    var _ref$setOverflowY = _ref.setOverflowY;
+    var setOverflowY = _ref$setOverflowY === undefined ? true : _ref$setOverflowY;
+
+    if (!ta || !ta.nodeName || ta.nodeName !== 'TEXTAREA' || ta.hasAttribute('data-autosize-on')) return;
+
+    var heightOffset = null;
+    var overflowY = 'hidden';
+
+    function init() {
+      var style = window.getComputedStyle(ta, null);
+
+      if (style.resize === 'vertical') {
+        ta.style.resize = 'none';
+      } else if (style.resize === 'both') {
+        ta.style.resize = 'horizontal';
+      }
+
+      if (style.boxSizing === 'content-box') {
+        heightOffset = -(parseFloat(style.paddingTop) + parseFloat(style.paddingBottom));
+      } else {
+        heightOffset = parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth);
+      }
+
+      update();
+    }
+
+    function changeOverflow(value) {
+      {
+        // Chrome/Safari-specific fix:
+        // When the textarea y-overflow is hidden, Chrome/Safari do not reflow the text to account for the space
+        // made available by removing the scrollbar. The following forces the necessary text reflow.
+        var width = ta.style.width;
+        ta.style.width = '0px';
+        // Force reflow:
+        /* jshint ignore:start */
+        ta.offsetWidth;
+        /* jshint ignore:end */
+        ta.style.width = width;
+      }
+
+      overflowY = value;
+
+      if (setOverflowY) {
+        ta.style.overflowY = value;
+      }
+
+      resize();
+    }
+
+    function resize() {
+      var htmlTop = window.pageYOffset;
+      var bodyTop = document.body.scrollTop;
+      var originalHeight = ta.style.height;
+
+      ta.style.height = 'auto';
+
+      var endHeight = ta.scrollHeight + heightOffset;
+
+      if (ta.scrollHeight === 0) {
+        // If the scrollHeight is 0, then the element probably has display:none or is detached from the DOM.
+        ta.style.height = originalHeight;
+        return;
+      }
+
+      ta.style.height = endHeight + 'px';
+
+      // prevents scroll-position jumping
+      document.documentElement.scrollTop = htmlTop;
+      document.body.scrollTop = bodyTop;
+    }
+
+    function update() {
+      var startHeight = ta.style.height;
+
+      resize();
+
+      var style = window.getComputedStyle(ta, null);
+
+      if (style.height !== ta.style.height) {
+        if (overflowY !== 'visible') {
+          changeOverflow('visible');
+        }
+      } else {
+        if (overflowY !== 'hidden') {
+          changeOverflow('hidden');
+        }
+      }
+
+      if (startHeight !== ta.style.height) {
+        var evt = document.createEvent('Event');
+        evt.initEvent('autosize:resized', true, false);
+        ta.dispatchEvent(evt);
+      }
+    }
+
+    var destroy = (function (style) {
+      window.removeEventListener('resize', update);
+      ta.removeEventListener('input', update);
+      ta.removeEventListener('keyup', update);
+      ta.removeAttribute('data-autosize-on');
+      ta.removeEventListener('autosize:destroy', destroy);
+
+      Object.keys(style).forEach(function (key) {
+        ta.style[key] = style[key];
+      });
+    }).bind(ta, {
+      height: ta.style.height,
+      resize: ta.style.resize,
+      overflowY: ta.style.overflowY,
+      overflowX: ta.style.overflowX,
+      wordWrap: ta.style.wordWrap });
+
+    ta.addEventListener('autosize:destroy', destroy);
+
+    // IE9 does not fire onpropertychange or oninput for deletions,
+    // so binding to onkeyup to catch most of those events.
+    // There is no way that I know of to detect something like 'cut' in IE9.
+    if ('onpropertychange' in ta && 'oninput' in ta) {
+      ta.addEventListener('keyup', update);
+    }
+
+    window.addEventListener('resize', update);
+    ta.addEventListener('input', update);
+    ta.addEventListener('autosize:update', update);
+    ta.setAttribute('data-autosize-on', true);
+
+    if (setOverflowY) {
+      ta.style.overflowY = 'hidden';
+    }
+    if (setOverflowX) {
+      ta.style.overflowX = 'hidden';
+      ta.style.wordWrap = 'break-word';
+    }
+
+    init();
+  }
+
+  function destroy(ta) {
+    if (!(ta && ta.nodeName && ta.nodeName === 'TEXTAREA')) return;
+    var evt = document.createEvent('Event');
+    evt.initEvent('autosize:destroy', true, false);
+    ta.dispatchEvent(evt);
+  }
+
+  function update(ta) {
+    if (!(ta && ta.nodeName && ta.nodeName === 'TEXTAREA')) return;
+    var evt = document.createEvent('Event');
+    evt.initEvent('autosize:update', true, false);
+    ta.dispatchEvent(evt);
+  }
+
+  var autosize = null;
+
+  // Do nothing in Node.js environment and IE8 (or lower)
+  if (typeof window === 'undefined' || typeof window.getComputedStyle !== 'function') {
+    autosize = function (el) {
+      return el;
+    };
+    autosize.destroy = function (el) {
+      return el;
+    };
+    autosize.update = function (el) {
+      return el;
+    };
+  } else {
+    autosize = function (el, options) {
+      if (el) {
+        Array.prototype.forEach.call(el.length ? el : [el], function (x) {
+          return assign(x, options);
+        });
+      }
+      return el;
+    };
+    autosize.destroy = function (el) {
+      if (el) {
+        Array.prototype.forEach.call(el.length ? el : [el], destroy);
+      }
+      return el;
+    };
+    autosize.update = function (el) {
+      if (el) {
+        Array.prototype.forEach.call(el.length ? el : [el], update);
+      }
+      return el;
+    };
+  }
+
+  module.exports = autosize;
+});

+ 12 - 0
packages/meteor-autosize/package.js

@@ -0,0 +1,12 @@
+Package.describe({
+  name: 'meteor-autosize',
+  summary: 'Automatically adjust textarea height based on user input.',
+  version: '3.0.8',
+  git: "https://github.com/DeDeSt/meteor-autosize.git",
+  documentation: 'README.md'
+});
+
+Package.on_use(function (api) {
+  api.versionsFrom("METEOR@0.9.0");
+  api.add_files(['lib/autosize.js'], 'client');
+});