Guest User

Untitled

a guest
May 16th, 2018
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.78 KB | None | 0 0
  1. <?php
  2. if ( !function_exists( 'stick_scroll_filter_wp_list_tables' ) ) {
  3. function stick_scroll_filter_wp_list_tables() {
  4. $screen = get_current_screen();
  5. $base = $screen->base;
  6. $type = $screen->post_type;
  7. $name = $screen->id;
  8. if ( (($base === 'edit') && ($type == 'page' || $type == 'post')) && (wp_script_is( 'jquery', 'done' )) )
  9. { ?>
  10. <style type="text/css">
  11. .filter-table .quick {
  12. margin-left: 0.5em;
  13. font-size: 0.8em;
  14. text-decoration: none;
  15. }
  16. .fitler-table .quick:hover {
  17. text-decoration: underline;
  18. }
  19. td.alt {
  20. background-color: #ffc;
  21. background-color: rgba(255, 255, 0, 0.2);
  22. }
  23. </style>
  24. <!-- Sticky Table Headeers on Scroll and Filter Table CSS-->
  25. <script type="text/javascript">
  26. (function (e, i) {
  27. "use strict";
  28.  
  29. function t(t, s) {
  30. var d = this;
  31. d.$el = e(t), d.el = t, d.id = l++, d.$window = e(i), d.$document = e(document), d.$el.bind("destroyed", e.proxy(d.teardown, d)), d.$clonedHeader = null, d.$originalHeader = null, d.isSticky = !1, d.hasBeenSticky = !1, d.leftOffset = null, d.topOffset = null, d.init = function () {
  32. d.$el.each(function () {
  33. var i = e(this);
  34. i.css("padding", 0), d.$originalHeader = e("thead:first", this), d.$clonedHeader = d.$originalHeader.clone(), i.trigger("clonedHeader." + o, [d.$clonedHeader]), d.$clonedHeader.addClass("tableFloatingHeader"), d.$clonedHeader.css("display", "none"), d.$originalHeader.addClass("tableFloatingHeaderOriginal"), d.$originalHeader.after(d.$clonedHeader), d.$printStyle = e('<style type="text/css" media="print">.tableFloatingHeader{display:none !important;}.tableFloatingHeaderOriginal{position:static !important;}</style>'), e("head").append(d.$printStyle)
  35. }), d.setOptions(s), d.updateWidth(), d.toggleHeaders(), d.bind()
  36. }, d.destroy = function () {
  37. d.$el.unbind("destroyed", d.teardown), d.teardown()
  38. }, d.teardown = function () {
  39. d.isSticky && d.$originalHeader.css("position", "static"), e.removeData(d.el, "plugin_" + o), d.unbind(), d.$clonedHeader.remove(), d.$originalHeader.removeClass("tableFloatingHeaderOriginal"), d.$originalHeader.css("visibility", "visible"), d.$printStyle.remove(), d.el = null, d.$el = null
  40. }, d.bind = function () {
  41. d.$scrollableArea.on("scroll." + o, d.toggleHeaders), d.isWindowScrolling || (d.$window.on("scroll." + o + d.id, d.setPositionValues), d.$window.on("resize." + o + d.id, d.toggleHeaders)), d.$scrollableArea.on("resize." + o, d.toggleHeaders), d.$scrollableArea.on("resize." + o, d.updateWidth)
  42. }, d.unbind = function () {
  43. d.$scrollableArea.off("." + o, d.toggleHeaders), d.isWindowScrolling || (d.$window.off("." + o + d.id, d.setPositionValues), d.$window.off("." + o + d.id, d.toggleHeaders)), d.$scrollableArea.off("." + o, d.updateWidth), d.$el.off("." + o), d.$el.find("*").off("." + o)
  44. }, d.toggleHeaders = function () {
  45. d.$el && d.$el.each(function () {
  46. var i, t = e(this),
  47. o = d.isWindowScrolling ? isNaN(d.options.fixedOffset) ? d.options.fixedOffset.outerHeight() : d.options.fixedOffset : d.$scrollableArea.offset().top + (isNaN(d.options.fixedOffset) ? 0 : d.options.fixedOffset),
  48. l = t.offset(),
  49. n = d.$scrollableArea.scrollTop() + o,
  50. s = d.$scrollableArea.scrollLeft(),
  51. a = d.isWindowScrolling ? n > l.top : o > l.top,
  52. r = (d.isWindowScrolling ? n : 0) < l.top + t.height() - d.$clonedHeader.height() - (d.isWindowScrolling ? 0 : o);
  53. a && r ? (i = l.left - s + d.options.leftOffset, d.$originalHeader.css({
  54. position: "fixed",
  55. "margin-top": 0,
  56. left: i,
  57. "z-index": 1
  58. }), d.leftOffset = i, d.topOffset = o, d.$clonedHeader.css("display", ""), d.isSticky || (d.isSticky = !0, d.updateWidth()), d.setPositionValues()) : d.isSticky && (d.$originalHeader.css("position", "static"), d.$clonedHeader.css("display", "none"), d.isSticky = !1, d.resetWidth(e("td,th", d.$clonedHeader), e("td,th", d.$originalHeader)))
  59. })
  60. }, d.setPositionValues = function () {
  61. var e = d.$window.scrollTop(),
  62. i = d.$window.scrollLeft();
  63. !d.isSticky || 0 > e || e + d.$window.height() > d.$document.height() || 0 > i || i + d.$window.width() > d.$document.width() || d.$originalHeader.css({
  64. top: d.topOffset - (d.isWindowScrolling ? 0 : e),
  65. left: d.leftOffset - (d.isWindowScrolling ? 0 : i)
  66. })
  67. }, d.updateWidth = function () {
  68. if(d.isSticky) {
  69. d.$originalHeaderCells || (d.$originalHeaderCells = e("th,td", d.$originalHeader)), d.$clonedHeaderCells || (d.$clonedHeaderCells = e("th,td", d.$clonedHeader));
  70. var i = d.getWidth(d.$clonedHeaderCells);
  71. d.setWidth(i, d.$clonedHeaderCells, d.$originalHeaderCells), d.$originalHeader.css("width", d.$clonedHeader.width())
  72. }
  73. }, d.getWidth = function (t) {
  74. var o = [];
  75. return t.each(function (t) {
  76. var l, n = e(this);
  77. if("border-box" === n.css("box-sizing")) l = n.outerWidth();
  78. else {
  79. var s = e("th", d.$originalHeader);
  80. if("collapse" === s.css("border-collapse"))
  81. if(i.getComputedStyle) l = parseFloat(i.getComputedStyle(this, null).width);
  82. else {
  83. var a = parseFloat(n.css("padding-left")),
  84. r = parseFloat(n.css("padding-right")),
  85. c = parseFloat(n.css("border-width"));
  86. l = n.outerWidth() - a - r - c
  87. } else l = n.width()
  88. }
  89. o[t] = l
  90. }), o
  91. }, d.setWidth = function (e, i, t) {
  92. i.each(function (i) {
  93. var o = e[i];
  94. t.eq(i).css({
  95. "min-width": o,
  96. "max-width": o
  97. })
  98. })
  99. }, d.resetWidth = function (i, t) {
  100. i.each(function (i) {
  101. var o = e(this);
  102. t.eq(i).css({
  103. "min-width": o.css("min-width"),
  104. "max-width": o.css("max-width")
  105. })
  106. })
  107. }, d.setOptions = function (t) {
  108. d.options = e.extend({}, n, t), d.$scrollableArea = e(d.options.scrollableArea), d.isWindowScrolling = d.$scrollableArea[0] === i
  109. }, d.updateOptions = function (e) {
  110. d.setOptions(e), d.unbind(), d.bind(), d.updateWidth(), d.toggleHeaders()
  111. }, d.init()
  112. }
  113. var o = "stickyTableHeaders",
  114. l = 0,
  115. n = {
  116. fixedOffset: 0,
  117. leftOffset: 0,
  118. scrollableArea: i
  119. };
  120. e.fn[o] = function (i) {
  121. return this.each(function () {
  122. var l = e.data(this, "plugin_" + o);
  123. l ? "string" == typeof i ? l[i].apply(l) : l.updateOptions(i) : "destroy" !== i && e.data(this, "plugin_" + o, new t(this, i))
  124. })
  125. }
  126. })(jQuery, window);
  127. </script><!-- Sticky Table Headeers on Scroll Script -->
  128. <script type="text/javascript">
  129. ! function (i) {
  130. i.fn.bindWithDelay = function (n, u, t, e, d) {
  131. return i.isFunction(u) && (d = e, e = t, t = u, u = void 0), t.guid = t.guid || i.guid && i.guid++, this.each(function () {
  132. function l() {
  133. var n = i.extend(!0, {}, arguments[0]),
  134. u = this,
  135. l = function () {
  136. o = null, t.apply(u, [n])
  137. };
  138. d || (clearTimeout(o), o = null), o || (o = setTimeout(l, e))
  139. }
  140. var o = null;
  141. l.guid = t.guid, i(this).bind(n, u, l)
  142. })
  143. }
  144. }(jQuery);
  145. </script><!-- Bind With Delay for Filter Table Script -->
  146. <script type="text/javascript">
  147. ! function (e) {
  148. var t = e.fn.jquery.split("."),
  149. i = parseFloat(t[0]),
  150. a = parseFloat(t[1]);
  151. e.expr[":"].filterTableFind = 2 > i && 8 > a ? function (t, i, a) {
  152. return e(t).text().toUpperCase().indexOf(a[3].toUpperCase()) >= 0
  153. } : jQuery.expr.createPseudo(function (t) {
  154. return function (i) {
  155. return e(i).text().toUpperCase().indexOf(t.toUpperCase()) >= 0
  156. }
  157. }), e.fn.filterTable = function (t) {
  158. var i = {
  159. autofocus: !1,
  160. callback: null,
  161. containerClass: "filter-table",
  162. containerTag: "p",
  163. hideTFootOnFilter: !1,
  164. highlightClass: "alt",
  165. inputSelector: null,
  166. inputName: "",
  167. inputType: "search",
  168. label: "Filter:",
  169. minRows: 8,
  170. placeholder: "search this table",
  171. quickList: [],
  172. quickListClass: "quick",
  173. quickListGroupTag: "",
  174. quickListTag: "a",
  175. visibleClass: "visible"
  176. },
  177. a = function (e) {
  178. return e.replace(/&/g, "&").replace(/"/g, """).replace(/</g, "<").replace(/>/g, ">")
  179. },
  180. l = e.extend({}, i, t),
  181. n = function (e, t) {
  182. var i = e.find("tbody");
  183. "" === t ? (i.find("tr").show().addClass(l.visibleClass), i.find("td").removeClass(l.highlightClass), l.hideTFootOnFilter && e.find("tfoot").show()) : (i.find("tr").hide().removeClass(l.visibleClass), l.hideTFootOnFilter && e.find("tfoot").hide(), i.find("td").removeClass(l.highlightClass).filter(':filterTableFind("' + t.replace(/(['"])/g, "\\$1") + '")').addClass(l.highlightClass).closest("tr").show().addClass(l.visibleClass)), l.callback && l.callback(t, e)
  184. };
  185. return this.each(function () {
  186. var t = e(this),
  187. i = t.find("tbody"),
  188. s = null,
  189. r = null,
  190. o = null,
  191. c = !0;
  192. "TABLE" === t[0].nodeName && i.length > 0 && (0 === l.minRows || l.minRows > 0 && i.find("tr").length > l.minRows) && !t.prev().hasClass(l.containerClass) && (l.inputSelector && 1 === e(l.inputSelector).length ? (o = e(l.inputSelector), s = o.parent(), c = !1) : (s = e("<" + l.containerTag + " />"), "" !== l.containerClass && s.addClass(l.containerClass), s.prepend(l.label + " "), o = e('<input type="' + l.inputType + '" placeholder="' + l.placeholder + '" name="' + l.inputName + '" />')), l.autofocus && o.attr("autofocus", !0), e.fn.bindWithDelay ? o.bindWithDelay("keyup", function () {
  193. n(t, e(this).val())
  194. }, 200) : o.bind("keyup", function () {
  195. n(t, e(this).val())
  196. }), o.bind("click search", function () {
  197. n(t, e(this).val())
  198. }), c && s.append(o), l.quickList.length > 0 && (r = l.quickListGroupTag ? e("<" + l.quickListGroupTag + " />") : s, e.each(l.quickList, function (t, i) {
  199. var n = e("<" + l.quickListTag + ' class="' + l.quickListClass + '" />');
  200. n.text(a(i)), "A" === n[0].nodeName && n.attr("href", "#"), n.bind("click", function (e) {
  201. e.preventDefault(), o.val(i).focus().trigger("click")
  202. }), r.append(n)
  203. }), r !== s && s.append(r)), c && t.before(s))
  204. })
  205. }
  206. }(jQuery);
  207. </script>
  208. <style type="text/css">
  209. .tableFloatingHeaderOriginal {
  210. background-color: #ffffff;
  211. }
  212. </style>
  213. <script type="text/javascript">
  214. jQuery(document).ready(function ($) {
  215. $('table').stickyTableHeaders({
  216. fixedOffset: 50
  217. });
  218. $('table.wp-list-table').filterTable({
  219. inputSelector: '.search-box input[type=search][name=s]',
  220. autofocus: true,
  221. placeholder: 'What Are You Looking For?',
  222. quickListTag: 'li',
  223. hideTFootOnFilter: true
  224. });
  225. });
  226. </script><!-- Filter Table Bind With Delay and Sticky Headers -->
  227. <?php } // end if
  228. } // end function
  229. add_action( 'admin_print_footer_scripts', 'stick_scroll_filter_wp_list_tables', 99 );
  230. } // end function_exists
Add Comment
Please, Sign In to add comment