vendor: 4,225 bytes, lines 1-109
1/*! 2 * @preserve 3 * 4 * Readmore.js plugin 5 * Author: @jed_foster 6 * Project home: jedfoster.com/Readmore.js 7 * Version: 3.0.0-beta-1 8 * Licensed under the MIT license 9 * 10 * Debounce function from davidwalsh.name/javascript-debounce-function 11 */ 12(function webpackUniversalModuleDefinition(root, factory) { 13 if(typeof exports === 'object' && typeof module === 'object') 14 module.exports = factory(); 15 else if(typeof define === 'function' && define.amd) 16 define("Readmore", [], factory); 17 else if(typeof exports === 'object') 18 exports["Readmore"] = factory(); 19 else 20 root["Readmore"] = factory(); 21})(window, function() { 22return /******/ (function(modules) { // webpackBootstrap 23/******/ // The module cache 24/******/ var installedModules = {}; 25/******/ 26/******/ // The require function 27/******/ function __webpack_require__(moduleId) { 28/******/ 29/******/ // Check if module is in cache 30/******/ if(installedModules[moduleId]) { 31/******/ return installedModules[moduleId].exports; 32/******/ } 33/******/ // Create a new module (and put it into the cache) 34/******/ var module = installedModules[moduleId] = { 35/******/ i: moduleId, 36/******/ l: false, 37/******/ exports: {} 38/******/ }; 39/******/ 40/******/ // Execute the module function 41/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); 42/******/ 43/******/ // Flag the module as loaded 44/******/ module.l = true; 45/******/ 46/******/ // Return the exports of the module 47/******/ return module.exports; 48/******/ } 49/******/ 50/******/ 51/******/ // expose the modules object (__webpack_modules__) 52/******/ __webpack_require__.m = modules; 53/******/ 54/******/ // expose the module cache 55/******/ __webpack_require__.c = installedModules; 56/******/ 57/******/ // define getter function for harmony exports 58/******/ __webpack_require__.d = function(exports, name, getter) { 59/******/ if(!__webpack_require__.o(exports, name)) { 60/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); 61/******/ } 62/******/ }; 63/******/ 64/******/ // define __esModule on exports 65/******/ __webpack_require__.r = function(exports) { 66/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { 67/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); 68/******/ } 69/******/ Object.defineProperty(exports, '__esModule', { value: true }); 70/******/ }; 71/******/ 72/******/ // create a fake namespace object 73/******/ // mode & 1: value is a module id, require it 74/******/ // mode & 2: merge all properties of value into the ns 75/******/ // mode & 4: return value when already ns object 76/******/ // mode & 8|1: behave like require 77/******/ __webpack_require__.t = function(value, mode) { 78/******/ if(mode & 1) value = __webpack_require__(value); 79/******/ if(mode & 8) return value; 80/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; 81/******/ var ns = Object.create(null); 82/******/ __webpack_require__.r(ns); 83/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); 84/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); 85/******/ return ns; 86/******/ }; 87/******/ 88/******/ // getDefaultExport function for compatibility with non-harmony modules 89/******/ __webpack_require__.n = function(module) { 90/******/ var getter = module && module.__esModule ? 91/******/ function getDefault() { return module['default']; } : 92/******/ function getModuleExports() { return module; }; 93/******/ __webpack_require__.d(getter, 'a', getter); 94/******/ return getter; 95/******/ }; 96/******/ 97/******/ // Object.prototype.hasOwnProperty.call 98/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; 99/******/ 100/******/ // __webpack_public_path__ 101/******/ __webpack_require__.p = ""; 102/******/ 103/******/ 104/******/ // Load entry module and return exports 105/******/ return __webpack_require__(__webpack_require__.s = 0); 106/******/ }) 107/************************************************************************/ 108/******/ ({ 109
vendor: 547 bytes, lines 110-126
110/***/ "./node_modules/@babel/runtime/helpers/classCallCheck.js": 111/*!***************************************************************!*\ 112 !*** ./node_modules/@babel/runtime/helpers/classCallCheck.js ***! 113 \***************************************************************/ 114/*! no static exports found */ 115/***/ (function(module, exports) { 116 117function _classCallCheck(instance, Constructor) { 118 if (!(instance instanceof Constructor)) { 119 throw new TypeError("Cannot call a class as a function"); 120 } 121} 122 123module.exports = _classCallCheck; 124 125/***/ }), 126
vendor: 935 bytes, lines 127-153
127/***/ "./node_modules/@babel/runtime/helpers/createClass.js": 128/*!************************************************************!*\ 129 !*** ./node_modules/@babel/runtime/helpers/createClass.js ***! 130 \************************************************************/ 131/*! no static exports found */ 132/***/ (function(module, exports) { 133 134function _defineProperties(target, props) { 135 for (var i = 0; i < props.length; i++) { 136 var descriptor = props[i]; 137 descriptor.enumerable = descriptor.enumerable || false; 138 descriptor.configurable = true; 139 if ("value" in descriptor) descriptor.writable = true; 140 Object.defineProperty(target, descriptor.key, descriptor); 141 } 142} 143 144function _createClass(Constructor, protoProps, staticProps) { 145 if (protoProps) _defineProperties(Constructor.prototype, protoProps); 146 if (staticProps) _defineProperties(Constructor, staticProps); 147 return Constructor; 148} 149 150module.exports = _createClass; 151 152/***/ }), 153
vendor: 1,136 bytes, lines 154-180
154/***/ "./node_modules/@babel/runtime/helpers/typeof.js": 155/*!*******************************************************!*\ 156 !*** ./node_modules/@babel/runtime/helpers/typeof.js ***! 157 \*******************************************************/ 158/*! no static exports found */ 159/***/ (function(module, exports) { 160 161function _typeof2(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof2(obj); } 162 163function _typeof(obj) { 164 if (typeof Symbol === "function" && _typeof2(Symbol.iterator) === "symbol") { 165 module.exports = _typeof = function _typeof(obj) { 166 return _typeof2(obj); 167 }; 168 } else { 169 module.exports = _typeof = function _typeof(obj) { 170 return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : _typeof2(obj); 171 }; 172 } 173 174 return _typeof(obj); 175} 176 177module.exports = _typeof; 178 179/***/ }), 180
181/***/ "./src/readmore.js": 182/*!*************************!*\ 183 !*** ./src/readmore.js ***! 184 \*************************/ 185/*! exports provided: default */ 186/***/ (function(module, __webpack_exports__, __webpack_require__) { 187 188"use strict"; 189__webpack_require__.r(__webpack_exports__); 190/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/classCallCheck.js"); 191/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__); 192/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/createClass.js"); 193/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__); 194/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js"); 195/* harmony import */ var _babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_2__); 196 197 198 199var uniqueIdCounter = 0; 200var isCssEmbeddedFor = []; // from:https://github.com/jserz/js_piece/blob/master/DOM/ChildNode/remove()/remove().md 201 202(function removePolyfill(arr) { 203 arr.forEach(function (item) { 204 if (Object.prototype.hasOwnProperty.call(item, 'remove')) { 205 return; 206 } 207 208 Object.defineProperty(item, 'remove', { 209 configurable: true, 210 enumerable: true, 211 writable: true, 212 value: function remove() { 213 if (this.parentNode !== null) { 214 this.parentNode.removeChild(this); 215 } 216 } 217 }); 218 }); 219})([Element.prototype, CharacterData.prototype, DocumentType.prototype]); 220 221function forEach(arr, callback, scope) { 222 for (var i = 0; i < arr.length; i += 1) { 223 callback.call(scope, arr[i], i); 224 } 225} 226 227function extend() { 228 for (var _len = arguments.length, objects = new Array(_len), _key = 0; _key < _len; _key++) { 229 objects[_key] = arguments[_key]; 230 } 231 232 var hasProp = {}.hasOwnProperty; 233 var child = objects[0]; 234 var parent = objects[1]; 235 236 if (objects.length > 2) { 237 var args = []; 238 Object.keys(objects).forEach(function (key) { 239 args.push(objects[key]); 240 }); 241 242 while (args.length > 2) { 243 var c1 = args.shift(); 244 var p1 = args.shift(); 245 args.unshift(extend(c1, p1)); 246 } 247 248 child = args.shift(); 249 parent = args.shift(); 250 } 251 252 if (parent) { 253 Object.keys(parent).forEach(function (key) { 254 if (hasProp.call(parent, key)) { 255 if (_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_2___default()(parent[key]) === 'object') { 256 child[key] = child[key] || {}; 257 child[key] = extend(child[key], parent[key]); 258 } else { 259 child[key] = parent[key]; 260 } 261 } 262 }); 263 } 264 265 return child; 266} 267 268function debounce(func, wait, immediate) { 269 var timeout; 270 return function debouncedFunc() { 271 var _this = this; 272 273 for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { 274 args[_key2] = arguments[_key2]; 275 } 276 277 var callNow = immediate && !timeout; 278 279 var later = function later() { 280 timeout = null; 281 if (!immediate) func.apply(_this, args); 282 }; 283 284 clearTimeout(timeout); 285 timeout = setTimeout(later, wait); 286 if (callNow) func.apply(this, args); 287 }; 288} 289 290function uniqueId() { 291 uniqueIdCounter += 1; 292 return "rmjs-".concat(uniqueIdCounter); 293} 294 295function setBoxHeights(element) { 296 element.style.height = 'auto'; 297 var expandedHeight = parseInt(element.getBoundingClientRect().height, 10); 298 var cssMaxHeight = parseInt(window.getComputedStyle(element).maxHeight, 10); 299 var defaultHeight = parseInt(element.readmore.defaultHeight, 10); // Store our measurements. 300 301 element.readmore.expandedHeight = expandedHeight; 302 element.readmore.maxHeight = cssMaxHeight; 303 element.readmore.collapsedHeight = cssMaxHeight || element.readmore.collapsedHeight || defaultHeight; 304 element.style.maxHeight = 'none'; 305} 306 307function createElementFromString(htmlString) { 308 var div = document.createElement('div'); 309 div.innerHTML = htmlString; 310 return div.firstChild; 311} 312 313function embedCSS(selector, options) { 314 if (!isCssEmbeddedFor[selector]) { 315 var styles = ''; 316 317 if (options.embedCSS && options.blockCSS !== '') { 318 styles += "".concat(selector, " + [data-readmore-toggle], ").concat(selector, "[data-readmore] {\n ").concat(options.blockCSS, "\n }"); 319 } // Include the transition CSS even if embedCSS is false 320 321 322 styles += "".concat(selector, "[data-readmore] {\n transition: height ").concat(options.speed, "ms;\n overflow: hidden;\n }"); 323 324 (function (d, u) { 325 var css = d.createElement('style'); 326 css.type = 'text/css'; 327 328 if (css.styleSheet) { 329 css.styleSheet.cssText = u; 330 } else { 331 css.appendChild(d.createTextNode(u)); 332 } 333 334 d.getElementsByTagName('head')[0].appendChild(css); 335 })(document, styles); 336 337 isCssEmbeddedFor[selector] = true; 338 } 339} 340 341function buildToggle(link, element, scope) { 342 function clickHandler(event) { 343 this.toggle(element, event); 344 } 345 346 var text = link; 347 348 if (typeof link === 'function') { 349 text = link(element); 350 } 351 352 var toggleLink = createElementFromString(text);
353 toggleLink.setAttribute('data-readmore-toggle', element.id); 354 toggleLink.setAttribute('aria-controls', element.id); 355 toggleLink.addEventListener('click', clickHandler.bind(scope)); 356 return toggleLink; 357} 358 359function isEnvironmentSupported() { 360 return typeof window !== 'undefined' && typeof document !== 'undefined' && !!document.querySelectorAll && !!window.addEventListener; 361} 362 363var resizeBoxes = debounce(function () { 364 var elements = document.querySelectorAll('[data-readmore]'); 365 forEach(elements, function (element) { 366 var expanded = element.getAttribute('aria-expanded') === 'true'; 367 setBoxHeights(element); 368 element.style.height = "".concat(expanded ? element.readmore.expandedHeight : element.readmore.collapsedHeight, "px"); 369 }); 370}, 100); 371var defaults = { 372 speed: 100, 373 collapsedHeight: 200, 374 heightMargin: 16, 375 moreLink: '<a href="#">Read More</a>', 376 lessLink: '<a href="#">Close</a>', 377 embedCSS: true, 378 blockCSS: 'display: block; width: 100%;', 379 startOpen: false, 380 sourceOrder: 'after', 381 // callbacks 382 blockProcessed: function blockProcessed() {}, 383 beforeToggle: function beforeToggle() {}, 384 afterToggle: function afterToggle() {} 385}; 386 387var Readmore = 388/*#__PURE__*/ 389function () { 390 function Readmore() { 391 var _this2 = this; 392 393 _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, Readmore); 394 395 if (!isEnvironmentSupported()) return; 396 397 for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { 398 args[_key3] = arguments[_key3]; 399 } 400 401 var selector = args[0], 402 options = args[1]; 403 var elements; 404 405 if (typeof selector === 'string') { 406 elements = document.querySelectorAll(selector); 407 } else if (selector.nodeName) { 408 elements = [selector]; // emulate a NodeList by casting a single Node as an array 409 } else { 410 elements = selector; 411 } // After all that, if we _still_ don't have iteratable NodeList, bail out. 412 413 414 if (!elements.length) return; 415 this.options = extend({}, defaults, options); 416 417 if (typeof selector === 'string') { 418 embedCSS(selector, this.options); 419 } else { 420 // Instances need distinct selectors so they don't stomp on each other. 421 this.instanceSelector = ".".concat(uniqueId()); 422 embedCSS(this.instanceSelector, this.options); 423 } // Need to resize boxes when the page has fully loaded. 424 425 426 window.addEventListener('load', resizeBoxes); 427 window.addEventListener('resize', resizeBoxes); 428 this.elements = []; 429 forEach(elements, function (element) { 430 if (_this2.instanceSelector) { 431 element.classList.add(_this2.instanceSelector.substr(1)); 432 } 433 434 var expanded = _this2.options.startOpen; 435 element.readmore = { 436 defaultHeight: _this2.options.collapsedHeight, 437 heightMargin: _this2.options.heightMargin 438 }; 439 setBoxHeights(element); 440 var heightMargin = element.readmore.heightMargin; 441 442 if (element.getBoundingClientRect().height <= element.readmore.collapsedHeight + heightMargin) { 443 if (typeof _this2.options.blockProcessed === 'function') { 444 _this2.options.blockProcessed(element, false); 445 } 446 447 return; 448 } 449 450 element.setAttribute('data-readmore', ''); 451 element.setAttribute('aria-expanded', expanded); 452 element.id = element.id || uniqueId(); 453 var toggleLink = expanded ? _this2.options.lessLink : _this2.options.moreLink; 454 var toggleElement = buildToggle(toggleLink, element, _this2); 455 element.parentNode.insertBefore(toggleElement, _this2.options.sourceOrder === 'before' ? element : element.nextSibling); 456 element.style.height = "".concat(expanded ? element.readmore.expandedHeight : element.readmore.collapsedHeight, "px"); 457 458 if (typeof _this2.options.blockProcessed === 'function') { 459 _this2.options.blockProcessed(element, true); 460 } 461 462 _this2.elements.push(element); 463 }); 464 } // Signature when called internally by the toggleLink click handler: 465 // toggle(element, event) 466 // 467 // When called externally by an instance, 468 // e.g. readmoreDemo.toggle(document.querySelector('article:nth-of-type(1)')): 469 // toggle(elementOrQuerySelector) 470 471 472 _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(Readmore, [{ 473 key: "toggle",
474 value: function toggle() { 475 var _this3 = this; 476 477 var el = arguments.length <= 0 ? undefined : arguments[0]; 478 479 var toggleElement = function toggleElement(element) { 480 var trigger = document.querySelector("[aria-controls=\"".concat(element.id, "\"]")); 481 var expanded = parseInt(element.getBoundingClientRect().height) <= parseInt(element.readmore.collapsedHeight); 482 var newHeight = expanded ? element.readmore.expandedHeight : element.readmore.collapsedHeight; // Fire beforeToggle callback 483 // Since we determined the new "expanded" state above we're now out of sync 484 // with our true current state, so we need to flip the value of `expanded` 485 486 if (typeof _this3.options.beforeToggle === 'function') { 487 var shouldContinueToggle = _this3.options.beforeToggle(trigger, element, !expanded); // if the beforeToggle callback returns false, stop toggling 488 489 490 if (shouldContinueToggle === false) { 491 return; 492 } 493 } 494 495 element.style.height = "".concat(newHeight, "px"); 496 497 var transitionendHandler = function transitionendHandler(transitionEvent) { 498 // Fire afterToggle callback 499 if (typeof _this3.options.afterToggle === 'function') { 500 _this3.options.afterToggle(trigger, element, expanded); 501 } 502 503 transitionEvent.stopPropagation(); 504 element.setAttribute('aria-expanded', expanded); 505 element.removeEventListener('transitionend', transitionendHandler, false); 506 }; 507 508 element.addEventListener('transitionend', transitionendHandler, false); 509 510 if (_this3.options.speed < 1) { 511 transitionendHandler.call(_this3, { 512 target: element 513 }); 514 } 515 516 var toggleLink = expanded ? _this3.options.lessLink : _this3.options.moreLink; 517 518 if (!toggleLink) { 519 trigger.remove(); 520 } else if (trigger && trigger.parentNode) { 521 trigger.parentNode.replaceChild(buildToggle(toggleLink, element, _this3), trigger); 522 } 523 }; 524 525 if (typeof el === 'string') { 526 el = document.querySelectorAll(el); 527 } 528 529 if (!el) { 530 throw new Error('Element MUST be either an HTML node or querySelector string'); 531 } 532 533 var event = arguments.length <= 1 ? undefined : arguments[1]; 534 535 if (event) { 536 event.preventDefault(); 537 event.stopPropagation(); 538 } 539 540 if (_babel_runtime_helpers_typeof__WEBPACK_IMPORTED_MODULE_2___default()(el) === 'object' && !el.nodeName) { 541 // element is likely a NodeList 542 forEach(el, toggleElement); 543 } else { 544 toggleElement(el); 545 } 546 } 547 }, { 548 key: "destroy", 549 value: function destroy(selector) { 550 var _this4 = this; 551 552 var elements; 553 554 if (!selector) { 555 elements = this.elements; // eslint-disable-line 556 } else if (typeof selector === 'string') { 557 elements = document.querySelectorAll(selector); 558 } else if (selector.nodeName) { 559 elements = [selector]; // emulate a NodeList by casting a single Node as an array 560 } else { 561 elements = selector; 562 } 563 564 forEach(elements, function (element) { 565 if (_this4.elements.indexOf(element) === -1) { 566 return; 567 } 568 569 _this4.elements = _this4.elements.filter(function (el) { 570 return el !== element; 571 }); 572 573 if (_this4.instanceSelector) { 574 element.classList.remove(_this4.instanceSelector.substr(1)); 575 } 576 577 delete element.readmore; 578 element.style.height = 'initial'; 579 element.style.maxHeight = 'initial'; 580 element.removeAttribute('data-readmore'); 581 element.removeAttribute('aria-expanded'); 582 var trigger = document.querySelector("[aria-controls=\"".concat(element.id, "\"]")); 583 584 if (trigger) { 585 trigger.remove(); 586 } 587 588 if (element.id.indexOf('rmjs-') !== -1) { 589 element.removeAttribute('id'); 590 } 591 }); 592 delete this; 593 } 594 }]); 595 596 return Readmore; 597}(); 598 599Readmore.VERSION = "3.0.0-beta-1"; 600/* harmony default export */ __webpack_exports__["default"] = (Readmore); 601 602/***/ })
602, 603 604/***/ 0: 605/*!*******************************!*\ 606 !*** multi ./src/readmore.js ***! 607 \*******************************/ 608/*! no static exports found */ 609/***/ (function(module, exports, __webpack_require__) { 610 611module.exports = __webpack_require__(/*! ./src/readmore.js */"./src/readmore.js"); 612 613 614/***/ }) 615 616/******/ })["default"]; 617});
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.