Ninja Tables – WP Data Table Plugin for WordPress - Version 4.2.2

Version Description

(Date: August 10, 2022) = * Fixes an error for gravity forms * Update readme file

Download this release

Release Info

Developer adreastrian
Plugin Icon 128x128 Ninja Tables – WP Data Table Plugin for WordPress
Version 4.2.2
Comparing to
See all releases

Code changes from version 4.2.1 to 4.2.2

assets/css/ninja-table-builder-public.css DELETED
@@ -1,139 +0,0 @@
1
- .fade-in-linear-enter-active,.fade-in-linear-leave-active{transition:opacity .2s linear}.fade-in-linear-enter,.fade-in-linear-leave,.fade-in-linear-leave-active{opacity:0}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{transition:opacity .2s linear}.el-fade-in-linear-enter,.el-fade-in-linear-leave,.el-fade-in-linear-leave-active{opacity:0}.el-fade-in-enter-active,.el-fade-in-leave-active{transition:all .3s cubic-bezier(.55,0,.1,1)}.el-fade-in-enter,.el-fade-in-leave-active{opacity:0}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{transition:all .3s cubic-bezier(.55,0,.1,1)}.el-zoom-in-center-enter,.el-zoom-in-center-leave-active{opacity:0;transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;transform:scaleY(1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transform-origin:center top}.el-zoom-in-top-enter,.el-zoom-in-top-leave-active{opacity:0;transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;transform:scaleY(1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transform-origin:center bottom}.el-zoom-in-bottom-enter,.el-zoom-in-bottom-leave-active{opacity:0;transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;transform:scale(1,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transform-origin:top left}.el-zoom-in-left-enter,.el-zoom-in-left-leave-active{opacity:0;transform:scale(.45,.45)}.collapse-transition{transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out}.horizontal-collapse-transition{transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out}.el-list-enter-active,.el-list-leave-active{transition:all 1s}.el-list-enter,.el-list-leave-active{opacity:0;transform:translateY(-30px)}.el-opacity-transition{transition:opacity .3s cubic-bezier(.55,0,.1,1)}@font-face{font-family:element-icons;src:url(../fonts/vendor/element-ui/lib/theme-chalk/element-icons.woff?313f7dacf2076822059d2dca26dedfc6) format("woff"),url(../fonts/vendor/element-ui/lib/theme-chalk/element-icons.ttf?4520188144a17fb24a6af28a70dae0ce) format("truetype");font-weight:400;font-display:"auto";font-style:normal}[class*=" el-icon-"],[class^=el-icon-]{font-family:element-icons!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;vertical-align:baseline;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-icon-ice-cream-round:before{content:"\e6a0"}.el-icon-ice-cream-square:before{content:"\e6a3"}.el-icon-lollipop:before{content:"\e6a4"}.el-icon-potato-strips:before{content:"\e6a5"}.el-icon-milk-tea:before{content:"\e6a6"}.el-icon-ice-drink:before{content:"\e6a7"}.el-icon-ice-tea:before{content:"\e6a9"}.el-icon-coffee:before{content:"\e6aa"}.el-icon-orange:before{content:"\e6ab"}.el-icon-pear:before{content:"\e6ac"}.el-icon-apple:before{content:"\e6ad"}.el-icon-cherry:before{content:"\e6ae"}.el-icon-watermelon:before{content:"\e6af"}.el-icon-grape:before{content:"\e6b0"}.el-icon-refrigerator:before{content:"\e6b1"}.el-icon-goblet-square-full:before{content:"\e6b2"}.el-icon-goblet-square:before{content:"\e6b3"}.el-icon-goblet-full:before{content:"\e6b4"}.el-icon-goblet:before{content:"\e6b5"}.el-icon-cold-drink:before{content:"\e6b6"}.el-icon-coffee-cup:before{content:"\e6b8"}.el-icon-water-cup:before{content:"\e6b9"}.el-icon-hot-water:before{content:"\e6ba"}.el-icon-ice-cream:before{content:"\e6bb"}.el-icon-dessert:before{content:"\e6bc"}.el-icon-sugar:before{content:"\e6bd"}.el-icon-tableware:before{content:"\e6be"}.el-icon-burger:before{content:"\e6bf"}.el-icon-knife-fork:before{content:"\e6c1"}.el-icon-fork-spoon:before{content:"\e6c2"}.el-icon-chicken:before{content:"\e6c3"}.el-icon-food:before{content:"\e6c4"}.el-icon-dish-1:before{content:"\e6c5"}.el-icon-dish:before{content:"\e6c6"}.el-icon-moon-night:before{content:"\e6ee"}.el-icon-moon:before{content:"\e6f0"}.el-icon-cloudy-and-sunny:before{content:"\e6f1"}.el-icon-partly-cloudy:before{content:"\e6f2"}.el-icon-cloudy:before{content:"\e6f3"}.el-icon-sunny:before{content:"\e6f6"}.el-icon-sunset:before{content:"\e6f7"}.el-icon-sunrise-1:before{content:"\e6f8"}.el-icon-sunrise:before{content:"\e6f9"}.el-icon-heavy-rain:before{content:"\e6fa"}.el-icon-lightning:before{content:"\e6fb"}.el-icon-light-rain:before{content:"\e6fc"}.el-icon-wind-power:before{content:"\e6fd"}.el-icon-baseball:before{content:"\e712"}.el-icon-soccer:before{content:"\e713"}.el-icon-football:before{content:"\e715"}.el-icon-basketball:before{content:"\e716"}.el-icon-ship:before{content:"\e73f"}.el-icon-truck:before{content:"\e740"}.el-icon-bicycle:before{content:"\e741"}.el-icon-mobile-phone:before{content:"\e6d3"}.el-icon-service:before{content:"\e6d4"}.el-icon-key:before{content:"\e6e2"}.el-icon-unlock:before{content:"\e6e4"}.el-icon-lock:before{content:"\e6e5"}.el-icon-watch:before{content:"\e6fe"}.el-icon-watch-1:before{content:"\e6ff"}.el-icon-timer:before{content:"\e702"}.el-icon-alarm-clock:before{content:"\e703"}.el-icon-map-location:before{content:"\e704"}.el-icon-delete-location:before{content:"\e705"}.el-icon-add-location:before{content:"\e706"}.el-icon-location-information:before{content:"\e707"}.el-icon-location-outline:before{content:"\e708"}.el-icon-location:before{content:"\e79e"}.el-icon-place:before{content:"\e709"}.el-icon-discover:before{content:"\e70a"}.el-icon-first-aid-kit:before{content:"\e70b"}.el-icon-trophy-1:before{content:"\e70c"}.el-icon-trophy:before{content:"\e70d"}.el-icon-medal:before{content:"\e70e"}.el-icon-medal-1:before{content:"\e70f"}.el-icon-stopwatch:before{content:"\e710"}.el-icon-mic:before{content:"\e711"}.el-icon-copy-document:before{content:"\e718"}.el-icon-full-screen:before{content:"\e719"}.el-icon-switch-button:before{content:"\e71b"}.el-icon-aim:before{content:"\e71c"}.el-icon-crop:before{content:"\e71d"}.el-icon-odometer:before{content:"\e71e"}.el-icon-time:before{content:"\e71f"}.el-icon-bangzhu:before{content:"\e724"}.el-icon-close-notification:before{content:"\e726"}.el-icon-microphone:before{content:"\e727"}.el-icon-turn-off-microphone:before{content:"\e728"}.el-icon-position:before{content:"\e729"}.el-icon-postcard:before{content:"\e72a"}.el-icon-message:before{content:"\e72b"}.el-icon-chat-line-square:before{content:"\e72d"}.el-icon-chat-dot-square:before{content:"\e72e"}.el-icon-chat-dot-round:before{content:"\e72f"}.el-icon-chat-square:before{content:"\e730"}.el-icon-chat-line-round:before{content:"\e731"}.el-icon-chat-round:before{content:"\e732"}.el-icon-set-up:before{content:"\e733"}.el-icon-turn-off:before{content:"\e734"}.el-icon-open:before{content:"\e735"}.el-icon-connection:before{content:"\e736"}.el-icon-link:before{content:"\e737"}.el-icon-cpu:before{content:"\e738"}.el-icon-thumb:before{content:"\e739"}.el-icon-female:before{content:"\e73a"}.el-icon-male:before{content:"\e73b"}.el-icon-guide:before{content:"\e73c"}.el-icon-news:before{content:"\e73e"}.el-icon-price-tag:before{content:"\e744"}.el-icon-discount:before{content:"\e745"}.el-icon-wallet:before{content:"\e747"}.el-icon-coin:before{content:"\e748"}.el-icon-money:before{content:"\e749"}.el-icon-bank-card:before{content:"\e74a"}.el-icon-box:before{content:"\e74b"}.el-icon-present:before{content:"\e74c"}.el-icon-sell:before{content:"\e6d5"}.el-icon-sold-out:before{content:"\e6d6"}.el-icon-shopping-bag-2:before{content:"\e74d"}.el-icon-shopping-bag-1:before{content:"\e74e"}.el-icon-shopping-cart-2:before{content:"\e74f"}.el-icon-shopping-cart-1:before{content:"\e750"}.el-icon-shopping-cart-full:before{content:"\e751"}.el-icon-smoking:before{content:"\e752"}.el-icon-no-smoking:before{content:"\e753"}.el-icon-house:before{content:"\e754"}.el-icon-table-lamp:before{content:"\e755"}.el-icon-school:before{content:"\e756"}.el-icon-office-building:before{content:"\e757"}.el-icon-toilet-paper:before{content:"\e758"}.el-icon-notebook-2:before{content:"\e759"}.el-icon-notebook-1:before{content:"\e75a"}.el-icon-files:before{content:"\e75b"}.el-icon-collection:before{content:"\e75c"}.el-icon-receiving:before{content:"\e75d"}.el-icon-suitcase-1:before{content:"\e760"}.el-icon-suitcase:before{content:"\e761"}.el-icon-film:before{content:"\e763"}.el-icon-collection-tag:before{content:"\e765"}.el-icon-data-analysis:before{content:"\e766"}.el-icon-pie-chart:before{content:"\e767"}.el-icon-data-board:before{content:"\e768"}.el-icon-data-line:before{content:"\e76d"}.el-icon-reading:before{content:"\e769"}.el-icon-magic-stick:before{content:"\e76a"}.el-icon-coordinate:before{content:"\e76b"}.el-icon-mouse:before{content:"\e76c"}.el-icon-brush:before{content:"\e76e"}.el-icon-headset:before{content:"\e76f"}.el-icon-umbrella:before{content:"\e770"}.el-icon-scissors:before{content:"\e771"}.el-icon-mobile:before{content:"\e773"}.el-icon-attract:before{content:"\e774"}.el-icon-monitor:before{content:"\e775"}.el-icon-search:before{content:"\e778"}.el-icon-takeaway-box:before{content:"\e77a"}.el-icon-paperclip:before{content:"\e77d"}.el-icon-printer:before{content:"\e77e"}.el-icon-document-add:before{content:"\e782"}.el-icon-document:before{content:"\e785"}.el-icon-document-checked:before{content:"\e786"}.el-icon-document-copy:before{content:"\e787"}.el-icon-document-delete:before{content:"\e788"}.el-icon-document-remove:before{content:"\e789"}.el-icon-tickets:before{content:"\e78b"}.el-icon-folder-checked:before{content:"\e77f"}.el-icon-folder-delete:before{content:"\e780"}.el-icon-folder-remove:before{content:"\e781"}.el-icon-folder-add:before{content:"\e783"}.el-icon-folder-opened:before{content:"\e784"}.el-icon-folder:before{content:"\e78a"}.el-icon-edit-outline:before{content:"\e764"}.el-icon-edit:before{content:"\e78c"}.el-icon-date:before{content:"\e78e"}.el-icon-c-scale-to-original:before{content:"\e7c6"}.el-icon-view:before{content:"\e6ce"}.el-icon-loading:before{content:"\e6cf"}.el-icon-rank:before{content:"\e6d1"}.el-icon-sort-down:before{content:"\e7c4"}.el-icon-sort-up:before{content:"\e7c5"}.el-icon-sort:before{content:"\e6d2"}.el-icon-finished:before{content:"\e6cd"}.el-icon-refresh-left:before{content:"\e6c7"}.el-icon-refresh-right:before{content:"\e6c8"}.el-icon-refresh:before{content:"\e6d0"}.el-icon-video-play:before{content:"\e7c0"}.el-icon-video-pause:before{content:"\e7c1"}.el-icon-d-arrow-right:before{content:"\e6dc"}.el-icon-d-arrow-left:before{content:"\e6dd"}.el-icon-arrow-up:before{content:"\e6e1"}.el-icon-arrow-down:before{content:"\e6df"}.el-icon-arrow-right:before{content:"\e6e0"}.el-icon-arrow-left:before{content:"\e6de"}.el-icon-top-right:before{content:"\e6e7"}.el-icon-top-left:before{content:"\e6e8"}.el-icon-top:before{content:"\e6e6"}.el-icon-bottom:before{content:"\e6eb"}.el-icon-right:before{content:"\e6e9"}.el-icon-back:before{content:"\e6ea"}.el-icon-bottom-right:before{content:"\e6ec"}.el-icon-bottom-left:before{content:"\e6ed"}.el-icon-caret-top:before{content:"\e78f"}.el-icon-caret-bottom:before{content:"\e790"}.el-icon-caret-right:before{content:"\e791"}.el-icon-caret-left:before{content:"\e792"}.el-icon-d-caret:before{content:"\e79a"}.el-icon-share:before{content:"\e793"}.el-icon-menu:before{content:"\e798"}.el-icon-s-grid:before{content:"\e7a6"}.el-icon-s-check:before{content:"\e7a7"}.el-icon-s-data:before{content:"\e7a8"}.el-icon-s-opportunity:before{content:"\e7aa"}.el-icon-s-custom:before{content:"\e7ab"}.el-icon-s-claim:before{content:"\e7ad"}.el-icon-s-finance:before{content:"\e7ae"}.el-icon-s-comment:before{content:"\e7af"}.el-icon-s-flag:before{content:"\e7b0"}.el-icon-s-marketing:before{content:"\e7b1"}.el-icon-s-shop:before{content:"\e7b4"}.el-icon-s-open:before{content:"\e7b5"}.el-icon-s-management:before{content:"\e7b6"}.el-icon-s-ticket:before{content:"\e7b7"}.el-icon-s-release:before{content:"\e7b8"}.el-icon-s-home:before{content:"\e7b9"}.el-icon-s-promotion:before{content:"\e7ba"}.el-icon-s-operation:before{content:"\e7bb"}.el-icon-s-unfold:before{content:"\e7bc"}.el-icon-s-fold:before{content:"\e7a9"}.el-icon-s-platform:before{content:"\e7bd"}.el-icon-s-order:before{content:"\e7be"}.el-icon-s-cooperation:before{content:"\e7bf"}.el-icon-bell:before{content:"\e725"}.el-icon-message-solid:before{content:"\e799"}.el-icon-video-camera:before{content:"\e772"}.el-icon-video-camera-solid:before{content:"\e796"}.el-icon-camera:before{content:"\e779"}.el-icon-camera-solid:before{content:"\e79b"}.el-icon-download:before{content:"\e77c"}.el-icon-upload2:before{content:"\e77b"}.el-icon-upload:before{content:"\e7c3"}.el-icon-picture-outline-round:before{content:"\e75f"}.el-icon-picture-outline:before{content:"\e75e"}.el-icon-picture:before{content:"\e79f"}.el-icon-close:before{content:"\e6db"}.el-icon-check:before{content:"\e6da"}.el-icon-plus:before{content:"\e6d9"}.el-icon-minus:before{content:"\e6d8"}.el-icon-help:before{content:"\e73d"}.el-icon-s-help:before{content:"\e7b3"}.el-icon-circle-close:before{content:"\e78d"}.el-icon-circle-check:before{content:"\e720"}.el-icon-circle-plus-outline:before{content:"\e723"}.el-icon-remove-outline:before{content:"\e722"}.el-icon-zoom-out:before{content:"\e776"}.el-icon-zoom-in:before{content:"\e777"}.el-icon-error:before{content:"\e79d"}.el-icon-success:before{content:"\e79c"}.el-icon-circle-plus:before{content:"\e7a0"}.el-icon-remove:before{content:"\e7a2"}.el-icon-info:before{content:"\e7a1"}.el-icon-question:before{content:"\e7a4"}.el-icon-warning-outline:before{content:"\e6c9"}.el-icon-warning:before{content:"\e7a3"}.el-icon-goods:before{content:"\e7c2"}.el-icon-s-goods:before{content:"\e7b2"}.el-icon-star-off:before{content:"\e717"}.el-icon-star-on:before{content:"\e797"}.el-icon-more-outline:before{content:"\e6cc"}.el-icon-more:before{content:"\e794"}.el-icon-phone-outline:before{content:"\e6cb"}.el-icon-phone:before{content:"\e795"}.el-icon-user:before{content:"\e6e3"}.el-icon-user-solid:before{content:"\e7a5"}.el-icon-setting:before{content:"\e6ca"}.el-icon-s-tools:before{content:"\e7ac"}.el-icon-delete:before{content:"\e6d7"}.el-icon-delete-solid:before{content:"\e7c9"}.el-icon-eleme:before{content:"\e7c7"}.el-icon-platform-eleme:before{content:"\e7ca"}.el-icon-loading{-webkit-animation:rotating 2s linear infinite;animation:rotating 2s linear infinite}.el-icon--right{margin-left:5px}.el-icon--left{margin-right:5px}@-webkit-keyframes rotating{0%{transform:rotateZ(0)}100%{transform:rotateZ(360deg)}}@keyframes rotating{0%{transform:rotateZ(0)}100%{transform:rotateZ(360deg)}}
2
- .el-rate__icon,.el-rate__item{position:relative;display:inline-block}.el-rate{height:20px;line-height:1}.el-rate:active,.el-rate:focus{outline-width:0}.el-rate__item{font-size:0;vertical-align:middle}.el-rate__icon{font-size:18px;margin-right:6px;color:#C0C4CC;transition:.3s}.el-rate__decimal,.el-rate__icon .path2{position:absolute;top:0;left:0}.el-rate__icon.hover{transform:scale(1.15)}.el-rate__decimal{display:inline-block;overflow:hidden}.el-rate__text{font-size:14px;vertical-align:middle}
3
- .el-progress{position:relative;line-height:1}.el-progress__text{font-size:14px;color:#606266;display:inline-block;vertical-align:middle;margin-left:10px;line-height:1}.el-progress__text i{vertical-align:middle;display:block}.el-progress--circle,.el-progress--dashboard{display:inline-block}.el-progress--circle .el-progress__text,.el-progress--dashboard .el-progress__text{position:absolute;top:50%;left:0;width:100%;text-align:center;margin:0;transform:translate(0,-50%)}.el-progress--circle .el-progress__text i,.el-progress--dashboard .el-progress__text i{vertical-align:middle;display:inline-block}.el-progress--without-text .el-progress__text{display:none}.el-progress--without-text .el-progress-bar{padding-right:0;margin-right:0;display:block}.el-progress-bar,.el-progress-bar__inner::after,.el-progress-bar__innerText{display:inline-block;vertical-align:middle}.el-progress--text-inside .el-progress-bar{padding-right:0;margin-right:0}.el-progress.is-success .el-progress-bar__inner{background-color:#67C23A}.el-progress.is-success .el-progress__text{color:#67C23A}.el-progress.is-warning .el-progress-bar__inner{background-color:#E6A23C}.el-progress.is-warning .el-progress__text{color:#E6A23C}.el-progress.is-exception .el-progress-bar__inner{background-color:#F56C6C}.el-progress.is-exception .el-progress__text{color:#F56C6C}.el-progress-bar{padding-right:50px;width:100%;margin-right:-55px;box-sizing:border-box}.el-progress-bar__outer{height:6px;border-radius:100px;background-color:#EBEEF5;overflow:hidden;position:relative;vertical-align:middle}.el-progress-bar__inner{position:absolute;left:0;top:0;height:100%;background-color:#409EFF;text-align:right;border-radius:100px;line-height:1;white-space:nowrap;transition:width .6s ease}.el-progress-bar__inner::after{content:"";height:100%}.el-progress-bar__innerText{color:#FFF;font-size:12px;margin:0 5px}@-webkit-keyframes progress{0%{background-position:0 0}100%{background-position:32px 0}}@keyframes progress{0%{background-position:0 0}100%{background-position:32px 0}}
4
- .ntb_table_wrapper {
5
- word-break: break-word;
6
- max-width: initial;
7
- overflow-y: scroll;
8
- }
9
- .ntb_table_wrapper * {
10
- margin: 0;
11
- padding: 0;
12
- }
13
- .ntb_table_wrapper table {
14
- width: initial;
15
- box-sizing: initial;
16
- }
17
- .ntb_table_wrapper table hr {
18
- all: revert;
19
- }
20
- .ntb_table_wrapper table tbody {
21
- display: block;
22
- }
23
- .ntb_table_wrapper table tbody tr.firstRowSticky {
24
- position: -webkit-sticky;
25
- position: sticky;
26
- z-index: 2;
27
- top: 0;
28
- }
29
- .ntb_table_wrapper table tbody tr td {
30
- border: initial;
31
- }
32
- .ntb_table_wrapper table tbody .button-content-wrapper {
33
- display: flex;
34
- align-items: center;
35
- justify-content: center;
36
- }
37
- .ntb_table_wrapper table tbody .ntb-el-button:hover .svgIcon {
38
- background-color: var(--icon-color-hover) !important;
39
- }
40
- .ntb_table_wrapper table .svgIcon {
41
- display: inline-block;
42
- mask-size: cover;
43
- -webkit-mask-size: cover;
44
- }
45
- .ntb_table_wrapper table .icon-text-wrapper {
46
- justify-content: center;
47
- align-items: center;
48
- }
49
- .ntb_table_wrapper table .ntb-progress .el-progress {
50
- display: flex;
51
- justify-content: center;
52
- align-items: center;
53
- }
54
- .ntb_table_wrapper table .ntb-progress .el-progress .el-progress__text {
55
- color: var(--progress-bar-text-color);
56
- font-size: var(--progress-bar-font-size) !important;
57
- }
58
- .ntb_table_wrapper table .ntb-rating .el-rate__item i {
59
- font-size: var(--rating-font-size);
60
- }
61
- .ntb_table_wrapper table .ribbon-wrapper {
62
- position: relative;
63
- max-width: 600px;
64
- width: 90%;
65
- z-index: 1;
66
- box-shadow: 0 0 15px rgba(0, 0, 0, 0.1);
67
- }
68
- .ntb_table_wrapper table .ribbon-wrapper .corner {
69
- width: 120px;
70
- height: 100px;
71
- overflow: hidden;
72
- position: absolute;
73
- }
74
- .ntb_table_wrapper table .ribbon-wrapper .corner .content {
75
- position: absolute;
76
- display: block;
77
- text-align: center;
78
- box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.5);
79
- }
80
- .ntb_table_wrapper table .ribbon-wrapper .corner .left {
81
- right: -25px;
82
- top: 30px;
83
- transform: rotate(-45deg);
84
- }
85
- .ntb_table_wrapper table .ribbon-wrapper .corner .right {
86
- left: -25px;
87
- top: 30px;
88
- transform: rotate(45deg);
89
- }
90
- .ntb_table_wrapper table .ribbon-wrapper .bookmark {
91
- position: absolute;
92
- overflow: hidden;
93
- filter: drop-shadow(2px 3px 2px rgba(0, 0, 0, 0.5));
94
- }
95
- .ntb_table_wrapper table .ribbon-wrapper .bookmark > .content {
96
- font-size: 1.25rem;
97
- text-align: center;
98
- font-weight: 400;
99
- padding: 8px 2px 4px;
100
- }
101
- .ntb_table_wrapper table .ribbon-wrapper .bookmark.up > .content {
102
- -webkit-clip-path: polygon(0 0, 100% 0, 100% 100%, 50% calc(100% - 8px), 0 100%);
103
- clip-path: polygon(0 0, 100% 0, 100% 100%, 50% calc(100% - 8px), 0 100%);
104
- }
105
- .ntb_table_wrapper table .ribbon-wrapper .side {
106
- position: relative;
107
- float: left;
108
- background-size: cover;
109
- }
110
- .ntb_table_wrapper table .ribbon-wrapper .side .content {
111
- position: absolute;
112
- padding: 8px 10px;
113
- box-shadow: -1px 2px 3px rgba(0, 0, 0, 0.3);
114
- }
115
- .ntb_table_wrapper table .ribbon-wrapper .side .content:before {
116
- width: 7px;
117
- height: 100%;
118
- top: 0;
119
- left: -6.5px;
120
- padding: 0 0 7px;
121
- background: inherit;
122
- border-radius: 5px 0 0 5px;
123
- content: "";
124
- position: absolute;
125
- }
126
- .ntb_table_wrapper table .ribbon-wrapper .side .content:after {
127
- width: 5px;
128
- height: 5px;
129
- bottom: -5px;
130
- left: -4.5px;
131
- background: lightblue;
132
- border-radius: 5px 0 0 5px;
133
- content: "";
134
- position: absolute;
135
- }
136
-
137
- .remove-elements {
138
- display: none;
139
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/js/ninja-table-builder-public.js DELETED
@@ -1,32 +0,0 @@
1
- /*
2
- * ATTENTION: An "eval-source-map" devtool has been used.
3
- * This devtool is neither made for production nor for readable output files.
4
- * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
5
- * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
6
- * or disable the default devtool with "devtool: false".
7
- * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
8
- */
9
- /******/ (() => { // webpackBootstrap
10
- /******/ var __webpack_modules__ = ({
11
-
12
- /***/ "./src/public/js/ninja-tables-builder.js":
13
- /*!***********************************************!*\
14
- !*** ./src/public/js/ninja-tables-builder.js ***!
15
- \***********************************************/
16
- /***/ (() => {
17
-
18
- eval("function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n(function ($) {\n $(document).ready(function ($) {\n $('.ntb_table_wrapper').each(function () {\n var mainTable = $(this)[0];\n var desktopFormat = mainTable.innerHTML; // Get responsive information from data-responsive attr,\n\n var responsive = JSON.parse(mainTable.dataset.responsive);\n var isResponsive = responsive.general.options.enable_responsive_table.value;\n\n if (isResponsive === true || isResponsive === 'true') {\n var mobileDevice = function mobileDevice(mob, width, deviceName) {\n if (mob === 'false' || mob === false) {\n mob = true;\n tab = false;\n desk = false; // Getting data to check responsive options for mobile\n\n var mobileData = responsive.mode_options.options.devices.mobile;\n var breakpoint = mobileData.disable_breakpoint.value;\n var topRowAsHeader = mobileData.top_row_as_header.value;\n var itemsPerRow = mobileData.items_per_row.value;\n var cellBorder = responsive.mode_options.options.devices.mobile.cell_border.value;\n\n if (breakpoint === 'false' || breakpoint === false) {\n $('#' + tableId + ' table tbody').empty();\n\n if (topRowAsHeader === 'true' || topRowAsHeader === true) {\n topRowHeader(itemsPerRow, width, deviceName, cellBorder);\n } else {\n staticRowDesign(itemsPerRow, width, deviceName);\n }\n }\n } else {\n desktopDevice(desk);\n }\n };\n\n var tabletDevice = function tabletDevice(tab, width, deviceName) {\n if (tab === 'false' || tab === false) {\n mob = false;\n tab = true;\n desk = false; // getting data to check responsive options for tab\n\n var tabData = responsive.mode_options.options.devices.tablet;\n var breakpoint = tabData.disable_breakpoint.value;\n var topRowAsHeader = tabData.top_row_as_header.value;\n var itemsPerRow = tabData.items_per_row.value;\n var cellBorder = responsive.mode_options.options.devices.tablet.cell_border.value;\n\n if (breakpoint === 'false' || breakpoint === false) {\n $('#' + tableId + ' table tbody').empty();\n\n if (topRowAsHeader === 'true' || topRowAsHeader === true) {\n topRowHeader(itemsPerRow, width, deviceName, cellBorder);\n } else {\n staticRowDesign(itemsPerRow, width, deviceName);\n }\n } else {\n desktopDevice(desk);\n }\n }\n };\n\n var desktopDevice = function desktopDevice(desktopView) {\n if (desktopView === 'false' || desktopView === false) {\n mob = false;\n tab = false;\n desk = true;\n $('#' + tableId)[0].innerHTML = desktopFormat;\n }\n }; // Functions for reconstructing the tables.\n\n\n var staticRowDesign = function staticRowDesign(itemsPerRow, width, deviceName) {\n // data restructured as user requirement\n var tdWidth = width / itemsPerRow + 'px';\n var structuredTd = {};\n var structuredTrStyles = {};\n var structuredTdStyles = {};\n var structuredTdIds = {};\n var structuredTdClasses = {};\n var tdCounter = 0;\n\n for (var i = 0; i < Object.keys(rowsTd).length; i++) {\n if (colSpan[i] !== 0 && rowSpan[i] !== 0) {\n structuredTd[tdCounter] = rowsTd[i].innerHTML;\n structuredTrStyles[tdCounter] = trStyles[i];\n structuredTdStyles[tdCounter] = tdStyles[i];\n structuredTdIds[tdCounter] = tdIds[i];\n structuredTdClasses[tdCounter] = tdClasses[i];\n tdCounter++;\n }\n } // Reconstruct the table with restructured data\n\n\n var numberOfRow = Math.ceil(tdCounter / itemsPerRow);\n var td = 0;\n\n for (var row = 0; row < numberOfRow; row++) {\n $('#' + tableId + ' table tbody').append('<tr></tr>');\n var tableRow = $('#' + tableId + ' table tbody tr');\n tableRow.addClass(deviceName + \"_view\");\n var addedClass = tableRow.addClass('staticRow');\n\n for (var col = 0; col < itemsPerRow; col++) {\n if (structuredTd[td] !== undefined) {\n var insertedTd = addedClass[row].insertCell();\n insertedTd.innerHTML = structuredTd[td];\n $(insertedTd).prop('id', structuredTdIds[td]);\n $(insertedTd).addClass(structuredTdClasses[td]);\n $(insertedTd).attr(\"style\", structuredTrStyles[td] + \" \" + structuredTdStyles[td]);\n $(insertedTd).css({\n \"width\": tdWidth,\n \"min-width\": tdWidth,\n \"max-width\": tdWidth,\n \"box-sizing\": 'border-box'\n });\n }\n\n td++;\n }\n }\n };\n\n var topRowHeader = function topRowHeader(itemsPerRow, width, deviceName, cellBorder) {\n // Data restructured as user requirement\n var tdWidth = width / (itemsPerRow + 1) + 'px';\n var totalGroup = Math.ceil(dataLen / (itemsPerRow * headerLen));\n var i = 0;\n var reStructuredData = {};\n var reStructuredTdIds = {};\n var reStructuredTdClasses = {};\n var reStructureDataStyle = {};\n var reStructureRowSpan = {};\n var reStructureColSpan = {};\n\n for (var group = 0; group < totalGroup; group++) {\n for (var header = 0; header < headerLen; header++) {\n var tempReStructureData = {};\n var tempReStructuredTdIds = {};\n var tempReStructuredTdClasses = {};\n var tempReStructureDataStyle = {};\n var tempReStructureRowSpan = {};\n var tempReStructureColSpan = {};\n\n for (var col = 0; col <= itemsPerRow; col++) {\n var _index = group * itemsPerRow * headerLen + col * headerLen + header;\n\n if (col === 0) {\n tempReStructureData[col] = rowsTd[header];\n tempReStructureDataStyle[col] = trStyles[header] + \" \" + tdStyles[header];\n tempReStructureRowSpan[col] = rowSpan[header];\n tempReStructureColSpan[col] = colSpan[header];\n tempReStructuredTdIds[col] = tdIds[header];\n tempReStructuredTdClasses[col] = tdClasses[header];\n } else {\n tempReStructureData[col] = rowsTd[_index];\n tempReStructureDataStyle[col] = trStyles[_index] + \" \" + tdStyles[_index];\n tempReStructureRowSpan[col] = rowSpan[_index];\n tempReStructureColSpan[col] = colSpan[_index];\n tempReStructuredTdIds[col] = tdIds[_index];\n tempReStructuredTdClasses[col] = tdClasses[_index];\n }\n }\n\n reStructuredData[i] = Object.assign(tempReStructureData);\n reStructureDataStyle[i] = Object.assign(tempReStructureDataStyle);\n reStructureRowSpan[i] = Object.assign(tempReStructureRowSpan);\n reStructureColSpan[i] = Object.assign(tempReStructureColSpan);\n reStructuredTdIds[i] = Object.assign(tempReStructuredTdIds);\n reStructuredTdClasses[i] = Object.assign(tempReStructuredTdClasses);\n i++;\n }\n } // reconstruct table with respect to restructured data\n\n\n for (var _i = 0, _Object$entries = Object.entries(reStructuredData); _i < _Object$entries.length; _i++) {\n var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),\n indTr = _Object$entries$_i[0],\n tRows = _Object$entries$_i[1];\n\n $('#' + tableId + ' table tbody').append('<tr></tr>');\n var tableRow = $('#' + tableId + ' table tbody tr');\n tableRow.addClass(deviceName + \"_view\");\n var addedClass = tableRow.addClass('topRowAsHeader');\n\n for (var indTd = 0; indTd < Object.keys(tRows).length; indTd++) {\n if (tRows[indTd] !== undefined) {\n var insertedTd = addedClass[indTr].insertCell();\n insertedTd.innerHTML = tRows[indTd].innerHTML;\n $(insertedTd).prop('id', reStructuredTdIds[indTr][indTd]);\n $(insertedTd).addClass(reStructuredTdClasses[indTr][indTd]);\n $(insertedTd).attr(\"style\", reStructureDataStyle[indTr][indTd]);\n $(insertedTd).prop(\"colspan\", reStructureRowSpan[indTr][indTd]);\n $(insertedTd).prop(\"rowspan\", reStructureColSpan[indTr][indTd]);\n $(insertedTd).css({\n \"width\": tdWidth,\n \"min-width\": tdWidth,\n \"max-width\": tdWidth,\n \"box-sizing\": 'border-box'\n });\n }\n } // Add cell border bottom\n\n\n var rowNumber = Number(indTr) + 1;\n var rowLength = Object.entries(reStructuredData).length;\n\n if (rowNumber % headerLen === 0 && rowNumber !== rowLength) {\n var insertedRow = addedClass[indTr];\n $(insertedRow).css(\"border-bottom\", cellBorder + \"px solid black\");\n }\n }\n };\n\n var tableId = mainTable.id;\n var rows = $('#' + tableId + ' table')[0].rows; // Row wise serial data structured\n\n var allRow = {};\n var trStyles = {};\n var tdStyles = {};\n var rowsTd = {};\n var rowSpan = {};\n var colSpan = {};\n var tdIds = {};\n var tdClasses = {};\n var index = 0;\n $(rows).each(function (rowIndex, tr) {\n allRow[rowIndex] = Object.assign(tr);\n $(tr).find('td').each(function (columnIndex, td) {\n rowsTd[index] = Object.assign(td);\n trStyles[index] = $(allRow[rowIndex]).attr('style');\n tdStyles[index] = $(rowsTd[index]).attr('style');\n rowSpan[index] = $(td).attr('rowspan');\n colSpan[index] = $(td).attr('colspan');\n tdIds[index] = $(td).attr('id');\n tdClasses[index] = $(td).attr('class');\n index++;\n });\n }); // Get the length of th, td\n\n var columnLength = $('#' + tableId + ' table').find('tr').length;\n var totalData = $('#' + tableId + ' table tr').find('td').length;\n var headerLen = Math.ceil(totalData / columnLength);\n var dataLen = totalData - headerLen; //These variables are to handle unnecessary function calling\n\n var mob = false;\n var tab = false;\n var desk = false;\n var windowSize = $(window).width();\n var width = Number(windowSize * 0.8); // Call function if window reloaded\n\n if (windowSize <= 700) {\n mobileDevice(mob, width, \"mobile\");\n } else if (windowSize > 700 && windowSize < 1024) {\n tabletDevice(tab, width, \"tablet\");\n } else {\n desktopDevice(desk);\n } // call function if window resized\n\n\n $(window).resize(function () {\n var realTimeWidth = $(window).width() * 0.8;\n\n if (realTimeWidth <= 700) {\n mobileDevice(mob, realTimeWidth, \"mobile\");\n } else if (realTimeWidth > 700 && realTimeWidth < 1024) {\n tabletDevice(tab, realTimeWidth, \"tablet\");\n } else {\n desktopDevice(desk);\n }\n });\n }\n });\n });\n})(jQuery);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyIkIiwiZG9jdW1lbnQiLCJyZWFkeSIsImVhY2giLCJtYWluVGFibGUiLCJkZXNrdG9wRm9ybWF0IiwiaW5uZXJIVE1MIiwicmVzcG9uc2l2ZSIsIkpTT04iLCJwYXJzZSIsImRhdGFzZXQiLCJpc1Jlc3BvbnNpdmUiLCJnZW5lcmFsIiwib3B0aW9ucyIsImVuYWJsZV9yZXNwb25zaXZlX3RhYmxlIiwidmFsdWUiLCJtb2JpbGVEZXZpY2UiLCJtb2IiLCJ3aWR0aCIsImRldmljZU5hbWUiLCJ0YWIiLCJkZXNrIiwibW9iaWxlRGF0YSIsIm1vZGVfb3B0aW9ucyIsImRldmljZXMiLCJtb2JpbGUiLCJicmVha3BvaW50IiwiZGlzYWJsZV9icmVha3BvaW50IiwidG9wUm93QXNIZWFkZXIiLCJ0b3Bfcm93X2FzX2hlYWRlciIsIml0ZW1zUGVyUm93IiwiaXRlbXNfcGVyX3JvdyIsImNlbGxCb3JkZXIiLCJjZWxsX2JvcmRlciIsInRhYmxlSWQiLCJlbXB0eSIsInRvcFJvd0hlYWRlciIsInN0YXRpY1Jvd0Rlc2lnbiIsImRlc2t0b3BEZXZpY2UiLCJ0YWJsZXREZXZpY2UiLCJ0YWJEYXRhIiwidGFibGV0IiwiZGVza3RvcFZpZXciLCJ0ZFdpZHRoIiwic3RydWN0dXJlZFRkIiwic3RydWN0dXJlZFRyU3R5bGVzIiwic3RydWN0dXJlZFRkU3R5bGVzIiwic3RydWN0dXJlZFRkSWRzIiwic3RydWN0dXJlZFRkQ2xhc3NlcyIsInRkQ291bnRlciIsImkiLCJPYmplY3QiLCJrZXlzIiwicm93c1RkIiwibGVuZ3RoIiwiY29sU3BhbiIsInJvd1NwYW4iLCJ0clN0eWxlcyIsInRkU3R5bGVzIiwidGRJZHMiLCJ0ZENsYXNzZXMiLCJudW1iZXJPZlJvdyIsIk1hdGgiLCJjZWlsIiwidGQiLCJyb3ciLCJhcHBlbmQiLCJ0YWJsZVJvdyIsImFkZENsYXNzIiwiYWRkZWRDbGFzcyIsImNvbCIsInVuZGVmaW5lZCIsImluc2VydGVkVGQiLCJpbnNlcnRDZWxsIiwicHJvcCIsImF0dHIiLCJjc3MiLCJ0b3RhbEdyb3VwIiwiZGF0YUxlbiIsImhlYWRlckxlbiIsInJlU3RydWN0dXJlZERhdGEiLCJyZVN0cnVjdHVyZWRUZElkcyIsInJlU3RydWN0dXJlZFRkQ2xhc3NlcyIsInJlU3RydWN0dXJlRGF0YVN0eWxlIiwicmVTdHJ1Y3R1cmVSb3dTcGFuIiwicmVTdHJ1Y3R1cmVDb2xTcGFuIiwiZ3JvdXAiLCJoZWFkZXIiLCJ0ZW1wUmVTdHJ1Y3R1cmVEYXRhIiwidGVtcFJlU3RydWN0dXJlZFRkSWRzIiwidGVtcFJlU3RydWN0dXJlZFRkQ2xhc3NlcyIsInRlbXBSZVN0cnVjdHVyZURhdGFTdHlsZSIsInRlbXBSZVN0cnVjdHVyZVJvd1NwYW4iLCJ0ZW1wUmVTdHJ1Y3R1cmVDb2xTcGFuIiwiaW5kZXgiLCJhc3NpZ24iLCJlbnRyaWVzIiwiaW5kVHIiLCJ0Um93cyIsImluZFRkIiwicm93TnVtYmVyIiwiTnVtYmVyIiwicm93TGVuZ3RoIiwiaW5zZXJ0ZWRSb3ciLCJpZCIsInJvd3MiLCJhbGxSb3ciLCJyb3dJbmRleCIsInRyIiwiZmluZCIsImNvbHVtbkluZGV4IiwiY29sdW1uTGVuZ3RoIiwidG90YWxEYXRhIiwid2luZG93U2l6ZSIsIndpbmRvdyIsInJlc2l6ZSIsInJlYWxUaW1lV2lkdGgiLCJqUXVlcnkiXSwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vc3JjL3B1YmxpYy9qcy9uaW5qYS10YWJsZXMtYnVpbGRlci5qcz83ZjRmIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiAoJCkge1xuICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgkKSB7XG5cbiAgICAgICAgJCgnLm50Yl90YWJsZV93cmFwcGVyJykuZWFjaChmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGxldCBtYWluVGFibGUgPSAkKHRoaXMpWzBdXG4gICAgICAgICAgICBsZXQgZGVza3RvcEZvcm1hdCA9IG1haW5UYWJsZS5pbm5lckhUTUxcblxuICAgICAgICAgICAgLy8gR2V0IHJlc3BvbnNpdmUgaW5mb3JtYXRpb24gZnJvbSBkYXRhLXJlc3BvbnNpdmUgYXR0cixcbiAgICAgICAgICAgIGxldCByZXNwb25zaXZlID0gSlNPTi5wYXJzZShtYWluVGFibGUuZGF0YXNldC5yZXNwb25zaXZlKVxuICAgICAgICAgICAgbGV0IGlzUmVzcG9uc2l2ZSA9IHJlc3BvbnNpdmUuZ2VuZXJhbC5vcHRpb25zLmVuYWJsZV9yZXNwb25zaXZlX3RhYmxlLnZhbHVlXG5cbiAgICAgICAgICAgIGlmIChpc1Jlc3BvbnNpdmUgPT09IHRydWUgfHwgaXNSZXNwb25zaXZlID09PSAndHJ1ZScpIHtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHRhYmxlSWQgPSBtYWluVGFibGUuaWRcbiAgICAgICAgICAgICAgICBjb25zdCByb3dzID0gJCgnIycgKyB0YWJsZUlkICsgJyB0YWJsZScpWzBdLnJvd3NcblxuICAgICAgICAgICAgICAgIC8vIFJvdyB3aXNlIHNlcmlhbCBkYXRhIHN0cnVjdHVyZWRcbiAgICAgICAgICAgICAgICBsZXQgYWxsUm93ID0ge31cbiAgICAgICAgICAgICAgICBsZXQgdHJTdHlsZXMgPSB7fVxuICAgICAgICAgICAgICAgIGxldCB0ZFN0eWxlcyA9IHt9XG4gICAgICAgICAgICAgICAgbGV0IHJvd3NUZCA9IHt9XG4gICAgICAgICAgICAgICAgbGV0IHJvd1NwYW4gPSB7fVxuICAgICAgICAgICAgICAgIGxldCBjb2xTcGFuID0ge31cbiAgICAgICAgICAgICAgICBsZXQgdGRJZHMgPSB7fVxuICAgICAgICAgICAgICAgIGxldCB0ZENsYXNzZXMgPSB7fVxuICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IDBcblxuICAgICAgICAgICAgICAgICQocm93cykuZWFjaChmdW5jdGlvbiAocm93SW5kZXgsIHRyKSB7XG4gICAgICAgICAgICAgICAgICAgIGFsbFJvd1tyb3dJbmRleF0gPSBPYmplY3QuYXNzaWduKHRyKTtcbiAgICAgICAgICAgICAgICAgICAgJCh0cikuZmluZCgndGQnKS5lYWNoKGZ1bmN0aW9uIChjb2x1bW5JbmRleCwgdGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd3NUZFtpbmRleF0gPSBPYmplY3QuYXNzaWduKHRkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyU3R5bGVzW2luZGV4XSA9ICQoYWxsUm93W3Jvd0luZGV4XSkuYXR0cignc3R5bGUnKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGRTdHlsZXNbaW5kZXhdID0gJChyb3dzVGRbaW5kZXhdKS5hdHRyKCdzdHlsZScpXG4gICAgICAgICAgICAgICAgICAgICAgICByb3dTcGFuW2luZGV4XSA9ICQodGQpLmF0dHIoJ3Jvd3NwYW4nKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29sU3BhbltpbmRleF0gPSAkKHRkKS5hdHRyKCdjb2xzcGFuJylcbiAgICAgICAgICAgICAgICAgICAgICAgIHRkSWRzW2luZGV4XSA9ICQodGQpLmF0dHIoJ2lkJylcbiAgICAgICAgICAgICAgICAgICAgICAgIHRkQ2xhc3Nlc1tpbmRleF0gPSAkKHRkKS5hdHRyKCdjbGFzcycpXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleCsrXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBsZW5ndGggb2YgdGgsIHRkXG4gICAgICAgICAgICAgICAgY29uc3QgY29sdW1uTGVuZ3RoID0gJCgnIycgKyB0YWJsZUlkICsgJyB0YWJsZScpLmZpbmQoJ3RyJykubGVuZ3RoXG4gICAgICAgICAgICAgICAgY29uc3QgdG90YWxEYXRhID0gJCgnIycgKyB0YWJsZUlkICsgJyB0YWJsZSB0cicpLmZpbmQoJ3RkJykubGVuZ3RoXG4gICAgICAgICAgICAgICAgY29uc3QgaGVhZGVyTGVuID0gTWF0aC5jZWlsKHRvdGFsRGF0YSAvIGNvbHVtbkxlbmd0aClcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhTGVuID0gdG90YWxEYXRhIC0gaGVhZGVyTGVuXG5cbiAgICAgICAgICAgICAgICAvL1RoZXNlIHZhcmlhYmxlcyBhcmUgdG8gaGFuZGxlIHVubmVjZXNzYXJ5IGZ1bmN0aW9uIGNhbGxpbmdcbiAgICAgICAgICAgICAgICBsZXQgbW9iID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgbGV0IHRhYiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGxldCBkZXNrID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICBsZXQgd2luZG93U2l6ZSA9ICQod2luZG93KS53aWR0aCgpO1xuICAgICAgICAgICAgICAgIGxldCB3aWR0aCA9IE51bWJlcih3aW5kb3dTaXplICogMC44KVxuXG4gICAgICAgICAgICAgICAgLy8gQ2FsbCBmdW5jdGlvbiBpZiB3aW5kb3cgcmVsb2FkZWRcbiAgICAgICAgICAgICAgICBpZiAod2luZG93U2l6ZSA8PSA3MDApIHtcbiAgICAgICAgICAgICAgICAgICAgbW9iaWxlRGV2aWNlKG1vYiwgd2lkdGgsIFwibW9iaWxlXCIpXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh3aW5kb3dTaXplID4gNzAwICYmIHdpbmRvd1NpemUgPCAxMDI0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRhYmxldERldmljZSh0YWIsIHdpZHRoLCBcInRhYmxldFwiKVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc2t0b3BEZXZpY2UoZGVzaylcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBjYWxsIGZ1bmN0aW9uIGlmIHdpbmRvdyByZXNpemVkXG4gICAgICAgICAgICAgICAgJCh3aW5kb3cpLnJlc2l6ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZWFsVGltZVdpZHRoID0gJCh3aW5kb3cpLndpZHRoKCkgKiAwLjg7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWFsVGltZVdpZHRoIDw9IDcwMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9iaWxlRGV2aWNlKG1vYiwgcmVhbFRpbWVXaWR0aCwgXCJtb2JpbGVcIilcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZWFsVGltZVdpZHRoID4gNzAwICYmIHJlYWxUaW1lV2lkdGggPCAxMDI0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJsZXREZXZpY2UodGFiLCByZWFsVGltZVdpZHRoLCBcInRhYmxldFwiKVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVza3RvcERldmljZShkZXNrKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBtb2JpbGVEZXZpY2UobW9iLCB3aWR0aCwgZGV2aWNlTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobW9iID09PSAnZmFsc2UnIHx8IG1vYiA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vYiA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYiA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNrID0gZmFsc2VcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2V0dGluZyBkYXRhIHRvIGNoZWNrIHJlc3BvbnNpdmUgb3B0aW9ucyBmb3IgbW9iaWxlXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtb2JpbGVEYXRhID0gcmVzcG9uc2l2ZS5tb2RlX29wdGlvbnMub3B0aW9ucy5kZXZpY2VzLm1vYmlsZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnJlYWtwb2ludCA9IG1vYmlsZURhdGEuZGlzYWJsZV9icmVha3BvaW50LnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0b3BSb3dBc0hlYWRlciA9IG1vYmlsZURhdGEudG9wX3Jvd19hc19oZWFkZXIudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1zUGVyUm93ID0gbW9iaWxlRGF0YS5pdGVtc19wZXJfcm93LnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2VsbEJvcmRlciA9IHJlc3BvbnNpdmUubW9kZV9vcHRpb25zLm9wdGlvbnMuZGV2aWNlcy5tb2JpbGUuY2VsbF9ib3JkZXIudmFsdWVcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnQgPT09ICdmYWxzZScgfHwgYnJlYWtwb2ludCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjJyArIHRhYmxlSWQgKyAnIHRhYmxlIHRib2R5JykuZW1wdHkoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0b3BSb3dBc0hlYWRlciA9PT0gJ3RydWUnIHx8IHRvcFJvd0FzSGVhZGVyID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcFJvd0hlYWRlcihpdGVtc1BlclJvdywgd2lkdGgsIGRldmljZU5hbWUsIGNlbGxCb3JkZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljUm93RGVzaWduKGl0ZW1zUGVyUm93LCB3aWR0aCwgZGV2aWNlTmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNrdG9wRGV2aWNlKGRlc2spXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiB0YWJsZXREZXZpY2UodGFiLCB3aWR0aCwgZGV2aWNlTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGFiID09PSAnZmFsc2UnIHx8IHRhYiA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vYiA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWIgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNrID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdldHRpbmcgZGF0YSB0byBjaGVjayByZXNwb25zaXZlIG9wdGlvbnMgZm9yIHRhYlxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFiRGF0YSA9IHJlc3BvbnNpdmUubW9kZV9vcHRpb25zLm9wdGlvbnMuZGV2aWNlcy50YWJsZXRcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJyZWFrcG9pbnQgPSB0YWJEYXRhLmRpc2FibGVfYnJlYWtwb2ludC52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdG9wUm93QXNIZWFkZXIgPSB0YWJEYXRhLnRvcF9yb3dfYXNfaGVhZGVyLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtc1BlclJvdyA9IHRhYkRhdGEuaXRlbXNfcGVyX3Jvdy52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxCb3JkZXIgPSByZXNwb25zaXZlLm1vZGVfb3B0aW9ucy5vcHRpb25zLmRldmljZXMudGFibGV0LmNlbGxfYm9yZGVyLnZhbHVlXG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnQgPT09ICdmYWxzZScgfHwgYnJlYWtwb2ludCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjJyArIHRhYmxlSWQgKyAnIHRhYmxlIHRib2R5JykuZW1wdHkoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0b3BSb3dBc0hlYWRlciA9PT0gJ3RydWUnIHx8IHRvcFJvd0FzSGVhZGVyID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcFJvd0hlYWRlcihpdGVtc1BlclJvdywgd2lkdGgsIGRldmljZU5hbWUsIGNlbGxCb3JkZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljUm93RGVzaWduKGl0ZW1zUGVyUm93LCB3aWR0aCwgZGV2aWNlTmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2t0b3BEZXZpY2UoZGVzaylcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlc2t0b3BEZXZpY2UoZGVza3RvcFZpZXcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRlc2t0b3BWaWV3ID09PSAnZmFsc2UnIHx8IGRlc2t0b3BWaWV3ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9iID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYiA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNrID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnIycgKyB0YWJsZUlkKVswXS5pbm5lckhUTUwgPSBkZXNrdG9wRm9ybWF0XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBGdW5jdGlvbnMgZm9yIHJlY29uc3RydWN0aW5nIHRoZSB0YWJsZXMuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gc3RhdGljUm93RGVzaWduKGl0ZW1zUGVyUm93LCB3aWR0aCwgZGV2aWNlTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBkYXRhIHJlc3RydWN0dXJlZCBhcyB1c2VyIHJlcXVpcmVtZW50XG4gICAgICAgICAgICAgICAgICAgIGxldCB0ZFdpZHRoID0gKHdpZHRoIC8gaXRlbXNQZXJSb3cpICsgJ3B4JztcbiAgICAgICAgICAgICAgICAgICAgbGV0IHN0cnVjdHVyZWRUZCA9IHt9XG4gICAgICAgICAgICAgICAgICAgIGxldCBzdHJ1Y3R1cmVkVHJTdHlsZXMgPSB7fVxuICAgICAgICAgICAgICAgICAgICBsZXQgc3RydWN0dXJlZFRkU3R5bGVzID0ge31cbiAgICAgICAgICAgICAgICAgICAgbGV0IHN0cnVjdHVyZWRUZElkcyA9IHt9XG4gICAgICAgICAgICAgICAgICAgIGxldCBzdHJ1Y3R1cmVkVGRDbGFzc2VzID0ge31cbiAgICAgICAgICAgICAgICAgICAgbGV0IHRkQ291bnRlciA9IDBcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBPYmplY3Qua2V5cyhyb3dzVGQpLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29sU3BhbltpXSAhPT0gMCAmJiByb3dTcGFuW2ldICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlZFRkW3RkQ291bnRlcl0gPSByb3dzVGRbaV0uaW5uZXJIVE1MXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlZFRyU3R5bGVzW3RkQ291bnRlcl0gPSB0clN0eWxlc1tpXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZWRUZFN0eWxlc1t0ZENvdW50ZXJdID0gdGRTdHlsZXNbaV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVkVGRJZHNbdGRDb3VudGVyXSA9IHRkSWRzW2ldXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlZFRkQ2xhc3Nlc1t0ZENvdW50ZXJdID0gdGRDbGFzc2VzW2ldXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGRDb3VudGVyKytcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIFJlY29uc3RydWN0IHRoZSB0YWJsZSB3aXRoIHJlc3RydWN0dXJlZCBkYXRhXG4gICAgICAgICAgICAgICAgICAgIGxldCBudW1iZXJPZlJvdyA9IE1hdGguY2VpbCh0ZENvdW50ZXIgLyBpdGVtc1BlclJvdylcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRkID0gMDtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgbnVtYmVyT2ZSb3c7IHJvdysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkKCcjJyArIHRhYmxlSWQgKyAnIHRhYmxlIHRib2R5JykuYXBwZW5kKCc8dHI+PC90cj4nKVxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRhYmxlUm93ID0gJCgnIycgKyB0YWJsZUlkICsgJyB0YWJsZSB0Ym9keSB0cicpXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJsZVJvdy5hZGRDbGFzcyhkZXZpY2VOYW1lICsgXCJfdmlld1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFkZGVkQ2xhc3MgPSB0YWJsZVJvdy5hZGRDbGFzcygnc3RhdGljUm93JylcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGNvbCA9IDA7IGNvbCA8IGl0ZW1zUGVyUm93OyBjb2wrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVkVGRbdGRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGluc2VydGVkVGQgPSBhZGRlZENsYXNzW3Jvd10uaW5zZXJ0Q2VsbCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGVkVGQuaW5uZXJIVE1MID0gc3RydWN0dXJlZFRkW3RkXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGluc2VydGVkVGQpLnByb3AoJ2lkJywgc3RydWN0dXJlZFRkSWRzW3RkXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChpbnNlcnRlZFRkKS5hZGRDbGFzcyhzdHJ1Y3R1cmVkVGRDbGFzc2VzW3RkXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChpbnNlcnRlZFRkKS5hdHRyKFwic3R5bGVcIiwgc3RydWN0dXJlZFRyU3R5bGVzW3RkXSArIFwiIFwiICsgc3RydWN0dXJlZFRkU3R5bGVzW3RkXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChpbnNlcnRlZFRkKS5jc3Moe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ3aWR0aFwiOiB0ZFdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtaW4td2lkdGhcIjogdGRXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWF4LXdpZHRoXCI6IHRkV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJveC1zaXppbmdcIjogJ2JvcmRlci1ib3gnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRkKytcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHRvcFJvd0hlYWRlcihpdGVtc1BlclJvdywgd2lkdGgsIGRldmljZU5hbWUsIGNlbGxCb3JkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gRGF0YSByZXN0cnVjdHVyZWQgYXMgdXNlciByZXF1aXJlbWVudFxuICAgICAgICAgICAgICAgICAgICBsZXQgdGRXaWR0aCA9ICh3aWR0aCAvIChpdGVtc1BlclJvdyArIDEpKSArICdweCc7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvdGFsR3JvdXAgPSBNYXRoLmNlaWwoZGF0YUxlbiAvIChpdGVtc1BlclJvdyAqIGhlYWRlckxlbikpXG4gICAgICAgICAgICAgICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlU3RydWN0dXJlZERhdGEgPSB7fVxuICAgICAgICAgICAgICAgICAgICBsZXQgcmVTdHJ1Y3R1cmVkVGRJZHMgPSB7fVxuICAgICAgICAgICAgICAgICAgICBsZXQgcmVTdHJ1Y3R1cmVkVGRDbGFzc2VzID0ge31cbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlU3RydWN0dXJlRGF0YVN0eWxlID0ge31cbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlU3RydWN0dXJlUm93U3BhbiA9IHt9XG4gICAgICAgICAgICAgICAgICAgIGxldCByZVN0cnVjdHVyZUNvbFNwYW4gPSB7fVxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBncm91cCA9IDA7IGdyb3VwIDwgdG90YWxHcm91cDsgZ3JvdXArKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaGVhZGVyID0gMDsgaGVhZGVyIDwgaGVhZGVyTGVuOyBoZWFkZXIrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0ZW1wUmVTdHJ1Y3R1cmVEYXRhID0ge31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGVtcFJlU3RydWN0dXJlZFRkSWRzID0ge31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGVtcFJlU3RydWN0dXJlZFRkQ2xhc3NlcyA9IHt9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRlbXBSZVN0cnVjdHVyZURhdGFTdHlsZSA9IHt9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRlbXBSZVN0cnVjdHVyZVJvd1NwYW4gPSB7fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0ZW1wUmVTdHJ1Y3R1cmVDb2xTcGFuID0ge31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBjb2wgPSAwOyBjb2wgPD0gaXRlbXNQZXJSb3c7IGNvbCsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IChncm91cCAqIGl0ZW1zUGVyUm93ICogaGVhZGVyTGVuKSArIChjb2wgKiBoZWFkZXJMZW4pICsgaGVhZGVyXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcFJlU3RydWN0dXJlRGF0YVtjb2xdID0gcm93c1RkW2hlYWRlcl1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBSZVN0cnVjdHVyZURhdGFTdHlsZVtjb2xdID0gdHJTdHlsZXNbaGVhZGVyXSArIFwiIFwiICsgdGRTdHlsZXNbaGVhZGVyXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcFJlU3RydWN0dXJlUm93U3Bhbltjb2xdID0gcm93U3BhbltoZWFkZXJdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wUmVTdHJ1Y3R1cmVDb2xTcGFuW2NvbF0gPSBjb2xTcGFuW2hlYWRlcl1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBSZVN0cnVjdHVyZWRUZElkc1tjb2xdID0gdGRJZHNbaGVhZGVyXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcFJlU3RydWN0dXJlZFRkQ2xhc3Nlc1tjb2xdID0gdGRDbGFzc2VzW2hlYWRlcl1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBSZVN0cnVjdHVyZURhdGFbY29sXSA9IHJvd3NUZFtpbmRleF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBSZVN0cnVjdHVyZURhdGFTdHlsZVtjb2xdID0gdHJTdHlsZXNbaW5kZXhdICsgXCIgXCIgKyB0ZFN0eWxlc1tpbmRleF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBSZVN0cnVjdHVyZVJvd1NwYW5bY29sXSA9IHJvd1NwYW5baW5kZXhdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wUmVTdHJ1Y3R1cmVDb2xTcGFuW2NvbF0gPSBjb2xTcGFuW2luZGV4XVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcFJlU3RydWN0dXJlZFRkSWRzW2NvbF0gPSB0ZElkc1tpbmRleF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBSZVN0cnVjdHVyZWRUZENsYXNzZXNbY29sXSA9IHRkQ2xhc3Nlc1tpbmRleF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZVN0cnVjdHVyZWREYXRhW2ldID0gT2JqZWN0LmFzc2lnbih0ZW1wUmVTdHJ1Y3R1cmVEYXRhKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlU3RydWN0dXJlRGF0YVN0eWxlW2ldID0gT2JqZWN0LmFzc2lnbih0ZW1wUmVTdHJ1Y3R1cmVEYXRhU3R5bGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVTdHJ1Y3R1cmVSb3dTcGFuW2ldID0gT2JqZWN0LmFzc2lnbih0ZW1wUmVTdHJ1Y3R1cmVSb3dTcGFuKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlU3RydWN0dXJlQ29sU3BhbltpXSA9IE9iamVjdC5hc3NpZ24odGVtcFJlU3RydWN0dXJlQ29sU3BhbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZVN0cnVjdHVyZWRUZElkc1tpXSA9IE9iamVjdC5hc3NpZ24odGVtcFJlU3RydWN0dXJlZFRkSWRzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlU3RydWN0dXJlZFRkQ2xhc3Nlc1tpXSA9IE9iamVjdC5hc3NpZ24odGVtcFJlU3RydWN0dXJlZFRkQ2xhc3NlcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKytcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyByZWNvbnN0cnVjdCB0YWJsZSB3aXRoIHJlc3BlY3QgdG8gcmVzdHJ1Y3R1cmVkIGRhdGFcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgW2luZFRyLCB0Um93c10gb2YgT2JqZWN0LmVudHJpZXMocmVTdHJ1Y3R1cmVkRGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJyMnICsgdGFibGVJZCArICcgdGFibGUgdGJvZHknKS5hcHBlbmQoJzx0cj48L3RyPicpXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGFibGVSb3cgPSAkKCcjJyArIHRhYmxlSWQgKyAnIHRhYmxlIHRib2R5IHRyJylcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlUm93LmFkZENsYXNzKGRldmljZU5hbWUgKyBcIl92aWV3XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYWRkZWRDbGFzcyA9IHRhYmxlUm93LmFkZENsYXNzKCd0b3BSb3dBc0hlYWRlcicpXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGluZFRkID0gMDsgaW5kVGQgPCBPYmplY3Qua2V5cyh0Um93cykubGVuZ3RoOyBpbmRUZCsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRSb3dzW2luZFRkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbnNlcnRlZFRkID0gYWRkZWRDbGFzc1tpbmRUcl0uaW5zZXJ0Q2VsbCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGVkVGQuaW5uZXJIVE1MID0gdFJvd3NbaW5kVGRdLmlubmVySFRNTFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGluc2VydGVkVGQpLnByb3AoJ2lkJywgcmVTdHJ1Y3R1cmVkVGRJZHNbaW5kVHJdW2luZFRkXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChpbnNlcnRlZFRkKS5hZGRDbGFzcyhyZVN0cnVjdHVyZWRUZENsYXNzZXNbaW5kVHJdW2luZFRkXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChpbnNlcnRlZFRkKS5hdHRyKFwic3R5bGVcIiwgcmVTdHJ1Y3R1cmVEYXRhU3R5bGVbaW5kVHJdW2luZFRkXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChpbnNlcnRlZFRkKS5wcm9wKFwiY29sc3BhblwiLCByZVN0cnVjdHVyZVJvd1NwYW5baW5kVHJdW2luZFRkXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChpbnNlcnRlZFRkKS5wcm9wKFwicm93c3BhblwiLCByZVN0cnVjdHVyZUNvbFNwYW5baW5kVHJdW2luZFRkXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChpbnNlcnRlZFRkKS5jc3Moe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ3aWR0aFwiOiB0ZFdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJtaW4td2lkdGhcIjogdGRXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibWF4LXdpZHRoXCI6IHRkV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImJveC1zaXppbmdcIjogJ2JvcmRlci1ib3gnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgY2VsbCBib3JkZXIgYm90dG9tXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByb3dOdW1iZXIgPSBOdW1iZXIoaW5kVHIpICsgMVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm93TGVuZ3RoID0gT2JqZWN0LmVudHJpZXMocmVTdHJ1Y3R1cmVkRGF0YSkubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocm93TnVtYmVyICUgaGVhZGVyTGVuID09PSAwICYmIHJvd051bWJlciAhPT0gcm93TGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGluc2VydGVkUm93ID0gYWRkZWRDbGFzc1tpbmRUcl1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGluc2VydGVkUm93KS5jc3MoXCJib3JkZXItYm90dG9tXCIsIGNlbGxCb3JkZXIgKyBcInB4IHNvbGlkIGJsYWNrXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfSk7XG59KShqUXVlcnkpOyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsQ0FBQyxVQUFVQSxDQUFWLEVBQWE7RUFDVkEsQ0FBQyxDQUFDQyxRQUFELENBQUQsQ0FBWUMsS0FBWixDQUFrQixVQUFVRixDQUFWLEVBQWE7SUFFM0JBLENBQUMsQ0FBQyxvQkFBRCxD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Q0FBQyxNQUFNa0MsT0FBTixHQUFnQixXQUFqQixDQUFELENBQStCMkUsSUFBL0IsQ0FBb0MsSUFBcEMsRUFBMEN2RCxNQUE1RDtRQUNBLElBQU15QixTQUFTLEdBQUdqQixJQUFJLENBQUNDLElBQUwsQ0FBVWlELFNBQVMsR0FBR0QsWUFBdEIsQ0FBbEI7UUFDQSxJQUFNakMsT0FBTyxHQUFHa0MsU0FBUyxHQUFHakMsU0FBNUIsQ0FsQ2tELENBb0NsRDs7UUFDQSxJQUFJOUQsR0FBRyxHQUFHLEtBQVY7UUFDQSxJQUFJRyxHQUFHLEdBQUcsS0FBVjtRQUNBLElBQUlDLElBQUksR0FBRyxLQUFYO1FBRUEsSUFBSTRGLFVBQVUsR0FBR2pILENBQUMsQ0FBQ2tILE1BQUQsQ0FBRCxDQUFVaEcsS0FBVixFQUFqQjtRQUNBLElBQUlBLEtBQUssR0FBR21GLE1BQU0sQ0FBQ1ksVUFBVSxHQUFHLEdBQWQsQ0FBbEIsQ0ExQ2tELENBNENsRDs7UUFDQSxJQUFJQSxVQUFVLElBQUksR0FBbEIsRUFBdUI7VUFDbkJqRyxZQUFZLENBQUNDLEdBQUQsRUFBTUMsS0FBTixFQUFhLFFBQWIsQ0FBWjtRQUNILENBRkQsTUFFTyxJQUFJK0YsVUFBVSxHQUFHLEdBQWIsSUFBb0JBLFVBQVUsR0FBRyxJQUFyQyxFQUEyQztVQUM5QzFFLFlBQVksQ0FBQ25CLEdBQUQsRUFBTUYsS0FBTixFQUFhLFFBQWIsQ0FBWjtRQUNILENBRk0sTUFFQTtVQUNIb0IsYUFBYSxDQUFDakIsSUFBRCxDQUFiO1FBQ0gsQ0FuRGlELENBcURsRDs7O1FBQ0FyQixDQUFDLENBQUNrSCxNQUFELENBQUQsQ0FBVUMsTUFBVixDQUFpQixZQUFZO1VBQ3pCLElBQUlDLGFBQWEsR0FBR3BILENBQUMsQ0FBQ2tILE1BQUQsQ0FBRCxDQUFVaEcsS0FBVixLQUFvQixHQUF4Qzs7VUFDQSxJQUFJa0csYUFBYSxJQUFJLEdBQXJCLEVBQTBCO1lBQ3RCcEcsWUFBWSxDQUFDQyxHQUFELEVBQU1tRyxhQUFOLEVBQXFCLFFBQXJCLENBQVo7VUFDSCxDQUZELE1BRU8sSUFBSUEsYUFBYSxHQUFHLEdBQWhCLElBQXVCQSxhQUFhLEdBQUcsSUFBM0MsRUFBaUQ7WUFDcEQ3RSxZQUFZLENBQUNuQixHQUFELEVBQU1nRyxhQUFOLEVBQXFCLFFBQXJCLENBQVo7VUFDSCxDQUZNLE1BRUE7WUFDSDlFLGFBQWEsQ0FBQ2pCLElBQUQsQ0FBYjtVQUNIO1FBQ0osQ0FURDtNQXlNSDtJQUNKLENBelFEO0VBMFFILENBNVFEO0FBNlFILENBOVFELEVBOFFHZ0csTUE5UUgiLCJmaWxlIjoiLi9zcmMvcHVibGljL2pzL25pbmphLXRhYmxlcy1idWlsZGVyLmpzLmpzIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/public/js/ninja-tables-builder.js\n");
19
-
20
- /***/ })
21
-
22
- /******/ });
23
- /************************************************************************/
24
- /******/
25
- /******/ // startup
26
- /******/ // Load entry module and return exports
27
- /******/ // This entry module can't be inlined because the eval-source-map devtool is used.
28
- /******/ var __webpack_exports__ = {};
29
- /******/ __webpack_modules__["./src/public/js/ninja-tables-builder.js"]();
30
- /******/
31
- /******/ })()
32
- ;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/NinjaTableClass.php CHANGED
@@ -263,7 +263,7 @@ class NinjaTableClass
263
 
264
 
265
  if ($this->displayNotice()) {
266
- add_action('admin_notices', function ($content) {
267
  if (isset($_GET['page']) && sanitize_text_field($_GET['page']) == 'ninja_tables') {
268
  $content = '<div class="nt_review_notice">In love with Ninja Tables?
269
  <a target="_blank" href="https://wordpress.org/support/plugin/ninja-tables/reviews/?filter=5">Please leave a 5-star review for us! </a>
@@ -438,7 +438,7 @@ class NinjaTableClass
438
  }
439
  }
440
 
441
- public function displayNotice():bool
442
  {
443
  if (isset($_COOKIE['nt_review_notice'])) {
444
  $plugin_version = sanitize_text_field($_COOKIE['nt_review_notice']);
263
 
264
 
265
  if ($this->displayNotice()) {
266
+ add_action('admin_notices', function () {
267
  if (isset($_GET['page']) && sanitize_text_field($_GET['page']) == 'ninja_tables') {
268
  $content = '<div class="nt_review_notice">In love with Ninja Tables?
269
  <a target="_blank" href="https://wordpress.org/support/plugin/ninja-tables/reviews/?filter=5">Please leave a 5-star review for us! </a>
438
  }
439
  }
440
 
441
+ public function displayNotice()
442
  {
443
  if (isset($_COOKIE['nt_review_notice'])) {
444
  $plugin_version = sanitize_text_field($_COOKIE['nt_review_notice']);
ninja-tables.php CHANGED
@@ -16,7 +16,7 @@
16
  * Plugin Name: Ninja Tables
17
  * Plugin URI: https://wpmanageninja.com/downloads/ninja-tables-pro-add-on/
18
  * Description: The Easiest & Fastest Responsive Table Plugin on WordPress. Multiple templates, drag-&-drop live table builder, multiple color scheme, and styles.
19
- * Version: 4.2.1
20
  * Author: WPManageNinja LLC
21
  * Author URI: https://wpmanageninja.com/
22
  * License: GPL-2.0+
@@ -33,7 +33,7 @@ if (!defined('WPINC')) {
33
  define('NINJA_TABLES_DIR_URL', plugin_dir_url(__FILE__));
34
  define('NINJA_TABLES_DIR_PATH', plugin_dir_path(__FILE__));
35
  define('NINJA_TABLES_PUBLIC_DIR_URL', NINJA_TABLES_DIR_URL . 'public/');
36
- define('NINJA_TABLES_VERSION', '4.2.1');
37
  define('NINJA_TABLES_ASSET_VERSION', '3.1.0');
38
  define('NINJA_TABLES_PRELOAD_FONT_VERSION', "1a82860cb5286f7833a2c33fbdd1d76c");
39
 
16
  * Plugin Name: Ninja Tables
17
  * Plugin URI: https://wpmanageninja.com/downloads/ninja-tables-pro-add-on/
18
  * Description: The Easiest & Fastest Responsive Table Plugin on WordPress. Multiple templates, drag-&-drop live table builder, multiple color scheme, and styles.
19
+ * Version: 4.2.2
20
  * Author: WPManageNinja LLC
21
  * Author URI: https://wpmanageninja.com/
22
  * License: GPL-2.0+
33
  define('NINJA_TABLES_DIR_URL', plugin_dir_url(__FILE__));
34
  define('NINJA_TABLES_DIR_PATH', plugin_dir_path(__FILE__));
35
  define('NINJA_TABLES_PUBLIC_DIR_URL', NINJA_TABLES_DIR_URL . 'public/');
36
+ define('NINJA_TABLES_VERSION', '4.2.2');
37
  define('NINJA_TABLES_ASSET_VERSION', '3.1.0');
38
  define('NINJA_TABLES_PRELOAD_FONT_VERSION', "1a82860cb5286f7833a2c33fbdd1d76c");
39
 
readme.txt CHANGED
@@ -5,7 +5,7 @@ Tags: table builder, table plugin, wpdatatables, wordpress tables, table grid, c
5
  Requires at least: 4.5
6
  Requires PHP: 5.4 or greater
7
  Tested up to: 6.0
8
- Stable tag: 4.2.1
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
@@ -13,8 +13,7 @@ The Best WordPress Table Plugin comes with a drag-and-drop builder to quickly an
13
 
14
  == Description ==
15
 
16
- [Detailed Features](https://wpmanageninja.com/ninja-tables/) | [Youtube Video Tutorials](https://www.youtube.com/watch?v=-s0Gi39gOhE&t=0s&index=2&list=PLXpD0vT4thWGRfXfDvLdYbV7sI3LcaPCL) | [Demo](https://wpmanageninja.com/ninja-tables/use-case/) | [User Guide](https://wpmanageninja.com/docs/ninja-tables)
17
- g
18
 
19
  Creating stunning responsive tables was always a struggle. And customizing those was an even bigger dispute.
20
 
@@ -84,7 +83,7 @@ The demo below shows how you can create fast and dynamic tables on the Ninja Tab
84
 
85
  #### WORDPRESS TABLE PLUGIN LIVE VIDEO PREVIEW
86
 
87
- <iframe width="1013" height="570" src="https://www.youtube.com/embed/-s0Gi39gOhE" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
88
 
89
  The SEO-friendly table maker plugin can help you with a table of content that search engines can crawl. Even the plugin provides a pre-built feature to add no-follow or do-follow links to the texts and buttons.
90
 
@@ -128,7 +127,7 @@ Ninja tables are deeply integrated with **[Fluent Forms,](https://wordpress.org/
128
 
129
  You can watch the following video to learn more about this feature:
130
 
131
- <iframe width="611" height="360" src="https://youtu.be/n_GW16c0058" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
132
 
133
  ### Awesome Support
134
  You can get dedicated support from our excellent support team for this beautiful WordPress table plugin for **free**! All you need to do is create a support ticket here: https://wpmanageninja.com/support-tickets/.
@@ -139,18 +138,20 @@ Our support team eagerly awaits your feature requests and extended help for cust
139
  With Ninja Tables, you won’t have to worry about <a href="https://wpmanageninja.com/create-woocommerce-product-tables/?utm_source=ninja-tables-wp-repo" target="_blank">creating WooCommerce product tables</a> anymore.
140
 
141
  The table’s Pro integration will let you build dynamic WooCommerce product tables in just a few clicks. This allows your users to buy multiple products from a single page with built-in cart info and checkout buttons.
142
- <a href="https://wpmanageninja.com/downloads/ninja-tables-pro-add-on/" target="_blank">
143
 
144
  Purchase Ninja Tables Pro</a> to present each WooCommerce product table in a professional manner.
145
- <iframe width="611" height="360" src="https://www.youtube.com/embed/sh_q_kfuFrg" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
146
 
147
  ### Construct Table from Google Sheets[Pro Feature]
148
  Your Google Sheets can be integrated into the Ninja Tables, which is certainly one of its more stunning features. Moreover, the data in Ninja Tables will automatically update along with the data changes in
149
- <a href="https://wpmanageninja.com/docs/ninja-tables/integrations/construct-table-from-google-sheets/" target="_blank">google sheets</a>.
150
 
151
  ### Advanced Shortcode Usage[Pro Feature]
152
  Advanced shortcode usage is one of the best pro features for developers. Here you can explore hundreds of extended features with that.
153
 
 
 
154
  ### Documentation with Video
155
  <li><a href="https://wpmanageninja.com/ninja-tables/use-case/?utm_source=ninja-tables-wp-repo" target="_blank">Ninja Tables Demo</a></li>
156
  <li><a href="https://wpmanageninja.com/docs/ninja-tables/getting-started-with-ninja-tables/setting-up-a-table/?utm_source=ninja-tables-wp-repo" target="_blank">Setting up a Table</a></li>
@@ -257,7 +258,11 @@ You can connect your Google spreadsheets to your WordPress table plugin by using
257
 
258
  == Changelog ==
259
  Over the past two years of development, we released several updates for Ninja Tables. These include improvements to the existing features and some wonderful additions to help you design tables more effectively.
260
- ### What's New on 4.2.1?
 
 
 
 
261
 
262
  = 4.2.1 (Date: August 8, 2022) =
263
  * Fixes array_combine issue for google sheets
@@ -683,5 +688,4 @@ Over the past two years of development, we released several updates for Ninja Ta
683
  * Init First version
684
 
685
  == Upgrade Notice ==
686
- The new version is 100% compatible with previous versions.
687
-
5
  Requires at least: 4.5
6
  Requires PHP: 5.4 or greater
7
  Tested up to: 6.0
8
+ Stable tag: 4.2.2
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
13
 
14
  == Description ==
15
 
16
+ [Detailed Features](https://wpmanageninja.com/ninja-tables/) | [Youtube Video Tutorials](https://www.youtube.com/watch?v=GuH6DtMUTus) | [Demo](https://wpmanageninja.com/ninja-tables/use-case/) | [User Guide](https://wpmanageninja.com/docs/ninja-tables)
 
17
 
18
  Creating stunning responsive tables was always a struggle. And customizing those was an even bigger dispute.
19
 
83
 
84
  #### WORDPRESS TABLE PLUGIN LIVE VIDEO PREVIEW
85
 
86
+ <iframe width="611" height="360" src="https://www.youtube.com/embed/GuH6DtMUTus" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
87
 
88
  The SEO-friendly table maker plugin can help you with a table of content that search engines can crawl. Even the plugin provides a pre-built feature to add no-follow or do-follow links to the texts and buttons.
89
 
127
 
128
  You can watch the following video to learn more about this feature:
129
 
130
+ <iframe width="611" height="360" src="https://www.youtube.com/embed/n_GW16c0058" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
131
 
132
  ### Awesome Support
133
  You can get dedicated support from our excellent support team for this beautiful WordPress table plugin for **free**! All you need to do is create a support ticket here: https://wpmanageninja.com/support-tickets/.
138
  With Ninja Tables, you won’t have to worry about <a href="https://wpmanageninja.com/create-woocommerce-product-tables/?utm_source=ninja-tables-wp-repo" target="_blank">creating WooCommerce product tables</a> anymore.
139
 
140
  The table’s Pro integration will let you build dynamic WooCommerce product tables in just a few clicks. This allows your users to buy multiple products from a single page with built-in cart info and checkout buttons.
141
+ <a href="https://wpmanageninja.com/downloads/ninja-tables-pro-add-on/" target="_blank">
142
 
143
  Purchase Ninja Tables Pro</a> to present each WooCommerce product table in a professional manner.
144
+ <iframe width="611" height="360" src="https://www.youtube.com/embed/y8zkrq6pkOc" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
145
 
146
  ### Construct Table from Google Sheets[Pro Feature]
147
  Your Google Sheets can be integrated into the Ninja Tables, which is certainly one of its more stunning features. Moreover, the data in Ninja Tables will automatically update along with the data changes in
148
+ <a href="https://ninjatables.com/embed-google-sheet-in-wordpress-tables/" target="_blank">google sheets</a>.
149
 
150
  ### Advanced Shortcode Usage[Pro Feature]
151
  Advanced shortcode usage is one of the best pro features for developers. Here you can explore hundreds of extended features with that.
152
 
153
+ A set of <a href="https://wpmanageninja.com/docs/ninja-tables/miscellaneous/advance-shortcode-usage/" target="_blank">highly useful shortcodes</a> is provided by Ninja Tables where you can configure the features in the shortcode. So that you can display the same table on a separate page/post in a different manner.
154
+
155
  ### Documentation with Video
156
  <li><a href="https://wpmanageninja.com/ninja-tables/use-case/?utm_source=ninja-tables-wp-repo" target="_blank">Ninja Tables Demo</a></li>
157
  <li><a href="https://wpmanageninja.com/docs/ninja-tables/getting-started-with-ninja-tables/setting-up-a-table/?utm_source=ninja-tables-wp-repo" target="_blank">Setting up a Table</a></li>
258
 
259
  == Changelog ==
260
  Over the past two years of development, we released several updates for Ninja Tables. These include improvements to the existing features and some wonderful additions to help you design tables more effectively.
261
+ ### What's New on 4.2.2?
262
+
263
+ = 4.2.2 (Date: August 10, 2022) =
264
+ * Fixes an error for gravity forms
265
+ * Update readme file
266
 
267
  = 4.2.1 (Date: August 8, 2022) =
268
  * Fixes array_combine issue for google sheets
688
  * Init First version
689
 
690
  == Upgrade Notice ==
691
+ The new version is 100% compatible with previous versions.