@egjs/flicking-plugins 4.6.0 → 4.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -8,6 +8,7 @@ export interface PaginationOptions {
8
8
  bulletCount: number;
9
9
  renderBullet: (className: string, index: number) => string;
10
10
  renderFraction: (currentClass: string, totalClass: string) => string;
11
+ renderActiveBullet: ((className: string, index: number) => string) | null;
11
12
  fractionCurrentFormat: (index: number) => string;
12
13
  fractionTotalFormat: (total: number) => string;
13
14
  scrollOnChange: (index: number, ctx: ScrollContext) => any;
@@ -22,6 +23,7 @@ declare class Pagination implements Plugin {
22
23
  private _classPrefix;
23
24
  private _bulletCount;
24
25
  private _renderBullet;
26
+ private _renderActiveBullet;
25
27
  private _renderFraction;
26
28
  private _fractionCurrentFormat;
27
29
  private _fractionTotalFormat;
@@ -32,6 +34,7 @@ declare class Pagination implements Plugin {
32
34
  get classPrefix(): string;
33
35
  get bulletCount(): PaginationOptions["bulletCount"];
34
36
  get renderBullet(): PaginationOptions["renderBullet"];
37
+ get renderActiveBullet(): PaginationOptions["renderActiveBullet"];
35
38
  get renderFraction(): PaginationOptions["renderFraction"];
36
39
  get fractionCurrentFormat(): PaginationOptions["fractionCurrentFormat"];
37
40
  get fractionTotalFormat(): PaginationOptions["fractionTotalFormat"];
@@ -42,11 +45,12 @@ declare class Pagination implements Plugin {
42
45
  set bulletWrapperclassPrefixClass(val: PaginationOptions["classPrefix"]);
43
46
  set bulletCount(val: PaginationOptions["bulletCount"]);
44
47
  set renderBullet(val: PaginationOptions["renderBullet"]);
48
+ set renderActiveBullet(val: PaginationOptions["renderActiveBullet"]);
45
49
  set renderFraction(val: PaginationOptions["renderFraction"]);
46
50
  set fractionCurrentFormat(val: PaginationOptions["fractionCurrentFormat"]);
47
51
  set fractionTotalFormat(val: PaginationOptions["fractionTotalFormat"]);
48
52
  set scrollOnChange(val: PaginationOptions["scrollOnChange"]);
49
- constructor({ parentEl, selector, type, classPrefix, bulletCount, renderBullet, renderFraction, fractionCurrentFormat, fractionTotalFormat, scrollOnChange }?: Partial<PaginationOptions>);
53
+ constructor({ parentEl, selector, type, classPrefix, bulletCount, renderBullet, renderActiveBullet, renderFraction, fractionCurrentFormat, fractionTotalFormat, scrollOnChange }?: Partial<PaginationOptions>);
50
54
  init(flicking: Flicking): void;
51
55
  destroy(): void;
52
56
  update: () => void;
@@ -1,3 +1,3 @@
1
- import Pagination from "./Pagination";
2
- export * from "./renderer";
1
+ import Pagination, { PaginationOptions } from "./Pagination";
3
2
  export { Pagination };
3
+ export type { PaginationOptions };
@@ -1,6 +1,10 @@
1
1
  import Renderer from "./Renderer";
2
2
  declare class BulletRenderer extends Renderer {
3
- private _childs;
3
+ private _bullets;
4
+ private _prevIndex;
5
+ private get _bulletClass();
6
+ private get _activeClass();
7
+ destroy(): void;
4
8
  render(): void;
5
9
  update(index: number): void;
6
10
  }
@@ -1,5 +1,8 @@
1
1
  import Renderer from "./Renderer";
2
2
  declare class FractionRenderer extends Renderer {
3
+ private _prevIndex;
4
+ private _prevTotal;
5
+ destroy(): void;
3
6
  render(): void;
4
7
  update(index: number): void;
5
8
  }
@@ -10,7 +10,10 @@ declare abstract class Renderer {
10
10
  protected _pagination: Pagination;
11
11
  protected _wrapper: HTMLElement;
12
12
  constructor({ flicking, pagination, wrapper }: RendererOptions);
13
+ abstract destroy(): void;
13
14
  abstract render(): void;
14
15
  abstract update(index: number): void;
16
+ protected _createBulletFromString(html: string, index: number): HTMLElement;
17
+ protected _addBulletEvents(bullet: HTMLElement, index: number): void;
15
18
  }
16
19
  export default Renderer;
@@ -4,6 +4,7 @@ declare class ScrollBulletRenderer extends Renderer {
4
4
  private _bulletSize;
5
5
  private _previousIndex;
6
6
  private _sliderIndex;
7
+ destroy(): void;
7
8
  render(): void;
8
9
  update(index: number): void;
9
10
  moveTo: (index: number) => void;
@@ -4,7 +4,7 @@ name: @egjs/flicking-plugins
4
4
  license: MIT
5
5
  author: NAVER Corp.
6
6
  repository: https://github.com/naver/egjs-flicking-plugins
7
- version: 4.6.0
7
+ version: 4.7.0
8
8
  */
9
9
  import { EVENTS, DIRECTION, FlickingError, clamp } from '@egjs/flicking';
10
10
 
@@ -152,8 +152,11 @@ function () {
152
152
  var progress = panel.outsetProgress;
153
153
  var el = panel.element;
154
154
  var target = selector ? el.querySelector(selector) : el;
155
- var opacity = Math.min(1, Math.max(0, 1 - Math.abs(progress * scale)));
156
- target.style.opacity = "" + opacity;
155
+
156
+ if (target) {
157
+ var opacity = Math.min(1, Math.max(0, 1 - Math.abs(progress * scale)));
158
+ target.style.opacity = "" + opacity;
159
+ }
157
160
  });
158
161
  };
159
162
 
@@ -1195,6 +1198,39 @@ function () {
1195
1198
  this._wrapper = wrapper;
1196
1199
  }
1197
1200
 
1201
+ var __proto = Renderer.prototype;
1202
+
1203
+ __proto._createBulletFromString = function (html, index) {
1204
+ var range = document.createRange();
1205
+ var frag = range.createContextualFragment(html);
1206
+ var bullet = frag.firstChild;
1207
+
1208
+ this._addBulletEvents(bullet, index);
1209
+
1210
+ return bullet;
1211
+ };
1212
+
1213
+ __proto._addBulletEvents = function (bullet, index) {
1214
+ var _this = this;
1215
+
1216
+ var anchorPoints = this._flicking.camera.anchorPoints;
1217
+ var panelIndex = anchorPoints[index].panel.index;
1218
+ bullet.addEventListener(BROWSER.MOUSE_DOWN, function (e) {
1219
+ e.stopPropagation();
1220
+ });
1221
+ bullet.addEventListener(BROWSER.TOUCH_START, function (e) {
1222
+ e.stopPropagation();
1223
+ }, {
1224
+ passive: true
1225
+ });
1226
+ bullet.addEventListener(BROWSER.CLICK, function () {
1227
+ _this._flicking.moveTo(panelIndex).catch(function (err) {
1228
+ if (err instanceof FlickingError) return;
1229
+ throw err;
1230
+ });
1231
+ });
1232
+ };
1233
+
1198
1234
  return Renderer;
1199
1235
  }();
1200
1236
 
@@ -1206,64 +1242,112 @@ function (_super) {
1206
1242
  function BulletRenderer() {
1207
1243
  var _this = _super !== null && _super.apply(this, arguments) || this;
1208
1244
 
1209
- _this._childs = [];
1245
+ _this._bullets = [];
1246
+ _this._prevIndex = -1;
1210
1247
  return _this;
1211
1248
  }
1212
1249
 
1213
1250
  var __proto = BulletRenderer.prototype;
1251
+ Object.defineProperty(__proto, "_bulletClass", {
1252
+ get: function () {
1253
+ var pagination = this._pagination;
1254
+ return pagination.classPrefix + "-" + PAGINATION.BULLET_SUFFIX;
1255
+ },
1256
+ enumerable: false,
1257
+ configurable: true
1258
+ });
1259
+ Object.defineProperty(__proto, "_activeClass", {
1260
+ get: function () {
1261
+ var pagination = this._pagination;
1262
+ return pagination.classPrefix + "-" + PAGINATION.BULLET_ACTIVE_SUFFIX;
1263
+ },
1264
+ enumerable: false,
1265
+ configurable: true
1266
+ });
1267
+
1268
+ __proto.destroy = function () {
1269
+ this._bullets = [];
1270
+ this._prevIndex = -1;
1271
+ };
1214
1272
 
1215
1273
  __proto.render = function () {
1274
+ var _this = this;
1275
+
1216
1276
  var flicking = this._flicking;
1217
1277
  var pagination = this._pagination;
1278
+ var wrapper = this._wrapper;
1279
+ var bulletClass = this._bulletClass;
1280
+ var activeClass = this._activeClass;
1218
1281
  var renderBullet = pagination.renderBullet;
1282
+ var renderActiveBullet = pagination.renderActiveBullet;
1219
1283
  var bulletWrapperClass = pagination.classPrefix + "-" + PAGINATION.BULLET_WRAPPER_SUFFIX;
1220
- var bulletClass = pagination.classPrefix + "-" + PAGINATION.BULLET_SUFFIX;
1221
- var bulletActiveClass = pagination.classPrefix + "-" + PAGINATION.BULLET_ACTIVE_SUFFIX;
1222
1284
  var anchorPoints = flicking.camera.anchorPoints;
1223
- var wrapper = this._wrapper;
1224
1285
  addClass(wrapper, bulletWrapperClass);
1225
- wrapper.innerHTML = anchorPoints.map(function (_, index) {
1226
- return renderBullet(bulletClass, index);
1286
+ wrapper.innerHTML = anchorPoints.map(function (anchorPoint, index) {
1287
+ if (renderActiveBullet && anchorPoint.panel.index === flicking.index) {
1288
+ return renderActiveBullet(bulletClass, index);
1289
+ } else {
1290
+ return renderBullet(bulletClass, index);
1291
+ }
1227
1292
  }).join("\n");
1228
1293
  var bullets = [].slice.call(wrapper.children);
1229
1294
  bullets.forEach(function (bullet, index) {
1230
1295
  var anchorPoint = anchorPoints[index];
1231
1296
 
1232
1297
  if (anchorPoint.panel.index === flicking.index) {
1233
- addClass(bullet, bulletActiveClass);
1298
+ addClass(bullet, activeClass);
1299
+ _this._prevIndex = index;
1234
1300
  }
1235
1301
 
1236
- bullet.addEventListener(BROWSER.MOUSE_DOWN, function (e) {
1237
- e.stopPropagation();
1238
- });
1239
- bullet.addEventListener(BROWSER.TOUCH_START, function (e) {
1240
- e.stopPropagation();
1241
- }, {
1242
- passive: true
1243
- });
1244
- bullet.addEventListener(BROWSER.CLICK, function () {
1245
- flicking.moveTo(anchorPoint.panel.index).catch(function (err) {
1246
- if (err instanceof FlickingError) return;
1247
- throw err;
1248
- });
1249
- });
1302
+ _this._addBulletEvents(bullet, index);
1250
1303
  });
1251
- this._childs = bullets;
1304
+ this._bullets = bullets;
1252
1305
  };
1253
1306
 
1254
1307
  __proto.update = function (index) {
1255
1308
  var flicking = this._flicking;
1256
1309
  var pagination = this._pagination;
1257
- var bullets = this._childs;
1258
- var activeClass = pagination.classPrefix + "-" + PAGINATION.BULLET_ACTIVE_SUFFIX;
1310
+ var wrapper = this._wrapper;
1311
+ var bullets = this._bullets;
1312
+ var bulletClass = this._bulletClass;
1313
+ var activeClass = this._activeClass;
1314
+ var prevIndex = this._prevIndex;
1259
1315
  var anchorPoints = flicking.camera.anchorPoints;
1316
+ var renderBullet = pagination.renderBullet;
1317
+ var renderActiveBullet = pagination.renderActiveBullet;
1260
1318
  if (anchorPoints.length <= 0) return;
1261
- bullets.forEach(function (bullet) {
1262
- removeClass(bullet, activeClass);
1263
- });
1264
1319
  var anchorOffset = anchorPoints[0].panel.index;
1265
- var activeBullet = bullets[index - anchorOffset];
1266
- addClass(activeBullet, activeClass);
1320
+ var activeBulletIndex = index - anchorOffset;
1321
+ if (prevIndex === activeBulletIndex) return;
1322
+
1323
+ if (renderActiveBullet) {
1324
+ var prevBullet = bullets[prevIndex];
1325
+
1326
+ if (prevBullet) {
1327
+ var newBullet = this._createBulletFromString(renderBullet(bulletClass, prevIndex), prevIndex);
1328
+
1329
+ prevBullet.parentElement.replaceChild(newBullet, prevBullet);
1330
+ bullets[prevIndex] = newBullet;
1331
+ }
1332
+
1333
+ var activeBullet = bullets[activeBulletIndex];
1334
+
1335
+ var newActiveBullet = this._createBulletFromString(renderActiveBullet(bulletClass + " " + activeClass, activeBulletIndex), activeBulletIndex);
1336
+
1337
+ wrapper.replaceChild(newActiveBullet, activeBullet);
1338
+ bullets[activeBulletIndex] = newActiveBullet;
1339
+ } else {
1340
+ var activeBullet = bullets[activeBulletIndex];
1341
+ var prevBullet = bullets[prevIndex];
1342
+
1343
+ if (prevBullet) {
1344
+ removeClass(prevBullet, activeClass);
1345
+ }
1346
+
1347
+ addClass(activeBullet, activeClass);
1348
+ }
1349
+
1350
+ this._prevIndex = activeBulletIndex;
1267
1351
  };
1268
1352
 
1269
1353
  return BulletRenderer;
@@ -1275,11 +1359,20 @@ function (_super) {
1275
1359
  __extends(FractionRenderer, _super);
1276
1360
 
1277
1361
  function FractionRenderer() {
1278
- return _super !== null && _super.apply(this, arguments) || this;
1362
+ var _this = _super !== null && _super.apply(this, arguments) || this;
1363
+
1364
+ _this._prevIndex = -1;
1365
+ _this._prevTotal = -1;
1366
+ return _this;
1279
1367
  }
1280
1368
 
1281
1369
  var __proto = FractionRenderer.prototype;
1282
1370
 
1371
+ __proto.destroy = function () {
1372
+ this._prevIndex = -1;
1373
+ this._prevTotal = -1;
1374
+ };
1375
+
1283
1376
  __proto.render = function () {
1284
1377
  var flicking = this._flicking;
1285
1378
  var wrapper = this._wrapper;
@@ -1296,14 +1389,18 @@ function (_super) {
1296
1389
  var flicking = this._flicking;
1297
1390
  var wrapper = this._wrapper;
1298
1391
  var pagination = this._pagination;
1299
- var fractionCurrentClass = pagination.classPrefix + "-" + PAGINATION.FRACTION_CURRENT_SUFFIX;
1300
- var fractionTotalClass = pagination.classPrefix + "-" + PAGINATION.FRACTION_TOTAL_SUFFIX;
1301
- var currentWrapper = wrapper.querySelector("." + fractionCurrentClass);
1302
- var totalWrapper = wrapper.querySelector("." + fractionTotalClass);
1303
1392
  var anchorPoints = flicking.camera.anchorPoints;
1304
1393
  var currentIndex = anchorPoints.length > 0 ? index - anchorPoints[0].panel.index + 1 : 0;
1394
+ var anchorCount = anchorPoints.length;
1395
+ if (currentIndex === this._prevIndex && anchorCount === this._prevTotal) return;
1396
+ var fractionCurrentSelector = "." + pagination.classPrefix + "-" + PAGINATION.FRACTION_CURRENT_SUFFIX;
1397
+ var fractionTotalSelector = "." + pagination.classPrefix + "-" + PAGINATION.FRACTION_TOTAL_SUFFIX;
1398
+ var currentWrapper = wrapper.querySelector(fractionCurrentSelector);
1399
+ var totalWrapper = wrapper.querySelector(fractionTotalSelector);
1305
1400
  currentWrapper.innerHTML = pagination.fractionCurrentFormat(currentIndex);
1306
- totalWrapper.innerHTML = pagination.fractionTotalFormat(anchorPoints.length);
1401
+ totalWrapper.innerHTML = pagination.fractionTotalFormat(anchorCount);
1402
+ this._prevIndex = currentIndex;
1403
+ this._prevTotal = anchorCount;
1307
1404
  };
1308
1405
 
1309
1406
  return FractionRenderer;
@@ -1336,7 +1433,16 @@ function (_super) {
1336
1433
 
1337
1434
  var __proto = ScrollBulletRenderer.prototype;
1338
1435
 
1436
+ __proto.destroy = function () {
1437
+ this._bullets = [];
1438
+ this._bulletSize = 0;
1439
+ this._previousIndex = -1;
1440
+ this._sliderIndex = -1;
1441
+ };
1442
+
1339
1443
  __proto.render = function () {
1444
+ var _this = this;
1445
+
1340
1446
  var wrapper = this._wrapper;
1341
1447
  var flicking = this._flicking;
1342
1448
  var pagination = this._pagination;
@@ -1356,21 +1462,7 @@ function (_super) {
1356
1462
  }).join("\n");
1357
1463
  var bullets = [].slice.call(sliderEl.children);
1358
1464
  bullets.forEach(function (bullet, index) {
1359
- var anchorPoint = anchorPoints[index];
1360
- bullet.addEventListener(BROWSER.MOUSE_DOWN, function (e) {
1361
- e.stopPropagation();
1362
- });
1363
- bullet.addEventListener(BROWSER.TOUCH_START, function (e) {
1364
- e.stopPropagation();
1365
- }, {
1366
- passive: true
1367
- });
1368
- bullet.addEventListener(BROWSER.CLICK, function () {
1369
- flicking.moveTo(anchorPoint.panel.index).catch(function (err) {
1370
- if (err instanceof FlickingError) return;
1371
- throw err;
1372
- });
1373
- });
1465
+ _this._addBulletEvents(bullet, index);
1374
1466
  });
1375
1467
  if (bullets.length <= 0) return;
1376
1468
  var bulletStyle = getComputedStyle(bullets[0]);
@@ -1378,6 +1470,7 @@ function (_super) {
1378
1470
  wrapper.style.width = bulletSize * pagination.bulletCount + "px";
1379
1471
  this._bullets = bullets;
1380
1472
  this._bulletSize = bulletSize;
1473
+ this._previousIndex = -1;
1381
1474
  this.update(this._flicking.index);
1382
1475
  window.requestAnimationFrame(function () {
1383
1476
  removeClass(wrapper, uninitClass);
@@ -1389,10 +1482,13 @@ function (_super) {
1389
1482
  var flicking = this._flicking;
1390
1483
  var bullets = this._bullets;
1391
1484
  var prevIndex = this._previousIndex;
1485
+ var renderBullet = pagination.renderBullet;
1486
+ var renderActiveBullet = pagination.renderActiveBullet;
1392
1487
  var anchorPoints = flicking.camera.anchorPoints;
1393
1488
  var anchorOffset = anchorPoints[0].panel.index;
1394
1489
  var activeIndex = index - anchorOffset;
1395
1490
  if (anchorPoints.length <= 0) return;
1491
+ var bulletClass = pagination.classPrefix + "-" + PAGINATION.BULLET_SUFFIX;
1396
1492
  var bulletActiveClass = pagination.classPrefix + "-" + PAGINATION.BULLET_ACTIVE_SUFFIX;
1397
1493
  var prevClassPrefix = pagination.classPrefix + "-" + PAGINATION.SCROLL_PREV_SUFFIX;
1398
1494
  var nextClassPrefix = pagination.classPrefix + "-" + PAGINATION.SCROLL_NEXT_SUFFIX;
@@ -1407,6 +1503,27 @@ function (_super) {
1407
1503
 
1408
1504
  var prevClassRegex = new RegExp("^" + prevClassPrefix);
1409
1505
  var nextClassRegex = new RegExp("^" + nextClassPrefix);
1506
+
1507
+ if (renderActiveBullet) {
1508
+ var prevBullet = bullets[prevIndex];
1509
+
1510
+ if (prevBullet) {
1511
+ var newBullet = this._createBulletFromString(renderBullet(bulletClass, prevIndex), prevIndex);
1512
+
1513
+ prevBullet.parentElement.replaceChild(newBullet, prevBullet);
1514
+ bullets[prevIndex] = newBullet;
1515
+ }
1516
+
1517
+ var activeBullet = bullets[activeIndex];
1518
+
1519
+ if (activeBullet) {
1520
+ var newActiveBullet = this._createBulletFromString(renderActiveBullet(bulletClass, activeIndex), activeIndex);
1521
+
1522
+ activeBullet.parentElement.replaceChild(newActiveBullet, activeBullet);
1523
+ bullets[activeIndex] = newActiveBullet;
1524
+ }
1525
+ }
1526
+
1410
1527
  bullets.forEach(function (bullet, idx) {
1411
1528
  var indexOffset = idx - activeIndex;
1412
1529
  var classList = bullet.className.split(" ");
@@ -1466,22 +1583,24 @@ function () {
1466
1583
  renderBullet = _h === void 0 ? function (className) {
1467
1584
  return "<span class=\"" + className + "\"></span>";
1468
1585
  } : _h,
1469
- _j = _b.renderFraction,
1470
- renderFraction = _j === void 0 ? function (currentClass, totalClass) {
1586
+ _j = _b.renderActiveBullet,
1587
+ renderActiveBullet = _j === void 0 ? null : _j,
1588
+ _k = _b.renderFraction,
1589
+ renderFraction = _k === void 0 ? function (currentClass, totalClass) {
1471
1590
  return "<span class=\"" + currentClass + "\"></span>/<span class=\"" + totalClass + "\"></span>";
1472
- } : _j,
1473
- _k = _b.fractionCurrentFormat,
1474
- fractionCurrentFormat = _k === void 0 ? function (index) {
1475
- return index.toString();
1476
1591
  } : _k,
1477
- _l = _b.fractionTotalFormat,
1478
- fractionTotalFormat = _l === void 0 ? function (index) {
1592
+ _l = _b.fractionCurrentFormat,
1593
+ fractionCurrentFormat = _l === void 0 ? function (index) {
1479
1594
  return index.toString();
1480
1595
  } : _l,
1481
- _m = _b.scrollOnChange,
1482
- scrollOnChange = _m === void 0 ? function (index, ctx) {
1596
+ _m = _b.fractionTotalFormat,
1597
+ fractionTotalFormat = _m === void 0 ? function (index) {
1598
+ return index.toString();
1599
+ } : _m,
1600
+ _o = _b.scrollOnChange,
1601
+ scrollOnChange = _o === void 0 ? function (index, ctx) {
1483
1602
  return ctx.moveTo(index);
1484
- } : _m;
1603
+ } : _o;
1485
1604
  /* Internal Values */
1486
1605
 
1487
1606
 
@@ -1503,6 +1622,7 @@ function () {
1503
1622
  this._classPrefix = classPrefix;
1504
1623
  this._bulletCount = bulletCount;
1505
1624
  this._renderBullet = renderBullet;
1625
+ this._renderActiveBullet = renderActiveBullet;
1506
1626
  this._renderFraction = renderFraction;
1507
1627
  this._fractionCurrentFormat = fractionCurrentFormat;
1508
1628
  this._fractionTotalFormat = fractionTotalFormat;
@@ -1567,6 +1687,16 @@ function () {
1567
1687
  enumerable: false,
1568
1688
  configurable: true
1569
1689
  });
1690
+ Object.defineProperty(__proto, "renderActiveBullet", {
1691
+ get: function () {
1692
+ return this._renderActiveBullet;
1693
+ },
1694
+ set: function (val) {
1695
+ this._renderActiveBullet = val;
1696
+ },
1697
+ enumerable: false,
1698
+ configurable: true
1699
+ });
1570
1700
  Object.defineProperty(__proto, "renderFraction", {
1571
1701
  get: function () {
1572
1702
  return this._renderFraction;
@@ -1649,6 +1779,8 @@ function () {
1649
1779
  flicking.off(EVENTS.WILL_RESTORE, this._onIndexChange);
1650
1780
  flicking.off(EVENTS.PANEL_CHANGE, this.update);
1651
1781
 
1782
+ this._renderer.destroy();
1783
+
1652
1784
  this._removeAllChilds();
1653
1785
 
1654
1786
  this._flicking = null;