Version Description
(Date: August 10, 2022) = * Fixes an error for gravity forms * Update readme file
Download this release
Release Info
Developer | adreastrian |
Plugin | 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 +0 -139
- assets/js/ninja-table-builder-public.js +0 -32
- includes/NinjaTableClass.php +2 -2
- ninja-tables.php +2 -2
- readme.txt +15 -11
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 (
|
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()
|
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.
|
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.
|
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.
|
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
|
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="
|
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://
|
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 |
-
|
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/
|
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://
|
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.
|
|
|
|
|
|
|
|
|
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.
|
|